rs485半双工程序发送文件和文本.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
rs485半双工程序发送文件和文本

rs485半双工程序发送文件及文本(十六进制、二进制数据) (这是***编写的一个RS485半双工传输程序的协议,及说明。支持全双工,可以发送文件和字符,对文件采取分块传输的原则。发送文本支持16进制二进制自动发送,功能比串口调试助手强大,免费提供源代码 HYPERLINK mailto:renchunyun@ renchunyun@, ????? 1、RS485传输协议格式 ? (1)、传输文件 ?? A、请求包 是发送方发给接收方的,用于发送方向接收方发出发送文件的请求 ENQ 文件尺寸 文件名长度 文件名 校验 ? ENQ=5 一个字节 文件尺寸 4个字节 文件名长度 1个字节 文件名 若干字节 校验 1个字节 B、普通数据包 普通数据包是发送方向接收方发送的具有固定长度的数据包共1028个字节 STX 序号 数据(1024个字节) 校验 STX是包标识,表明是一个普通数据包,长度为一字节。值为2 序号用来标识当前数据包在整个传输过程中的顺序号,2个字节 数据为传输的具体数据内容,1024个字节 校验位,为从STX开始的所有字节的异或和 ? C、结束数据包 ETX 数据长度 序号 数据 校验 ETX为结束包首字符,表示一个包的结束,1个字节 数据长度为两个字节为该数据包传输的数据长度 数据包含具体要传输的内容,长度由数据长度值决定。 D、响应包 一个字节 名称 取值 含义 ACK 6 接收方收到正确无误的数据 NAK 21 发送方收到的数据有错误 CAN 24 接收方由于某种原因取消了发送方的传输请求 ? (2)、传输文本 ? 传输文本格式 SOH 0 文本长度 0 文本内容 SOH为传输文本头,长度为1字节,内容为1 第二个段为2个0字节,第四个段为1个0字节,这两个段主要是为了与传输文件的格式保持一致,便于接收端接收。 文本长度为2个字节; 文本内容段为具体的文本内容,长度由文本长度段决定。 由于传输文本不具有校验位,所以不具有检错能力。 (2)、发送及接收状态 文件发送态 0态:发送操作尚未开始处于接收态,单击发送文件,提示输入文件名后,此时即是0态,此时发送以ENQ为头的请求包,通知对方接收文件。然后进入1态。 1态:表示发送操作已经开始,等待对方响应,若受到Ack,则表示上次传输成功,然后判断剩余文件长度是否小于1024 ,是则发送ETX数据包,然后转2态。否则发送Stx数据包。收到CAN表示对方拒绝接受此文件取消操作。收到NAK,表示传输错误要求重传。 2态:表示发送方已发送结束数据包,等待对方确认,若收到NAK,则重传上次数据包;若收到ACK,则传输成功切换到初始状态即接收0态。 文本发送态: 仅有一个状态 把要送的文本加上包头,按传输文本的格式传输出去。无校验也没有确认包。 文本发送辅助功能:自动发送,16进制发送及接收,二进制发送及接收,自动清空等。 接收状态 分两种即0态和接收1态。 0态:程序处于接收状态,等待发送方的请求包,若收到一完整的数据包后,首先判断数据包是否为请求包,不是则退出消息响应函数,是则提出包头看是为文件请求包还是文本数据的发送。若是文件请求包,从包内容中提取发送方发送的文件名称,及文件大小开辟内存空间,存储到默认的存储路径中。若接收方开辟内存空间失败则发送CAN,成功接收将接收数据序号设为1,发送ACK,并切换到接收1态。若为文本数据,提取并显示在接受界面上并退出消息循环函数。 1态:表示程序处于数据接收状态,等待接收普通数据包或结束数据包,当接收方接受到一帧完整的数据包后首先检查数据包类型。若是普通数据包,检查校验位,校验正确,则提取其中数据并写入文件,发送ACK,校验错误则发送NAK要求重传。若是结束包,同样检查校验位,若校验正确置状态为0态,发送ACK,否则发NAK要求重传。 3、RS485程序结构 (1)、线程及主要操作函数 a、主线程 本程序在主线程中除进行串口的基本设置如设置、读写函数等,最重的是处理文件及文本的接受和发送。此功能由OnReceiveEvent()来实现。这是一个自定义消息函数。实现步骤如下: (1)、在RS485View.h中定义消息 #define WM_MYMSG WM_USER+101; (2)、RS485View.h中在 //}}AFX_MSG …….. DECLARE_MESSAGE_MAP() 中定义函数 afx_msg LONG OnReceiveEvent(WPARAM wParam,LPARAM lParam); (3)在RS485View.cpp中 添加ON_MESSAGE(WM_MYMSG,OnReceiveEvent)最后如下 ? //}}AFX_MSG_MAP // Standard printing commands O

文档评论(0)

sy78219 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档