• 沒有找到結果。

接收指令的启动和结束条件

在文檔中 1使用入门 (頁 103-106)

接收指令使用接收消息控制字节(SMB87或SMB187)中的位来定义消息起始和结束条件。

提示

当接收指令执行时,在接收口上有来自其他器件的信号,接收消息功能有可能从一个字符的中间开 始接收字符,从而导致校验错误和接收消息功能的中止。如果校验没有被使能,接收到的消息有可 能包含错误字符。当起始条件被指定为一个特定的起始字符或任意字符时,这种情况有可能发生,

正象下面第2.条和第6.条中所描述的那样。

接收指令支持几种消息起始条件。指定包含一个停顿或者一个空闲线检测的起始条件,通过在将字 符放到消息缓冲区之前,用一个字符的起始来强制接收消息功能和消息的起始相同步,来避免以上 问题。

接收指令支持几种起始条件:

1. 空闲线检测:空闲线条件定义为传输线路上的安静或空闲时间。在SMW90或者SMW190中指 定其毫秒数。当接收指令在程序中执行时,接收消息功能对空闲线条件进行检测。如果在空闲 线时间到之前接收到任何字符,接收消息功能会忽略那些字符并且按照SMW90或者SMW190 中给定的时间值重新启动空闲线定时器。参见图6--11。在空闲线时间到之后,接收消息功能将 所有接收到的字符存入消息缓冲区。

空闲线时间应该总是大于在指定波特率下传输一个字符(包括起始位、数据位、校验位和停止 位)的时间。空闲线时间的典型值为在指定波特率下传输三个字符的时间。

对于二进制协议、没有特定起始字符的协议或者指定了消息之间最小时间间隔的协议,您可以 使用空闲线检测作为起始条件。

设置:il = 1,sc = 0,bk = 0,SMW90/SMW190 = 空闲线超时(毫秒)

字符

重新启动空闲时间

执行了接收指令:启动空闲时间 检测到空闲时间:

启动接收消息功能

进入消息缓冲区的第一个字符 字符

图6--11 用空闲时间检测来启动接收指令

2. 启动字符检测:启动字符是用作消息第一个字符的任意字符。当接收到SMB88或者SMB188中 指定的起始字符后,一条消息开始。接收消息功能将起始字符作为消息的第一个字符存入接收 缓冲区。接收消息功能忽略所有在起始字符之前接收到的字符。起始字符和起始字符之后接收 到的所有字符一起存入消息缓冲区。

通常,对于所有消息都使用同一字符作为起始的ASCII码协议,您可以使用起使字符检测。

设置: il = 0,sc = 1,bk = 0,SMW90/SMW190 = 无关,SMB88/SMB188 = 起 始字符

3. 空闲线和起始字符:接收功能可启动一个组合了空闲线和起始字符的消息。当接收指令执行 时,接收消息功能检测空闲线条件。在空闲线条件满足后,接收消息功能搜寻指定的起始字 符。如果接收到的字符不是起始字符,接收消息功能重新检测空闲线条件。所有在空闲线条件 满足和接收到起始字符之前接收到的字符被忽略掉。起始字符与字符串一起存入消息缓冲区。

空闲线时间应该总是大于在指定波特率下传输一个字符(包括起始位、数据位、校验位和停止 位)的时间。空闲线时间的典型值为在指定波特率下传输三个字符的时间。

通常,对于指定消息之间最小时间间隔并且消息的首字符是特定设备的站号或其他消息的协 议,您可以使用这种类型的起始条件。这种方式尤其适用于在通讯连接上有多个设备的情况。

在这种情况下,只有当接收到的消息的起始字符为特定的站号或者设备时,接收指令才会触发 一个中断。

设置: il = 1,sc = 1,bk = 0,SMW90/SMW190 > 0,

SMB88/SMB188 =起始字符

4. 断开检测:当接收到的数据保持为零值的时间大于完整的字符传输时间时,指示断开。一个完 整字符传输时间定义为传输起始位、数据位、校验位和停止位的时间总和。如果接收指令被配 置为用接收一个断点作为消息的起始,则任何在断点之后接收到的字符都会存入消息缓冲区。

任何在断点之前接收到的字符都被忽略。

通常,只有当通讯协议需要时,才使用断点检测作为起始条件。

设置: il = 0,sc = 0,bk = 1,SMW90/SMW190 = 无关,

SMB88/SMB188 =无关

5. 断开和起始字符:接收指令可配置为在接收一个断开条件后开始接收字符,然后按顺序接收特 定的起始字符。在断点条件满足之后,接收消息功能寻找特定的起始字符。如果收到了除起始 字符以外的任意字符,接收消息功能重新启动寻找新的断点。所有在断点条件满足和接收到起 始字符之前接收到的字符都会被忽略。起始字符与字符串一起存入消息缓冲区。

