7.3.3 发送指令与接收指令
1.自由端口模式
CPU的串行通信接口可以由用户程序控制,这种操作模式称为自由端口模式,梯形图程序可以使用接收完成中断、字符接收中断、发送完成中断、发送指令和接收指令来控制通信过程。在自由端口模式下,通信协议完全由用户程序控制。
CPU处于STOP模式时,自由端口模式被禁止,CPU重新建立使用其他协议的通信,例如与编程设备的通信。只有当CPU处于RUN模式时,才能使用自由端口模式。通过将SMB30或SMB130的协议选择域(mm,如表7-5所示)置1,可以将通信端口设置为自由端口模式。CPU处于该模式时,不能与编程设备通信。
表7-5 特殊存储器字节SMB30和SMB130
可以用反映CPU模块上的工作方式开关当前位置的特殊存储器SM0.7来控制自由端口模式的进入。当SM0.7为1时,方式开关处于RUN位置,可以选择自由端口模式;当SM0.7为0时,方式开关处于TERM位置,应选择PC/PPI协议模式,以便于用编程设备监视或控制CPU模块的操作。
SMB30用于设置端口0通信的波特率和奇偶校验等参数。CPU模块如果有两个端口,SMB130用于端口1的设置。当选择代码mm=10(PPI/主站),CPU成为网络的一个主站,可以执行NETR和NETW指令,在PPI模式下忽略2~7位。
2.发送指令
发送指令XMT(Transmit)启动自由端口模式下的数据缓冲区(TBL)的数据发送。指令如图7-18所示,通过指定的通信端口(PORT),发送存储在数据缓冲区(TBL)中的信息。
XMT指令可以方便地发送1~255个字符,如果有中断程序连接到发送结束事件上,在发送完缓冲区中的最后一个字符时,端口0会产生中断事件9,端口1会产生中断事件26。可以监视发送完成状态位SM4.5和SM4.6的变化,而不是用中断进行发送,例如向打印机发送信息。TBL指定的发送缓冲区的格式如图7-19所示,起始字符和结束字符是可选项,第一个字节“字符数”是要发送的字节数,它本身并不发送出去。
图7-18 发送指令与接收指令
图7-19 缓冲区格式
如果将字符数设置为0,然后执行XMT指令,以当前的波特率在线路上产生一个16位的break(间断)条件。发送break与发送任何其他信息一样,采用相同的处理方式。完成break发送时产生一个XMT中断,SM4.5或SM4.6反映XMT的当前状态。
3.接收指令
接收指令RCV(Receive)初始化或中止接收信息的服务,指令如图7-18所示。通过指定的通信端口(PORT),接收的信息存储在数据缓冲区(TBL)中。数据缓冲区(如图7-19所示)中的第一个字节用来累计接收到的字节数,它本身不是接收到的,起始字符和结束字符是可选项。
RCV指令可以方便地接收一个或多个字符,最多可以接收255个字符。如果有中断程序连接到接收结束事件上,在接收完最后一个字符时,端口0产生中断事件23,端口1产生中断事件24。可以监视SMB86或SMB186的变化,而不是用中断进行报文接收。SMB86或SMB186为非零时,RCV指令未被激活或接收已经结束。正在接收报文时,它们为0。当超时或奇偶校验错误时,自动中止报文接收功能。必须为报文接收功能定义一个启动条件和一个结束条件。也可以用字符中断而不是用接收指令来控制接收数据,每接收一个字符产生一个中断,在端口0或端口1接收一个字符时,分别产生中断事件8或中断事件25。在执行连接到接收字符中断事件的中断程序之前,接收到的字符存储在自由端口模式的接收字符缓冲区SMB2中,奇偶状态(如果允许奇偶校验的话)存储在自由端口模式的奇偶校验错误标志位SM3.0中。奇偶校验出错时应丢弃接收到的信息,或产生一个出错的返回信号。端口0和端口1共用SMB2和SMB3。
4.获取与设置通信口地址指令
获取通信口地址指令GPA指令(Get Port Address)用来读取PORT指定的CPU口的站地址,并将数值放入ADDR指定的地址中。
设置通信口地址指令GPA指令(Set Port Address)用来将通信口站地址(PORT)设置为ADDR指定的数值。新地址不能永久保存,断电后又通电,通信口地址仍将恢复为上次的地址值(用系统块下载的地址)。
上述4条指令中的TBL、PORT和ADDR均为字节型,PORT为常数。
表7-6 SMB86~SMB94,SMB186~SMB194
5.接收指令的参数设置
RCV指令允许选择报文开始和报文结束的条件(如表7-6所示),SM86~SM94用于端口0,SM186~SM194用于端口1。
下面的i1=1表示检测空闲状态,sc=1表示检测报文的起始字符,bk=1表示检测break条件,SMW90或SMW190中是以ms为单位的空闲线时间(如表7-6所示)。在执行RCV指令时,有以下几种判别报文起始条件的方法:
(1)空闲线检测:i1=1,sc=0,bk=0,SMW90或SMW190>0。在该方式下,从执行RCV指令开始,在传输线空闲的时间大于等于SMW90或SMW190中设定的时间之后接收的第一个字符作为新报文的起始字符。
(2)起始字符检:i1=0,sc=1,bk=0,忽略SMW90或SMW190。以SMB88中的起始字符作为接收到的报文开始的标志。
(3)break检测:i1=0,sc=0,bk=1,忽略SMW90或SMW190。以接收到的break作为接收报文的开始。
(4)对通信请求的响应:i1=1,sc=0,bk=0,SMW90或SMW190=0(设置的空闲线时间为0)。执行RCV指令后就可以接收报文。若使用报文超时定时器(c/m=1),它从RCV指令执行后开始定时,时间到时强制性地终止接收。若在定时期间没有接收到报文或只接收到部分报文,则接收超时,一般用它来终止没有响应的接收过程。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。