線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1919
推到 Plurk!
推到 Facebook!

用delphi实现pc机和单片机通讯

尚未結案
ggggggggg
一般會員


發表:6
回覆:9
積分:3
註冊:2003-05-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-28 16:20:47 IP:218.5.xxx.xxx 未訂閱
我用delphi写一串口通讯程序,用控件spcomm,在往单片机写数据时,总共16个信道的数据,当我写道12信道时出错,出错信息是:project pcmain.exe raised exception class econverterror with message '' 还有就是怎么提高串口通讯的准确度?????
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-24 17:33:57 IP:61.216.xxx.xxx 未訂閱
我用delphi寫一串口通訊程式,用元件spcomm,在往單片機寫資料時,總共16個信道的資料,當我寫道12信道時出錯,出錯信息是:project pcmain.exe raised exception class econverterror with message '' 還有就是怎麼提高串口通訊的準確度?????    ================== 請列出你的程式~方便回覆~ < src="http://simg3.pchome.com.tw/simage/thumbnail/3628/home.kimo.com.tw£¯angelbeach2002£¯qoo£¯angel_qoo.gif">網海無涯,學無止境!
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-25 09:18:29 IP:61.216.xxx.xxx 未訂閱
資料來源:大富翁論壇~ 程式採用的是 class="code"> unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, SPComm, ExtCtrls; type TForm1 = class(TForm) Comm1: TComm; Memo1: TMemo; Button1: TButton; Button2: TButton; Timer1: TTimer; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; viewstring:string; i:integer; rbuf,sbuf:array[1..16] of byte; implementation {$R *.DFM} procedure senddata; var i:integer; commflg:boolean; begin viewstring:=''; commflg:=true; for i:=1 to 6 do begin if not form1.comm1.writecommdata(@sbuf[i],1) then begin commflg:=false; break; end; //發送時字節間的延時 sleep(2); viewstring:=viewstring inttohex(sbuf[i],2) ''; end; viewstring:='發送' viewstring; form1.memo1.lines.add(viewstring); form1.memo1.lines.add(''); if not commflg then messagedlg('發送失敗 !' ,mterror,[mbyes],0); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin comm1.StopComm; end; procedure TForm1.FormShow(Sender: TObject); begin comm1.StartComm; end; procedure TForm1.Button1Click(Sender: TObject); begin sbuf[1]:=byte($f0); //幀頭 sbuf[2]:=byte($01); //命令號 sbuf[3]:=byte($ff); sbuf[4]:=byte($ff); sbuf[5]:=byte($01); sbuf[6]:=byte($f0); //幀尾 senddata;//調用發送函數 end; procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var i:integer; begin viewstring:=''; move(buffer^,pchar(@rbuf)^,bufferlength); ~~~~~~~~~~~~~~外面的程式這兒是錯誤的! for i:=1 to bufferlength do viewstring:=viewstring inttohex(rbuf[i],2) ''; viewstring:='接收' viewstring; memo1.lines.add(viewstring); memo1.lines.add(''); end; //這個timer事件是在下懶得用鼠標點擊了,就通過timer來觸發! procedure TForm1.Timer1Timer(Sender: TObject); begin button1.Click; end; end. ============================================================== //下面是spcomm元件的參數設置: object Comm1: TComm CommName = 'COM1' BaudRate = 9600 ParityCheck = False Outx_CtsFlow = False Outx_DsrFlow = False DtrControl = DtrEnable DsrSensitivity = False TxContinueOnXoff = True Outx_XonXoffFlow = True Inx_XonXoffFlow = True ReplaceWhenParityError = False IgnoreNullChar = False RtsControl = RtsEnable XonLimit = 500 XoffLimit = 500 ByteSize = _8 Parity = None StopBits = _1 XonChar = #17 XoffChar = #19 ReplacedChar = #0 ReadIntervalTimeout = 100 ReadTotalTimeoutMultiplier = 0 ReadTotalTimeoutConstant = 0 WriteTotalTimeoutMultiplier = 0 WriteTotalTimeoutConstant = 0 OnReceiveData = Comm1ReceiveData Left = 24 Top = 8 end. 網海無涯,學無止境!
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-25 09:26:51 IP:61.216.xxx.xxx 未訂閱
提供給你參考: http://www.chinabyte.com/20001219/146893.shtml    網海無涯,學無止境!
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-25 10:37:12 IP:61.216.xxx.xxx 未訂閱
【問題】用delphi实现pc机和单片机通讯 (重複文章) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31524    網海無涯,學無止境!
ggggggggg
一般會員


