西门子PLC的几种通讯方式
一、PPI通讯
PPI协议是S7-200CPU***基本的通信方式,通过原来自身的端口(PORT0或PORT1)就可以实现通信,是S7-200 CPU默认的通信方式。
二、RS485串口通讯
第三方设备大部分支持,西门子S7 PLC可以通过选择自由口通信模式控制串口通信。***简单的情况是只用发送指令(XMT)向打印机或者变频器等第三方设备发送信息。不管任何情况,都必须通过S7 PLC编写程序实现。
当选择了自由口模式,用户可以通过发送指令(XMT)、接收指令(RCV)、发送中断、接收中断来控制通信口的操作。
三、MPI通讯
MPI通信是一种比较简单的通信方式,MPI网络通信的速率是19.2Kbit/s~12Mbit/s,MPI网络***多支持连接32个节点,***大通信距离为50M。通信距离远,还可以通过中继器扩展通信距离,但中继器也占用节点。
MPI网络节点通常可以挂S7-200、人机介面、编程设备、智能型ET200S及RS485中继器等网络元器件。
西门子PLC与PLC之间的MPI通信一般有3种通信方式:
1、全局数据包通信方式
2、无组态连接通信方式
3、组态连接通信方式
四、以太网通讯
以太网的核心思想是使用共享的公共传输通道,这个思想早在1968年来源于厦威尔大学。 1972年,Metcalfe和David Boggs(两个都是***网络专家)设置了一套网络,这套网络把不同的ALTO计算机连接在一起,同时还连接了EARS激光打印机。这就是世界上***个个人计算机局域网,这个网络在1973年5月22日运行。Metcalfe在运行这天写了一段备忘录,备忘录的意思是把该网络改名为以太网(Ethernet),其灵感来自于“电磁辐射是可以通过发光的以太来传播”这一想法。 1979年,DEC、Intel和Xerox共同将网络标准化。
1984年,出现了细电缆以太网产品,后来陆续出现了粗电缆、双绞线、CATV同轴电缆、光缆及多种媒体的混合以太网产品。 以太网是目前世界上***流行的拓朴标准之一,具有传传播速率高、网络资源丰富、系统功能强、安装简单和使用维护方便等很多优点。
五、PROFIBUS-DP通讯
PROFIBUS-DP现场总线是一种开放式现场总线系统,符合欧洲标准和。PROFIBUS-DP通信的结构非常精简,传输速度很高且稳定,非常适合PLC与现场分散的I/O设备之间的通信。
Modbus功能码详解
Modbus功能码是Modbus消息帧(报文)的重要组成部分,是Modubs协议中通信事务处理的基础,代表消息将要执行的动作。
功能码概要
简而言之,Modbus功能码占用一个字节,取值范围是1127,之所以127以上不能使用,是因为Modbus规定出现异常时,功能码+0x80(十进制128)代替异常状态,因此129(1+128)255(127+128)的取值代表异常码。
Modbus标准协议中规定了由3类Modbus功能码,分别是:
公共功能码
被明确定义的功能码
保证唯一性
由Modbus协会确认,并提供公开的文档;
可进行一致性测试
包括协议定义的功能码和保留将来使用的功能码
用户自定义功能码
有两个用户自定义功能码区域,分别是6572和100110;
用户自定义,不保证唯一性。
保留功能码
保留功能码是因为历史遗留原因,某些公司的传统产品上现行使用的功能码不作为公共使用。
Modbus部分功能码如下:
01 | 读线圈状态 | 00001~09999 | 位操作 | 单个或多个 |
02 | 读离散输入状态 | 10001~19999 | 位操作 | 单个或多个 |
03 | 读保持寄存器 | 40001~49999 | 字操作 | 单个或多个 |
04 | 读输入寄存器 | 30001~39999 | 字操作 | 单个或多个 |
05 | 写单个线圈 | 00001~09999 | 位操作 | 单个 |
06 | 写单个保持寄存器 | 40001~49999 | 字操作 | 单个 |
15 | 写多个线圈 | 00001~09999 | 位操作 | 多个 |
16 | 写多个保持寄存器 | 40001~49999 | 字操作 | 多个 |
功能码可分为位操作和字操作两类。位操作的小单位为一位(bit),字操作的小单位为两个字节。
位操作指令:读线圈状态功能码01,读(离散)输入状态功能码02,写单个线圈功能码06和写多个线圈功能码15.
字操作指令:读保持寄存器功能码03,读输入寄存器功能码04,写单个保持寄存器功能码06,写多个保持寄存器功能码16.
01(0x01)读取线圈/离散量输出状态
功能说明
读取从设备的线圈或离散量输出的状态,即各DO的ON/OFF状态。消息帧中指定了需读取的线圈起始地址和线圈数目。需要注意的一点是,在Modbus协议规定的PDU中,规定所有线圈或寄存器地址从0开始计算。
查询报文
查询帧的消息里,定义了从设备地址为3,并读取从设备的Modbus地址0001900055(线圈地址0002000056)共计37个状态值。起始线圈地址为0x13(即十进制00019),因为线圈地址从0开始计数。
Modbus协议规定,起始地址由2个字节构成,取值范围为0x00000xFFFF;线圈数量由2个字节构成,取值范围为0x00010x07D0(即十进制1~2000).
ASCII模式中直接按每4个位拆分为对应的字符表示。
响应报文
响应报文的数据字段中,每一个线圈占用1个位(bit),状态被表示为1=ON和0=OFF两种类型。第1个数据字节的LSB(低有效位)标识查询报文中的起始地址线圈的状态值,其他线圈依次类推,一直到这个字节的MSB(高有效位)位置,并在后续字节中按照同样的方式(由低到高)排列。
一个字节可以表示8个线圈的状态,如果后的数据字节中不能填满8个线圈的状态,则由0填充。对应于查询报文中需要读取37个线圈的状态,则共需要5个字节保存状态值。
02(0x02)读取离散量输入值
功能说明
该功能码用于读取从设备的离散输入即DI的ON/OFF状态。消息帧中制定了需读取的离散输入寄存器起始地址和数目,可读取1~2000个连续的离散量输入状态。如果从设备接受主设备的请求则回复功能码02,并返回离散量输入各离散量的当前状态。如果返回的离散输入数量的个数不是8的整数倍,将用0填充后数据字节的剩余位。
03(0x03)读取保持寄存器值
功能说明
用于读取从设备保持寄存器的内容,不支持广播模式。消息帧中指定了需读取的保持寄存器的起始地址和数目。而保持寄存器中各地址的具体内容和意义,则由设备开发者自行规定。
在查询报文中,必须指定保持寄存器的开始地址和需读取的寄存器数量。起始位置由2个字节构成,取值范围为0x00000xFFFF;寄存器数量由2个字节构成,取值范围为0x00010x007D(即十进制1~255),即多可以连续读取125个寄存器。
有一点特别需要注意,Modbus的保持寄存器和输入寄存器是以字(Word)为基本单位的(1Word=2byte),所以,如果读取保持寄存器地址为40001开始的一个16位(bit)的无符号数,那么返回2个字节(byte),并可以从40002开始读取下一个16位的无符号数。如果需读取寄存器地址40001开始的是一个32位浮点数,则需要返回4个字节,即必须连续读取40001和40002的内容,而且下一个32位浮点数必须从40003开始读取。对于浮点数(或者32位的整数)而言,连续读取的两个寄存器之间存在字节序和大小端的问题,这一点在开发时必须引起注意。
04(0x04)读取输入寄存器值
功能说明
同功能码03类似,该功能码用于读取从设备输入寄存器的内容,不支持广播模式。消息帧中指定了需读取的输入寄存器的起始地址和数目。而输入寄存器中各地址的具体内容和意义,则由设备开发者自行规定。
在查询报文中,必须指定输入寄存器的起始地址和需读取的寄存器数量。
本功能码中,起始地址由2个字节构成,取值范围为0x00000xFFFF;寄存器数量由2个字节构成,取值范围为0x00010x007D(即十进制1~125),即多可以连续读取125个寄存器。
同样有一点需要注意,Modbus的保持寄存器和输入寄存器是以字为基本单位的。所以对于浮点数(或32为的整数)而言,连续读取的两个寄存器之间存在字节序和大小端的问题。
05(0x05)写单个线圈或单个离散输出
功能说明
用于将单个线圈寄存器(或离散输入)设置为ON或OFF,该功能码支持广播模式,在广播模式下,所有从站设备的同一地址的值将被统一修改,查询报文中的ON或OFF状态由报文数据字段的常熟指定,0xFF00表示ON状态,0x0000表示OFF状态。其他所有值均是非法的,并且对寄存器不起作用,将会返回异常相应。
本功能码中,起始地址由2个字节构成,取值范围为0x0000~0xFFFF;变更目标数据由2个字节构成,取值只能为0xFF00或0x0000.
对于从设备,在线圈或离散输出寄存器正常变更的情况下,则返回于查询报文一样的响应报文。如果修改失败,则返回一个异常响应。
06(0x06)写单个保持寄存器
用于更新从设备的单个保存寄存器的值。该功能吗支持广播模式,在广播模式下,所有设备的同一地址的值将被统一修改。
查询报文中需要指定从设备地址以及需要变更的保持寄存器地址和设定的值。同样需要注意的是,查询报文中,寄存器地址从地址0开始技术。
本功能码中,起始地址由2个字符构成,取值范围为0x00000xFFFF;变更目标数据由2个字节构成,取值范围为0x00000xFFFF。
对于从设备,在保持寄存器正常变更的情况下,则返回于查询报文一样的响应报文。如果修改失败,则返回一个异常返回。
08(0x08)诊断功能
功能说明
该功能码仅用于串行链路,主要用于检测主设备和从设备之间的通信故障,或检测从设备的各种内部故障,该功能码不支持广播。为了区别各诊断类型,查询报文中提供了2各字节的子功能码字段。
通常在正常的响应报文中,从设备将鸳鸯回复功能码和子功能码。
查询报文中需要指定从设备地址、功能码以及子功能码。
例如,表4-15中表示了子功能码“原样返回查询数据”的诊断功能,其中子功能码为0(0x0000)。在子功能码0x0000的情况下,数据字段可以为任意值。
本功能码中,子功能码由2个字节构成,取值则根据意义不同;数据字段由2个字节构成,其取值由子功能码确定。
对于从设备,在保持寄存器正常变更的情况下,则返回与查询报文一样的响应报文。如果修改失败,则返回一个异常响应。