您好,欢迎访问一九零五行业门户网

S7-200指令集 西门子s7200指令说明

本章描述用于对s7- 200微型plc编程的simatic和iec1131指令集。
用于描述指令的习惯用语
图6--1给出了对一条指令的典型描述,并指出了用于描述指令及其操作的不同区域。指令说明包括
lad、fbd和stl三种格式。操作数表列出了指令的操作数,并给出每个操作数的有效数据类型,存   储区的区域及长度。
en/eno操作数和数据类型没有在指令操作数表中列出,因为这些操作数对于所有的lad和fbd指令
来说都是一样的。
对于lad:en和eno是功率流,同时是布尔数据类型。
对于fbd:en和eno是i、q、v、m、sm、s、t、c、l或功率流,同时是布尔数据类型。
图6--1 指令描述
s7- 200存储器范围及特性
s7- 200cpu存储器范围及特性
表6- 2 s7-200 cpu的操作数范围
表6- 2 s7-200 cpu的操作数范围
位逻辑指令
触点
标准触点
常开触点指令(ld、a和o)与常闭触点指令(ldn、an和on)从  存储器或者过程映像寄存器中得到参考值。标准触点指令从存 储器中得到参考值。(如果数据类型是i或q,则也可从过程映像寄存器中得到参考值。)
当位等于1时,常开触点闭合(接通),当位等于0时,常闭触点
闭合(断开)。在fbd中,and和or框中的输入多可扩展为
32个输入。在stl中,常开指令ld、and或or将相应地址位 的位值存入栈顶;而常闭指令 ld、and或or则将相应地址位的位值取反,再存入栈顶。
立即触点
立即触点不依靠s7- 200扫描周期进行更新;它会立即更新。常开立即触点指令(ldi、ai和oi)和常闭立即触点指令(ldni、
ani和oni)在指令执行时得到物理输入值,但过程映像寄存器
并不刷新。
当物理输入点(位)为1时,常开立即触点闭合(接通),当物理输 入点(位)为0时,常闭立即 触点闭合(接通)。常开指令立即将物理输入值load (加载)、and (与)或or (或)到栈顶,而常闭指令立即将物理输入点值的取反值load (加载)、and (与) 或or (或)到栈顶。
取反指令
取反指令(not)改变功率流输入的状态(也就是说,它将栈顶值 由0变为1,由1变为0)。
位逻辑指令
正、负转换指令
正转换触点指令(eu)检测到每一次正转换(由0到1),让功率流接通一个扫描周期。负转换触点指令
(ed)检测到每一次负转换(由1到0),让功率流接通一个扫描周期。对于正转换指令,检测到栈顶值的
0到1转换将栈顶值设为1;否则,将设为0。对于负转换指令,检测到栈顶值的1到0转换将栈顶值设  为1;否则设为0。
对于运行模式下编辑(在run模式下编辑应用程序),您必须为正转换指令和负转换指令输入参数。关  于在run模式下编辑程序的更多信息参见第5章。
表6--3 位逻辑输入指令的有效操作数
输入/输出
数据类型
操作数