發表:6
回覆:9
積分:3
註冊:2003-05-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-23 02:46:23 IP:218.5.xxx.xxx 未訂閱
unit pcmain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdActns, ActnList, StdCtrls, ComCtrls, ImgList, ToolWin, Menus, OleCtrls, MSCommLib_TLB, SPComm, DB, DBTables, Grids, DBGrids, ExtCtrls, Buttons; type TmainForm = class(TForm) MainMenu1: TMainMenu; f1: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; N8: TMenuItem; N1: TMenuItem; N9: TMenuItem; N10: TMenuItem; N2: TMenuItem; N11: TMenuItem; N12: TMenuItem; N3: TMenuItem; N13: TMenuItem; N4: TMenuItem; ActionList1: TActionList; ToolBar1: TToolBar; ToolButton6: TToolButton; ToolButton4: TToolButton; ImageList1: TImageList; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton5: TToolButton; FileOpen1: TFileOpen; FileSaveAs1: TFileSaveAs; PrintDlg1: TPrintDlg; ToolButton7: TToolButton; COM21: TMenuItem; COM31: TMenuItem; COM41: TMenuItem; DBGrid1: TDBGrid; Table1: TTable; DataSource1: TDataSource; Timer1: TTimer; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; PrintDialog1: TPrintDialog; StatusBar1: TStatusBar; Table1BDEDesigner: TStringField; Table1BDEDesigner2: TStringField; Table1CTCSS: TStringField; Table1BDEDesigner3: TStringField; Table1CTCSS2: TStringField; Table1BDEDesigner4: TBooleanField; Table1BDEDesigner5: TBooleanField; Table1BDEDesigner6: TBooleanField; ProgressBar1: TProgressBar; Timer2: TTimer; Timer3: TTimer; Timer4: TTimer; Timer5: TTimer; Comm1: TComm; Timer6: TTimer; Timer7: TTimer; Timer8: TTimer; Timer9: TTimer; Timer10: TTimer; Timer11: TTimer; Timer12: TTimer; Timer13: TTimer; Timer14: TTimer; Timer15: TTimer; Timer16: TTimer; procedure N8Click(Sender: TObject); procedure N11Click(Sender: TObject); procedure N13Click(Sender: TObject); procedure COM21Click(Sender: TObject); procedure COM31Click(Sender: TObject); procedure COM41Click(Sender: TObject); procedure N10Click(Sender: TObject); procedure N9Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure N5Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Comm1ReceiveError(Sender: TObject; EventMask: Cardinal); procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); procedure Timer1Timer(sender:tobject); procedure Timer2Timer(Sender: TObject); procedure Timer3Timer(Sender: TObject); procedure Timer4Timer(Sender: TObject); function sw(v:string):integer; procedure Timer5Timer(Sender: TObject); procedure Timer6Timer(Sender: TObject); procedure Timer7Timer(Sender: TObject); procedure Timer8Timer(Sender: TObject); procedure Timer9Timer(Sender: TObject); procedure Timer10Timer(Sender: TObject); procedure Timer11Timer(Sender: TObject); procedure Timer12Timer(Sender: TObject); procedure Timer13Timer(Sender: TObject); procedure Timer14Timer(Sender: TObject); procedure Timer15Timer(Sender: TObject); procedure Timer16Timer(Sender: TObject); function datasw(revstr:string):string; // procedure Table1CalcFields(DataSet: TDataSet); //procedure DelayMSec(MSec: Word); private { Private declarations } public { Public declarations } end; var mainForm: TmainForm; implementation uses gongnengshezhi; {$R *.dfm} procedure TmainForm.N8Click(Sender: TObject); begin application.Terminate; end; procedure TmainForm.N11Click(Sender: TObject); var form1:tform1; begin form1:=tform1.Create(self); form1.showmodal;//gongnengshezhi.show; end; procedure TmainForm.N13Click(Sender: TObject); begin n13.Checked:=true; end; procedure TmainForm.COM21Click(Sender: TObject); begin com21.Checked :=true; end; procedure TmainForm.COM31Click(Sender: TObject); begin com31.Checked :=true; end; procedure TmainForm.COM41Click(Sender: TObject); begin com41.Checked :=true; end; procedure TmainForm.N9Click(Sender: TObject); //dupin begin timer1.Enabled:=true; end; procedure tmainform.Timer1Timer(sender:tobject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$10; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer2Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$18; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer3Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$20; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer4Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$28; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer5Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$30; p[3]:=$30; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer6Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$38; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer7Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$40; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer8Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$48; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer9Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$50; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer10Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$58; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer11Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$60; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer12Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$68; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer13Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$70; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer14Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$78; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer15Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$80; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer16Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$88; p[4]:=$08; comm1.writecommdata(@p,4); end; function tmainform.datasw(revstr:string):string; var t1:string; begin t1:=copy(revstr,7,2) copy(revstr,5,2) copy(revstr,3,2) copy(revstr,1,2); datasw:=t1; end; procedure TmainForm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var i:integer; ch,rtem,atem,btem:string; rep:array[1..12]of byte; begin rtem:=''; move(buffer^,rep,bufferlength); for i:=1 to bufferlength do rtem:=rtem inttohex(rep[i],2) ''; if length(rtem)=24 then begin ch:=copy(rtem,5,2); btem:=copy(rtem,9,8); atem:=copy(rtem,17,8); case sw(ch) of 16:begin timer1.Enabled:=false; timer2.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post //Next; end; atem:=''; btem:=''; end; 24:begin timer2.Enabled:=false; timer3.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 32:begin timer3.Enabled:=false; timer4.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 40:begin timer4.Enabled:=false; timer5.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 48:begin timer5.Enabled:=false; timer6.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 56:begin timer6.Enabled:=false; timer7.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 64:begin timer7.Enabled:=false; timer8.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 72:begin timer8.Enabled:=false; timer9.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; btem:=''; atem:=''; end; 80:begin timer9.Enabled:=false; timer10.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 88:begin timer10.Enabled:=false; timer11.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 96:begin timer11.Enabled:=false; timer12.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 104:begin timer12.Enabled:=false; timer13.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 112:begin timer13.Enabled:=false; timer14.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 120:begin timer14.Enabled:=false; timer15.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 128:begin timer15.Enabled:=false; timer16.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 136:begin timer16.Enabled:=false; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; end; end; end; procedure TmainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin comm1.StopComm; end; procedure TmainForm.FormShow(Sender: TObject); begin comm1.StartComm; end; procedure TmainForm.N5Click(Sender: TObject); begin if OpenDialog1.Execute then //table1.lines.LoadFromFile(OpenDialog1.FileName); end; procedure TmainForm.N6Click(Sender: TObject); begin if savedialog1.Execute then begin //memo1.Lines.SaveToFile(savedialog1.FileName ); savedialog1.InitialDir:= extractfilepath(savedialog1.FileName ); end; end; procedure TmainForm.ToolButton2Click(Sender: TObject); begin if printdialog1.Execute then print; end; procedure TmainForm.FormCreate(Sender: TObject); begin Application.ShowHint := True; Application.HintColor := clAqua; //{ÑÕɫΪÇà} Application.HintPause := 1000; table1.Open; //TStringGrid(DbGrid1).FixedCols := 2; end; procedure TmainForm.Comm1ReceiveError(Sender: TObject; EventMask: Cardinal); begin showmessage('chaoshi'); end; function tmainform.sw(v:string):integer; var t1,t2,re:integer; begin t1:=0; t2:=0; case v[1] of '0':t1:=0; '1':t1:=1; '2':t1:=2; '3':t1:=3; '4':t1:=4; '5':t1:=5; '6':t1:=6; '7':t1:=7; '8':t1:=8; '9':t1:=9; 'A':t1:=10; 'B':t1:=11; 'C':t1:=12; 'D':t1:=13; 'E':t1:=14; 'F':t1:=15; end; case v[2] of '0':t2:=0; '1':t2:=1; '2':t2:=2; '3':t2:=3; '4':t2:=4; '5':t2:=5; '6':t2:=6; '7':t2:=7; '8':t2:=8; '9':t2:=9; 'A':t2:=10; 'B':t2:=11; 'C':t2:=12; 'D':t2:=13; 'E':t2:=14; 'F':t2:=15; end; re:=t1*16 t2; sw:=re; end; procedure TmainForm.N10Click(Sender: TObject);//xiepin begin timer5.Enabled:=true; end; end. 请各位大大帮我看看?接收数据时,总是接收到一半就结束啊??
ggggggggg
一般會員


