在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
SPCOMM 接收数据不完整!
我作了一个 读取地磅数据的程序,是用spcomm接收的! 总共有五台地磅,其他4台地磅数据读取都正常。 但是有一台接收数据的时候,总是接收不到完整的数据,基本上小于100的数据都读不到, 比如:地磅上显示1234,但是接收到的数据是12。 地磅上显示60,接收不到数据。 有时地磅上什么东西都没有,但是显示接收到 5 。 这个地磅用原来硬件供应商提供的程序可以正常工作。 用我写的程序,偶尔也能正常读到数据(用程序测试了半天,有几次是正常的,但就是不知道什么原因)。 ------解决方案-------------------- OutX_XonXOffFlow/InX_XonXoffFlow:这个属性是指进行发送/接收时的软件握手标志,两个握手信号之间的数据被认为是通讯数据,收到握手信号后,通讯就中止了。 在一般通讯中,硬件已经具备了握手功能,所以无须软件握手,请设置为:FALSE; 与之相关的属性为: XOffChar,XOnChar;这是指握手的字节,一般使用默认字节就可以了。 ------解决方案-------------------- 不是spcomm数据没接到,而是数据迟到了而以,你接串口接收数据要注意一点是,先将接进来的数据存入一个Buf里,然后根据协议判断数据是否完整,如果完整进行数据处理,否则串口一直处于数据接收状态直到数据接收整,但然你可以在这里加个超时设定,如果在60秒内还没有接到完整的数据,你可以重发送命令向下位机要数据 ------解决方案-------------------- 我用spcomm控件对托利多T800表作过开发,用move函数试试看。请注意,spcomm有一个很特别的属性,如果你的 通讯协议的停止位为1,则在spcomm的stopbit属性中要设为0。 自己再试试看,不行给我发电邮:[email protected],我把源程序拷给你 ------解决方案-------------------- 你用下面的方法试试看 procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word); var S1:string; begin SetLength(S1, BufferLength); Move(Buffer^,PChar(S1)^,BufferLength); Memo1.Lines.Add(S1); //接收RS232的数据并显示Memo1上 end; |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论