数据发送

我现在做的是自由口发送数据,我这边发送的是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日 下午3:19
下一篇 2020年11月1日 下午3:19

相关推荐

  • 请问S7-200中,三台电机A、B、C循环交替启动的问题

    请问S7-200中,三台电机A、B、C循环交替启动,先启动A电机,过12小时启动B电机,再过24小时启动C电机,再过36小时启动A电机…,如此循环下去,请问如何编程? 最佳答案…

    SIMATIC S7-200 2021年7月5日
  • 步进电机控制的的几点疑问?

    1.在定义PTO输出寄存器的时候,我将16#8D=2#10001101传送到SMB67。定义的周期时基应是us对吗,请看详细定义步骤:SM67.0=1定义PTO刷新周期值为刷新,S…

    SIMATIC S7-200 2021年7月5日
  • 找个老师

    想找个高手教教我,搞不明白PID和模拟量 我是北京的,有方便的吗,我QQ527366513  最佳答案 论坛里版主都是高手,你去找找他们吧。 提问者对于答案的评…

    SIMATIC S7-200 2021年7月4日
  • s7 200跑马灯移位寄存器使用

    要求12个灯循环点亮,亮1s,灭1.5s后,第二个灯亮1s,灭1.5s,如此循环。循环移位只有8的倍数的指令,12个不知道怎么实现,求大神给个思路 最佳答案 这个你可以用定时器和计…

    SIMATIC S7-200 2021年7月5日
  • s7200多层体系架构问题

    如图所示,构建多层的架构,PC对所有的PLC进行读写控制。该如何硬件连接,采用什么协议?modbus协议可以实现吗? 图片说明:    最佳答案 完全可以这么做…

    2018年12月5日
  • 关于一个S7 200的改造项目,请大家支个招

    小弟在有一个剪板机的小项目,以前以前是手动的,PLC是S7 200 226CN的CPU,现在想在不换CPU的情况下改成自动计算长度,然后剪短,就是利用在电机上加…

    SIMATIC S7-200 2020年11月1日
  • S7-200做modbus主站,“写"从站遇到的问题

    为什么在“写”(RW=1)操作的时候,用1个MBUS_MSG连续写2个COUNT的时候会发生错误,而用2个MBUS_MSG分别写2个COUNT的时候正常呢 问题补充:上问题提到的”…

    2017年11月19日
  • S7200问题

    谁有S7200的模拟软件 问题补充:zyan886@sina.com 谢谢!!! 最佳答案 网上下载的模拟软件不是所有的功能都能实现的。用的时候要注意,在STEP&nbs…

    SIMATIC S7-200 2021年7月5日
  • 多个s7-200plc通讯的编程电缆选择

    我有两个s7-200的plc226,现场还有一个带485通讯接口的表,现在想用modbus通讯将两个plc和这个表连接到上位机上。请问该选择什么样的编程电缆和通讯线?如果我选择一个…

    SIMATIC S7-200 2020年11月1日
  • plc连接触摸屏不能登录账户。

    plc200连接触摸屏,开机时需要登录,可以输入用户名跟密码。确认后还是无没有登录状态。 问题补充:设备是前天还可以使用的,昨晚开机就出现问题。参数没有更改过。附一张图片,就是图片…

    SIMATIC S7-200 2020年10月31日