以前我们讲过关于自由口通讯的实例,今天我们讲一下自由口通讯配合中断的实例。 在一些特定场合,比如说与松下系列伺服驱动器的控制时,为了保证数据的安全,我们需要进行多次往返的数据交换,这就需要严格控制通讯的时间。那么这个时候对于PLC来说通讯就是最重要的,所以我们需要打断PLC的正常功能,优先处理通讯,这就需要通讯中断。 实例:2台S7-200 SMART CPU(端口0)采用自由口通信方式实现相互通信 (本文仅为展示自由口通讯和中断,如果想要实现这两个PLC的通讯其实最好是使用向导进行以太网通讯,有机会我们也会进行讲解!) 通信任务:CPU1 每秒触发一次 XMT 指令将 CPU 的实时时钟发送到 CPU2;CPU2 接收到 CPU1 发送的信息后立即将 CPU2 的实时时钟回复到 CPU1。 接线:每个 S7-200 SMART 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 |
|
来自: 金玉满堂jjnla8 > 《smart》