zoukankan      html  css  js  c++  java
  • SPComm的一点小诀窍 spcomm的问题导致数据丢失 0x11与0x13错误

     

    最近几天完成了BiasDAC的程序编写。调试的过程还算比较顺利,除了几个有点bt的小问题。其中一个困扰了我两三天的时间,今天上午终于将其解决。

    由于BiasDAC是用RS232 Serial Port通信的,延用之前的程序,使用了Delphi的SPComm控件。在之前的使用中,SPComm控件一直工作正常,使用的是一般的string进行消息的传递。

    而BiasDAC由于通信协议的限制,消息的发送使用的是hex方式,会用到从0x00到0xFF所有的这些字符。在调试中发现,发送0x11和0x13之后,SPComm的工作就会不正常。

    首先是0x11发送之后,返回的0x11消息会被忽略;其次0x13发送之后,只能返回很有限的消息,而且似乎Serial Port就此关闭,如果再发送消息,就会造成Serial Port失去响应,只能通过重新启动计算机才能恢复。

    后来上网上查询,原来不能正常处理0x11和0x13的问题早就存在,原因是SPComm空间中两个属性的存在。

    OutX_XonXOffFlow/InX_XonXoffFlow:这个属性是指进行发送/接收时的软件握手标志,两个握手信号之间的数据被认为是通讯数据,收到握手信号后,通讯就中止了。

    FOutx_XonXoffFlow := True;
    FInx_XonXoffFlow := True;

    默认的初始化中,这两个属性是默认开启的。

    XOffChar/XOnChar:这是指握手的字节,默认的初始中,有

    FXonChar := chr($11);
    FXoffChar := chr($13);

    至此,真相大白。0x11,0x13被占用为通讯握手信号,自然不会得到正确的处理。

    问题找到了,解决也很容易。只需要在Comm的初始化中,自己定义

    Comm.Inx_XonXoffFlow:=False;
    Comm.Outx_XonXoffFlow:=False;

    关闭软件握手功能即可。在一般通讯中,硬件已经具备了握手功能,所以也不会影响到正常的Comm通讯。

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jinshaopu/archive/2009/10/09/4646791.aspx

  • 相关阅读:
    HTTPHelper
    C# 捕获全局亲测可用
    C# Excel的读写
    C# combox 绑定数据
    MySQL在CenterOS和Ubuntu的安装
    VMware虚拟机里的Centos7的IP
    Docker安装和部署
    linux安装git方法(转)
    mysql安装最后一步 Apply Security Settings 出错
    Linux下安装MySQL
  • 原文地址:https://www.cnblogs.com/760044827qq/p/3829848.html
Copyright © 2011-2022 走看看