西门子PLC通讯基础

西门子PLC通讯基础


通讯

plc端开放式用户通信

组态模块:

		通信-->开放式用户通信(Socket通信)

				TSend_C:建立连接发送数据

						触发条件:

								REQ:"Clock_5Hz"
								CONNECT:使用模块右上角小蓝盒进行组态
								DATA:plc发送给机器人指令数据

				TRCV_C:建立连接接收数据

						触发条件:

								EN_R:"AlwaysTRUE"
								CONNECT:使用模块右上角小蓝盒进行组态
								DATA:机器人响应并返回给plc的数据

注意:机器人与plc的数据是不兼容的需要进行数据的转换,输入/输出进行单独转换

案例:机器人与PLC通讯交互

ip8.10plc 创建主动通信块

拉取通信块–>开放式用户通信–>TSEND_C块和TRCV_C块

点击小蓝盒配置主动建立连接

创建开放式用户通信发送数据接收数据

ip8.11plc 创建被动通信块

拉取通信块–>开放式用户通信–>TSEND_C块和TRCV_C块

点击小蓝盒配置建立连接

接收端数据块

MODBUS TCP

组态模块:

		通信-->其他-->Modbus Tcp

		MB_CLIENT:通过PROFINET进行通信,作为客户端

				触发条件:

						REQ:"AlwaysTRUE"
						DISCONNECT:"AlwaysFALSE"
						MB_MODE:Modbus 的请求模式(读取、写入或诊断)  0:读    1,2:写
						MB_DATA_ADDR:这里对应需要匹配的仓位的起始地址
						MB_DATA_LEN:代表仓位的数量
						MB_DATA_PTR:P#DB4.DBX14.0 BOOL 8 表示哪个db块数据类型和所占存储区容量
						CONNECT :连接通信协议TCON_IP_v4,一般建立单独db块,数据类型选择
								InterfaceId:默认64
								ID:不重复就可以
								ActiveEstablished:
										主动连接:true,将当前PLC作为TCP通信的客户端
										被动连接:false,将当前PLC作为TCP通信的服务器
								RemoteAddress:表示要连接的设备ip地址
								RemotePort:要连接的设备的端口

		MB_SERVER:通过PROFINET进行通信,作为服务端

案例:立体仓库

RFID

通过硬件通讯:

		组态硬件:

				使用串口硬件 RF_120C RS422进行通信

				对芯片进行读写时Ident设备/系统要选择  通过FB/光学阅读器获取参数

		组态软件:

				Ident工艺对象

						普通阅读器

		组态模块:

				选件包--> SIMATIC Ident(全双工:使用串口RF_120C 422)

						复位块:
								Reset_RF300:错误复位  (根据模块的实际型号选最近的)

										触发条件:

												EXECUTE:使用常开开关+FirstScan进行控制(FirstScan程序启动先执行一次进行复位)
												TAG_TYPE:选择1 ,所有的ISO都可以发送应答(ISO西门子早期的以太网协议)
												RF_POWER:默认
												HW_CONNECT:
														两种连接方式
																TO_IDENT:创建Ident 工艺对象
																IID_HW_CONNECT:	
																		HW_ID:模块RF_120C的硬件标识符
																		LADDR:模块io地址						

						Read:读数据

								触发条件:

										EXECUTE:开关类型
										ADDR_TAG:默认
										LEN_DATA:是具体要读取的数据数组长度和写入长度相同
										HW_CONNECT:连接TO_IDENT工艺对象或者IID_HW_CONNECT
										IDENT_DATA:读取数组的db数据				

						Write:写数据

								触发条件:

										EXECUTE:开关类型
 										ADDR_TAG:默认
 										LEN_DATA:是具体要写入的数据数组长度和读取长度相同
 										HW_CONNECT:连接TO_IDENT工艺对象或者IID_HW_CONNECT
 										IDENT_DATA:写入数组的db数据					
		注意:
 		读写器一次一般只能执行112BYTE 根据芯片来决定
		

