欢迎来到天天文库
浏览记录
ID:1994208
大小:310.55 KB
页数:3页
时间:2017-11-14
《串口转tcp&ip实用程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、串口转TCP/IP实用程序(转自:编程入门)关键字:SerialPort转TCP/IP、串口编成、远程串口调试我正是从VCKBASE开始学习VC++的,没有他我进步不会如此迅速,一直想给VCKBASE贡献点什么,正好今天有空,就把早些时候写的一个串口转TCP/IP的程序发上来,希望对初学者学习串口编程有点帮助。程序的最大缺陷:Windows把硬件驱动的接口都进行了抽象和标准化,串口也不例外,大部分的设备都可以通过文件操作API进行存储控制,如:CreateFile、ReadFile、WriteFi
2、le等,其实很简单。网上有个SerialPort的类写得还不错,我就直接拿来用了,只做了小小的修改以满足我的要求。原本的类一次只能收发一个Byte,根据需要我改成了512Byte,需要重点提出的是,当收发多字节数据时,数据的正确性和完整性更需要自己保证,因为串口协议标准只是定义在物理层和数据链路层,打个比方说,如果一次发送512Byte,收到不一定是正确的512Byte,所以自己要进行相关校验保证正确性,也可能不是一次就会完整的收到512Byte,而是分多次收完所有数据,这时就要我们定义相关结构保
3、证数据收发完整性。这些细节都是跟串口驱动的实现有关,读者感兴趣的话,可以查看相关文档。在这个应用程序中完全没有对这个问题进行防护处理,鉴于一次收发数据量小(512Byte),并且只是自己的试验品,所以写得并不严谨,把数据收发理想为一次性正确收发,希望各位都能注意了。程序的整体结构:程序功能实现如下:客户端<————>(CTcpSocket)转接程序(CSerialPort)<————>串口设备对于每个CTcpSocket和CSerialPort对用一个CItem的结构进行管理,可以在配置文件里配置
4、多个连接转发对。程序中主要的类有:CSerialPort、CTcpSocket、CItem。可以把从串口收到的数据转发向数据套接字和调试套接字,而且可以写入日志文档。图一程序显示条目日志文档结构:[时间数据传输方向数据尺寸]16Byte16进制显示数据[字符显示]图二日志结构程序配置文件(config.ini)说明:[item1]#连接名称TcpDataPort=9990#数据端口TcpDebugPort=9991#调试端口SerialPort=1#串口号Baud=9600#串口波特率LogFil
5、e=item1.txt#日志名称LogOn=On#日志开关Enabled=0#连接开关重要数据结构说明:classCItem{public: CItem(void); ~CItem(void);public: CTcpSocketm_sockDateListen; //数据监听套接字 CTcpSocketm_sockDateMain; //数据套接字 CTcpSocketm_sockDebugListen; //调试监听套接字 CTcpSocketm_sockDebugMain;
6、 //调试套接字 CTcpSocketm_sockTemp; //临时socket BOOLm_dataSockInUse; //相关标志 BOOLm_debugSockInUse; CSerialPortm_serialPort; intm_iTotalSendDate; //收发数据统计 intm_iTotalRecvDate; intm_iDebugPort; //调试端口,用来连接额外调试程序,输出数据进行调试 intm_iDataPort; //数据端口 i
7、ntm_iSerialPort; //串口号 intm_iBaud; //串口波特率 CStringm_strDataLinkTo; //数据远端IP CStringm_strDebugLinkTo; //调试远端IP CStringm_strItemName; //转发连接名称 CStringm_mistake; //错误信息 CStringm_strLogFileName; //日志文件 BOOLm_logFlag; //日志文件打开标志 CSerialTcpD
8、lg*m_pParent; voidSetParentItem();};串口消息响应在主对话框中:LRESULTOnCommunication(WPARAMch,LPARAMport)//当串口收到数据会调用此程序结束语最初写完这个小程序是为了远程调试串口设备,新手编程习惯极为不好,代码里基本就没有注释,所以现在程序里重要结构和函数的注释都是我后期加的,由于时隔太久,注释不太明晰,读者还要自己多斟酌。风格很烂,此文仅仅是串口编成一个比较实用的例子,不能为生产所用。虽然名义上是用C
此文档下载收益归作者所有