刚刚工作,要求用delphi完成串口通讯,请高手们指点我一下

Ip99_w_cc 2009-03-31 08:59:40
我是学软件的,但是学的不是很好,刚过从学校毕业,能做的只是普通的软件,现在在一家自控设备公司工作
公司主要是做一些自控设备,现在我的任务是编写一个程序,能够实现数据传输,带我做的人很坏,只给我一个协议,就让我写,连例子都不给我一个
我哪里写的出来哦,现在我急的跟热锅上的蚂蚁一样,希望有好心人能指点指点我,应该从哪里下手
小女子感激不尽
...全文
313 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
lt8024 2009-04-02
  • 打赏
  • 举报
回复
看不到通讯协议
cnpack控件包的RS232组件也可以做串口通讯,使用方法类似spcomm
VIP_Rainbow 2009-04-01
  • 打赏
  • 举报
回复
顶,好贴
老之 2009-03-31
  • 打赏
  • 举报
回复
先理解协议吧,实现只是其次
duoduo168 2009-03-31
  • 打赏
  • 举报
回复
刚看了下上传的通信协议,协议种类和参数真多阿,借此机会也观摩一下...
你要实现通信传输,连的上就算ok了吧?可以选择用控件或者windowsAPI。API感觉对你挺难,用控件吧。最好是能有实现了协议的现场机给你调试。控件使用搜索很多的,楼上楼下都是。
「已注销」 2009-03-31
  • 打赏
  • 举报
回复
用spcomm试试,好好学一下。
怎么新手都从串口通信开始呢、?呵呵
「已注销」 2009-03-31
  • 打赏
  • 举报
回复
你好,我们的工作很类似,我们公司也是做自控的,用delphi。。我在山东济南,可以交个朋友吗?我也是新手,去年毕业,但是我不是软件专业。公司也小,自学的,以后互相学习,共同进步。好吗?我的msn是qdzf-lijc@hotmail.com,qq是365708921.能否加你好友?
zhuchengchuan 2009-03-31
  • 打赏
  • 举报
回复
用的是SpComm控件:

1: 设置好控件的相关参数,也就是端口号,波特率等;

2: SpComm.StartComm;

3:
写数据:
var
buf:array of byte;//buf[5]是校验位,其余的都通讯协议中的数据,完成的功能是开启MF1读卡器的125K磁场
i:integer;
bcc:byte;
vRec: PChar;
begin
setlength(buf,5);
buf[0]:=$02; //STX
buf[1]:=$00; //ADDR
buf[2]:=2; //LEN
buf[3]:=$2A; //CMD/STU 磁场
buf[4]:=1; //DATA 开启125KHz
bcc:=0;
for i:=1 to length(buf)-1 -1 do
bcc:=bcc xor buf[i];
buf[5]:=bcc; //BCC
SpComm.WriteCommData(pchar(@buf[0]),length(buf));//写数据
end;

4:
procedure TForm1.SpCommReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);//SpComm控件的接收数据事件
var
strRecv:string;
i:Integer;
rbuf:array[1..256] of byte;
viewstr1:string;
Channel:array[1..4] of string;
vReceFlag: string;
begin
viewstr1:='';
pubRecevice := '';
Move(Buffer^,PChar(@rbuf)^,BufferLength);
for i := 1 to bufferlength - 1 do//最后一位是校验位
viewstr1:=viewstr1+inttohex(rbuf[i],2)+'';转换成十六进制数
pubRecevice := viewstr1;
Memo2.Lines.Text := viewstr1;

end;
de410 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 Ip99_w_cc 的帖子:]
我是学软件的,但是学的不是很好,刚过从学校毕业,能做的只是普通的软件,现在在一家自控设备公司工作
公司主要是做一些自控设备,现在我的任务是编写一个程序,能够实现数据传输,带我做的人很坏,只给我一个协议,就让我写,连例子都不给我一个
我哪里写的出来哦,现在我急的跟热锅上的蚂蚁一样,希望有好心人能指点指点我,应该从哪里下手
小女子感激不尽
[/Quote]


您访问的资源不存在
longshine 2009-03-31
  • 打赏
  • 举报
回复
用spcomm写还是很方便的,关键就是根据协议解析数据!!!!!
Ip99_w_cc 2009-03-31
  • 打赏
  • 举报
回复
谢谢大家的帮助
gg16578 2009-03-31
  • 打赏
  • 举报
回复
找一本关于delphi 串口通讯的书看看
http://www.itstudy.net/
上面有一些VC的资料,很有帮助
有一本数 Delphi串口及语音传真高级编程 对初学者很有帮助,下载看看
  • 打赏
  • 举报
回复
如果是读卡器之类的,都有开发DLL文件,不用自己写。
zhuchengchuan 2009-03-31
  • 打赏
  • 举报
