实例分享!告诉你西门子PLC如何通过MODBUS控制变频器
一、MODBUS通信概述
MODBUS协议分为串行链路上MODBUS协议和基于TCP/IP协议的MODBUS 协议。 串行链路上MODBUS协议有MODBUS ASCAII(字符串) 和MODBUS RTU两种 。
200SMART所提供的MODBUS协议库能够支持MODBUS RTU通信。MODBUS RTU 是以16进制的数值进行发送 。
MODBUS ASCAII是以ASCAII码的方式进行发送,一个数据采用RTU方式发送只需要一个字节,而用ASACII码发送需要两个字节,发送时间。
PLC与变频器串口通信有很多通信方式,但常用的、首选的就是MODBUS通信方式 ,在实际的工业控制中应用非常广泛;这一期我们向大家一起分享变频器如何与PLC通过MODBUS RTU的方式进行控制。
二、MODBUS库指令详解
库指令分两种,一个是主站库,一个是从站库。
主站是PLC作为MODBUS的主站主动去读取其他设备的数据;从站是PLC作为MODBUS的从站,其他设备来读取数据;本期我们分享的是PLC作主站,变频器做从站。
STEP7-MinWIN SMART软件自带MODBUS通信库指令
初始化指令:
控制指令:
三、MODBUS RTU的通信格式(协议)
通信协议有:站号、功能码、数据地址、数据内容、校验位、结束符组成。
校验 :N=None无校验 E=Even偶校验 O=Odd奇校验
判断数据位中为1的个数是奇数还是偶数(选择偶校验如16#03中如果为1 的个数是偶数时,校验位为1 ;如果为1 的个数是奇数时,校验位为0 。选择奇校验时,为1的个数是偶数时,校验位为0 ;为1的个数是奇数时,校验位为1)
功能码指定了对从站设备读操作还是写操作,同时也指定了MODBUS寄存器地址的类型,常用功能码有:
四、PLC与变频器通信硬件的连接
在变频器上面涉及通信的端子标记有A/B RS585+/RS485-或RJ11的网口;找到相关变频器的说明书查看通信端口的接线定义,以下是台达VFD-M系列的变频器通信口接线定义
五、变频器通信参数的设置
1、 要实现变频器或仪表和PLC能正常通信,彼此的接口和协议需要一致,除此之外参数的设置也必须一致
P00 设03(频率指令)
P01 设03(运转指令)
P88 设03 (通讯地址,0-254之间)
P89 设02(波特率选择)
P92 设04 (数据格式,200SMART不支持2个停止位,因此只能选04/05任意一个参数)
P157 设01 (变频器默认的就是MODBUS模式)
2、查看说明书的启停、频率给定、运行频率、电压电流等反馈参数的地址
信息帧格式说明
表示读2103 2104两个地址的数据放在17 70 和00 00的地址里
通信协议的参数地址定义:
运行命令地址2000H 频率命令地址2001H
输出频率地址2103H 输出电流地址22104H
输出电压地址2106H 变频器温度地址 210DH
六、MODBUS通信程序的编写
在程序的开始可以加一段初始化对所有的位进行复位。
西门子S7 1200系列PLC作为modbus主站通讯编程方法
在做PLC的modbus主站通讯时,可能很多初学者都会碰到这样一个问题,就是一些读写型变量该如何来处理,因为modbus通讯程序有读和写的函数,但是我们在使用modbus通讯变量时,有读写型的变量,用的是一个地址;而我们读取和写入时,分别会用到两个地址;如何把这两个地址共用到一个地址上去呢?从而实现读写型的变量,通过读函数和写函数最终回归到一个地址。下面以西门子S71200PLC为例进行说明。
西门子官方对于modbus RTU通讯的技术方档请参数如下地址:
http://www.ad.siemens.com.cn/productportal/Prods/S7-1200_PLC_EASY_PLUS/SmartSMS/016.html
以下是我在调试过程中遇到的问题;需要注意。
注意事项:
1、作modbus主站时,缓冲区数据块需把"优化块的访问"的勾去掉,不然会报16#818C错误。
需求:
对一台台达变频器的当前频率进行读取,并可读写设定频率,其中当前频率的地址为42003,设定频率的地址为48194
编程步骤如下:
1、modbus初始化配置:
modbus初始化
2、初始化完成后,将轮询步骤赋值为1
轮询步骤赋初值
3、读取3号功能码,如读取完成,或错误,则将缓冲区数据转移到相应变量。
读取当前频率,并将读取值转存
4、对于读/写型变量,需要先判断设定值是否改变,原则上先写后读。
如下图所示:首先判断设定值是否改变,如未改变,则跳到读取设定值的步骤。
如设定值发生改变,则将设定值赋值到设定值临时变量和写数据缓冲区。然后再跳转至写操作步骤。
在写入前,需将设定值先写进modbus缓冲区
5、将设定值写入设备。MODE需改成1
modbus写入数据
6、设定值写入完成后,将跳转至下一步;直接读取刚刚写入的设定值。这样在上位机界面中就能第一时间反应出来是否写入成功。
写入完成后马上读取设定值
7、在设定值读取后成时,会将读取缓冲区的值赋值给设定值变量;但是在赋值之前,需要再次判断一下;设定值有没有发生改变,因为如果在读取设定值的过程当中设定值发生了改变,而这个时候如果没有判断是否发生改变直接赋值,原来改变的设定值将会被读取的缓冲值替代掉;这样将会造成设定值未写入成功的情况。
所以需要在读取完成后,需要再次判断一下设定值是否改变,
1、如未改变,则将读取缓冲区的值赋值给设定值和临时变量。
2、如改变了,则重新将设定值赋值给临时变量和写数据缓冲区。然后再重新跳转到写数据的步骤;再重新写入,写入完成后再重新读取。
写读完成后的判断
总结:modbus通讯因为是半双工;所以在持载多从站或需要读取写入多段数据时,必须用到轮询;而在轮询时,需要注意读取和写入的时序问题;否则很容易让一个读写型的变量出现未被写入成功的情况。即在轮询过程中有可能还未被写入成功就已被轮询的读取给覆盖了。如有初学者还有疑问或想要沟通的可以点击关注并留言评论。当然也欢迎大家一起沟通。
相关问答
plc1200怎么设置modbus485通讯?
要设置PLC1200的Modbus485通讯,首先需要确保PLC1200具备Modbus485通讯模块。然后,进入PLC1200的编程软件中,选择通讯设置,配置Modbus485通讯参数,包括波特....
西门子plc,modbus通信读取与写入程序怎么间?
仪表读上来的看是否支持IEEE754浮点数格式,先用ModScan测试用浮点数格式(正浮点和反浮点)能否正常显示,如果能正常读取和显示,那么西门子PLC通过MODBUS主站程...
engine如何连接plc?
要将引擎连接到PLC,首先需要确定PLC的通信协议和接口类型。常见的PLC通信协议包括Modbus、Profibus、Ethernet/IP等。根据PLC的通信协议,可以选择相应的通信模...
PLC怎么和485modbus通讯?
第一plc自身带485通讯模块或者是plc可以添加485模块,这需要你知道你自己的plc品牌型号,查看手册是否支持扩展485通讯。例如三菱的fx系列plcfx1s系列是不支持...
ABBPLC与MODBUS如何通信?
ABBPLC和MODBUS可以通过串口通信或以太网通信实现相互交互。1.首先,ABBPLC和MODBUS设备之间需要建立物理连接,串口通信可以通过RS485或RS232接口进行连接,...
西门子S200的modbus通讯怎么编写?
西门子S200系列的PLC可以通过MODBUS协议进行通讯。在编写MODBUS通讯程序时,需要考虑以下几个方面:确定通讯方式:MODBUS协议支持串行通讯和以太网通讯两种方式...
怎样用西门子300plcCPU自带接口实现MODBUS通讯?
s7-300自带的mpi口,不支持modbus通讯协议。如果要进行modbus通讯,需要添加cp341串行通讯模块s7-300自带的mpi口,不支持modbus通讯协议。如果要进行modbus通讯....
plcmodbus可以读写M吗?
PLCModbus协议可以读写M寄存器。M寄存器是Modbus协议中的一种保持寄存器,用于存储设备的状态信息或控制参数。通过Modbus协议,PLC可以读取M寄存器中的数据,实...
modbus功能块如何使用?
对于使用modbus功能块,首先需要了解modbus通讯协议的基本原理和相关参数设置,然后在PLC编程软件中创建modbus功能块并配置通讯参数,包括从站地址、功能码、寄...
PLC与单片机之间实现modbus通信,如何选取单片机型号和制作电路板?还有程序编写?
单片机首先要接个rs485/232芯片和PLC的通讯接口通讯,单片机需要编辑modbus通信程序,网上有很多现成的例程,单片机做modbus可以用protues软件先做个模拟,模拟...