通过MODBUS TCP进行通信
		
		组态模块:
			
				通信-->其他-->Modbus Tcp
				
					使用MB_CLIENT的两个同名DB块(因为走一个协议所以应该是一个通道 用同一个db块)
						
						触发条件:
							写:
								REQ:"AlwaysTRUE"或者做一个开关
								MB_MODE:1  模式为1表示写
								MB_DATA_ADDR:根据具体的读写器寄存器地址和要使用什么模式来决定,写和读,一致 例:03模式下MB_DATA_ADDR的起始地址是40001,读写器寄存器地址是14 所以MB_DATA_ADDR地址是两者相加等于40015(03模式下MB_DATA_ADDR的起始地址是40001也可以是400001,当40001不够用的时候选择400001)
								MB_DATA_LEN:RFID设备对应的写寄存器数量
								MB_DATA_PTR:指向自定义的数据块的写数据起始位置和结束位置,例P#DB2.DBX14.0 INT 4
								CONNECT :写和读使用同一个协议(TCON_IP_V4)
								
							读:
								REQ:做一个开关
								MB_MODE:0 模式为0表示读
								MB_DATA_ADDR:根据具体的读写器寄存器地址和要使用什么模式来决定,写和读,一致 例:03模式下MB_DATA_ADDR的起始地址是40001,读写器寄存器地址是14 所以MB_DATA_ADDR地址是两者相加等于40015(03模式下MB_DATA_ADDR的起始地址是40001也可以是400001,当40001不够用的时候选择400001)
								MB_DATA_LEN:RFID设备对应的读寄存器数量
								MB_DATA_PTR:指向自定义的数据块的读数据起始位置和结束位置,例P#DB2.DBX22.0 INT 4
								CONNECT :写和读使用同一个协议(TCON_IP_V4)
				
				
		报错:
		80A3:看读模式的块和写模式的块的名称是否不同,不同的db块会产生两个不同的通道,一个通讯协议不能在两个不同通道进行数据交换
		8383:看数据的长度和类型,国产的一般可以用INT进行通讯,可以将读取/写入的array数组改成INT数据类型,一般常见最长的长度是112个BYTE,也就是56个INT
		40011-40015 这四位是系统常数 总共是11位  前四位可以不读,所以可以写成40015 7位

Modbus协议的数据模型和地址模型

数据模型是对从站设备可访问的数据进行抽象,Modbus协议的数据模型定义了四种可访问的数据,为了简化数据模型与设备存储区的对应关系,又引入了地址模型的概念,通过编号的方式对不同类型数据进行区分,也就是通过特定的编号作为前缀加到所讨论的数据地址中。如表中所示,通过0,1,3,4分别表示线圈,离散量输入,输入寄存器,和保持寄存器。

地址前缀编号 编号范围(1~65536) 编号范围(1~9999) 数据区块 数据类型 访问类型
0 000001~065536 00001~09999 线圈(Coils) 布尔 读/写
1 100001~165536 10001~19999 离散量输入(Discrete Input) 布尔 只读
3 300001~365536 30001~39999 输入寄存器(Input registers) 无符号2字节整型 只读
4 400001~465536 40001~49999 保持寄存器(Holding registers) 无符号2字节整型 读/写

理论上,

线圈地址范围:000001~065536

离散量输入地址范围:100001~165536

输入寄存器地址范围:300001~365536

保持寄存器地址范围:400001~465536

由于65536是比较大的数值,实际应用一般不需要这么大的存储区,因此设备厂家普遍采用的是10000以内的地址范围,即:

线圈地址范围:00001~09999

离散量输入地址范围:10001~19999

输入寄存器地址范围:30001~39999

保持寄存器地址范围:40001~49999

有了该地址模型,我们就可以从Modbus寄存器的地址判断要访问的区块的类型。

MODBUS (RTU)

