视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
PLC通信协议
2025-09-29 17:13:12 责编:小OO
文档
一、通信原理分析 

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设置。

表1自由端口控制寄存器

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.2 数据格式

2.2.1 广播

PLC作为主站,可以直接向单片机发送数据;而单片机作为从站不能主动向PLC发送数据。当单片需要主动向PLC发送数据的时候,可先向PLC发送申请。PLC接收到申请以后,判断此时通讯通道是否空闲,如果空闲则响应申请,并向所有单片机广播此时通信繁忙不允许发送申请,然后只允许已发送申请的单片机发送数据;当PLC与该单片机通讯完毕后,PLC向所有单片机发广播,此时通信空闲,允许单片机发送申请。同时,当单片机接收到广播消息的时候,首先判断是通信繁忙的信号还是通信空闲的信号,只有当接收到了通信空闲信号时,才可以向PLC发申请。单片机对PLC的广播信号不做反馈处理。

通信忙碌(字符@,ASCII码为)、通信空闲(字符$,ASCII码为36),单片机在接收到@时,不可向PLC发送申请。只有当接收到$且需要向PLC传输数据的时候才能发送申请。

广播数据格式:

字符数起始符广播标志结束符
表2  PLC广播格式

VB300字符数              

VB301起始字符(STX)ASCII为2

Byte0
VB302标志字符(%空闲:&忙碌)

Byte1
VB303结束字符(ETX)ASCII为3

Byte2
2.2.2 PLC发送数据格式

经过分析得知:

PLC向单片机发送的数据包括两种,一种是控制单片机动作的控制信号;另一种是当接收到单片机发送来的数据以后,经过比较校验要发送一个反馈信息给单片机告之单片机PLC接收到的信息是否正确。数据格式如表3示:

字符数起始符目标地址指令类型字节数数 据

BCC校验码

结束符
表3 PLC发送缓冲区(指令以及反馈)

VB100字符数
VB101起始字符(STX)ASCII为2

Byte0
VB102目标站地址(十六进制ASCII码)(单片机地址)

Byte1
VB103Byte2
VB104指令类型

读(05H)/写(06H)/反馈(07H)

Byte3
VB105读/写字节数

(VB107~~VB118共12个)

Byte4
VB106Byte5
VB107数据

区(十六进制ASCII码)

控制命令:

(A表示步1启动)

(B表示步2启动)

(C表示步3启动)

反馈信息:

正确(00)指令错误(01)

校验错误(02))

Byte6
VB108Byte7
VB109备用1

Byte8
VB110Byte9
VB111备用2

Byte10
VB112Byte11
VB113备用3

Byte12
VB114Byte13
VB115备用4

Byte14
VB116Byte15
VB117备用5

Byte16
VB118Byte17
VB119BCC校验码

(十六进制ASCII码)

Byte18
VB120Byte19
VB121结束字符(ETX)ASCII为3

Byte20
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所示。

字符数起始符目标地址指令类型字节数数 据

BCC校验码

结束符
表4 PLC接收缓冲区

字符数VB200
Byte0起始字符(STX)ASCII为2

VB201
Byte1目标站地址(十六进制ASCII码)(单片机地址)

VB202
Byte2VB203
Byte3指令类型

[读(05H)/写(06H)/反馈(07H)]

VB204
Byte4读/写字节数:

(VB207~~VB218共12个)

VB205
Byte5VB206
Byte6数据区(十六进制ASCII码)

命令执行状况:

完成阶段1——a

完成阶段2——b

完成阶段3——c

反馈信息:

正确(00)

指令错误(01)

校验错误(02)

VB207
Byte7VB208
Byte8备用VB209
Byte9VB210
Byte10备用VB211
Byte11VB212
Byte12备用VB213
Byte13VB214
Byte14备用VB215
Byte15VB216
Byte16备用VB217
Byte17VB218
Byte18BCC校验码

(十六进制ASCII码)

VB219
Byte19VB220
Byte20结束字符(ETX)ASCII为3

VB221
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 单片机的通讯程序设计下载本文

显示全文
专题