NC代码传输协议详细解析

2019-01-24 1538点热度 3人点赞 0条评论

——— RS232物理通讯接口

原创作者:王永建(blog@wangyongjian.cn)

原文引用地址:blog.wangyongjian.cn


  数控机床集成有RS232通讯接口,都支持通过RS232通讯接口上传或下载NC程序代码。NC代码传输软件有很多比如WinPCIN、超级终端、各种DNC系统等,其NC代码传输过程都采用了ZModem协议。

1.ZMODEM协议

  ZModem是针对调制解调器(modem)的一种错误校验协议。利用ZModem协议,可以发送512字节的数据块。如果某个数据块发生错误,接受端会发送“否认”应答,数据块就会被重传。ZModem不但具有纠错功能,还是一种流式协议。它不再以收方发ACK引导。 ZModem完全以包引导。

2.ZMODEM协议数据帧

  ZModem的数据帧包含报头以及可能跟随的数据子包流组成。报头包含开始标志、帧类型、帧信息、报头CRC,数据子包包含文件数据和校验CRC组成,每个数据子包最多可以包含1024个字节的数据,其后为CRC值用于数据校验,一个报头之后可以有若干个数据子包,对数据子包没有数量限制,也就是说一个文件的所有数据可以在一个帧内传送完毕。

2.1.报头格式

  ZModem报头相对简单,有4个基本部分组成

1) 报头编码类型,用字符A、B、C表示

2) 帧类型,ZModem定义了18种帧类

3) 4个数据字节

4) 报头的CRC

  ZModem的报头分为3中编码形式:

1)十六进制报头,用字符B表示,十六进制报头使用可以打印的字符传送,采用16位CRC校验;
帧格式如下:

* * ZDLE B TYPE F3/P0 F2/P1 F1/P2 F0/P3 CRC-1 CRC-2 CR LF XON

2)16位CRC校验二进制报头,用字符A表示,数据子包以二进制发送,采用16位CRC校验;
帧格式如下:

* ZDLE A TYPE F3/P0 F2/P1 F1/P2 F0/P3 CRC-1 CRC-2

3) 32位CRC校验二进制报头,用字符C表示,数据子包以二进制发送,采用32位CRC校验,提高可靠性。
帧格式如下:
* ZDLE C TYPE F3/P0 F2/P1 F1/P2 F0/P3 CRC-1 CRC-2 CRC-3 CRC-4

2.2.数据子包

  数据子包紧跟报头之后,数据子包由多个最大长度为1024字节的数据块组成,最后以ZDLE和1个子包结束字符。子包结束字符有4种,其含义略有不同,

1) ZCRCE('h'):这个字符标志数据子包的结尾帧的结尾。当接收端在子包的结尾收到这个字符时,就开始查找下一个报头了。这个子包一般用在文件的结尾。

2) ZCRCG(' i'):这个字符终止当前子包,但指明至少还有一个子包跟随其后。接收端需要开始检查其后的CRC值,并开始接收一个新的子包。

3) ZCRCQ('j')这个字符终止当前子包,但不终止帧。与ZCRCE不同,接收端必须多做一
些事情,而不仅是校验子包校验值。此外,接收端发送一个ZACK帧指明子包接收成功。发送器周期性的发送这个字符以迫使接收端响应。这有助于检测主动连接

4) ZCRCW('k')这个字符以终止当前子包和帧。在检验CRC后,接收端可预期一个新的报头开始下一个帧。这个终止字符还指明接收器需要发送一个ZACK以校验子包的接收。

  在正常的文件传输期间,ZMODEM发送端仅能以一系列子包文件的方式发送整个文件,除了最后一个子包外,使用ZCRCG终止每个子包。最后的子包可以由ZCRCE来终止,它使接收端确认整个帧的正确接收。在接收到ZACK后,发送器保证所有数据都正确的接收。

3.文件传输过程

  采用ZModem协议的最简单文件传输过程

发送端 接收端 帧类型
发送端向接收端发送初始化请求 ZRQINIT
接收端响应发送端的请求 ZRINIT
发送端发送文件名称、大小、时间等数据 ZFILE
接收端请求文件开始位置 ZRPOS
发送包含文件内容的数据帧,所有数据子包以ZCRCG(字符“i”)结束,最后一个数据子包以ZCRCE(字符“h”)结束。 ZDATA
发送所有数据,并指明文件结尾 ZEOF
接收端发送已准备接收新文件帧 ZRINIT
发送端终止回话,如果传送多个文件则发送ZFILE帧 ZFIN 2:9
接收端响应终止回话请求,连接中断 ZFIN

参考资料】

1、 Zmodem规范英文版

2、 用UART做文件传输(采用Zmodem协议)

wangyongjian

这个人很懒,什么都没留下

文章评论