数据发送

我现在做的是自由口发送数据,我这边发送的是VB100开始的实数。对方问我发送的数据怎么转换,小弟费解啦?求帮助

最佳答案

正好在做自由口通信,一下是我们发送的固定数据对应,可以加QQ605711338我传一个给你,这上边不好看对应关系好像。
3.2.2 数据帧格式
1 广播
PLC作为主站,可以直接向单片机发送数据;而单片机作为从站不能主动向PLC发送数据。当单片需要主动向PLC发送数据的时候,可先向PLC发送申请。PLC接收到申请以后,判断此时通讯通道是否空闲,如果空闲则响应申请,并向所有单片机广播此时通信繁忙不允许发送申请,然后只允许已发送申请的单片机发送数据;当PLC与该单片机通讯完毕后,PLC向所有单片机发广播,此时通信空闲,允许单片机发送申请。同时,当单片机接收到广播消息的时候,首先判断是通信繁忙的信号还是通信空闲的信号,只有当接收到了通信空闲信号时,才可以向PLC发申请。单片机对PLC的广播信号不做反馈处理。
通信忙碌(字符@,ASCII码为64)、通信空闲(字符$,ASCII码为36),单片机在接收到@时,不可向PLC发送申请。只有当接收到$且需要向PLC传输数据的时候才能发送申请。
广播数据格式:
字符数 起始符 广播标志 结束符
表2  PLC广播格式
VB300 字符数              
VB301 起始字符(STX)ASCII为2 Byte0
VB302 标志字符(%空闲:&忙碌) Byte1
VB303 结束字符(ETX)ASCII为3 Byte2
2 PLC发送数据
PLC每次发送一个如图示的21字节数据.
字符数 起始符 目标地址 指令类型 字节数 数 据 BCC校验码 结束符

VB100 字符数
VB101 起始字符(STX)ASCII为2 Byte0
VB102 目标站地址02H
(十六进制地址ASCII码地址) Byte1
VB103  Byte2
VB104 指令类型
读(05H)/写(06H) Byte3
VB105 读/写字节数
(VB107~~VB118共12个) Byte4
VB106  Byte5
VB107 数据
区(十六进制ASCII码) 控制命令:
(A表示步1启动)
(B表示步2启动)
(C表示步3启动) Byte6
VB108   Byte7
VB109  备用1(01) Byte8
VB110   Byte9
VB111  备用2(02) Byte10
VB112   Byte11
VB113  备用3(03) Byte12
VB114   Byte13
VB115  备用4(04) Byte14
VB116   Byte15
VB117  备用5(05) Byte16
VB118   Byte17
VB119 BCC校验码
(十六进制ASCII码) Byte18
VB120  Byte19
VB121 结束字符(ETX)ASCII为3 Byte20
1、字符数(VB100)
字符数占用一个字节,设置发送数据的个数。
2、起始符 (VB101)
起始符占用一个字节,标志数据传送的开始,在本次设计中被定义为ASCII码为2的“STX”。 
3、目标地址(VB102~~VB103) 
目标地址占用两个字节,主要用于判断PLC所发送信息是否是发送给自己,目标的站地址以ASCII码的格式表示。在这里先用02H
4、指令类型 (VB104)
指令类型占用一个字节,指令类型分读、写两种,在次设计中05H代表读操作,06H代表写操作,暂时只是考虑05H写 
5、字节数 (VB105~~VB106)
字节数为数据个数,在本次设计中所发送数据的长度是固定的12个字节,写入0BH,即十进制的12。
6、数据(VB107~~VB118)
数据在指令中以十六进制ASCII码的格式表示,占用指令的12个字节。数据区必须填满,但只是选取其中有用的部分执行指令。(本次设计中只在VB107和VB108中发送数据)
7、BCC校验码 (VB119~~VB120)
在传输过程中,指令有可能受到干扰而使原来的数据信号发生扭曲,此时的指令是错误的,为了侦测指令在传输过程中发生的错误,接收方必须对指令作进一步的确认工作,以防止错误的指令被执行,最简单的方法就是使用校验码。在本次设计中,采用BCC校验码的方法即:将要传送字符串的ASCII码以字节为单位作异或和,并将此异或和作为指令的一部分传送出去;同样地,接收方在接到指令后,以相同的方式对接收到的字符串作异或和,并与传送方所送过来的值作对比,若其值相等,则代表接收到的指令是正确的,反之则是错误的
8、结束符 (VB121)
结束字符标志着发送信息的结束,在本次设计中被定义为ASCII码为3的“ETX”。
3 单片机发送反馈信息
当PLC发送一个21字节数据到单片机的时候,单片机在接收到数据以后会反馈一个9字节的信息给PLC,数据格式如图:
 起始符 目标地址 指令类型 信息接收状态 BCC校验码 结束符

