1、如何实现 S7-200SMART 自由口通讯自由口通讯协议的关键条件 定义开始接收消息和停止接收消息的条件。 1、空闲线检测:设置 il=1,sc=0,bk=0,smw90/smw1900 空闲线条件定义为传输线路上的安静或者空闲的时间。SMW90/SMW190 中是以 ms 为单位的空闲时间。在该方式下,从执行接收指令开始起动空闲时间检测。在传输线空闲的时间大于等于 SMW90/SMW190 中设定的时间之后接收的第一个字符作为新信息的起始字符。接收消息功能将会忽略在空闲时间到达之前接收到的任何字符,并会在每个字符后面重新启动空闲线定时器。 空闲线时间应大于以指定波特率传送一个字符所需要的时
2、间。空闲线时间的典型为以指定的波特率传送 3 个字符所需要的时间。传输速率为 19200bit/s 时候,可设置空闲时间为2ms。 对于二进制协议,没有特定起始字符的协议或指定了消息之间最小时间间隔的协议,可以将空闲线检测用作开始条件。 2、起始字符检测:设置 il=0,sc=1,bk=0,忽略 smw90/smw190 起始字符是消息的第一个字符,以 SMB88/SMB188 中的起始字符作为接收到的消息开始的标志。接收消息功能忽略起始字符之前收到的字符,起始字符和起始字符之后收到的所有字符都存储在消息缓冲区中。起始字符检测一般用于 ASCII 协议。 3、空闲线和起始字符:设置 il=1,
3、sc=1,bk=0,SMW90/SMW190 大于 0 满足空闲线条件之后,接收消息功能查找指定的起始字符。如果接收到的字符不是smB88/smb188 指定的起始字符,将开始重新检测空闲线条件。在满足空闲线条件之前接收到的以及起始字符之前接收到的字符都将会被忽略。这种方式尤其适合用于通讯链路上有多台设备的情况。 4 、break 检测:设置 il=0,sc=0,bk=1,检测 smw90/smw190 和smb88/smb188 以接收到的 break(断开)作为接收消息的开始。当接收到的数据保持为 0 的时间大于完整字符(包含起始位,数据位,奇偶校验位和停止位)传输的时间,表示检测到 br
4、eak。断开条件之前接收到的字符将忽略,断开条件之后接收到的任意字符都会存储在消息缓冲区中。 5、break 和起始字符:il=0,sc=1,bk=1,忽略 smw90/smw190 断开条件满足后,接收消息功能将查找指定的起始字符。如果接收到的字符不是起始字符,将重新搜索断开条件。所有在断开条件满足之前在接收到起始字符之前接收的字符都会忽略。起始字符和所有后续字符一起存入消息缓冲区 6、任何字符开始接受:设置 il=1,sc=0,bk=0,smw90/smw190=0 忽略 smb88/smb188 中的起始字符。应为 smw90/smw190 中的空闲线时间为 0,接收指令已经执行,便将立
5、即开始强制接收所有的任意字符,并将存入消息缓冲区。 7、任意字符开始,消息定时器超过则结束接收消息:令 il = 1,sc = 0,bk = 0,smw90/smw190 = 0,忽略 smb88/smb188 中的起始字符。以上设置用于实现从任意字符开始接收消息。 此外设置 c/m = 1,tmr =1,用 smw92/smw192 设置以 ms 为单位的消息超时时间,用消息定时器监视接收是否超时。如果未满足其他结束条件,在消息定时器超时的时候,将会终止接收消息功能。这对自由口协议的主站是非常有用的。 1.SMB30 定义 定义通讯的传输速度和模式 SMB30=16#05=2# 00 0 0
6、01 01 其中从高位到低位依次: 00:表示无校验 0:表示 8 个数据位 001:表示波特率 19200 01:表示自由口通讯 2.SMB87 定义 定义接收消息控制字节 SMB87=16#FC = 2#1111 1100 其中从高位到低位依次: en=1:启用接受消息功能 sc=1:使用 SMB88 的值监测数据的起始 ec=1:使用 SMB89 的值监测数据的终止 il=1:使用 SMW90 的值监测空闲条件 c/m=1:定时器为消息定时器 tmr=1:超过 SMW92 中的时间段,则终止接收 bk=0:忽略中断条件 SM87.0=0 (无效) 3.定义 SMB88、SMB89、SMW
7、90、SMW92、SMB94 SMB88:定义开始字符为 2A SMB89:定义结束字符为 0A SMW90:空闲线时间段,单位:MS SMW92:消息定时器的超时值(单位:MS),若超过该时间段,则停止接受消息 SMB94:要接受的最大字符数(1-255 个字节);即使未使用字符计数消息终止,此范围也必须设置为所需的最大数据交换区 l SMW90=1000000us/19200 *11*3 其中:1000000/19200 得到传输 1 个位需要多长时间,一个字符 11 个位,检测空闲 3.5 个字符,约等于 3 个字符 l SMW92=1000000us/19200 *11*20*1.5 其中:20 表示字节接收最大的字节数,与 SMB94 有关,1.5 倍表示整个消息长度的倍数 4.执行接受指令 TBL: 5.连接接受完成中断和发送完成中断,并且开放中断 6.接收完成中断: 由于我们使用的 RS485 转 USB 的线缆是半双工,发送和接收需要间隔至少 5ms 的时间。所以接 收完成后先延时 5ms 在发送。 7.SMB34 定时中断: 延时时间到,执行发送指令,把先期接收到的数据再发送给 PC。 8.发送完成中断: