RCV 接收指令例程

例程 1 :S7-200 SMART CPU集成的RS485 端口(端口0)实现与条码扫描枪通信

例程 2 :2台S7-200 SMART CPU(端口0)采用自由口通信方式实现相互通信

例程 3:使用任意字符检测为接收消息的起始条件时,选择消息定时器和其它结束条件组合为接收消息的结束条件

例程 4:信息接收超时,需要人为终止信息的接收

例程 1 :S7-200 SMART CPU集成的RS485 端口(端口0)实现与条码扫描枪通信

条码扫描枪通常为 RS232 端口,其与 S7-200 SMART CPU 集成的 RS485 端口连接时需要使用 RS232/485 转换设备或 RS-232/PPI 多主站电缆。
条码扫描枪接收到条码后会自动通过 RS232 端口发送报文,S7-200 SMART CPU 需要调用 RCV 指令接收报文,并在接收完成中断中再次使能 RCV 指令循环接收报文。

CPU 主程序见图1.所示:

图1.CPU 主程序
1.设置 SMB30 = 2#00001001 (自由口通信,波特率 9600,8 位数据位,无校验);
2.设置 SMB87 = 2#10010100,使用空闲线检测为信息接收的起始条件,使用字符间定时器为信息接收的结束条件 ;
3.设置空闲线定时器 SMW90 = 5 ms,字符间定时器 SMW92 = 5 ms,允许最大接收字符个数 SMB94 = 50;
4.连接中断子程序 INT_0 到通信端口 0 接收完成事件,并使能中断;
5. 使用 SM0.1 触发 RCV 指令地执行。

CPU 中断程序见图2.所示:

图2.CPU 中断程序
1.判断信息接收结束是否为字符间超时结束(SM86.2 = 1),若是,则认为接收成功,接收成功计算器 VB200 自加一;
2.消息接收成功时接收的信息拷贝到 VB300 为起始地址的存储区;
3.开始下一次 RCV 指令地执行。

以上描述步骤参考下面的通信例程,例程中的 CPU 类型可能与用户实际使用的类型不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。

S7-200 SMART与条码扫描枪通信例程

注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。

例程 2 :2台S7-200 SMART CPU(端口0)采用自由口通信方式实现相互通信

通信任务:CPU1 每秒触发一次 XMT 指令将 CPU 的实时时钟发送到 CPU2;CPU2 接收到 CPU1 发送的信息后立即将 CPU2 的实时时钟回复到 CPU1。

1、CPU1 编程

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

图3. 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. 所示:

图4. CPU1 中断子程序 INT_0

2、CPU2 编程

2.1、CPU2 主程序编程如图5. 所示:

图5. 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 指令将实时时钟信息发送出去。程序如图如图 6.所示。

6. CPU2 接收完成中断子程序 INT_0

2.3、 CPU2 发送完成中断子程序 INT_1 编程

中断子程序 INT_1 用于执行 RCV 指令,并开始新的信息接收任务。程序如图 7.所示。

图7. CPU2 发送完成中断子程序 INT_0

以上描述步骤参考下面的通信例程,例程中的 CPU 类型可能与用户实际使用的类型不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。

CPU1通信例程

CPU2通信例程

注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。

例程 3:使用任意字符检测为接收消息的起始条件时,选择消息定时器和其它结束条件组合为接收消息的结束条件

示例说明如下:
步骤一、使用任意字符检测和消息定时器处理信息接收超时主程序编程,程序如图1. 所示:

图 1. 使用任意字符检测和消息定时器处理信息接收超时主程序
1. 设置 SMB30 = 2#00001001 (自由口通信,波特率 9600 bps,8 位数据位,无校验)。
2. 设置 SMB87 = 2#10111100,使用任意字符检测为信息接收的起始条件,使用消息定时器和结束字符为信息接收的结束条件。
3. 设置结束字符 SMB89 = 16#0A。
4. 设置空闲线定时器 SMW90 = 0 ms,消息定时器 SMW92 = 100 ms,允许最大接收字符个数 SMB94 = 10。
5. 连接中断子程序 INT_0 到通信端口 0 发送完成事件9,并启用中断。
6. 每秒钟调用一次 XMT 指令,将字符串"TEST"发送出去。

步骤二、使用任意字符检测和消息定时器处理信息接收中断子程序编程:

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


图2. 使用任意字符检测和消息定时器处理信息接收超时中断子程序

以上描述步骤参考下面的通信例程,例程中的 CPU 类型可能与用户实际使用的类型不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。

超时处理1 通信例程

注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。

例程 4:信息接收超时,需要人为终止信息的接收

S7-200 SMART CPU 在发送完成中断中执行 RCV 指令并捕捉信息接收开始时间,如果捕捉间隔时间超出一定时间依然未接收到信息,则认为信息接收超时,需要人为终止信息的接收。

示例说明如下:
步骤一:CPU 主程序编程
CPU 主程序实现功能如下(程序见如图3. 所示):
a)设置 SMB30 = 2#00001001 (自由口通信,波特率 9600 bps,8 位数据位,无校验)。
b)设置 SMB87 = 2#10010100,使用空闲线检测为信息接收的起始条件,使用字符间定时器为信息接收的结束条件。
c)设置空闲线定时器 SMW90 = 5 ms,消息定时器 SMW92 = 5 ms,允许最大接收字符个数 SMB94 = 10。
d)连接中断子程序 INT_0 到通信端口 0 发送完成事件 9,并启用中断。
e)使用M0.0 上升沿调用 XMT 指令,并设置通信状态字节 VB300 =1。
f)当通信状态字节 VB300 = 2 时,信息接收完成或者信息接收的捕捉间隔时间 VD306 大于 100 ms,则设置通信状态字节 VB300 = 3并人为终止 RCV 指令的执行。
g)通信状态字节VB300 = 3时,复位RCV指令的执行,并复位VB300。


图3. 使用捕捉时间间隔处理信息接收超时主程序

步骤二:CPU 中断子程序编程

在发送完成中断子程序中设置通信状态字节 VB300 = 2,执行 RCV 指令开始新的信息接收任务,并捕捉信息接收开始时间 VD302。程序图如图4. 所示。


图4. 使用捕捉时间间隔处理信息接收超时中断子程序

以上描述步骤参考下面的通信例程,例程中的 CPU 类型可能与用户实际使用的类型不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。

超时处理2 通信例程

注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。