在一些特定场合,比如说与松下系列伺服驱动器的控制时,为了保证数据的安全,我们需要进行多次往返的数据交换,这就需要严格控制通讯的时间。那么这个时候对于PLC来说通讯就是***重要的,我们需要打断PLC的正常功能,优先处理通讯,这就需要通讯中断。
实例:2台S7-200SMART CPU(端口0)采用自由口通信方式实现相互通信
(本文仅为展示自由口通讯和中断,如果想要实现这两个PLC的通讯其实***好是使用向导进行以太网通讯,有机会我们也会进行讲解!)
通信任务:CPU1 每秒触发一次 XMT 指令将 CPU 的实时时钟发送到CPU2;CPU2 接收到 CPU1 发送的信息后立即将 CPU2 的实时时钟回复到 CPU1。
接线:每个 S7-200 SMART CPU 都提供一个以太网端口和一个RS485 端口(端口0),标准型 CPU 额外支持 SB CM01 信号板(端口1),信号板可通过 STEP 7-Micro/WINSMART 软件组态为 RS232 通信端口或 RS485 通信端口。
CPU 通信端口引脚分配
1、CPU1 编程
1.1、CPU1 主程序编程如图 所示:
CPU1主程序
程序讲解:
1.设置 SMB30 = 2#00001001 (自由口通信,波特率 9600 bps,8 位数据位,无校验)。
2.设置 SMB87 = 2#10010100,使用空闲线检测为信息接收的起始条件,使用字符间定时器为信息接收的结束条件。
3.设置空闲线定时器 SMW90 = 5 ms,字符间定时器 SMW92 = 5 ms,允许***大接收字符个数 SMB94 =10。
4.连接中断子程序 INT_0 到通信端口 0 发送完成事件,并启用中断。
5.每秒钟读取一次 CPU 的实时时钟,并将发送缓冲区长度设置为 8 个字符。
6.执行 XMT 指令之前设置 SM87.7 = 0,执行 RCV 指令,终止消息接收。
7.每秒钟执行一次 XMT 指令将 CPU 的实时时钟发送出去。
1.2、CPU1 发送完成中断子程序 INT_0 编程
中断子程序INT_0用于恢复SMB87 的设置(SM87.7 = 1),并执行 RCV 指令开始接收 CPU2的应答信息。程序如图4. 所示:
CPU1中断子程序 INT_0
2、CPU2 编程
2.1、CPU2主程序编程如图所示:
CPU2主程序
4.连接中断子程序 INT_0 到通信端口 0 接收完成事件,中断子程序 INT_1 到通信端口 0 发送完成事件,并启用中断。
5.使用 SM0.1 调用 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