Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9727150
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-03-13 08:50:43

下载源代码 的正确性和完整性更需要自己保证,因为串口协议标准只是定义在物理层和数据链路层,打个比方说,如果一次发送512 Byte,收到不一定是正确的512 Byte,所以自己要进行相关校验保证正确性,也可能不是一次就会完整的收到512 Byte,而是分多次收完所有数据,这时就要我们定义相关结构保证数据收发完整性。这些细节都是跟串口驱动的实现有关,读者感兴趣的话,可以查看相关文档。在这个应用程序中完全没有对这个问题进行防护处理,鉴于一次收发数据量小(512 Byte),并且只是自己的试验品,所以写得并不严谨,把数据收发理想为一次性正确收发,希望各位都能注意了。

程序的整体结构:
程序功能实现如下:
客户端<————> (CTcpSocket)转接程序(CSerialPort) <————>串口设备

对于每个CTcpSocket和CSerialPort对用一个CItem的结构进行管理,可以在配置文件里配置多个连接转发对。
程序中主要的类有:CSerialPort、CTcpSocket、CItem。可以把从串口收到的数据转发向数据套接字和调试套接字,而且可以写入日志文档。

图一 程序显示条目

日志文档结构:
[时间 数据传输方向 数据尺寸] 16 Byte 16进制显示数据 [字符显示]

图二 日志结构

程序配置文件(config.ini)说明:
[item1] #连接名称
TcpDataPort=9990 #数据端口
TcpDebugPort=9991 #调试端口
SerialPort=1 #串口号
Baud=9600 #串口波特率
LogFile=item1.txt #日志名称
LogOn=On #日志开关
Enabled=0 #连接开关

重要数据结构说明:

class CItem
{
public:
 CItem(void);
 ~CItem(void);
public:
 CTcpSocket m_sockDateListen; //数据监听套接字
 CTcpSocket m_sockDateMain;  //数据套接字
 CTcpSocket m_sockDebugListen; //调试监听套接字
 CTcpSocket m_sockDebugMain;  //调试套接字
 CTcpSocket m_sockTemp;  //临时 socket
 BOOL m_dataSockInUse;  //相关标志
 BOOL m_debugSockInUse;
 CSerialPort m_serialPort;
 int m_iTotalSendDate;  //收发数据统计
 int m_iTotalRecvDate;
 int m_iDebugPort;   //调试端口,用来连接额外调试程序,输出数据进行调试
 int m_iDataPort;   //数据端口
 int m_iSerialPort;   //串口号
 int m_iBaud;   //串口波特率
 CString m_strDataLinkTo;  //数据远端IP
 CString m_strDebugLinkTo;  //调试远端IP
 CString m_strItemName;  //转发连接名称
 CString m_mistake;   //错误信息
 CString m_strLogFileName;  //日志文件
 BOOL m_logFlag;   //日志文件打开标志
 CSerialTcpDlg* m_pParent;   
 void SetParentItem();
};
串口消息响应在主对话框中:
LRESULT OnCommunication(WPARAM ch, LPARAM port) //当串口收到数据会调用此程序

结束语

  最初写完这个小程序是为了远程调试串口设备,新手编程习惯极为不好,代码里基本就没有注释,所以现在程序里重要结构和函数的注释都是我后期加的,由于时隔太久,注释不太明晰,读者还要自己多斟酌。风格很烂,此文仅仅是串口编成一个比较实用的例子,不能为生产所用。虽然名义上是用C++写得,但完全是C的风格,而且代码很浅显,高手看看笑过就算了。如有任何问题可与我联系。

代码在VC++ 2005调试通过

阅读(2089) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-03-20 22:51:27

http://v.ku6.com/u/2882656 大家可以看看哟!多多指教!

chinaunix网友2008-03-20 22:50:38

http://v.ku6.com/u/2882656