提到S7-200 PLC的自由口通讯,大家可能都觉得很难,觉得学起来没有头绪,其实学懂这个复杂东西也简单,只要你将这个复杂的知识一点点的进行拆分,循序渐进的进行理解,就能最终将这个复杂的知识掌握。
本文将通过一个基本的通讯实验,教会大家通过S7-200PLC通过自由口通讯方式把数据发送给电脑。呵呵,我们的PLC会说话啦!!
1、实验工具
1. S7-200CPU 1个
图1
2. 串口调试软件
图2
3. Usb转485转换接头1个(RS232转RS485接头也可)
图3
4. 9针接头公头1个
图4
5.两芯电缆 一条
图5
2、实验流程
实验目的:PLC向电脑发送一个字节的数据。
实验操作:用S7-200PLC向电脑发送一个字节的数据,通过串口调试软件接收,由于现在的电脑都没有RS485通讯接口,因此我们要使用Usb转485转换接头才能保障电脑可以接收到来自PLC的数据,另外接线要注意9针头的3脚接Usb转485接头的信号“+”,8脚接Usb转485接头的信号“-”
3、自由口模式
说到程序的编写,大家就必须了解S7-200的自由口模式,由于S7-200的默认通讯方式是PPI通讯,因此不能自由收发数据,如果想自由收发数据,就必须先将S7-200的通讯接口设置为自由口模式,控制S7-200自由口的是特殊位寄存器SMB30和SMB130。其中SMB30是控制CPU通讯口0的,SMB130是控制通讯口1的,当然如果只有一个通讯端口就只能使用SMB30这个特殊位寄存器了。下面我们一起来看看这8个位,分别表示什么含义如图 3-1所示。
图6
1) 0 、1位: 协议选择
mm:
00 = 点到点接口协议(PPI/从站模式)
01 = 自由口协议
10 = PPI/主站模式
11 = 保留(缺省是PPI/从站模式)
2) 2、 3 、4位:自由口波特率设置
bbb:
000 = 38400bps
001 = 19200bps
010 = 9600bps
011 = 4800bps
100 = 2400bps
101 = 1200bps
110 = 115200bps
111 = 57600bps
3) 5位:每个字符的数据位
d:
0 = 8位/字符
1 = 7位/字符
4) 6 、7位:效验选择
pp:
00 = 不效验
01 = 偶效验
10 = 不效验
11 = 奇效验
这里还要和大家补充一个概念,在通讯的过程中每次发送与接收的最小单位是字符而不是位,1个字符通常包括1个起始位表示字符的开始,1个停止位表示字符的结束,一个奇偶效验位用于验证字符错对,和8个或者7个数据位用于传递信息。这里奇偶效验位可有可无,数据位通常情况下是8个位也就是1个字节,因此如果一个字符包含奇偶效验位通常是11个位,不包含奇偶效验位则是10个位。
通过上面对自由口模式的介绍,如果我们在S7-200CPU的通讯端口0使用自由口模式,通讯速率为9600bps传输的字符不要奇偶效验位,那么我们就必须将SMB30中的数据配置成00001001如图 3-2所示换算成16进制就是16#9
图 7
4、程序编写
在开始编写程序之前,我们首先要掌握S7-200发送指令的使用。
图 8
XMT发送指令有两个管脚,TBL和PORT。
PORT:通讯端口编号,如果用0端口则写0,如果用1端口则写1.
TBL:定义发送缓冲区的起始地址和缓冲区的大小,如果TBL中写VB100,VB100中存放1,则发送缓冲区是VB101,发送数据时将VB101中的数据发送出去。如果VB100中存放2,则发送缓冲区为VB101和VB102,发送数据时将VB101、VB102的数据发送出去。
下面我们来看程序的具体写法。
图 9
图9所示的程序就是一个最简单的发送程序,首先用SMB30将通讯口0定义为自由口,通讯速率9600bps,然后定义VB101为发送缓冲区(因为VB100中存放的是1),通过SM0.5将VB101中的16进制的CC以1秒钟为单位发送给电脑。最终我们电脑将会以1秒为单位接收到PLC发送的字符CC如图 4-3所示。
图 10