无锡西门子PLC总代理商
客户1:“西门子热线工程师,我用第三方组态软件(如Intouch、iFix、组态王等),想在画面上设置定时器T的时间,以便人工及时修改。但组态软件中没有S5Time数据类型,怎么办?”
客户2:“我想在PLC程序中,用整数INT给定时器T的预设时间赋值,怎么做?”
客户3:“我用的第三方组态软件(如Intouch、iFix、组态王等),想在画面上设置PID积分时间,但FB41的积分时间TI是Time类型,组态软件中没有Time类型,怎么办?”
客户4:“在PLC程序中,数据类型S5Time如何转换到整数INT类型?”
以上四个客户,遇到的问题实质上是一样的,就是整数INT、时间S5Time及Time之间的相互转换。
如何转换,要弄清整数INT、时间S5Time及Time的数据结构。整数INT是16位的数据:
时间S5Time是16位数据,BCD码格式:
时间Time是32位数据,类似于双整数DINT:
三者之间的转换即是整数INT、双整数DINT及BCD码之间的转换。可以根据数据结构特点,自己编程实现相互转换,这样比较复杂。利用库函数FC33/FC40是简单方便的。方法如下:
1. 整数INT到时间S5Time的转换方法:
INT -> I_DI指令 -> DINT -> MOVE指令 -> Time -> 库函数FC40 -> S5Time。
2. 整数INT到时间Time的转换方法:INT -> I_DI指令 -> DINT -> MOVE指令 -> Time。如图示:
3. 时间S5Time到整数INT的转换方法:
S5Time -> 库函数FC33 -> Time -> MOVE指令 -> DINT -> 取其高字部分,用MOVE指令 -> INT。
比如我想把项目程序内的I0.0全部替换成I0.1,应该怎么来操作,因为项目比较大,I0.0出现了上百次是在上百个不同的块中,如果要一个一个去替换的话会很麻烦,请各位答侠能不能提供一次性全部替换的办法。我以前用欧姆龙是有这个功能的。
图中的替换是不能实现项目全部替换的.
答:这种方法在西门子PLC中称为:重新接线。有三种方法完成程序的重新接线(适应新的地址):
1、用SIMATIC 管理器,通过给出旧地址和新地址完成重新接线 (该方法不需要符号表)。
2、用源程序重新接线,这种方法需要符号表。
3、用“符号优先”重新接线,这种方法也需要符号表。
种方法:1、在SIMATIC管理器中,选择“Blocks”文件夹,选择菜单命令 Options -> Rewire 见图一。
2、在重新接线窗口中,输入旧地址和新地址,如果需要,激活“All addresses within the specified address area”(就是说对相关地址的基于位的所有访问 也修改)这里在旧地址中输入I0.0,新地址中输入I0.1。见图二,图中下方的“指定地址内的所有存取(不包含外围设备)”的前面应该打钩选中。
3、用“OK”确认。如果需要,可以打开重新接线结果的报告文件。见图三、图四。
图一
图二
图三
图四
一、概述
很多自动化工程师在实际应用中使用组态软件与PLC进行modbus通讯,组态软件作为主站PLC作为从站。组态软件来采集PLC数据使用这种方式是比较常见的。反向的利用modbus协议让PLC去读组态软件里的数据确有着特殊的意义,在某些工控场合也是很好解决方案。紫金桥软件在组态软件行业里推出了modbusserver,既紫金桥modbusserver可以作为modbus从机为其他软件和硬件设备提供数据,在这篇文章中对此功能我们详细地加以介绍。
二、S7-200Modbus主站的实现
1、S7-200Modbus 通信协议介绍
Modbus 是一种单主站的主/从通信模式。Modbus 网络上只能有一个主站存在,主站在 Modbus网络上没有地址,从站的地址范围为 0 - 247,其中 0 为广播地址,从站的实际地址范围为 1 - 247。在 S7-200 CPU通信口上实现的是 RS485 半双工通信,使用的是 S7-200 的自由口能。S7-200支持 Modbus 通信协议: S7-200CPU 上的通讯口 0 和 1 (Port 0 和 Port 1)通过指令库支持 Modbus RTU 主站模式。
2、S7-200Modbus主站的配置
西门子在 Micro/WIN V4.0 SP5 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。要使用 ModbusRTU 主站指令库,须遵循下列步骤:
⑴安装西门子标准指令库
⑵按照要求编写用户程序调用 Modubs RTU 主站指令库 Modbus RTU 主站功能编程使用 SM0.0 调用MBUS_CTRL 完成主站的初始化,并启动其功能控制:
具体参数的解释如下:
EN使能:必须保证每一扫描周期都被使能(使用SM0.0)
Mode模式:常为1,使能 Modbus 协议功能;为0 时恢复为系统 PPI 协议
Baud波特率:设为9600,要与从站波特率对应
Parity校验:校验方式选择 0=无校验
Timeout超时:主站等待从站响应的时间,以毫秒为单位,典型的设置值为1000毫秒(1秒),允许设置的范围为1-32767。注意:这个值必须设置足够大以保证从站有时间响应。
Done完成位:初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG 读写操作
Error初始化错误代码(只有在 Done 位为1时有效):
0=无错误
1=校验选择非法
2=波特率选择非法
3=模式选择非法
⑶调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;
如图1所示,具体参数设置如下:
Slave从站地址:可选择的范围 1-247
RW读写操作:0=读, 1=写
注意:1. 开关量输出和保持寄存器支持读和写功能
2. 开关量输入和模拟量输入只支持读功能
Addr读写从站的数据地址:选择读写的数据类型 00001至0xxxx-开关量输出10001至1xxxx-开关量输入
30001至3xxxx-模拟量输入
40001至4xxxx-保持寄存器
Count通讯的数据个数(位或字的个数)
注意: Modbus主站可读/写的大数据量为120个字(是指每一个 MBUS_MSG 指令)
DataPtr数据指针:1. 如果是读指令,读回的数据放到这个数据区中
2. 如果是写指令,要写出的数据放到这个数据区中
Done读写功能完成位
图1西门子Modbus RTU 主站协议库
三、紫金桥软件Modbus从站的实现
1、紫金桥modbusserver的设置
Modbus 服务器可以把紫金桥数据库中的点映射为Modbus 设备的HR寄存器,当前版本为3.0,支持串口和TCP/IP访问方式,支持HR区的读和写方式。也就是说支持03、06、16 号命令。
具体操作是先在紫金桥软件的安装目录中找到 ModbusSerSet.exe并运行。其中左侧为变量配置显示区,它分为三列,分别是序号、数据库位号和Modbus地址。后两列的意义是把某一个数据库位号和一个Modbus地址建立映射关系。再调出系统设置对话框配置从机地址、串口等参数或以太网端口号、数据格式等。
2、通讯过程
配置完成后,先运行紫金桥软件在紫金桥软件的安装目录中找到 ModbusServer.exe 并运行。
从上面的通讯过程看到,S7-200与紫金桥modbus server通讯的响应速度为毫秒级的。