找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
{{itemCategory}}
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
在西门子官方论坛上有个专门的帖子介绍200的自由口通讯,你可以参照一下。http://www.ad.siemens.com.cn/club/bbs/post.asp?b_id=3&a_id=799681&s_id=0&num=27#anch
PP 奇偶选择
00:无奇偶校验 01:偶校验 10:无奇偶校验 11:奇校验
D 每个字符的数据位
0:每个字符8位 1:每个字符7位
BBB 自由口波特率(bit/s)
000:384000 100:2400
001:192000 101:1200
010:9600 110:600
011:4800 111:300
MM 协议选择
00:点到点接口协议(PPI/从站模式)
01:自由口协议
10:点到点接口协议(PPI/主站模式)
11:保留(默认设置为PPI/从站模式)
SMB30=16#09 (00|0|010|01),即:无奇偶校验(00)、每个字符8位(0)、波特率为9600bit/s(010)、自由口协议(01)。
2、接收信息状态字节SMB86和SMB186
当不使用中断事件来判断接收信息完成时,可以通过检测该字节的状态来判断接收信息是否完成。当字节值为1时,表明接收指令没有被激活或者是接收已经结束;当字节值为0时,表明正在接收字节。接收信息状态字节定义如表2。
n:1=用户通过禁止命令结束接收信息
r:1=接收信息结束:输入参数错误和缺少起始和结束条件
e:1=收到结束字符
t:1=接收信息结束:超时
c:1=接收信息结束:字符数超长
p:1=接收信息结束:奇偶检验错误接收信息控制字节
3、接收信息控制字节SMB87和SMB187
未写
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”。
3.3 PLC通信程序程序设计
PLC程序由一个主程序,6个子程序,2个中断程序组成。
3.3.1 主程序设计
3.3.2 子程序设计
3.3.3 中断程序设计
3.4 单片机程序设计
4 调试
1.数据在发送完数据以后,不能接收数据
原因分析:RS485通信是半双工的通信。不能同时接收和发送数据,因此在发送数据的时候就必须禁止SM87.7接收使能,在发送完成以后再允许SM87.7使能。
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!