分类: C/C++
2008-03-13 08:50:43
程序的整体结构:
程序功能实现如下:
客户端<————> (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调试通过