
以前我们讲过关于自由口通讯的实例,今天我们讲一下自由口通讯配合中断的实例。在一些特定场合,比如说与松下系列伺服驱动器的控制时,为了保证数据的安全,我们需要进行多次往返的数据交换,这就需要严格控制通讯的......
以前我们讲过关于自由口通讯的实例,今天我们讲一下自由口通讯配合中断的实例。
在一些特定场合,比如说与松下系列伺服驱动器的控制时,为了保证数据的安全,我们需要进行多次往返的数据交换,这就需要严格控制通讯的时间。那么这个时候对于PLC来说通讯就是最重要的,所以我们需要打断PLC的正常功能,优先处理通讯,这就需要通讯中断。
实例:2台S7-200SMARTCPU(端口0)采用自由口通信方式实现相互通信

(本文仅为展示自由口通讯和中断,如果想要实现这两个PLC的通讯其实最好是使用向导进行以太网通讯,有机会我们也会进行讲解!)
通信任务:CPU1每秒触发一次XMT指令将CPU的实时时钟发送到CPU2;CPU2接收到CPU1发送的信息后立即将CPU2的实时时钟回复到CPU1。
接线:每个S7-200SMARTCPU都提供一个以太网端口和一个RS485端口(端口0),标准型CPU额外支持SBCM01信号板(端口1),信号板可通过STEP7-Micro/WINSMART软件组态为RS232通信端口或RS485通信端口。
CPU通信端口引脚分配

1、CPU1编程
1.1、CPU1主程序编程如图所示:

CPU1主程序
程序讲解:
1.设置SMB30=210010100,使用空闲线检测为信息接收的起始条件,使用字符间定时器为信息接收的结束条件。
3.设置空闲线定时器SMW90=5ms,字符间定时器SMW92=5ms,允许最大接收字符个数SMB94=10。
4.连接中断子程序INT_0到通信端口0发送完成事件,并启用中断。
5.每秒钟读取一次CPU的实时时钟,并将发送缓冲区长度设置为8个字符。
6.执行XMT指令之前设置=0,同时执行RCV指令,终止消息接收。
7.每秒钟执行一次XMT指令将CPU的实时时钟发送出去。
1.2、CPU1发送完成中断子程序INT_0编程
中断子程序INT_0用于恢复SMB87的设置(=1),并执行RCV指令开始接收CPU2的应答信息。程序如图4.所示:

CPU1中断子程序INT_0
2、CPU2编程
2.1、CPU2主程序编程如图所示:

CPU2主程序
1.设置SMB30=210010100,使用空闲线检测为信息接收的起始条件,使用字符间定时器为信息接收的结束条件。
3.设置空闲线定时器SMW90=5ms,字符间定时器SMW92=5ms,允许最大接收字符个数SMB94=10。
4.连接中断子程序INT_0到通信端口0接收完成事件,中断子程序INT_1到通信端口0发送完成事件,并启用中断。
5.使用调用RCV指令地执行。
2.2、CPU2接收完成中断子程序INT_0编程
中断子程序INT_0用于读取CPU实时时钟,并调用XMT指令将实时时钟信息发送出去。程序如图所示。

CPU2接收完成中断子程序INT_0
2.3、CPU2发送完成中断子程序INT_1编程
中断子程序INT_1用于执行RCV指令,并开始新的信息接收任务。程序如图7.所示。

CPU2发送完成中断子程序INT_0