广东湘恒智能科技有限公司
主营产品: 西门子PLC,西门子模块,西门子触摸屏,西门子变频器,西门子伺服电机驱动,电缆,西门子全系列
西门子代理商PLC中国(授权)一级代理吉林省

超详细讲解 PLC自由口通讯——以S7-200为例。接收过程的定义


图片

接收过程首先执行RCV指令,启动接收,启动之后会进入一种接收等待的状态,等待起始状态的满足,当起始条件满足以后SMB86/186=0,此时数据将按照发送的顺序进入信息缓冲区,直到结束条件的满足,结束条件满足以后SMB86/186不再等于0,之后接收过程结束并产生接收信息完成中断。在整个过程中最为重要的就是起始条件和结束条件,想要将自由口通讯学好,这两个条件是必不可少也是最为关键的部分。

a) 起始条件

上图中将起始条件分为六种:

① 空闲线检测:所谓空闲线检测指的是如果传输线路上的空闲时间大于等于SMW90/190里面所设置的时间的话被认为是一次接收的启动,空闲时间是从RCV被执行的一刻起开始记录,如果在空闲线时间未到的情况下有字符传输进来,那么空闲线时间的计时器将会被重新启动;

② 起始字符检测:对于起始字符的检测是设置在SMB88/188中的一个字符,如果在传输线路中收到了与SMB88/188中设置的起始字符相同的字符,那么被认为是起始条件的满足,从这一刻起传输线路上接收到的数据将会陆续地按顺序进入信息缓冲区,如果检测不到起始字符,则始终处于接收等待的状态;

③ 空闲线和起始字符:它是第一点和第二点的结合,即二者同时满足的前提下才能够被认为是一次起始条件的满足;

④ 断点检测:断点指的是在一个完整的字符传送的时间内,线上的逻辑全部为0。其中一个完整的字符传送时间是指包括起始位、数据位、校验位和结束位在内的一段时间。通常讲起始位固定是0,数据位和校验位也可以都是0,但是结束位一定是1,也就是说在一个完整的字符传送期间之内,线上至少有一刻是为1的,所以断电条件不易满足。这种情况通常应用于通讯对象可以造出一个断点来,那么我们用S7-200PLC可以和它进行断点检测作为通讯起始条件的一种通讯机制。S7-200自身也可做断点,S7-200如果需要发出一个断点,首先在XMT指令使用之前将待发送的数据缓冲区的数据长度定义为0,在这个基础之上执行一次传送指令,将会有一个断点被发出。如果两台S7-200PLC之间进行断点检测的接收过程,其中一台应该先发一个断点给对方,然后再发数据,这样对方那台以断点检测作为起始条件的PLC将会接到它的数据,双方的通讯就建立了;

⑤ 断点和起始字符:它是断点检测和起始字符检测两个条件相与的关系,同时满足的时候将会作为起始条件的一个设定;

⑥ 任意字符:所谓的任意字符指的是RCV指令一旦执行便无条件地开始起始条件的满足,中间几乎没有接受等待的过程。任意字符也是空闲线检测的一个特例,只是此时SMW90/190是被赋0的,这样就无需任何的等待,一旦RCV指令被执行,起始条件即刻满足,随之而来的数据将直接进入到信息缓冲区。

b) 结束条件

① 结束字符检测:结束字符被定义在SMB89/189中,如果传输的报文中出现了与SMB89/189中相一致的结束字符,接收的过程将结束。结束字符无非就是一个字符,如何能够保证在传输的正常的数据里没有和结束字符相一致的数据呢?使用结束字符检测作为结束条件的应用有一定局限,首先要确保中间的数据不会与结束字符相一致,比如采用ASCII字符传输的过程中, ASCII是有限的一些数,并不是所有的二进制数排列组合都能够在ASCII码表中得以体现,所以此时可以把结束字符定义成为中间传送的数据当中所没有那个ASCII字符来作为结束条件;

