zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    XtraBackup2.3.3安装配置使用(innobakupex)
    MySQL主从配置问题整理
    saltstack之(十二)配置管理mount
    常用HTTP状态码和CURL 000问题
    RHEL6解决无法使用YUM源问题
    zabbix监控MySQL
    ELK-Python(三)
    解决eclipse项目下出现deployment descriptor和jax-ws web services
    【未来畅想】未来的电信通讯行业,账号密码将取代sim卡
    最新samba.tar.gz安装方法
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/6050378.html
Copyright © 2011-2022 走看看