在一些特定的场合,比如用松下系列伺服驱动器进行控制,为了保证数据的安全,我们需要多次交换数据,这就要求严格控制通信时间。那么这个时候通讯对于PLC来说是最重要的,所以我们需要中断PLC的正常功能,优先考虑通讯,这就需要通讯中断。
示例:两个S7-200智能CPU(端口0)通过自由端口通信相互通信。
(本文仅展示自由口通信和中断。如果要实现这两个PLC之间的通信,其实最好使用向导进行以太网通信。有机会我们也会解释的!)
通信任务:CPU1每秒触发一次XMT指令,将CPU的实时时钟发送给CPU 2;CPU2收到CPU1发送的信息后,立即将CPU2的实时时钟返回给CPU1。
接线:每个S7-200智能CPU配有一个以太网端口和一个RS485端口(端口0)。标准CPU额外支持SB CM01信号板(端口1),信号板可通过STEP 7-Micro/WIN SMART软件配置为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主程序
1.设置SMB30=2#00001001(自由端口通信,波特率9600 bps,8个数据位,无校验)。
2.设置SMB87=2#10010100,使用空闲线路检测作为信息接收的初始条件,使用字符间定时器作为信息接收的结束条件。
3.设置空闲线路定时器SMW90=5 ms,字符间定时器SMW92=5 ms,以及允许接收的最大字符数SMB94=10。
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。
审核编辑:李倩
标签:通信指令CPU