6ED1055-1MD00-0BA2
LOGO! AM2 RTD 扩展模块, SV:12/24V DC, 2AE-50...+200°/C Pt100/1000 用于徽标!8
可选择的强制性产品
6EP3321-6SB00-0AY0
徽标!电源 12 V / 1.9 A 稳定电源 输入:100-240 V AC 输出:DC 12 V / 1.9 A *EX 批准不 可用*
6EP3331-6SB00-0AY0
徽标!电源 24 V / 1.3 A 稳定电源 输入:100-240 V AC 输出:DC 24 V / 1.3 A *EX 批准不 可用*
版本分类eClass1227-24-22-01eClass627-24-22-01eClass7.127-24-22-01eClass827-24-22-01eClass927-24-22-01eClass9.127-24-22-01ETIM7EC001420ETIM8EC001420IDEA43562UNSPSC1532-15-17-05西门子PLC常用数据的编程实例
当数据用规定的格式输入后,在西门子plc的内部存储器中均需要以二进制的形式存储,二进制格式与实际数据间的关系较复杂,它常常会给程序的调试与检查带来困难,为了更清楚地说明数据的使用方法与存储形式,举例如下。
【例1】利用数据装载指令(指令代码L),将各种十进制、十六进制数据读入到累加器ACCU1。
程序指令如下:
①L 27 ,/将单字长(16位)的十进制常数27读入到累加器l中;
②L1#一1 //将双字长(32位)的十进制常数一l读入到累加器l中:
③L2#1010 0000 0010 0001 //将单字长(16位)的二进制数1010 0000 0010 0001读入到累
加器l中;
④LDW#16# AOFl_BCD4 //将双字长(32位)的十六进制常数AOFl BCD4读入到累加器l中;
⑤L-2.5 //将双字长(32位)的浮点数“-2.5”读入到累加器l中(有关浮点数c1勺存
储格式见后述)。
【例2】利用数据装载指令(指令代码L),将ASCII字符“END”读入到累加器1中,并确定其执行结果。
程序指令如下:
LfEND. ∥将ASCII字符“END”读入到累加器l中
对照表8-5.2“ASCII代码表”可知,E=45;N=4E D=44,所以本字符在累加器1中的执行结果为:“454E44”。
【例3】利用数据装载指令(指令代码L),将定时器时间值、计数器计数值读入到累加器1中,并确定其执行结果。
程序指令如下:
①LT#500ms ∥将定时器时间值(500ms)读入到累加器l中;
②LC#100 //将计数器计数值(100)读入到累加器l中;
定时器时间值、计数器计数值以常数形式存储,因此,累加器l的执行结果分别为500与100。
【例4】利用数据装载指令(指令代码L),将2字节(16位)的常数100、20分别读入到累加器1的高、低字节中,并确定其执行结果。
程序指令如下:
LB# (100,20) //将2字节(16位)的常数读入到累加器l中;
本指令与常数读入指令“L 27”的区别在于:
L 27指令:执行指令是将常数27转换为二进制后存储于累加器1,因为27=(1B) 16,所以累加器l的执行结果为“00 1B”。常数值的范围为0~65535(即O—FFFF)。
L B# (100,20)指令:执行指令是将2个十进制常数转换为二进制后,分别存储于存储器的高字节与低字节中,因为100=(64)16;20=(14) 16,所以累加器1的执行结果为“64 14”。指令中括号内的常数值的范围为0~255(即O~FF)。
相关指令:
LB# (100,20,12,15) //将4字节(32位)的常数读入到累加器l中。
【例5】利用数据装载指令(指令代码L),将4字节(32位)的地址数据10.2、M10.2分别读入到累加器1中,并确定其执行结果。
程序指令如下:
①LP#10.2 /,将双字长(32位)的地址数据读入到累加器l中;
②LP#M10.2 //将双字长(32位)的地址数据读入到累加器l中;
注意:地址数据在S7中的存储格式如下:
地址位(bit31):“0”指针寄存器不含地址符,地址符bit24~bit26应为0;“l”指针寄存器含地址符,地址符由bit24~bit26指定。
地址符(bit24~bit26):地址位(bit31)为“1”时用于指定存储器地址,地址的编码如下:
000:地址P:
001:,地址I;
010:地址Q;
011:地址M;
100:地址DBX;
101:地址DIX;
110:地址L:
111:地址VL。
因此,在累加器1中,指令“L P#10.2”的执行结果为“0000 0052”;指令“L P#10.2”的执行结果为“8300 0052”。
【例6】利用数据装载指令(指令代码L),将日期数据2006-11-18读入到累加器1中,并确定其执行结果。
程序指令如下:
LD#2006_ll—l8 //将双字长(32位)的日期读入到累加器l中;
注意:日期在PLC中的存储格式为表格数据,且以1990年1月1日作为起点“O”;以后每天增加1,1990年1月2日为“l”。因此,2006年11月18日对应累加器l的日期存储数据为:6165;而2007年11月18日对应累加器1的日期存储数据为:6165 365= 6530。
【例7】利用数据装载指令(指令代码L),将时间数据13:20:33.125s读入到累加器1中,并确定其执行结果。
程序指令如下:
LTOD#13:20:33.125 ∥将双字长(32位)的对阅读入到累加器l中。
注意:时间在PLC中的存储格式为以ms为单位的数据,如:
13:20:33.125s =(13×3600 20×60 33.125)s= 48033125 ms
因此,执行本指令后累加器1的时间存储数据为:48033125。
西门子PLC MODBUS地址问题原因分析西门子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。