回复
等等,我找找看
Ip99_w_cc 2009-03-31
  • 打赏
  • 举报
回复
我的QQ148433108 加的时候请注明 “编程” 否则我不加的哦
真心的很急 想学会 才公布我的qq的
希望好心人加我教教我
码农余生 2009-03-31
  • 打赏
  • 举报
回复
没事别着急啊。。你先看看spcomm的例子。。还是比较简单的
xjq2003 2009-03-31
  • 打赏
  • 举报
回复
procedure TDAW50Thread.ControlLED(const CMDType: Integer); //显示屏控制程序,依照显示屏显示协议!
var
buf: array [0..3] of Byte;
begin
buf[0] := $10;
case CMDType of
0: buf[1] := $7f;
1: buf[1] := $7e;
end;
buf[2] := $33;
buf[3] := $0d;
sio_write(LEDPort,@buf,4);//串口发送数据
end;
Ip99_w_cc 2009-03-31
  • 打赏
  • 举报
回复
我的QQ148433108 加的时候请注明 “编程” 否则我不加的哦
真心的很急 想学会 才公布我的qq的
希望好心人才加
xjq2003 2009-03-31
  • 打赏
  • 举报
回复
sio_Close(Port);//关闭串口 port 是 1,2,3……
sio_open(Port);//打开串口
sio_ioctl(Port,B19200,P_NONE+BIT_8+STOP_1);//设置波特率,数据位,停止位
sio_flush(Port,2);
while not Terminated do
begin
if FPause then
begin
Application.ProcessMessages;
Sleep(10);
Continue;
end;
try begin
DataLen := sio_iqueue(Port);//读串口中队列数据长度
if DataLen>0 then
begin
CurByte := sio_getch(port);//从串口读一个字符
duoduo168 2009-03-31
  • 打赏
  • 举报
回复
附件资源不存在阿
xjq2003 2009-03-31
  • 打赏
  • 举报
回复


implementation
function sio_open; external 'PComm.dll';
function sio_close; external 'PComm.dll';
function sio_ioctl; external 'PComm.dll';
function sio_flowctrl; external 'PComm.dll';
function sio_flush; external 'PComm.dll';
function sio_DTR; external 'PComm.dll';
function sio_RTS; external 'PComm.dll';
function sio_lctrl; external 'PComm.dll';
function sio_baud; external 'PComm.dll';
function sio_getch; external 'PComm.dll';
function sio_read; external 'PComm.dll';
function sio_linput; external 'PComm.dll';
function sio_putch; external 'PComm.dll';
function sio_putb; external 'PComm.dll';
function sio_write; external 'PComm.dll';
function sio_putb_x; external 'PComm.dll';
function sio_putb_x_ex; external 'PComm.dll';
function sio_lstatus; external 'PComm.dll';
function sio_iqueue; external 'PComm.dll';
function sio_oqueue; external 'PComm.dll';
function sio_Tx_hold; external 'PComm.dll';
function sio_getbaud; external 'PComm.dll';
function sio_getmode; external 'PComm.dll';
function sio_getflow; external 'PComm.dll';
function sio_data_status; external 'PComm.dll';
function sio_term_irq; external 'PComm.dll';
function sio_cnt_irq; external 'PComm.dll';
function sio_modem_irq; external 'PComm.dll';
function sio_break_irq; external 'PComm.dll';
function sio_Tx_empty_irq; external 'PComm.dll';
function sio_break; external 'PComm.dll';
function sio_view; external 'PComm.dll';
function sio_TxLowWater; external 'PComm.dll';
function sio_AbortWrite; external 'PComm.dll';
function sio_AbortRead; external 'PComm.dll';
function sio_SetWriteTimeouts; external 'PComm.dll';
function sio_GetWriteTimeouts; external 'PComm.dll';
function sio_SetReadTimeouts; external 'PComm.dll';
function sio_GetReadTimeouts; external 'PComm.dll';
function sio_FtASCIITx; external 'PComm.dll';
function sio_FtASCIIRx; external 'PComm.dll';
function sio_FtXmodemCheckSumTx; external 'PComm.dll';
function sio_FtXmodemCheckSumRx; external 'PComm.dll';
function sio_FtXmodemCRCTx; external 'PComm.dll';
function sio_FtXmodemCRCRx; external 'PComm.dll';
function sio_FtXmodem1KCRCTx; external 'PComm.dll';
function sio_FtXmodem1KCRCRx; external 'PComm.dll';
function sio_FtYmodemTx; external 'PComm.dll';
function sio_FtYmodemRx; external 'PComm.dll';
function sio_FtZmodemTx; external 'PComm.dll';
function sio_FtZmodemRx; external 'PComm.dll';
function sio_FtKermitTx; external 'PComm.dll';
function sio_FtKermitRx; external 'PComm.dll';

end.
加载更多回复(9)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