發表:6
回覆:9
積分:3
註冊:2003-05-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-23 02:49:00 IP:218.5.xxx.xxx 未訂閱
unit pcmain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdActns, ActnList, StdCtrls, ComCtrls, ImgList, ToolWin, Menus, OleCtrls, MSCommLib_TLB, SPComm, DB, DBTables, Grids, DBGrids, ExtCtrls, Buttons; type TmainForm = class(TForm) MainMenu1: TMainMenu; f1: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; N8: TMenuItem; N1: TMenuItem; N9: TMenuItem; N10: TMenuItem; N2: TMenuItem; N11: TMenuItem; N12: TMenuItem; N3: TMenuItem; N13: TMenuItem; N4: TMenuItem; ActionList1: TActionList; ToolBar1: TToolBar; ToolButton6: TToolButton; ToolButton4: TToolButton; ImageList1: TImageList; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton5: TToolButton; FileOpen1: TFileOpen; FileSaveAs1: TFileSaveAs; PrintDlg1: TPrintDlg; ToolButton7: TToolButton; COM21: TMenuItem; COM31: TMenuItem; COM41: TMenuItem; DBGrid1: TDBGrid; Table1: TTable; DataSource1: TDataSource; Timer1: TTimer; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; PrintDialog1: TPrintDialog; StatusBar1: TStatusBar; Table1BDEDesigner: TStringField; Table1BDEDesigner2: TStringField; Table1CTCSS: TStringField; Table1BDEDesigner3: TStringField; Table1CTCSS2: TStringField; Table1BDEDesigner4: TBooleanField; Table1BDEDesigner5: TBooleanField; Table1BDEDesigner6: TBooleanField; ProgressBar1: TProgressBar; Timer2: TTimer; Timer3: TTimer; Timer4: TTimer; Timer5: TTimer; Comm1: TComm; Timer6: TTimer; Timer7: TTimer; Timer8: TTimer; Timer9: TTimer; Timer10: TTimer; Timer11: TTimer; Timer12: TTimer; Timer13: TTimer; Timer14: TTimer; Timer15: TTimer; Timer16: TTimer; procedure N8Click(Sender: TObject); procedure N11Click(Sender: TObject); procedure N13Click(Sender: TObject); procedure COM21Click(Sender: TObject); procedure COM31Click(Sender: TObject); procedure COM41Click(Sender: TObject); procedure N10Click(Sender: TObject); procedure N9Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure N5Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Comm1ReceiveError(Sender: TObject; EventMask: Cardinal); procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); procedure Timer1Timer(sender:tobject); procedure Timer2Timer(Sender: TObject); procedure Timer3Timer(Sender: TObject); procedure Timer4Timer(Sender: TObject); function sw(v:string):integer; procedure Timer5Timer(Sender: TObject); procedure Timer6Timer(Sender: TObject); procedure Timer7Timer(Sender: TObject); procedure Timer8Timer(Sender: TObject); procedure Timer9Timer(Sender: TObject); procedure Timer10Timer(Sender: TObject); procedure Timer11Timer(Sender: TObject); procedure Timer12Timer(Sender: TObject); procedure Timer13Timer(Sender: TObject); procedure Timer14Timer(Sender: TObject); procedure Timer15Timer(Sender: TObject); procedure Timer16Timer(Sender: TObject); function datasw(revstr:string):string; // procedure Table1CalcFields(DataSet: TDataSet); //procedure DelayMSec(MSec: Word); private { Private declarations } public { Public declarations } end; var mainForm: TmainForm; implementation uses gongnengshezhi; {$R *.dfm} procedure TmainForm.N8Click(Sender: TObject); begin application.Terminate; end; procedure TmainForm.N11Click(Sender: TObject); var form1:tform1; begin form1:=tform1.Create(self); form1.showmodal;//gongnengshezhi.show; end; procedure TmainForm.N13Click(Sender: TObject); begin n13.Checked:=true; end; procedure TmainForm.COM21Click(Sender: TObject); begin com21.Checked :=true; end; procedure TmainForm.COM31Click(Sender: TObject); begin com31.Checked :=true; end; procedure TmainForm.COM41Click(Sender: TObject); begin com41.Checked :=true; end; procedure TmainForm.N9Click(Sender: TObject); //dupin begin timer1.Enabled:=true; end; procedure tmainform.Timer1Timer(sender:tobject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$10; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer2Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$18; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer3Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$20; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer4Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$28; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer5Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$30; p[3]:=$30; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer6Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$38; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer7Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$40; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer8Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$48; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer9Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$50; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer10Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$58; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer11Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$60; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer12Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$68; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer13Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$70; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer14Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$78; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer15Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$80; p[4]:=$08; comm1.writecommdata(@p,4); end; procedure TmainForm.Timer16Timer(Sender: TObject); var p:array[1..4]of byte; begin p[1]:=$52; p[2]:=$00; p[3]:=$88; p[4]:=$08; comm1.writecommdata(@p,4); end; function tmainform.datasw(revstr:string):string; var t1:string; begin t1:=copy(revstr,7,2) copy(revstr,5,2) copy(revstr,3,2) copy(revstr,1,2); datasw:=t1; end; procedure TmainForm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var i:integer; ch,rtem,atem,btem:string; rep:array[1..12]of byte; begin rtem:=''; move(buffer^,rep,bufferlength); for i:=1 to bufferlength do rtem:=rtem inttohex(rep[i],2) ''; if length(rtem)=24 then begin ch:=copy(rtem,5,2); btem:=copy(rtem,9,8); atem:=copy(rtem,17,8); case sw(ch) of 16:begin timer1.Enabled:=false; timer2.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post //Next; end; atem:=''; btem:=''; end; 24:begin timer2.Enabled:=false; timer3.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 32:begin timer3.Enabled:=false; timer4.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 40:begin timer4.Enabled:=false; timer5.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 48:begin timer5.Enabled:=false; timer6.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 56:begin timer6.Enabled:=false; timer7.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 64:begin timer7.Enabled:=false; timer8.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 72:begin timer8.Enabled:=false; timer9.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; btem:=''; atem:=''; end; 80:begin timer9.Enabled:=false; timer10.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 88:begin timer10.Enabled:=false; timer11.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 96:begin timer11.Enabled:=false; timer12.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 104:begin timer12.Enabled:=false; timer13.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 112:begin timer13.Enabled:=false; timer14.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 120:begin timer14.Enabled:=false; timer15.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; 128:begin timer15.Enabled:=false; timer16.Enabled:=true; with table1 do begin Edit; FieldByName('·¢ÉäƵÂÊ').AsString:=datasw(atem); FieldByName('½ÓÊÕƵÂÊ').AsString:=datasw(btem); post; //Next; end; atem:=''; btem:=''; end; 136:begin timer16.Enabled:=false; with table1 do begin Edit; FieldByName('·¢ËÍCTCSS').AsString:=copy(btem,7,2) copy(btem,5,2); fieldByName('½ÓÊÕCTCSS').AsString:=copy(btem,3,2) copy(btem,1,2); if sametext(copy(atem,1,2),'fb')then FieldByName('½û·¢').AsBoolean:=true else FieldByName('½û·¢').AsBoolean:=false; if sametext(copy(atem,3,2),'01') then FieldByName('ƵÒÆ').AsBoolean:=true else FieldByName('ƵÒÆ').AsBoolean:=false; Post; Next; end; atem:=''; btem:=''; end; end; end; end; procedure TmainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin comm1.StopComm; end; procedure TmainForm.FormShow(Sender: TObject); begin comm1.StartComm; end; procedure TmainForm.N5Click(Sender: TObject); begin if OpenDialog1.Execute then //table1.lines.LoadFromFile(OpenDialog1.FileName); end; procedure TmainForm.N6Click(Sender: TObject); begin if savedialog1.Execute then begin //memo1.Lines.SaveToFile(savedialog1.FileName ); savedialog1.InitialDir:= extractfilepath(savedialog1.FileName ); end; end; procedure TmainForm.ToolButton2Click(Sender: TObject); begin if printdialog1.Execute then print; end; procedure TmainForm.FormCreate(Sender: TObject); begin Application.ShowHint := True; Application.HintColor := clAqua; //{ÑÕɫΪÇà} Application.HintPause := 1000; table1.Open; //TStringGrid(DbGrid1).FixedCols := 2; end; procedure TmainForm.Comm1ReceiveError(Sender: TObject; EventMask: Cardinal); begin showmessage('chaoshi'); end; function tmainform.sw(v:string):integer; var t1,t2,re:integer; begin t1:=0; t2:=0; case v[1] of '0':t1:=0; '1':t1:=1; '2':t1:=2; '3':t1:=3; '4':t1:=4; '5':t1:=5; '6':t1:=6; '7':t1:=7; '8':t1:=8; '9':t1:=9; 'A':t1:=10; 'B':t1:=11; 'C':t1:=12; 'D':t1:=13; 'E':t1:=14; 'F':t1:=15; end; case v[2] of '0':t2:=0; '1':t2:=1; '2':t2:=2; '3':t2:=3; '4':t2:=4; '5':t2:=5; '6':t2:=6; '7':t2:=7; '8':t2:=8; '9':t2:=9; 'A':t2:=10; 'B':t2:=11; 'C':t2:=12; 'D':t2:=13; 'E':t2:=14; 'F':t2:=15; end; re:=t1*16 t2; sw:=re; end; procedure TmainForm.N10Click(Sender: TObject);//xiepin begin timer5.Enabled:=true; end; end. 请各位大大帮我看看?接收数据时,总是接收到一半就结束啊??
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-15 18:31:41 IP:218.5.xxx.xxx 未訂閱
我前几个月写了一个与二类收款机(单片机)进行MODEM通讯的服务程序,我的一点建议是直接打开串口读写资料,虽然比SPCOMM麻烦,但比较容易把握,避免因对SPCOMM不够熟悉造成各种问题(我就没有用SPCOMM): 我开发的服务程序采取这种方法经联机测试,没有问题.因程序太大无法贴上,且也怕公司找我麻烦,下面是我在开发初期做的一些测试代码,可能参考: function OpenComm():Boolean; var   cc:TCOMMCONFIG;   Temp:string;   ret:Boolean; begin //  Temp:='COM'+inttostr(rdcom.ItemIndex+1);            // 选择所要打开的COM   ret:=False;   case piCOM of   1:      Temp:='COM1';   2:      Temp:='COM2';   3:      Temp:='COM3';   end;   hComm:=CreateFile(PChar(Temp), GENERIC_READ or GENERIC_WRITE,        0, nil, OPEN_EXISTING, 0, 0);                    // 打开COM1   if (hComm = INVALID_HANDLE_VALUE) then begin          // 如果COM 未打开     MessageBox (0, '打开通信端口错误!!','',MB_OK);     ret:=False;   end   else   begin      GetCommState(hComm,cc.dcb);                           // 得知目前COM 的状态      cc.dcb.BaudRate:=piBPS;                                // 设置波特率为9600      cc.dcb.ByteSize:=8;                                   // 字节为 8 bit      cc.dcb.Parity:=NOPARITY;                              // Parity 为 None      cc.dcb.StopBits:=ONESTOPBIT;                          // 1 个Stop bit         if not SetCommState(hComm, cc.dcb) then begin         // 设置COM 的状态        MessageBox (0, '通信端口设置错误!!!','',MB_OK);        CloseHandle(hComm);        ret:=False;      end;   end;   ret:=True;   OpenComm:=ret; end;    //置MODEM为等待呼叫状态 function InitModem():boolean; var    lrc:longword;    okstring:string;    comd:string;    waitS,comdLen:Integer;    outbyte :array of char;    i,j:integer;    inbuff: array[0..1047] of Char;    nBytesRead, dwEvent, dwError:LongWORD ;    cs:TCOMSTAT; begin     comd := 'ATE0X4V1&L0&D0S0=1'+chr(13);     okstring:='OK';     comdLen:=19;     PurgeComm(hComm, PURGE_RXCLEAR);  // 清除COM 数据     timedelay(300);     WriteFile(hComm,pchar(comd)^,comdLen,lrc,nil); // 送出数据     j:=0;        while(j<100000)do begin j:=j 1; ClearCommError(hComm,dwError,@CS); //取得状态 // 数据是否大于我们所准备的Buffer if cs.cbInQue > 1047 then begin PurgeComm(hComm, PURGE_RXCLEAR); // 清除COM 数据 result := FALSE ; exit; end; if(cs.cbInQue=0) then continue; ReadFile(hComm,inbuff,cs.cbInQue,nBytesRead,nil); // 接收COM 的数据 if StrPos(inbuff, PChar(okstring)) = nil then begin result:=FALSE; exit; end; result:=TRUE; exit; end; result:=FALSE; end; function Receive_msg(var buff:array of char):boolean; var nBytesRead, dwEvent, dwError:LongWORD ; cs:TCOMSTAT; i,len:integer; lenH,lenL:char; commBuf:array[0..1024] of Char; begin i:=0; TimeDelay(300); while(i<100000)do begin ClearCommError(hComm,dwError,@CS); //取得状态 //数据是否大于我们所准备的Buffer //if cs.cbInQue > sizeof(commBuf) then begin // PurgeComm(hComm, PURGE_RXCLEAR); // 清除COM 数据 // RecieveCommand:=False; // exit; //end; i:=i 1; if cs.cbInQue<16 then continue; break; end; if(i=100000)then begin result := False; exit; end; //转移数据到变量中 i:=0; while(i= 19 then begin ReadFile(hComm,commBuf,len,nBytesRead,nil); // 接收COM 的数据 buff[0]:=lenL; buff[1]:=lenH; i:=0; while(i
系統時間:2024-04-20 12:04:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!