怎么用delphi实现modbus_RTU协议命令的发送 ( 积分: 100 )

  • 主题发起人 主题发起人 quitelei
  • 开始时间 开始时间
Q

quitelei

Unregistered / Unconfirmed
GUEST, unregistred user!
我要读取485总线下01号从机寄存器地址为0C00的连续2个字节的数据,全部命令如下:<br>&nbsp;01&nbsp;03&nbsp;0C00&nbsp;0002&nbsp;C75B&nbsp;。01是从机号,03是读数据的功能码,0C00是寄存器地址,0002是2个字节,C75B是crc校验码。我编了一个小程序,但就是调不通,请大家帮忙指点一下。<br><br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;&nbsp;revbuff:&nbsp;array&nbsp;[0..7]&nbsp;of&nbsp;byte;&nbsp;&nbsp;//发送缓冲区&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;inbuff:array[0..1000]&nbsp;of&nbsp;byte;&nbsp;&nbsp;//接收缓冲区&nbsp;<br>&nbsp;&nbsp;&nbsp;nBytesRead,dwError:LongWord;<br>&nbsp;&nbsp;&nbsp;CS:TCOMSTAT;<br>&nbsp;&nbsp;&nbsp;lrc:LongWord;<br>begin<br>&nbsp;&nbsp;&nbsp;revbuff[0]:=$01;<br>&nbsp;&nbsp;&nbsp;revbuff[1]:=$03;<br>&nbsp;&nbsp;&nbsp;revbuff[2]:=$0C;<br>&nbsp;&nbsp;&nbsp;revbuff[3]:=$00;<br>&nbsp;&nbsp;&nbsp;revbuff[4]:=$00;<br>&nbsp;&nbsp;&nbsp;revbuff[5]:=$02;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;revbuff[6]:=$5B;<br>&nbsp;&nbsp;&nbsp;revbuff[7]:=$C7;&nbsp;&nbsp;&nbsp;//命令是按照这种顺序发送吗?<br><br>&nbsp;&nbsp;&nbsp;PurgeComm(hComm,&nbsp;PURGE_TXCLEAR);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清空发送缓存<br>&nbsp;&nbsp;&nbsp;PurgeComm(hComm,PURGE_RXCLEAR);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清空接收缓存区<br>&nbsp;&nbsp;&nbsp;WriteFile(hComm,revbuff[0],Length(revbuff),lrc,nil);&nbsp;&nbsp;&nbsp;//发送数据&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;sleep(1000);&nbsp;&nbsp;//给出响应时间<br>&nbsp;&nbsp;&nbsp;ClearCommError(hComm,dwError,@CS);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//判断接收数据和接收缓存区的长度<br>&nbsp;&nbsp;&nbsp;if&nbsp;cs.cbInQue&gt;sizeof(inbuff)&nbsp;then&nbsp;&nbsp;//如果接收缓存区太小则退出,cs.cbInQue是接收缓存区的长度大小<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PurgeComm(hComm,PURGE_RXCLEAR);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;if&nbsp;ReadFile(hComm,inbuff[],cs.cbInQue,nBytesRead,nil)&nbsp;then&nbsp;&nbsp;&nbsp;//读出数据到inbuff数组<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showmessage('ok');&nbsp;//如果接收到了数据就显示OK<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;end;&nbsp;<br>&nbsp;&nbsp;上面的程序就是显示不了OK,也就是说没接收到任何数据,还不说数据的正确性,请大家指点指点(串口已经打开,波特率奇偶位什么的也设置正确,从机也正常)
 
我碰到这个问题好久啦!
 
继续关注中!<br>等待高手的到来!
 
问题已经解决了
 
后退
顶部