组态硬件:

			使用硬件CM1241进行组态以半双工RS485/232的方式进行通讯

	组态模块:

			通信-->通信处理器-->MODBUS(RTU)

			Modbus_Comm_Load:组态Modbus 的端口(Modbus_Comm_Load模式改成4)

					REQ:"AlwaysTRUE"
				    PORT:硬件CM1241的具体硬件标识符
					BAUD:默认 ,数据传输速率
					PARITY:默认,奇偶检验
					FLOW_CTRL:默认,流控制
					RTS_ON_DLY:50,接通延迟
					RTS_OFF_DLY:50,关断延迟
					RESP_TO:默认,响应超时时间
					MB_DB:Modbus_Master.MB_DB 对 Modbus_Master 或 Modbus_Slave 指令的背景数据块的引用	

			Modbus_Master:作为主站通讯,写入通讯

					触发条件:

							REQ:常闭的写入DONE,写入BUSY,读取DONE,读取BUSY串联,并联常开的写入ERROR+5HZ时钟,并联常开的读取ERROR+5HZ时钟作为使能条件
							MB_ADDR:一般为1,Modbus RTU 站地址 
							MODE:1,写入
							DATA_ADDR:从站中的起始地址,要根据实际设备的写入起始地址决定,例如读取电能表2000H电压对应的数据时2000H对应的10进制数是8192,03模式下MB_DATA_ADDR的起始地址是40001,故起始地址是两者相加等于48193(03模式下MB_DATA_ADDR的起始地址是40001也可以是400001,当40001不够用的时候选择400001)
							DATA_LEN:要根据实际设备的写入地址长度决定
							COM_RST:进行Modbus RTU 的重置
							DATA_PTR:写入数据块,根据实际设备参数决定(创建数据块,设备中的参数如果是32位的可以用real类型数组来接收/写入数据,使用P#DB100.DBX0.0 word 18这种形式定义数据的起始位置和结束位置)

			Modbus_Master:作为主站通讯, 读取通讯

					触发条件:

							REQ:写入DONE作为使能条件,写入操作完成之后才能开始读取
							MB_ADDR:一般为1,Modbus RTU 站地址 
							MODE:0,读取
							DATA_ADDR:从站中的起始地址,要根据实际设备的写入起始地址决定,例如读取电能表2000H电压对应的数据时2000H对应的10进制数是8192,03模式下MB_DATA_ADDR的起始地址是40001,故起始地址是两者相加等于48193(03模式下MB_DATA_ADDR的起始地址是40001也可以是400001,当40001不够用的时候选择400001)
							DATA_LEN:要根据实际设备的读取地址长度决定
							COM_RST:进行Modbus RTU 的重置
							DATA_PTR:读取数据块,根据实际设备参数决定(创建数据块,设备中的参数如果是32位的可以用real类型数组来接收/写入数据,使用P#DB100.DBX0.0 word 18这种形式定义数据的起始位置和结束位置)

	案例:变位机伺服控制

DATA_LEN的值根据需要读取是数据长度来确定的,如下图

总共需要读取九个数据,但是每个数据都是32位的数据,DATA_ADDR地址的数据48193是16位的,所以DATA_LEN的值是18

Modbus_Comm_Load模式改成4,在系统块–>程序资源–>Modbus_Comm_Load数据块static中MODE改成4

原因是半双工模式在操作模式中是第四个

电能表中读取的数据除了2000H还有4000H的,由于不是连续的数据4000H的数据需要新建一个Modbus_Master的数据块进行读取

4000H是16进制的转化成10进制是16384 ,不能用40001加40001的最大值是49999,会超范围,所以DATA_ADDR地址要用400001加16384等于416385

工艺-轴控制

组态软件:轴工艺对象

	组态模块:

			MC_POWER :轴启动和停止

					触发条件:

							Axis:轴对象
							Enable:常开使能开关
							StartMode:1,轴位置控制
							StopMode:0,停止模式

			MC_RESET: 进行出错重置

					触发条件:

							Axis:轴对象
							Execute:常开使能开关

			MC_HOME: 回原点

					触发条件:

							Axis:轴对象
							Execute:常开使能开关
							Position:默认是0,回原点之后轴的相对位置
							Mode:3,回原点的模式

			MC_MoveAbsolute:绝对位移

					触发条件:

							Axis:轴对象
							Execute:常开使能开关
							Position:绝对目标位置,-1.0E12 ≤ Position ≤ 1.0E12
							Velocity:轴的速度,启动/停止速度 ≤ Velocity ≤ 最大速度
							Direction:默认是1,轴的运动方向,1是正方向,2是负方向,3是最短距离

			MC_MoveRelative:相对位移

					触发条件:
							Axis:轴对象
							Execute:常开使能开关
							Distance:定位操作的移动距离
							Velocity:轴的速度,启动/停止速度 ≤ Velocity ≤ 最大速度

			MC_MoveJog:点动

					触发条件:

							Axis:轴对象
							JogForward:常开使能开关,点动正向移动
							JogBackward:常开使能开关,点动反向移动
							Velocity:点动预设速度,启动/停止速度 ≤ 速度 ≤ 最大速度
							PositionControlled:默认true

			MC_ReadParam:读取轴对象参数比如:实时位置 			

					触发条件:

							Enable:"AlwaysTRUE"
							Parameter:"轴_1".ActualPosition,获取轴的数据
							Value:DB中定义的实际位置变量,指向写入所读取值的目标变量或目标地址的 VARIANT 指针

	案例:旋转供料模块控制

硬件伺服控制

组态硬件:

		IS620F-RT伺服

			+驱动+111报文

	组态模块:

			SinaPos:报文111位置控制轴指令

					触发条件:
							ModePos:运动方式
							EnableAxis:常开使能开关
							CancelTraversing:默认,是否拒绝激活状态的运行作业
							IntermediateStop:默认,激活状态的运行指令中断
							Positive:默认,正方向
							Negative:默认,正方向
							Jog1:Jog 信号源1,正转
							Jog2:Jog 信号源2,反转
							FlyRef:默认,取消主动回原点参考
							AckError:常开开关,故障应答/故障清除
							ExecuteMode:常开开关,激活运行作业/接收设定值/激活回参考点功能
							Position:具体模式执行的位置
							Velocity:具体模式执行的速度
							OverV:默认
							OverAcc:默认
							OverDec:默认
							ConfigEPos:一般为16#07
							HWIDSTW:伺服驱动对象报文
							HWIDZSW:伺服驱动对象报文

					响应重要参数:
							AxisPosOk:使能是否成功状态
							ActVelocity:当前速度
							ActPosition:当前位置
							ActMode:当前处于激活状态的运行模式
							Error:是否存在故障
							Status:故障错误码

RS422

422全双工 读写可以同时进行
全双工(Full Duplex)通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。

RS485

通信模式

485半双工 只读或者只写,通信线路上的数据只能单向传输
半双工(Half Duplex)数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。 RS485是串行数据传输的标准,主要用于多点通信,使用差分信号进行数据传输,也就是通过两根通信线之间的电压差表示传递的信号,一般采用主从的通讯模式,主站发送数据,从站接收数据,上传数据

电气特性

逻辑电平:逻辑1表示电压在+2~+6v之间,逻辑0表示电压在-2~-6v之间

网络拓扑和节点数量

RS485总线,一条总线将各个节点串联起来,一般情况下可以接32个节点

不同的设备使用了不同的通讯协议,这两者怎么进行通讯?

1.使用网关或者协议转换器

网口 MODBUS TCP 转 串口MODBUS (RTU) 使用 串口服务器

ProfinetMODBUS (RTU) 协议需要使用 Profinet 转 MODBUS (RTU) 网关

MODBUS (RTU)EtherCAT 需要使用RS485转EtherCAT网关

2.将有线的转为无线的网关

串口转Lora

串口转RF(无线射频)

串口转MQTT(MQTT可以连接到云平台,云平台可以连接不同类型的设备,方便远程监控和管理)

PLC之间进行GET,PUT通讯(S7通讯)

从右侧工具栏拖取 通信–>S7通信–>GET,PUT模块

从开放式用户通信–>其他–>拉取检查连接模块T_DIAG

判断时候连接成功

建立S7通讯数据块

建立S7通讯应用层模块

ID:16#100来源

另一个PLC建立对应的S7交互数据块