主要内容:
S7-200 PLC串行通讯概述
S7-200 PLC自由口通讯基础
S7-200 PLC自由口通讯指令
S7-200 PLC自由口通讯常见问题
(一)概述
S7-200串行通信主要包括:
1)Modbus-S7-200PLC与支持Modbus RTU协议的第三方设备通信
RTU Master-Protocol(RTU主协议)
RTU Slave-Protocol(RTU从站协议)
2)USS-S7-200PLC与SIEMENS驱动设备(如MM440等)的通讯
3)自由口通讯——S7-200PLC与第三方设备自由协议通讯
S7-200系列PLC可以轻松无障碍地与计算机、打印机、变频器、扫描仪等第三方设备进行通讯。
Modbus 通信和USS 通信是自由端口通信的特例。
对于S7-200系列PLC,本体上有1个或2个485通讯接口。该接口可以实现S7-200的串行通信功能。该类型串口可用于编程、监控,也可用于自由口头通讯。但运行自由口通讯程序时无法监控。这是因为同一个端口同时只能支持一种协议,而S7-200PLC的编程下载协议是PPI协议,因此程序一旦运行,就可以进行自由口通信。无法监控和下载状态。
下表显示了Modbus、USS 和Freeport 通讯的一些参数:
对于OSI七层模型,Modbus通信、USS通信和Freeport通信的位置如上图所示。
(2)自由交流
S7-200 CPU的通讯端口可以设置为自由端口模式。选择自由端口模式后,用户程序可以完全控制通信端口的控制,通信协议也完全由用户程序控制。
所谓自由口通信是指通信协议由用户自由定义。
对于S7-200 PLC来说,基于本体自带的485端口的网络所使用的协议,除PPI协议外,均为自由口协议。例如USS协议、Modbus协议等都是特定的自由口通信协议。
1)Freeport通讯硬件
西门子S7-200系列PLC的自由口基于RS485硬件,采用正负两条信号线作为传输线。两线电压差为+2V~6V,表示逻辑‘1’;两线之间的电压差为-2V~-6V,即逻辑“0”。
西门子串口的插头是九针标准插头。每个引脚的定义如下表所示。最重要的两根电线是表中红线标记的引脚3 和8,通常称为“3”。 8个负',其中3个对应信号B,8个对应信号A。其他引脚可以完成一些附加功能,例如24V直流供电、5V直流供电和发送请求等。但用于最基本的串行通信,3针和8针两根线就够了,所以下面重点讲这两根线的逻辑。
如此复杂的通信过程可以通过这两条线在一条线上完成。其传输逻辑之一为“1”,另一个为“0”。对于一个完整的消息帧,其格式如下图所示。可以看到它首先包括一个起始位,中间7或8个数据位,后面是校验位或者无校验位,最后是停止位,从起始位到停止位就是整个内容的一条消息。在传输过程中起始位始终定义为逻辑0。 7或8个数据位0或1的逻辑状态完全取决于数据等于多少。校验位是可选的。如果可以的话,还分为奇校验和偶校验。它的最终逻辑取决于前面的数据位的组合,停止位固定为1。在整个报文帧之外的范围内,线路上的状态为1,即空闲状态。
2)自由交流的基本格式
数据框的组成
从数据帧的组成来看,它是由要生成的几个字符组成的,从字符1、2到字符n;
传输字符的格式:
对于每种字符传输格式,有1个起始位、7或8个数据位、0或1个校验位和1个停止位;
485级传输字符:
对于每个传输字符的485级,起始位固定为0,数据位和校验位是随机的,停止位固定为1。
自由口同心速度波特率可设置为1200、2400、4800、9600、19200、38400、57600 或112500 bit/s。
端口协议的选择、字符传输格式、波特率的设置需要通过设置SMB30(Port0)/SMB130(Port1)来完成。 (详细内容请参考S7-200系统手册)
3)发送指令的使用
自由口指令有两种,一种是发送指令,一种是接收指令。当我们谈论发送或接收时,我们经常会看到读或写这两个对立的概念。然而,读和写、发送和接收不是同一个概念。一般来说,当谈论阅读或写作时,它们往往基于一些相关的概念。高级通信,如主从机之间的通信,主站可以对从站进行读或写操作。与读和写的概念相比,发送和接收指令更为基础。例如,两个通信对象A和B之间,A向B发送一条消息,这是一个发送过程。 B收到A发给它的消息,这就是接收的过程。对于阅读和写作来说,情况要复杂得多。例如,如果A作为主站想要读取B的数据内容,则需要A先向B发送读请求,B收到A发送的读请求后会做出判断,从而A想要的数据从B发送给A,A接收到数据,完成一次读取过程。因此,与读写相比,发送和接收的过程要基础得多,自由口通信中使用的指令就是发送和接收指令。
发送的指令称为XMT指令(如上图所示)。可以想象,它的激活条件一定是边沿触发。得到边沿的时机就是发送指令和发送数据的时机。 PORT代表哪个端口发送数据。带CPU224的S7-200系列PLC向外发送数据。对于TBL,这是一个地址位,标记要发送的数据。发送的数据格式如下表所示:
4)接收指令的使用
TBL指向的数据区的第一个数据是指要发送的缓冲区的数据长度。从TBL+1开始就是要发送的数据。待发送数据的最大长度为255。在上面的程序中,TBL=VB100,VB100存储了待发送数据的数据长度,单位为字节。例如VB100=5,则要发送的数据为VB101~VB105,VB100本身不会被发送,它仅指示要发送的数据的长度和位置。
应用自由口通信时,发送过程往往比较简单,与协议相关的几乎所有内容都在接收程序中。
接收到的指令称为RCV指令(如上图所示)。该指令也使用边沿触发。 PORT还指示是否使用端口0或端口1。TBL定义已接收的数据的长度。从TBL+1开始,表示已经接收到数据。对于数据,n 也小于255。
例如,在上面的程序中,如果VB100=5,则已接收到的数据为VB101~VB105。
接收过程中,可以通过SMB86(PORT0)/SMB186(PORT1)监控接收状态。当SMB86/SMB186=0时,表示接收正在进行中,否则表示接收已终止。
5) 接收流程定义
接收进程首先执行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存储从端口0接收到的字符。存储字符的检查状态。对于端口1,当从端口1接收到字符时,执行与该事件(中断事件25)连接的中断服务程序。从端口1接收到的字符存储在SMB2中,字符的验证状态存储在SMB3中。
接收流程如上图所示。来自图中左侧的一个字符将被发送到SMB2,然后在8号中断事件中通过用户程序将SMB2的值传输到数据缓冲区中的第一个字节。那么第二个字节先发送到SMB2,然后SMB2再发送第二个字节,以此类推,第n个字节就会相应进入数据缓冲区中的第n个字节。数据缓冲区字节的起始地址是如何定义的以及这些字节如何一一对应?在使用字符接收模式的过程中,不再需要RCV指令。而是在中断号为8或25的中断事件中人为编写程序,并将SMB2人为地一一分配到地址范围,不一定要连续。主要取决于用户的书写习惯。
(3) 自由港通讯常见问题解答
Q1:如何人为结束RCV接收状态?
答:接收命令控制字节(SMB87/187)的en 位可用于启用/禁用接收状态。您可以将en 设置为“0”,然后在此端口上执行RCV 指令来结束RCV 指令。
Q2:使用自由口通讯时如何设置从机地址?
答:首先,Freeport是一个基本的通信协议,只能定义发送和接收。如果客户的网络结构中期望出现主从关系,那么需要在主站发送的报文中定义一个特定的区域作为从站地址信息。如有必要,添加适当的验证程序和故障排除程序,使通信更加完整。