设置: il = 0,sc = 1,bk = 1,SMW90/SMW190 = 无关,

SMB88/SMB188 =起始字符

6. 任意字符:接收指令可配置为立即启动接收任意和所有字符,并将它们放入消息缓冲区。这是 空闲线检测的一种特殊情况。在这种情况下,空闲线时间(SMW90或者SMW190)被设置为0。

这使得接收指令一经执行,就立即开始接收字符。

设置: il = 1,sc = 0,bk = 0,SMW90/SMW190 = 0,SMB88/SMB188 = 无关 用任意字符开始一条消息允许使用消息定时器,来监控消息接收是否超时。这对于自由端口协 议的主站是非常有用的,并且当在指定时间内,没有来自从站的任何响应的情况,也需要采取 超时处理。由于空闲线时间被设置为0,当接收指令执行时,消息定时器启动。如果没有其他 终止条件满足,消息定时器超时会结束接收消息功能。

设置: il = 1,sc = 0,bk = 0,SMW90/SMW190 = 0,SMB88/SMB188 = 无关 c/m = 1,tmr = 1,SMW92 = 消息超时(毫秒)

接收指令支持几种结束消息的方式。结束消息的方式可以是以下一种或者几种的组合:

1. 结束字符检测:结束字符是用于指定消息结束的任意字符。在找到起始条件之后,接收指令检 查每一个接收到的字符,并且判断它是否与结束字符匹配。如果接收到了结束字符,将其存入 消息缓冲区,接收结束。

通常,对于所有消息都使用同一字符作为结束的ASCII码协议,您可以使用结束字符检测。您 可以使用结束字符检测与字符间定时器、消息定时器或者最大字符计数相结合来结束一条 消息。

设置: ec = 1,SMB89/SMB189 = 结束字符

2. 字符间定时器:字符间时间是从一个字符的结束(停止位)到下一个字符的结束(停止位)的时间。

如果两个字符之间的时间间隔(包括第二个字符)超过了SMW92或者SMW192中指定的毫秒数,

接收消息功能结束。接收到每个字符后,字符间定时器重新启动。见图6--12。

当协议没有特定的消息结束字符时,您可以用字符间定时器来结束一条消息。由于定时器总是 包含接收一个完整字符(包括起始位、数据位、校验位和停止位)的时间,因而该时间值应设置 为大于在指定波特率下传输一个字符的时间。

您可以使用字符间定时器与结束字符检测或者最大字符计数相结合,来结束一条消息。

设置: c/m = 0,tmr = 1,SMW92/SMW192 = 超时(毫秒)

字符

重新启动字符间定时器 字符间定时器时间用完:

终止消息,并生成接收消息中断 字符

图6--12 使用字符间定时器来结束接收指令

3. 消息定时器:消息定时器在启动消息后指定的时间终止消息。接收消息功能的启动条件一满 足,消息定时器就启动。当经过的时间超出SMW92或者SMW192中指定的毫秒数时,消息定 时器时间到。见图6--13。

通常,当通讯设备不能保障字符中间没有时间间隔或者使用调制解调器通讯时,您可以使用消 息定时器。对于调制解调器方式,您可以用消息定时器指定一个从消息开始算起,接收消息允 许的最大时间。消息定时器的典型值是在当前波特率下,接收到最长消息所需时间值的大约 1.5倍。

可以使用消息定时器与结束字符检测或者最大字符计数相结合,来结束一条消息。

设置: c/m = 1,tmr = 1,SMW92/SMW192 = 超时(毫秒)

字符

消息开始:

启动消息定时器 消息定时器时间用完:

终止消息,并生成接收消息中断 字符

图6--13 使用消息定时器来结束接收指令

4. 最大字符计数:接收指令必须已知要接收的最大字符数(SMB94或SMB194)。当达到或者超出 这个值,接收消息功能结束。即使不会被用作结束条件,接收指令要求用户指定一个最大字符 个数。这是因为接收指令需要知道接收消息的最大长度,这样才能保证消息缓冲区之后的用户 数据不会被覆盖。

对于消息的长度已知并且恒定的协议,可以使用最大字符计数来结束消息。最大字符计数总是 与结束字符检测、字符间定时器或者消息定时器结合在一起使用。

5. 奇偶校验错误:当硬件发出信号指示在接收的字符上有奇偶校验错误时,接收指令自动终止。

只有在SMB30或者SMB130中使能了校验位,才有可能出现校验错误。没有办法禁止此功能。

6. 用户终止:用户程序可以通过执行另一个在SMB87或SMB187中的启用位(EN)设置为零的接收 指令来终止接收消息功能。这样可以立即终止接收消息功能。

在文檔中 1使用入门 (頁 103-106)

相關文件