VB1000 字符数
VB1001 起始字符(STX)ASCII为2 Byte0
VB1002 目标站地址02H
(十六进制地址ASCII码地址) Byte1
VB1003  Byte2
VB1004 指令类型
反馈(07H) Byte3
VB1005 反馈信息
01(接收正确) 02(指令错误) 03校验码错误)ASCII码 Byte4
VB1006  Byte5
VB1007 BCC校验码 Byte6
VB1008  Byte7
VB1009 结束字符(ETX)ASCII为3 Byte8

1、字符数(VB1000)
单片机发送数据时不管,PLC在接收数据是自动计算得出。
2、起始符 (VB1001)
起始符占用一个字节,标志传输数据的开始,在本次设计中被定义为ASCII码为2的“STX”。 
3、目标地址(VB1002~~VB1003) 
目标地址占用两个字节,这里需要与PLC发送过来的目标地址一样,目标的站地址以ASCII码的格式表示。在这里先用02H
4、指令类型 (VB1004)
指令类型占用一个字节,在这里只有反馈信息,用07H表示
5、反馈信息(VB1005~VB1006)
反馈信息是PC对接收到的数据进行BCC校验以及结束字符比较以后的信息,当BCC校验正确且结束字符为03H时,该信息为01H;当BCC校验正确但结束字符不为3时,该信息为02H,表示指令错误;当BCC校验不正确时,该信息为03H,表示BCC校验不正确。
7、BCC校验码 (VB1007~~VB1008)
在传输过程中,指令有可能受到干扰而使原来的数据信号发生扭曲,此时的指令是错误的,为了侦测指令在传输过程中发生的错误,接收方必须对指令作进一步的确认工作,以防止错误的指令被执行,最简单的方法就是使用校验码。在本次设计中,采用BCC校验码的方法即:将要传送字符串的ASCII码以字节为单位作异或和,并将此异或和作为指令的一部分传送出去;同样地,接收方在接到指令后,以相同的方式对接收到的字符串作异或和,并与传送方所送过来的值作对比,若其值相等,则代表接收到的指令是正确的,反之则是错误的
8、结束符 (VB1009)
结束字符标志着发送信息的结束,在本次设计中被定义为ASCII码为3的“ETX”。
4 单片机发送数据
当单片机有数据需要发送到PLC上面时,发送一个21字节数据到PLC,数据格式如图
 起始符 目标地址 指令类型 字节数 数 据 BCC校验码 结束符

字符数 VB1000
Byte0 起始字符(STX)ASCII为2 VB1001
Byte1 目标站地址02H
(十六进制地址ASCII码地址) VB1002
Byte2  VB1003
Byte3 指令类型
读(05H)/写(06H) VB1004
Byte4 读/写字节数
(VB107~~VB118共12个) VB1005
Byte5  VB1006
Byte6 数据
区(十六进制ASCII码) 控制命令:
(A表示步1完成)
(B表示步2完成)
(C表示步3完成) VB1007
Byte7   VB1008
Byte8  备用1(01) VB1009
Byte9   VB1010
Byte10  备用2(02) VB1011
Byte11   VB1012
Byte12  备用3(03) VB1013
Byte13   VB1014
Byte14  备用4(04) VB1015
Byte15   VB1016
Byte16  备用5(05) VB1017
Byte17   VB1018
Byte18 BCC校验码
(十六进制ASCII码) VB1019
Byte19  VB1020
Byte20 结束字符(ETX)ASCII为3 VB1021
1、字符数(VB1000)
    字符数占用一个字节,该为由PLC自动计算而成。
2、起始符 (VB1001)
起始符占用一个字节,标志数据传送的开始,在本次设计中被定义为ASCII码为2的“STX”。 
3、目标地址(VB1002~~VB1003) 
目标地址占用两个字节,表示此时发送数据给PLC的是哪一个从站。在这里先用02H
4、指令类型 (VB1004)
指令类型占用一个字节,指令类型分读、写两种,在设计中05H代表读操作,06H代表写操作,暂时只是考虑05H写 
5、字节数 (VB1005~~VB1006)
字节数为数据个数,在设计中所发送数据的长度是固定的12个字节,写入0BH,即十进制的12。
6、数据(VB1007~~VB1008)
数据在指令中以十六进制ASCII码的格式表示,占用指令的12个字节。数据区最好填满,以便BCC计算。(本次设计中只在VB107和VB108中发送数据,其中A、B、C可以自己改)
7、BCC校验码 (VB1019~~VB1020)
在传输过程中,指令有可能受到干扰而使原来的数据信号发生扭曲,此时的指令是错误的,为了侦测指令在传输过程中发生的错误,接收方必须对指令作进一步的确认工作,以防止错误的指令被执行,最简单的方法就是使用校验码。在本次设计中,采用BCC校验码的方法即:将要传送字符串的ASCII码以字节为单位作异或和,并将此异或和作为指令的一部分传送出去;同样地,接收方在接到指令后,以相同的方式对接收到的字符串作异或和,并与传送方所送过来的值作对比,若其值相等,则代表接收到的指令是正确的,反之则是错误的
8、结束符 (VB1021)
结束字符标志着发送信息的结束,在本次设计中被定义为ASCII码为3的“ETX”。
5 PLC发送反馈消息
当PLC接收到单片机发送过来的21字节数据时,对数据进行比较校验,然后返回一个9字节的数据给单片机。数据格式如图。
字符数 起始符 目标地址 指令类型 信息接收状态 BCC校验码 结束符

VB100 字符数
VB101 起始字符(STX)ASCII为2 Byte0
VB102 目标站地址02H
(十六进制地址ASCII码地址) Byte1
VB103  Byte2
VB104 指令类型
反馈(07H) Byte3
VB105 反馈信息
01(接收正确) 02(指令错误) 03校验码错误)ASCII码 Byte4
VB106  Byte5
VB107 BCC校验码 Byte6
VB108  Byte7
VB109 结束字符(ETX)ASCII为3 Byte8

1、字符数(VB100)
    PLC返回PC机数据的个数。
2、起始符 (VB101)
起始符占用一个字节,标志传输数据的开始,在本次设计中被定义为ASCII码为2的“STX”。 
3、目标地址(VB102~~VB103) 
目标地址占用两个字节,这里与PC发送过来的目标地址一样,目标的站地址以ASCII码的格式表示。在这里先用02H
4、指令类型 (VB104)
指令类型占用一个字节,在这里只有反馈信息,用07H表示
5、反馈信息(VB105~VB106)
反馈信息是PLC对接收到的数据进行BCC校验以及结束字符比较以后的信息,当BCC校验正确且结束字符为“03H”时,该信息为01H;当BCC校验正确但结束字符不为“03H”时,该信息为02H,表示指令错误;当BCC校验不正确时,该信息为03H,表示BCC校验不正确。
7、BCC校验码 (VB107~~VB108)
PLC返回到PC机上面的数据也要进行BBC校验,这主要是为了保证传送过来验证有没有传送出错。
8、结束符 (VB109)
结束字符标志着发送信息的结束,在本次设计中被定义为ASCII码为3的“ETX”。

提问者对于答案的评价:
很详尽,感谢。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc313169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月1日
下一篇 2020年11月1日

相关推荐