S7-200系列PLC自由口通信知识

西门子plc
西门子plc
西门子plc
1976
文章
127
评论
2018年6月7日16:58:15 评论 6,766 阅读

S7-200系列PLC本身集成了一个RS485接口,通过这个RS485接口可以实现自由口通信、MODBUS RTU通信、USS协议通信,在这些通信中自由口通信为基本也是重要的通信,想要学习好S7-200系列PLC的串口通信功能,就须要掌握好自由口通信的应用。虽然西门子有提供相应的MODBUS库及USS协议库指令。让用户快速的掌握MODBUS及USS协议通信程序的编写,若有研究过库指令的朋友,其实可以发现,库指令也是通过自由口方式做出来的一个功能块程序。

接下来的几篇文章,我给大家分享下自己学习自由口通信的体会,希望对大家学习自由口通信有一定的帮助。

在学习自由口程序编写之前,我们首先要理解以下的一些基本知识内容。

1)通信协议

通信协议是设备与设备之间进行信息交换的一种约定,类似于人与人交流的语言。通信协议有很多种。大家常常听到的MODBUS协议,USS协议,PPI协议。MPI协议等这些都是通信协议的。

通信协议是在学习自由口通信时必须要掌握的,自由口通信的核心就是使用发送指令(XMT)和接收指令(RCV)来完成数据的发送和接收,那么发送什么数据出去,在接收回来的数据中,哪些数据是有效的数据,这些都是需要从通信协议中来获得信息的。通信协议由作为从站的通讯设备给出,如PLC与仪表通信或是变频器通信,那么在仪表或是变频器的说明书上就会提供这个仪表或是变频器所支持的通信协议。(如下图所示为一个仪表的通信协议)

S7-200系列PLC自由口通信知识

一个仪表的通信协议

2)信息帧格式或消息报文

说到信息帧格式,很多人不理解什么是信息帧格式,有人也把信息帧格式叫做数据个数,或是消息报文,不管怎么说,意思都是一样的,信息帧格式表示的是我们PLC需要发送出去的数据,以及接收回来的数据的是一种什么样的格式,这个信息帧格式是根据通信协议而来的。如上面所描述的通信协议。假设规定使用ascall的字符来进行通信的,若需要读取站号为01的仪表的过程值数据,而过程的参数名为“M1”(注:这些参数名在仪表说明书中会给出)那么根据这个通信协议我们就可以得到两条信息帧的格式,一条是PLC需要发送出去的信息帧格式,另外一条是PLC接收回来的信息帧格式:

(3) 起始符、结束符与起始位和停止位的区别

在自由口通信中经常会听到,起始位、停止位、起始符、结束符,那么他们之间有什么区别呢?

首先从字面上的理解,大家就可以知道,停止位或起始位,他是一个位。而起始符和结束符是一个字符,一条信息帧格式中包含了多个字符,一条信息帧格式中有起始符和结束符,如上面协议中的描述,起始符(EOT),结束符(ENQ)。而在这条信息帧格式的字符中,每个字符都有起始位、停止位、数据位和奇偶校验位组成。

我们提到了有关于自由口通信的一些基础知识,给大家解释了什么叫通信协议,什么叫信息帧或消息报文,起始符/结束符与起始位/停止位之间的关系。那么今天就跟大家聊聊西门子S7200系列的自由口通信功能及程序的设计。

自由口通信模式(Freeport Mode)是S7-200系列PLC的一个很有特色的功能,借助自由口通信,用户可以自己使用(XMT和RCV)对端口进行操作,可以是S7-200系列PLC与任何通信协议已知且具有串口的智能设备和控制器实现通信,如打印机,变频器,智能仪表等。

S7-200CPU上的通信口在电气上是标准的RS-485半双工串行通信(所谓半双工通信即发送和接收不能同时进行,所以在设计程序的时候,发送完后才能接收 ,接收完后才能发送)此串行字符通信的格式可以包括:

(1)一个起始位

(2)7位或是8位字符(数据字节)

(3)一个奇/偶校验位,或者没有校验位

(4)一个停止位

(5)波特率:1200、2400、4800、9600、19200、38400、57600或112500bps的波特率

满足以上条件的通信的格式,都可以使用自由口通信的方式去完成信息的交换。

若需要使用PLC通过自由口的方式发生数据出去,必须完成以下几个内容:

(1)通信格式的设置,用于规定通信双方的通信格式

(2)PLC需要通过XMT指令发送的数据,可以根据通信协议提供的信息帧格式去准备,

(3)信息发送完成的判断,用户只有根据信息是否发送完成后 ,才可以进行信息的接收程序的设计或是决定下一次的发送。

以上一篇文章中提到的仪表的通信协议为例:

1)设置要PLC的中的通信格式字。

通信格式字的设置对于PLC来讲有特殊的系统存储器来进行存储,在200系列PLC中通过SMB30(port0口)SMB130(Port1口)来进行存储,设置通信格式字是必须配合从站设备来进行设置,如下所示为仪表提供的参数设置

S7-200系列PLC自由口通信知识

