• delphi SPCOMM 接收数据不完整!该如何解决


    SPCOMM 接收数据不完整!该如何解决

     
    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。
    自己再试试看,不行给我发电邮:zghnayagwangzy@163.com,我把源程序拷给你

    ------解决方案--------------------
    你用下面的方法试试看
    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;
  • 相关阅读:
    Java中try-catch-finally的一点理解
    子类继承父类的私有属性
    Java中的String[] args
    Java类和类成员的访问权限修饰符
    JAVA中抽象类与接口的区别
    Java C# .net 和 C C++ 跨平台的区别
    Java中的instanceof关键字
    深入理解JAVA的多态性[转]
    Linux文件系统的目录结构
    硬盘分区
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/6050378.html
Copyright © 2020-2023  润新知