西门子plc modbus地址详解
Modbus地址实际上分为两种情况即plc作Modbus主站,Modbus地址和PLC手册里的地址一与PLC作从站,PLC不用管什么Modbus地址。
Modbus地址实际上分为两种情况。下面以西门子S7-200/S7-200SMART/和S7-1200为例来说明:
种情况:PLC作Modbus主站,Modbus地址和PLC手册里的地址一致,例如作主站的S7-200的MBUS_MSG指令用于向Modbus从站发送请求消息,和处理从站返回的响应消息。要读取从站(另一台S7-200)的I0.0开始的地址区时,它的输入参数Addr(Modbus地址)为10001。S7-200从站保持寄存器的V区起始地址为VB200时,要读取从站VW200开始的V存储区时,保持寄存器的地址是40001。
第二种情况:PLC作从站,PLC不用管什么Modbus地址,等着主站来读写它的地址区就是了。
主站的计算机软件(例如dcs或组态软件)的编程人员需要编写实现Modbus通信的程序,首先需要确定ModbusRTU的报文结构。他们一般不熟悉PLC,因此PLC的编程人员往往需要和上位机软件的编程人员一起来讨论Modbus的报文结构。
容易出问题的就是报文里Modbus地址与PLC存储区地址的对应关系。曾经有工作人员做过的一个系统的上位机是专用的组态软件,通过分析GEPLC手册给出的CRC的循环异或计算实例每一步的中间数据,编写出了CRC计算的C语言程序。通过实验验证了Modbus报文结构和CRC的计算的可行性。
S7PLC手册给出的Modbus地址与Modicon公司和GE公司PLC使用的地址相同,是基于1的地址,即同类元件的首地址为1。而西门子plc采用的是基于0的地址,即同类元件的首地址为0。Modbus报文中西门子PLC的Modbus地址也采用基于0的地址。
PLC系统手册中的Modbus地址的高位用来表示地址区的类型,例如I0.0的Modbus地址为10001。因为地址区类型的信息已经包含在报文的功能码中了,报文中S7-200的I0.0的Modbus地址不是10001,而是0。报文中其他地址区的Modbus地址也应按相同的原则处理。例如当S7-200从站保持寄存器的V区起始地址为VB200时,VW200对应的保持寄存器在报文中的Modbus地址为0,而不是40001。
立即位逻辑指令的特点很简单,就是不受plc周期扫描的影响,提供了PLC对I/O的响应速度。见上传的图片。
普通位逻辑指令受PLC周期扫描的影响。LDI、LDNI、OI、ONI、AI、ANI
需要通过 PN/IE 装载一个精智面板,并通过 VPN通道连接到工厂。然而,精智面板不在“扩展下载到设备”窗口中,因此不可能装载精智面板。
解决方法
要通过“扩展下载到设备”窗口装载精智面板,必须在表中直接输入 IP 地址(见图1),然后就可以装载精智面板。
图. 1
在项目的实际应用当中,有一种控制它不属于固定的控制步骤,先操作什么设备往往会根据生产情况自动调整设备的启动停止顺序。然而这种控制程序无法在PLC程序中是无法完全写出所有路径,往往需要在生产过程动态调整控制顺序,在西门子称为顺序控制系统(SES).顺序控制一般分为上位机+PLC控制两部分,上位机负责动态生成控制路径(顺序步骤)下达到PLC控制程序中,PLC负责控制设备的启动停止.
案例工艺(进料系统):投料刮板机A+投料提升机B+投料分配器C+投料目标仓位D1、D2、D3、D4.,根据生产要求,在生产过程中操作者会根据实际情况将物料投入到D1,D2,D3,D4仓中的任何一个,要求自动启动设备ABCD完成设备的控制。
分析:按传统控制方式我们可能会写4条路径的PLC控制程序(A-B-C-D1,A-B-C-D2,A-B-C-D3,A-B-C-D4),如果工艺中间多个分支,那负责控制控制顺序步骤的程序将会变得很庞大。而且每种生产过程对每台设备的控制参数要求不一致(压力、位置行程等),以及相同控制顺序由于进入的不同物料参数都有可能不一致等,这样程序就显得复杂。我们参考西门子SES控制系统,根据项目的实际控制需求,设计出一套属于适合自己生产工艺的SES控制程序。
原理:上位机采用WINCC控制系统+自定义开发控件的方式,在自定义控件中,我们采用类似导航性质思路,根据生产生成需求的不同,动态生成PLC所需的控制路径、每台设备所需的控制参数(电流、压力、行程、连锁关系等),行程类似配方的形式下载到PLC控制系统中,PLC根据下载的控制参数,自动控制需要的设备。
问题:生活中常见各种传送带装着各种物品往复运动,由伺服电机带动链条转动。那么问题来了,由于链条或减速机等各种机械误差,使得每转一圈,定位会差点。日久天长,会越差越多。那么如何消除误差,成了设计者头等大事。
解决办法: 只要加一个光电开关及开关挡块,再写几条程序就可以了。
如下图:
我们以上图为例。共有八个工位。每过一工位,要停一下,完成上下料等工作。每次停下时,要求差值不能过大。否则会造成工件放偏,影响工件的压装,而形成废品。
这里我们引用了西门子的一个功能:同步动作。
同步动作通俗讲就是两个或多个不同的人在同一时间做不同的事。它提供可以同步执行处理程序段的可能性。
动作的执行时间可以通过各个条件定义。这些条件在插补切拍中得以监控。这些动作是实时事件的反应;执行并不是程序段交接处进行。
我们在PLC程序加入下面两段程序。
这两段程序意思是挡块开关的上升沿来了,给NC一个指令。挡块开关来了,给NC一个指令。
在NC写入如下程序:
AA:
N10 WHEN $A_DBB[3000]==1 DO DELDTG;
N20 G0G91 A=360/8
N30 IF $A_DBB[3001]==1
N40 A=R100
N50 ENDIF
。。。
GOTO AA
M30
这段程序的意思是当挡块开关上升沿来时,NC自动删除N20 所编A轴剩余行程。A轴会自动停下来,不走了。而N30段挡块开关来时,A轴会走R100这个值。那么R100值是如何得到?这就用到了调试工了。当我们把N30以后的程序分掉,按下循环启动,会发现A轴在没有碰到挡块开关前,会不断往复运动。直到碰到挡块开关,A轴自动删除剩余行程并停下来。好了让我们用手机记录下此时的A轴坐标。并人工点动A轴,让它到达工位的原始位置。并记录下此时A轴坐标。用后记录的A轴坐标减去前记录的坐标就是R100的值了。
这样做了以后,A轴每转一圈,就会碰到挡块开关,自动删除剩余行程,并自动正自已的行动坐标。