在这里面,若选择9600的波特率,一位停止位、8个数据、无校验的方式,(注意:不能设置为2个停止位,因PLC自由口通信时不支持2个停止位)。则PLC中通信格式字可设置为16#09.通信格式字按照下图所示进行设置:

S7-200系列PLC自由口通信知识

通信格式字

2)根据通信协议准备需要通过XMT指令发送出去的数据:

假设需要读取仪表中的过程值,需要根据通信协议的格式,然后准备好相应的数据:

S7-200系列PLC自由口通信知识

XMT指令格式:

S7-200系列PLC自由口通信知识

注:T表示的是指令中TBL的地址,如如所示: T表示VB0,所以T+0表示VB0T+1,表示VB1依次下去。port表示的是PLC的端口号。

可以通过在数据块中定义好你需要发送的数据:

3)信息发送完成的判断

判断信息是否发送完成可以通过两种方式进行判断,

一种使用发送完成中断的方式去判断

port0和port1有对应发送完成中断事件,可以通过发送完成中断事件来判断信息是否发送完成。PORT0和PORT1两个端口分别分配了两个中断事件用来表示信息发送完成。对于PORT0口来说分配中断事件9,对于PORT1口来说分配中断事件26

S7-200系列PLC自由口通信知识

也可以通过系统存储位来进行判断.

通过特殊完成标志位来进行判断,可以通过对发送完成标志位SM4.5(port0)或SM4.6(port1)的监控来判断数据是否发送完成。SM4.5=1 表示端口0处于空闲状态,SM4.5 = 0表示端口0处于传送状态。

S7-200系列PLC自由口通信知识

在前面的文章中与大家分享了自由口通信中的发送功能,那么进行就跟大家聊聊自由口通信中的接收功能,自由口通信中的难点就是在于接收功能的使用,当PLC通过通信端口把数据发送给下位设备后,下位设备会根据PLC发送过去的信息内容回传相应的数据给PLC,这时候PLC就需要使用接收功能进行数据的接收,S7-200系列PLC提供了一条接收指令(RCV)用于接收下位设备返回来的信息。指令格式如下所示:

S7-200系列PLC自由口通信知识

当PLC接收完下位设备回传回来的数据后,PLC会产生相应的中断事件来告知编程人员信息接收完成,此时可以编写相应的程序提取有效数据,并对这些有效数据进行转换,转换成可读性的数据。S7-200系列PLC 提供了中断事件23和中断事件24分别作为端口0和端口1的接收完成中断事件号。

在PLC的信息发送过程中,PLC是主动方,会根据需要发送的数据个数进行数据的发送,当发送完成后,PLC会自动产生相应发送完成中断,而对于接收来讲,PLC是被动方,只负责数据的接收,当PLC的端口使能了接收功能后,PLC处于等待信息的接收状态,有数据过来就接收,但是接收的数据是否是有效的数据,什么时候接收完了PLC并不知道,此时就要求我们编程人员需要设置好消息的起始和接收条件,当起始条满足了,PLC把接收到的数据放入到接收缓冲区中,当满足了结束条件,PLC关断接收功能,并产生接收完成中断。

用于判断消息的的起始和结束条件有很多种方式,但用的比较多可能就以下几种方式:

S7-200系列PLC自由口通信知识

今天我们先聊一聊通过起始符作为信息的起始和通过结束符作为信息的结束判断的过程及程序的设置,S7-200系列的PLC提供了两个系统存储区用于存储起始符(SMB88)和结束符(SMB89)(这里以端口0为例说明),因此若需要使用起始符和结束符做为消息的起始和结束的的判断,则需要把起始符和结束符分别放到SMB88和SMB89中。

当PLC在接收数据的过程中,会对接收的数据与起始符进行对比,如果与起始符不相等,这说明不是有效性的数据,不放入接收缓冲器中,会把接收到的数据丢弃,重新接收,若接收到的数据与起始符相等,则PLC会把接收到的数据放到接收缓冲区中,同时记录接收字符个数的存储器的值加1。

当起始符满足后,PLC会对接收到的字符与结束符进行对比,如果与结束符不相等,则继续数据的接收, 如果接收到的数据与结束符相等,则关断接收功能,并产生接收完成中断。因此使用起始符和结束符来讲,大部分使用的是一些特定的字符。

若使用起始符和结束符作为消息的起始和结束的判断时,需要先设置好接受功能的控制字节(SMB87)告知PLC为起始符和结束符判断消息的起始和结束。SMB87的个格式内容如下图所示:

S7-200系列PLC自由口通信知识

自由口通信中的第二种方式(空闲线)用于判断消息起始的过程。

空闲线概念:

空闲线条件定义为传输线路上的安静或空闲时间(即在传输线路中没有信号的变化)