bool
i、q、v、m、sm、s、t、c、l、功率流
位(立即)
bool
i
如图6--2中所示,s7- 200用逻辑堆栈来决定控制逻辑。在本例中,“iv0”到“iv7”表示逻辑堆栈的
初始值,“nv”表示指令提供的一个新值,s0表示逻辑堆栈中存储的计算值。
图6--2 触点指令的操作。
s0表示存储在逻辑栈中的计算值。
在装载指令执行之后,值iv8丢失。
提示由于正转换指令和负转换指令要求由1到0或者由0到1的变化,您不能在个扫描周期中检测到上
升沿或者下降沿的变化。在个扫描周期,s7- 200利用这些指令储存指定位的状态。在接下来
的扫描周期中,这些指令能够检测到指定位的变化。
实例:触点指令
线圈
线圈
输出
输出指令(=)将新值写入输出点的过程映像寄存器。当输出指令执行时,s7- 200将输出过程映像寄存器中的位接通或者断开。在lad和fbd中,指定点的值等于功率流。在stl中,栈 顶的值复制到指定位。
立即输出
当指令执行时,立即输出指令(=i)将新值同时写到物理输出点 和相应的过程映像寄存器中。
当立即输出指令执行时,物理输出点立即被置为功率流值。在
stl中,立即指令将栈顶的值立即复制到物理输出点的指定位 上。“i”表示立即引用;当执行指令时,将新数值写入物理输出和相应的过程映像寄存器位置。这一点不同于非立即指令,只把新值写入过程映像寄存器。
置位和复位
置位(s)和复位(r)指令将从指定地址开始的n个点置位或者复 位。您可以一次置位或者复位1- 255个点。
如果复位指令指定的是一个定时器位(t)或计数器位(c),指令不但复位定时器或计数器位,而且清除  定时器或计数器的当前值。
使eno = 0的错误条件:
0006(间接寻址)
0091(操作数超出范围)
立即置位和立即复位
立即置位和立即复位指令将从指定地址开始的n个点立即置位或者立即复位。您可以一次置位或复  位1到128个点。
“i”表示立即引用;当执行指令时,将新数值写入物理输出点和相应的过程映像寄存器位置。这一  点不同于非立即指令,只把新值写入过程映像寄存器。
使eno=0的错误条件:
0006(间接寻址)
0091(操作数超出范围)
表6--4 位逻辑输出指令的有效操作数
输入/输出
数据类型
操作数

bool
i、q、v、m、sm、s、t、c、l
位(立即)
bool
q
n
byte
ib、qb、vb、mb、smb、sb、lb、ac、*vd、*ld、*ac、常数
实例:线圈指令
逻辑堆栈指令
栈装载与
栈装载与指令(ald)对堆栈中层和第二层的值进行逻辑与 操作。结果放入栈顶。执行完栈装载与指令之后,栈深度减1。
栈装载或
栈装载或指令(old)对堆栈中层和第二层的值进行逻辑或 操作。结果放入栈顶。执行完栈装载或指令之后,栈深度减1。
逻辑推入栈
逻辑推入栈指令(lps)复制栈顶的值,并将这个值推入栈。栈底的值被推出并消失。
逻辑读栈
逻辑读栈指令(lrd)复制堆栈中的第二个值到栈顶。堆栈没有推入栈或者弹出栈操作,但旧的栈顶值
被新的复制值取代。
逻辑弹出栈
逻辑弹出栈指令(lpp)弹出栈顶的值。堆栈的第二个栈值成为新的栈顶值。
eno与
eno与指令(aeno) 对eno位和栈顶的值进行逻辑与操作,其产生的效果与lad或者fbd中盒指令的eno位相同。与操作结果成为新的栈顶。
eno是lad和fbd中盒指令的布尔输出。如果盒指令的en输入有功率流并且执行没有错误,则eno     将功率流传递给下一元素。您可以把eno作为指令成功完成的使能标志位。eno位被用作栈顶,影响功率流和后续指令的执行。stl中没有en输入。条件指令要想执行,栈顶值必须为逻辑1。在stl     中也没有eno输出。但是在stl中,那些与lad和fbd中具有eno输出的指令相应的指令,存在一个  特殊的eno位。它可以被aeno指令访问。
装入堆栈
装入堆栈指令(lds)复制堆栈中的第n个值到栈顶。栈底的值被推出并消失。
表6--5 装入堆栈指令的有效操作数
输入/输出
数据类型
操作数
n
byte
常数(0到8)
如图6--3中所示,s7- 200用逻辑堆栈来决定控制逻辑。在本例中,“iv0”到“iv7”表示逻辑堆栈的
初始值,“nv”表示指令提供的一个新值,而“s0”表示逻辑堆栈中存储的计算值。
图6--3 逻辑堆栈指令的操作
实例:逻辑栈指令
rs触发器指令
置位优先触发器是一个置位优先的锁存器。当置位信号(s1)和复位信号(r)都为真时,输出为真。
复位优先触发器是一个复位优先的锁存器。当置位信号(s)和 复位信号(r1)都为真时,输出为假。
bit参数用于指定被置位或者复位的布尔参数。可选的输出反映 bit参数的信号状态。
表6--7中给出了范例程序的真值表。
表6--6 rs触发器指令的有效操作数
时钟指令
读实时时钟和写实时时钟
读实时时钟(todr)指令从硬件时钟中读当前时间和日期,并把它装载到一个8字节,起始地址为t的时间缓冲区中。写实时 时钟(todw)指令将当前时间和日期写入硬件时钟,当前时钟 存储在以地址t开始的8字节时间缓冲区中。
时钟指令
您必须按照bcd码的格式编码所有的日期和时间值(例如:用
16#97表示1997年)。图6--4给出了时间缓冲区(t)的格式。
时间日期(tod)时钟在电源掉电或内存丢失后,初始化为下列
日期和时间:
日期: 90年1月1号
时间: 00:00:00
星 期 几 : 星 期 日
使eno=0的错误条件:
0006(间接寻址)
0007(tod数据错误),只对写实时时钟指令有效。
000c(时钟模块不存在)
提示
s7- 200 cpu不会检查和核实日期与星期是否合理。无效日期february 30 (2月30日)可能被接受。故必须确保输入的数据是正确的。
不要同时在主程序和中断程序中使用todr/todw指令。如果这样做,而在执行tod指令时出现了 执行tod指令的中断,则中断程序中的tod指令不会被执行。sm4.3指示了试图对时钟进行两个同 时的访问(非致命错误0007)。
在s7-200中日时时钟只使用低有效的两个数字表示年,所以对于2000年,表达为00。s7-200plc不以任何方式使用年信息。但是,用到年份进行计算或比较的用户程序必须考虑两位的表示方
法和世纪的变化。在2096年之前可以进行闰年的正确处理。
扩展读实时时钟
扩展读实时时钟(todrx)指令从plc中读取当前时间、日期和 夏令时组态 ,并装载到从由t指定的地址开始的19字节缓冲区内。
扩展写实时时钟
扩展写实时时钟(todwx)指令写当前时间、日期和夏令时组态到plc中由t指定的地址开始的19字节缓冲区内。
您必须按照bcd码的格式编码所有的日期和时间值(例如:用16#02表示2002年)。表6--9给出了19字节时间缓冲区(t)的格式
时间日期时钟在电源掉电或内存丢失后,初始化下列日期和 时间:
使eno=0的错误条件:
0006(间接寻址)
000c(时钟卡不存在)
0091(操作数超出范围)
使eno=0的错误条件:
0006(间接寻址)
0007(tod数据错误)
000c(时钟卡不存在)
0091(操作数超出范围)
日期: 90年1月1号
时间 00:00:00
星期几: 星期日
提示s7- 200 cpu仅在字节8中选择了“用户指定”模式时才使用字节9--18。否则,返回由step 7- micro/win或set_rtcx指令写入这些字节的后一个数值。
1 eu约定:在utc三月份的后一个星期日的上午1:00向前调整时间一个小时。在utc时间十月份的后一个星期日的上午2:00向后调整时间一个小时。(当进行修正时,当地时间依据于与utc的时差。)。
2 us约定:在当地时间四月份的个星期日的上午2:00向前调整时间一个小时。在当地时间十月份的后一个星期日的上午
2:00向后调整时间一个小时。
3 澳大利亚约定:在当地时间十月份的后一个星期日上午2:00向前调整时间一个小时。在当地时间三月份的后一个星期日的上午3:00向后调整时间一个小时。
4 澳大利亚(塔斯马尼亚岛)约定:在当地时间十月份的个星期日的上午2:00向前调整时间一个小时。在当地时间三月份的后一个星期日的上午3:00向后调整时间一个小时。
5 新西兰约定:在当地时间十月份的个星期日的上午2:00向前调整时间一个小时。在当地时间三月份的个星期日或三月
15号以后的上午3:00向后调整时间一个小时。
通讯指令
网络读写指令
网络读指令(netr)初始化一个通讯操作,根据表(tbl)的定 义,通过指定端口从远程设备上采集数据。网络写指令
(netw)初始化一个通讯操作,根据表(tbl)的定义,通过指定
端口向远程设备写数据。
使eno=0的错误条件:
0006(间接寻址)
如果功能返回出错信息,会置位表状态字节中的e。(见图6--5)
网络读指令可以从远程站点读取多16个字节的信息,网络写 指令可以向远程站点写多16个字节的信息。
在程序中,您可以使用任意条网络读写指令,但是在同一时 间,多只能有8条网络读写指令被激活。例如,在所给的s7- 200 cpu中,可以有4条网络读指令和4条网络写指令, 或者2条网络读指令和6条网络写指令在同一时间被激活。
您可以使用网络读写向导程序。要启动网络读写向导程序,在命令菜单中选择工具 > 指令向导,并且在指令向导窗口中选择网络读写。
表6--10 网络读写指令的有效操作数
输入/输出
数据类型
操作数
tbl
byte
vb、mb、*vd、*ld、*ac
port
byte
常数 对于cpu 221、cpu 222、cpu 224: 0对于cpu 224xp、cpu 226: 0或1
图6--5中给出了tbl参数参照表,表6--11列出了错误代码。
图6--6给出了一个实例来解释网络读写指令的使用。本例中,考虑一条生产线正在灌装黄油桶并将其   送到四台包装机(打包机)中的一台上。打包机把8个黄油桶包装到一个纸板箱中。一个分流机控制着黄  油桶流向各个打包机。4个cpu221模块用于控制打包机,一个cpu222模块安装了td200操作器接口,被用来控制分流机。
图6--6 网络读写指令举例
图6--7中给出了2号站中接收缓冲区(vb200)和发送缓冲区(vb300)中的数据。s7--200使用网络读指令   不断地读取每个打包机的控制和状态信息。每次某个打包机包装完100箱,分流机会注意到,并用网   络写指令发送一条消息清除状态字。
图6--7 网络读写指令中tbl数据举例
实例:程序段读和程序段写指令
实例:程序段读和程序段写指令
发送和接收指令
发送指令(xmt)用于在自由端口模式下依靠通讯口发送数据。
接收指令(rcv)启动或者终止接收消息功能。您必须为接收操 作指定开始和结束条件。从指定的通讯口接收到的消息被存储 在数据缓冲区(tbl)中。数据缓冲区的个数据指明了接收到的字节数。
使eno=0的错误条件:
0006(间接寻址)
0009(在port0同时发送和接收)
000b(在port1同时发送和接收)
rcv参数错误,置位6或者sm186.6
s7- 200cpu没有处于自由端口模式。
表6--12 发送和接收指令的有效操作数
输入/输出
数据类型
操作数
tbl
byte
ib、qb、vb、mb、smb、sb、*vd、*ld、*ac
port
byte
常数 对于cpu 221、cpu 222、cpu 224: 0对于cpu 224xp、cpu 226: 0或1
关于使用自由端口模式的更多信息,见226第7章中用自由端口模式创建用户自定义协议部分。
使用自由端口模式控制串行通讯口
通过编程,您可以选择自由端口模式来控制s7- 200的串行通讯口。当选择了自由端口模式,用户程序通过使用接收中断、发送中断、发送指令和接收指令来控制通讯口的操作。当处于自由端口模式时,通讯协议完全由梯形图程序控制。smb30 (对于端口0)和smb130(对于端口1,如果您的s7-200有两个端口的话)被用于选择波特率和校验类型。
当s7-    200处于stop模式时,自由端口模式被禁止,重新建立正常的通讯(例如:编程设备的访问)。在简单的情况下,可以只用发送指令(xmt)向打印机或者显示器发送消息。其他例子包括与条码阅
读器、称重计和焊机的连接。在每种情况下,您都必须编写程序,来支持在自由端口模式下与s7- 200通讯的设备所使用的协议。
只有当s7-  200处于run模式时,才能进行自由端口通讯。要使能自由端口模式,应该在smb30 (端口0)或者smb130 (端口1)的协议选择区中设置01。处于自由端口通讯模式时,不能与编程设备通讯。
提示
可以使用特殊寄存器位sm0.7来控制自由端口模式。sm0.7反映的是操作模式开关的当前位置。当sm0.7等于0时,开关处于term位置;当sm0.7=1时,操作模式开关位于run位置。如果只有模式开关处于run位置时,才允许自由端口模式,您可以将开关改变到其他位置上,使用编程设备监 控s7- 200的运行。
将ppi通讯转变为自由端口模式
smb30和smb130分别配置通讯口0和通讯口1,并且为自由端口操作提供波特率、校验和数据位数
的选择。自由端口的控制字节如图6--8所示。每一个配置都产生一个停止位。
图6--8 用于自由端口模式的sm控制字节(smb30或smb130)
发送数据
发送指令使您能够发送一个字节或多个字节的缓冲区,多为255个。 图6--9给出了发送缓冲区的格式。
如果有一个中断程序连接到发送结束事件上,在发送完缓冲区中的后一个字符时,则会产生一个中断(对端口0为中断事件9,对端口1为中断事件26)。
图6--10 接收缓冲区的格式
您可以不使用中断,通过监视smb86 (端口0)或者smb186 (端口1)来接收消息。当接收指令未被激
活或者已经被中止时,这一字节不为0; 当接收正在进行时,这一字节为0。
如表6--13中所示,接收指令允许您选择消息的启始和结束条件。使用smb86至smb94对端口0进行   设置,smb186至smb194对端口1进行设置。
提示
当超限或有校验错误时,接收消息功能会自动终止。必须为接收消息功能操作定义一个启始条件和
一个结束条件(大字符数)。
表6--13 接收缓冲区字节(smb86到smb94和smb186到smb194)
接收指令的启动和结束条件
接收指令使用接收消息控制字节(smb87或smb187)中的位来定义消息起始和结束条件。
提示
当接收指令执行时,在接收口上有来自其他器件的信号,接收消息功能有可能从一个字符的中间开  始接收字符,从而导致校验错误和接收消息功能的中止。如果校验没有被使能,接收到的消息有可  能包含错误字符。当起始条件被指定为一个特定的起始字符或任意字符时,这种情况有可能发生,  正象下面第2.条和第6.条中所描述的那样。
接收指令支持几种消息起始条件。指定包含一个停顿或者一个空闲线检测的起始条件,通过在将字  符放到消息缓冲区之前,用一个字符的起始来强制接收消息功能和消息的起始相同步,来避免以上  问题。
接收指令支持几种起始条件:
空闲线检测:空闲线条件定义为传输线路上的安静或空闲时间。在smw90或者smw190中指定其毫秒数。当接收指令在程序中执行时,接收消息功能对空闲线条件进行检测。如果在空闲    线时间到之前接收到任何字符,接收消息功能会忽略那些字符并且按照smw90或者smw190 中给定的时间值重新启动空闲线定时器。参见图6--11。在空闲线时间到之后,接收消息功能将  所有接收到的字符存入消息缓冲区。空闲线时间应该总是大于在指定波特率下传输一个字符(包括起始位、数据位、校验位和停止位)的时间。空闲线时间的典型值为在指定波特率下传输三个字符的时间。
对于二进制协议、没有特定起始字符的协议或者指定了消息之间小时间间隔的协议,您可以  使用空闲线检测作为起始条件。
图6--11 用空闲时间检测来启动接收指令
启动字符检测:启动字符是用作消息个字符的任意字符。当接收到smb88或者smb188中  指定的起始字符后,一条消息开始。接收消息功能将起始字符作为消息的个字符存入接收  缓冲区。接收消息功能忽略所有在起始字符之前接收到的字符。起始字符和起始字符之后接收  到的所有字符一起存入消息缓冲区。通常,对于所有消息都使用同一字符作为起始的ascii码协议,您可以使用起使字符检测。设置: il = 0,sc = 1,bk = 0,smw90/smw190 = 无关,smb88/smb188 = 起始字符
空闲线和起始字符:接收功能可启动一个组合了空闲线和起始字符的消息。当接收指令执行时,接收消息功能检测空闲线条件。在空闲线条件满足后,接收消息功能搜寻指定的起始字符。如果接收到的字符不是起始字符,接收消息功能重新检测空闲线条件。所有在空闲线条件  满足和接收到起始字符之前接收到的字符被忽略掉。起始字符与字符串一起存入消息缓冲区。
空闲线时间应该总是大于在指定波特率下传输一个字符(包括起始位、数据位、校验位和停止
位)的时间。空闲线时间的典型值为在指定波特率下传输三个字符的时间。
通常,对于指定消息之间小时间间隔并且消息的首字符是特定设备的站号或其他消息的协议,您可以使用这种类型的起始条件。这种方式尤其适用于在通讯连接上有多个设备的情况。  在这种情况下,只有当接收到的消息的起始字符为特定的站号或者设备时,接收指令才会触发  一个中断。
设 置 : il = 1,sc = 1,bk = 0,smw90/smw190 > 0, smb88/smb188 = 起始字符
断开检测:当接收到的数据保持为零值的时间大于完整的字符传输时间时,指示断开。一个完  整字符传输时间定义为传输起始位、数据位、校验位和停止位的时间总和。如果接收指令被配  置为用接收一个断点作为消息的起始,则任何在断点之后接收到的字符都会存入消息缓冲区。  任何在断点之前接收到的字符都被忽略。
通常,只有当通讯协议需要时,才使用断点检测作为起始条件。
设置: il = 0,sc = 0,bk = 1,smw90/smw190 = 无关,
smb88/smb188 = 无 关
断开和起始字符:接收指令可配置为在接收一个断开条件后开始接收字符,然后按顺序接收特  定的起始字符。在断点条件满足之后,接收消息功能寻找特定的起始字符。如果收到了除起始  字符以外的任意字符,接收消息功能重新启动寻找新的断点。所有在断点条件满足和接收到起  始字符之前接收到的字符都会被忽略。起始字符与字符串一起存入消息缓冲区。
设置: il = 0,sc = 1,bk = 1,smw90/smw190 = 无关,
smb88/smb188 = 起始字符
任意字符:接收指令可配置为立即启动接收任意和所有字符,并将它们放入消息缓冲区。这是  空闲线检测的一种特殊情况。在这种情况下,空闲线时间(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 = 消息超时(毫秒)
接收指令支持几种结束消息的方式。结束消息的方式可以是以下一种或者几种的组合:
结束字符检测:结束字符是用于指定消息结束的任意字符。在找到起始条件之后,接收指令检  查每一个接收到的字符,并且判断它是否与结束字符匹配。如果接收到了结束字符,将其存入  消息缓冲区,接收结束。
通常,对于所有消息都使用同一字符作为结束的ascii码协议,您可以使用结束字符检测。您  可以使用结束字符检测与字符间定时器、消息定时器或者大字符计数相结合来结束一条
消息。
设置: ec = 1,smb89/smb189 = 结束字符
字符间定时器:字符间时间是从一个字符的结束(停止位)到下一个字符的结束(停止位)的时间。  如果两个字符之间的时间间隔(包括第二个字符)超过了smw92或者smw192中指定的毫秒数,  接收消息功能结束。接收到每个字符后,字符间定时器重新启动。见图6--12。
当协议没有特定的消息结束字符时,您可以用字符间定时器来结束一条消息。由于定时器总是  包含接收一个完整字符(包括起始位、数据位、校验位和停止位)的时间,因而该时间值应设置为大于在指定波特率下传输一个字符的时间。
您可以使用字符间定时器与结束字符检测或者大字符计数相结合,来结束一条消息。
图6--12 使用字符间定时器来结束接收指令
消息定时器:消息定时器在启动消息后指定的时间终止消息。接收消息功能的启动条件一满足,消息定时器就启动。当经过的时间超出smw92或者smw192中指定的毫秒数时,消息定  时器时间到。见图6--13。
通常,当通讯设备不能保障字符中间没有时间间隔或者使用调制解调器通讯时,您可以使用消  息定时器。对于调制解调器方式,您可以用消息定时器指定一个从消息开始算起,接收消息允  许的大时间。消息定时器的典型值是在当前波特率下,接收到长消息所需时间值的大约
1.5倍。
可以使用消息定时器与结束字符检测或者大字符计数相结合,来结束一条消息。  设置: c/m = 1,tmr = 1,smw92/smw192 = 超时(毫秒)
图6--13 使用消息定时器来结束接收指令
大字符计数:接收指令必须已知要接收的大字符数(smb94或smb194)。当达到或者超出   这个值,接收消息功能结束。即使不会被用作结束条件,接收指令要求用户指定一个大字符  个数。这是因为接收指令需要知道接收消息的大长度,这样才能保证消息缓冲区之后的用户  数据不会被覆盖。
对于消息的长度已知并且恒定的协议,可以使用大字符计数来结束消息。大字符计数总是  与结束字符检测、字符间定时器或者消息定时器结合在一起使用。
奇偶校验错误:当硬件发出信号指示在接收的字符上有奇偶校验错误时,接收指令自动终止。  只有在smb30或者smb130中使能了校验位,才有可能出现校验错误。没有办法禁止此功能。
用户终止:用户程序可以通过执行另一个在smb87或smb187中的启用位(en)设置为零的接收
指令来终止接收消息功能。这样可以立即终止接收消息功能。
使用字符中断控制接收数据
为了完全适应对各种协议的支持,您也可以使用字符中断控制的方式接收数据。接收每个字符时都会  产生中断。在执行与接收字符事件相连的中断程序之前,接收到的字符存入smb2中,校验状态(如果   使能的话)存入sm3.0。smb2是自由端口接收字符缓冲区。在自由端口模式下,每一个接收到的字符   都会存放到这一位置,便于用户程序访问。smb3用于自由端口模式。它包含一个校验错误标志位。   当接收字符的同时检测到校验错误时,该位被置位。该字节的其他位被保留。利用校验位去丢弃消息  或向该消息发送否定应答。
在较高的波特率下(38.4k到115.2k)使用字符中断时,中断之间的时间间隔会非常短。例如:在38.4 时为260微秒;在57.6k时为173微秒;在115.2k时为86微秒。确保您的中断程序足够短,不会丢失字  符或者使用接收指令。
提示
smb2和smb3共享端口0和端口1。当接收端口0上的字符导致执行附加在那个事件(中断事件8)的中断程序时,smb2包含端口0上接收的字符,而smb3包含该字符的奇偶校验状态。当接收端口1 上的字符导致执行附加在那个事件(中断事件25)的中断程序时,smb2包含端口1上接收的字符,而
smb3包含该字符的奇偶校验状态。
实例:发送和接收指令
实例:发送和接收指令
获取端口地址和设置端口地址指令
获取端口地址指令(gpa)读取port指定的cpu口的站地址, 并将数值放入addr指定的地址中。
设置端口地址指令(spa)将口的站地址(port)设置为addr指 定的数值。新地址不能永久保存。重新上电后,口地址将返回 到原来的地址值(用系统块下载的地址)。
设置eno=0的错误条件:
0006(间接寻址)
0004(试图在中断程序中执行设置端口地址指令)
表6--14 获取端口地址和设置端口地址指令的有效操作数
输入/输出
数据类型
操作数
addr
byte
ib、qb、vb、mb、smb、sb、lb、ac、*vd、*ld、*ac、常数(常数值仅用于设置端口地址指令。)
port
byte
常数 对于cpu 
其它类似信息

推荐信息