Delphi实现远程串口的数据采集

http://tech.ddvip.com   2006年07月31日    社区交流

本文详细介绍Delphi实现远程串口的数据采集

  (3) ComEvFrame:值为1004,硬件检测到帧错误;

  (4) ComEvRxOver:值为1008,接收缓冲区溢出;

  (5) ComEvTxFull:值为1010,发送缓冲区溢出;

  (6) ComEvRxParity:值为1009,奇偶校验错误;

  (7) ComEvEOF:值为7,接收数据中出现文件尾(ASCII码为26)字符。

  所以,MSComm控件主要提供下列两种处理通信的方式:

  (1) 事件驱动通信方式。当串口发送或接收到数据时,可以利用MSComm控件OnComm事件捕获并处理这些通信事件。OnComm事件还可以检查和处理通信错误。

  (2) 查询方式。在关键程序之后可以通过检查CommEvent属性来查询事件和错误。

  3 系统功能设计

  本远程数据采集子系统就是利用MSComm控件,通过Moderm同远端的下位机进行通信,发送命令,获得下位机采集的实时数据,通信流程如下:

  当PC机检测到下位机摘机的信号,将控制命令写入MSComm的发送缓冲区,控制命令为定长的数据报,格式如下:

  其中,当命令代码不是向下位机要数据的命令的时候,起始时间和终止时间均为0。下位机上传的数据报也为定长数据报,格式如下:

  数据报标志表明正在传输是数据,为0xFFFF,数据报序号说明当前传输的是第几个数据报,当序号校验码出错时,PC机停止接收数据,并向下位机发重传命令,此时控制命令的起始时间字段填入需要重传的数据报的序号。最后一个数据报将结束标志置为0xFFFF,检测线程检测到该标志时,认为数据接收完毕,向主线程发消息,通知主线程做进一步的处理。

  数据传输模式采用二进制数据流形式即MSComm的InputMode属性设置为ComInputModeBinary,收到数据之后使用如下程序进行转换:

  vDataBuffer: oleVariant;

  DataBuffer: variant;

  vDataBuffer := MSComm1.Input;

  DataBuffer := VarArrayCreate([0,2048], varByte);

  DataBuffer := vDataBuffer;

  主线程向下位机发要数据命令的同时,生成检测线程,每收到1032个字节,检测线程对收到的数据报的结束标志和数据报序号进行检验,发现数据报序号错误立即向主线程发错误消息,主线程停止从缓冲中取数据,向下位机发重传数据报的命令。检测线程发现数据报接收完毕,向主线程发消息,主线程结束检测线程,回收资源。

  4 结论

  整个系统在远程心电医疗诊断软件上已经得到了应用,实际运行表明,该通信方式简单、可靠、稳定,具有比较高的效率和很好的差错控制功能,可供其他远程通信系统借鉴参考。

作者:YDX    责编:豆豆技术应用

正在加载评论...