在串行异步通信的过程中,信息的发送时以位的方式进行传输,每一个位的状态为“0”或是为“1”,对于传输线路来讲传输“0”或是“1”则传输线路上会表示为不同的电平,有电平的变化,则说明不是一个安静或是空闲的状态,若有数据进行传输时,那么这个安静或是空闲的状态维持的时间就不够长或是没有,就算发送的数据全部是0或是1来讲,也会有电平的变化,因为一个字符中起始位用“0”表示,停止位用“1”表示。但当不发送数据时,传输线路中并没有电平的变化,则就可以产生一段安静或是空闲的状态。

在串行异步通信中的数据传输过程中,是一个字符一个字符接着发送的,发送完个字符后发送第二个字符,每个字符的发送都是以位的方式一个一个位进行传输的。因此在数据传输的过程中,这个传输线路上的安静或空闲的时间段比较端,但如果没有数据发送的时候,空闲或是安静的时间会比较长,所以我们可以在启动接收指令后,就开始侦测传输线上的空闲或安静时间,如果空闲或安静时间到了,而且也没有接收到数据,说明这段时间线路上是没有数据的传输的,过了空闲时间后,接收到了数据,则说明有数据开始传输了,所以可以把接收到的个字符就认为是这条信息的起始,是一个有效的字符把它存储到接收缓冲区中。

若在启用了接收指令后,开始检查传输线路中空闲线的时间,但在空闲线的设定的时间内接收到字符,这时PLC会认为这并不是一个完整的消息,可能接受到的是一条信息中某个段的数据,所以不把他作为一个有效的数据,PLC会丢弃接收到的这个字符然后重新启用空闲线检测。过程如下图所示:

S7-200系列PLC自由口通信知识

空闲线时间的设置:

要使用空闲线的时间去作为消息的起始的判断必须要做以下两个设置:

(1)设置接收功能的控制字节,告诉PLC使用空闲线作为消息的起始判断

(2)设置空闲线的时间长度。

控制字节的设置如图所示:

S7-200系列PLC自由口通信知识

使用空闲线的时,需要把控制字节中的SM87.4/Sm187.4 设置为1,表示使用空闲线检测起始。

设置空闲线时间的长度

空闲线时间的长度设置:可以使用传送指令给SMW90(port0)或是SMW190(port1)设置空闲线的时间 ,空闲线时间设置的长度通常为3.5个字符的时间长度,

假设通信格式设置中为1个起始位,8个数据位,无奇偶校验,1个停止位,9600bps,则一个字符的传输时间为1ms多一点的时间,所以3.5个字符的时间长度,我们可以把空闲线时间设置为4ms。

下面以空闲线作为消息的起始,以结束符(16#26 )作为消息的结束为例,设计一段接收的程序来说明设置过程:

S7-200系列PLC自由口通信知识

消息的接收过程中判断消息的结束条件 —— 字符定时器方式作为消息的结束条件的判断。

我们从下面四个方面来说明字符定时器作为消息结束条件的判断:

(1)字符定时器作为消息结束条件的判断过程及在什么时候启用字符定时器?

(2)如何设置PLC的消息接收时的结束判断条件是字符定时器?

(3)字符定时器的定时时间应设置为多长?

(4)使用字符定时器作为消息结束的条件时程序如何设计?

字符定时器作为消息结束条件的判断过程及什么时候启用字符定时器:

所谓的字符定时器是指字符之间的时间是指从一个字符结束(停止位)到下一个字符结束(停止位)测得的时间,就好比是两个字符之间的间隔时间,只是这个时间包含了一个完整的字符,在一条完整的信息传输过程中,字符与字符间隔的时间比较短,所以我们可以设定一个字符间隔的时间,若超出这个时间,还未接收到下一个字符,就说明这条信息已经传输完成了。这个就是字符定时器的一个原理,如下图所示:

S7-200系列PLC自由口通信知识

如何设置PLC的消息接收时的结束条件是字符定时器

通过对控制字节的设置,可以告诉PLC接收功能中判断消息的结束条件是以字符定时器作为消息的结束条件的判断。

S7-200系列PLC自由口通信知识

如上图所示,我们需要告知PLC使用字符定时器作为消息的结束条件,我们需要设置控制字节中的SM87.2和SM87.3(以PORT0为例),要使用消息定时必须设置SM87.3=0,SM87.2=1.然后把字符定时器的定时时间设置到SMW92中。

字符定时器的定时时间应设置为多长

字符定时器的时间总是包含接收一个完整字符(起始位、数据位、奇偶校验位和停止位)的时间,定时器的定时时间值必须设为大于以选定波特率传输一个字符所需的时间。 假设一个字符加起始位,停止位,奇偶校验位为,数据位,为11个bit位,波特率为9.6kbps。则传输一个字符的时间大概在1ms多点,所以我们可以把字符定时器的定时时间设置为2ms

使用中符定时器作为消息结束的条件时程序如何设计

接下来我们以空闲线作为消息的起始,以字符定时器作为消息的结束条件来说明下程序的设计

以上为个人理解,如有不对之处请给予指正,希望对大家在学习自由口通信时,有所帮助,谢谢!!!

继续阅读
weinxin
plc入门知识问答
所有PLC工程师都会关注的微信公众账号,只需输入您的问题,就会有答案
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: