PLC通信协议
- 格式:doc
- 大小:175.50 KB
- 文档页数:11
一、通信原理分析1.1自由口通信模式介绍CPU的串行通信口可以由用户程序控制,这种操作模式称为自由端口模式,当选择了自由端口模式时,用户程序可以使用接收中断,发送中断,发送指令(XMT)和接收指令(RCV)来进行通信操作。
在自由端口模式下,通信协议完全由用户程序控制,有很大的灵活性。
SMB30(用于端口0)和SMB130(如果CPU有两个端口,则用于端口1)用于选择波特率、奇偶校验、数据位数、通信协议。
只有CPU处于RUN模式下时,才可以进行自由端口通信,通过向SMB30(端口0)和SMB130(端口1)的协议选择区置1,可以允许自由端口模式。
处于自由端口模式时,PPI通信协议被禁止,此时不可以于编程设备通信(比如对程序进行监控或对CPU进行操作)当CPU处于STOP模式时,自由端口被禁止,通信口自动切换为PPI协议,从新建立与编程设备的正常通信。
在程序中可以用SM0.7(反应CPU当前方式的模式开关)来控制自由端口模式进入,当SM0.7为“0”时,模式开关处于TREM位置;当SM0.7为“1”时,模式开关处于RUN位置。
只有模式开关位于RUN位置时,才允许自由端口模式,当需要使用编程设备对程序进行状态监控或对CPU进行操作可以将模式开关改变到其他位置。
1.2 发送与接收指令介绍用XMT指令可以方便的发送一个或多个字节缓冲区的内容,最多为255个字节。
如果有一个中断服务程序连接到发送结束事件上,在发完缓冲区的最后一个字符时,则会产生一个中断(对端口0的中断事件为9,对端口1的中断事件为26),当然也可以不用中断来判断发送指令是否完成,而是监控SM4.5或SM4.6的状态,以此来判断发送是否完成。
用RCV指令可以方便的接收一个或多个字节缓冲区的内容,最多为255个字节。
这些字符存储在接收缓冲区中。
如果有一个中断程序连接到接收完成事件上,在接收到缓冲区中的最后一个字符时,则会产生一个中断(对端口0为中断事件23,对端口1为中断事件24)。
当然还是可以不用中断事件来判断接收信息是否结束,而是通过监视SMB86(端口0)或SMB186(端口1)状态的变化来判断接收状态的结束。
当接收指令没有被激活或者是接收已经结束时,SMB86或SMB186为1,当正在接收时,它们为0。
1.3 RS-485串行通信硬件实现图1 串行通信实现由于S7-200 PLC采用RS485标准接口,MSP430开发板也是标准的RS485接口,所以PLC与MSP430的连接可以直接通过一根RS485电缆相连接。
但是由于电脑的端口为RS232端口,所以PLC与电脑的连接需要用到RS232转RS485,硬件连接如图1。
二、通信协议设计图2 PLC与单片机通信结构图如图2示:1、PLC与单片机采用自由口通信模式,PLC与单片机之间是主从关系。
S7-200的通信端口是半双工RS-485芯片,发送指令和接收指令不能同时有效,其通信采用主从轮询的方式:PLC始终处于主导地位,始终具有初始传送优先权,所有通讯均由PLC来启动,向从站发送数据或者从从站中读取数据都是主站以命令帧形式发送。
PLC与单片机初始化状态时均处于接收信息状态2、PLC可以主动的向各单片机发送数据,各单片机依据PLC所发数据的站地址来区分该信息是否该自己响应。
单片机在需要主动向PLC发送数据的时候,必须先向PLC发送申请。
PLC在接收到某个单片机的申请信号后,会根据实际情况先向所有单片机发送禁止向主机发送数据的命令,然后向申请通讯的单片机发送命令允许其发送数据给主机。
PLC接收完该单片机的数据后,再向所有单片机发广播允许所有单片机向其发送申请。
2.1 通信设备参数设置S7-200系列PLC(CPU226)与自由口模式通信有关的寄存器为SMB30、SMB130及其它特殊寄存器,它们主要用于通讯方式的设置与运行管理。
在本次设计中,用到CPU226端口0,其通讯控制由SMB30设置。
SMB30=16#09 (00|0|010|01),即:无奇偶校验(00)、每个字符8位(0)、波特率为9600bit/s(010)、自由口协议(01)。
2.2 数据格式2.2.1 广播PLC作为主站,可以直接向单片机发送数据;而单片机作为从站不能主动向PLC发送数据。
当单片需要主动向PLC发送数据的时候,可先向PLC发送申请。
PLC接收到申请以后,判断此时通讯通道是否空闲,如果空闲则响应申请,并向所有单片机广播此时通信繁忙不允许发送申请,然后只允许已发送申请的单片机发送数据;当PLC与该单片机通讯完毕后,PLC向所有单片机发广播,此时通信空闲,允许单片机发送申请。
同时,当单片机接收到广播消息的时候,首先判断是通信繁忙的信号还是通信空闲的信号,只有当接收到了通信空闲信号时,才可以向PLC发申请。
单片机对PLC的广播信号不做反馈处理。
通信忙碌(字符@,ASCII码为64)、通信空闲(字符$,ASCII码为36),单片机在接收到@时,不可向PLC发送申请。
只有当接收到$且需要向PLC传输数据的时候才能发送申请。
广播数据格式:2.2.2 PLC发送数据格式经过分析得知:PLC向单片机发送的数据包括两种,一种是控制单片机动作的控制信号;另一种是当接收到单片机发送来的数据以后,经过比较校验要发送一个反馈信息给单片机告之单片机PLC接收到的信息是否正确。
数据格式如表3示:1、字符数(VB100)字符数占用一个字节,设置发送数据的个数。
2、起始符(VB101)起始符占用一个字节,标志通讯的开始,在本次设计中被定义为ASCII码为2的“STX”。
3、目标地址(VB102~~VB103)目标地址占用两个字节,主要用于单片机判断PLC所发送信息是否是发送给自己,目标的站地址以ASCII码的格式表示。
4、指令类型 (VB104)指令类型占用一个字节,指令类型分读、写、反馈三种,在次设计中05H 代表读操作,06H代表写操作,07H代表反馈。
5、字节数 (VB105~~VB106)字节数为数据个数,在本次设计中所发送数据的长度是固定的12个字节,写入0BH,即十进制的12。
6、数据(VB107~~VB118)数据在指令中以十六进制ASCII码的格式表示,占用指令的12个字节。
数据区必须填满,但单片机只是选取其中有用的部分执行指令。
(本次设计中只在VB107和VB108中发送数据,当指令类型为写时,VB107和VB108中发送的是单片机的控制信号;当指令类型为反馈时,VB107和VB108中发送的是校验后给单片机的反馈信息)7、BCC校验码(VB119~~VB120)在传输过程中,指令有可能受到干扰而使原来的数据信号发生扭曲,此时的指令是错误的,为了侦测指令在传输过程中发生的错误,接收方必须对指令作进一步的确认工作,以防止错误的指令被执行,最简单的方法就是使用校验码。
在本次设计中,采用BCC校验码的方法即:将要传送字符串的ASCII码以字节为单位作异或和,并将此异或和作为指令的一部分传送出去;同样地,接收方在接到指令后,以相同的方式对接收到的字符串作异或和,并与传送方所送过来的值作对比,若其值相等,则代表接收到的指令是正确的,反之则是错误的8、结束符(VB121)结束字符标志着发送信息的结束,在本次设计中被定义为ASCII码为3的“ETX”。
2.2.3 PLC接收数据同理,PLC所接收的数据也包括两种:一种是当单片机动作完成时,会发送一个标志给PLC说明动作已经完成,PLC可以执行下一步动作;另一种是当单片机接收到控制信号时,比较校验以后发送回来的反馈信号。
数据格式如表4所示。
1、字符数(VB200)字符数占用一个字节,记录在此次数据接收过程中接收数据的个数。
2、起始字符(VB201)起始符占用一个字节,标志接收数据的开始,在本次设计中定义为ASCII 码为2的“STX”。
3、目标地址(VB202~~VB203)目标地址占用两个字节,主要作用是让PLC能够分别出所接受到的信息是来源于某一个单片机。
目标的站地址以ASCII码的格式表示。
4、指令类型 (VB204)指令类型占用一个字节,指令类型分读、写、反馈三种,在次设计中05H 代表读操作,06H代表写操作,07H代表反馈。
5、字节数 (VB205~~VB206)字节数为单片机发送给PLC的数据个数,在本次设计中所发送数据的长度是固定的12个字节,写入0BH,即十进制的12。
6、数据(VB207~~VB218)数据在指令中以ASCII码的格式表示,占用指令的12个字节。
数据区必须填满,但PLC只是选取其中有用的部分执行指令。
(本次设计中只有VB207和VB208中所接收数据有用,当指令类型为写时,VB207和VB208中所接收到的信息是单片机完成动作以后的标志信息;当指令类型为反馈时,VB207和VB208中所接收的信息是校验后单片机给PLC的反馈信息)7、BCC校验码(VB219~~VB220)在传输过程中,指令有可能受到干扰而使原来的数据信号发生扭曲,此时的指令是错误的,为了侦测指令在传输过程中发生的错误,接收方必须对指令作进一步的确认工作,以防止错误的指令被执行,最简单的方法就是使用校验码。
在本次设计中,采用BCC校验码的方法即:将要传送字符串的ASCII码以字节为单位作异或和,并将此异或和作为指令的一部分传送出去;同样地,接收方在接到指令后,以相同的方式对接收到的字符串作异或和,并与传送方所送过来的值作对比,若其值相等,则代表接收到的指令是正确的,反之则是错误的。
8、结束符(VB221)结束字符标志着接收信息的结束,在本次设计中被定义为ASCII码为3的“ETX”。
三、通讯程序设计3.1 PLC的通讯程序设计3.1.1 主程序设计3.1.2 BCC校验码程序设计3.2 单片机的通讯程序设计。