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