② 字符间隔定时器和信息定时器:二者同为定时器且定时时间均由SMW92/192决定,二者之间的区别在于,字符间隔定时器指的是在数据的传送过程中,如果检测到两个字符之间的时间间隔大于SMW92/192里面所设定的时间,那么接收的过程将被终止,而信息定时器指的是从信息开始被接收一旦时间大于了信息定时器所指定的时间,接收将会被终止。

③ 最大字符计数、校验错误、用户结束:三者与前面1、2、3三点不同,前面三点是用户可以自己组态和选择的,而4、5、6后三点是非正常的结束过程。

④ 最大字符计数:是在SMB94/194中指定的最大长度,长度最大可以达到255,如果在接收过程中已经接收到信息缓冲区里面的数据的字节数大于SMB94/194中所指定的数据长度,本次接收过程将会被勒令停止。最大字符计数在使用时一定要记得给SMB94/194赋值,如果未赋值将默认为0,此时即便选择前面三个条件,可是没等前面三个条件满足时,最大字符计数已经勒令此次接收行为终止。

⑤ 校验错误:指的是奇偶校验错误,这种是非正常的结束状态。一旦数据的奇偶校验产生错误,那么当前的这组数据显然是不可以被采信的,此时,数据将会被放弃,接收结束。

⑥ 用户结束:当由于某种原因,用户想提前结束现在正在进行的这次接收行为,那么可以在控制字里面禁止一个位然后执行RCV指令,这样用户条件就结束了,禁止的位其实是SMB87/187的最高位,也就是接收使能位。

注意:

① SMB87/187是自由口通讯控制字,起始和结束条件是通过它来定义的;

② SMB94/194是最大传输字符限制,必须定义。


6)使用字符接收方式

除了使用RCV指令来进行接收以外,还可以使用字符接收方式来进行自由口的接收。在介绍这种接收方式之前首先来看与自由口通讯有关的中断事件,下图中列举出了6个中断事件,其中前三个是针对端口0,后三个是针对端口1,下面以端口0为例进行讲解:


图片


对于端口0而言,首先来看中断号为9的中断事件叫做发送完成,它和XMT指令是对应的,XMT指令所激活的发送过程完成的时候会激活中断事件号为9的中断。中断号为23的中断事件叫做中断信息(数据帧)完成,它和RCV指令是对应的,使用RCV指令激活的接收过程完成之后会启动中断号为23号的中断事件。中断号为8的中断事件叫做接收单个字符完成,接收单个字符与23号中断事件不同,23号是接收整个数据帧也就是RCV指令会接收最大长度为255个字节的一组数据,一组数据全部接完后激活23号事件,而8号则不同,它是每接收一个字符就产生一次事件,因此可以用这种方式来使用字符进行接收。这里需要介绍SMB2和SMB3两个控制字,这两个控制字是端口0和端口1所共用的,当字符的接收来自端口0时,执行与事件(中断事件8)相连的中断服务程序,其中SMB2中存储从端口0接收到的字符,SMB3中存储该字符的校验状态。对于端口1而言,当字符的接收来自端口1时,执行与事件(中断事件25)相连的中断服务程序,SMB2中存储从端口1接收到的字符,SMB3中存储该字符的校验状态。

图片

接收的过程如上图所示,从图的左侧来了一个字符将会送到SMB2当中,然后通过用户程序在8号中断事件当中把SMB2的值传送给数据缓冲区中的第一个字节,接下来第二个字节先送到SMB2中,再由SMB2送给第二个字节,以此类推,第n个字节也会相应地进到数据缓冲区中的第n个字节。数据缓冲区字节的起始地址是如何定义以及这些字节如何能够一一对应?使用字符接收方式的过程中已经不需要RCV指令,而是人为地在中断号为8号或者25号的中断事件中编写程序,人为地把SMB2一个一个赋给地址区间,不一定必须是连续的,主要看用户编写习惯。



展开全文
相关产品
拨打电话 微信咨询 发送询价