PLC高手必备技能,施耐德PLC与变频器的CANopen通讯程序编写
在前文 PLC高级应用技术,PLC与变频器的CANopen总线通讯控制之线路介绍,PLC高级应用,PLC与变频器总线(CANopen)通讯之硬件组态篇中分别向大家介绍了PLC和变频器的CANopen通讯的线路知识和硬件组态,当我们完成了上述两项任务之后,就进入了正题,通讯程序的编写,今天就给大家如何写程序。接上两篇,仍然以施耐德CODESYS平台的PLC编程软件Somachine 为例讲解。变频器采用施耐德ATV71。
当我们把硬件组态程序下载到PLC中之后,PLC会主动寻找从站,建立通讯连接,如果线路没有问题,从站的参数设置正确,PLC与从站之间的总线通讯会自动完成,PLC会给出通讯正常的信号,一般是个布尔量。施耐德CODESYS平台的PLC处理起来比较麻烦,需要利用几个功能块把它读出来,在这里不再展开讨论。一般我们都把这个状态做在触摸屏上,作为监控。但是,如果我们只是想看到这个状态,不做在触摸屏上,是可以在编程软件中直接看到的。
图一
如 图一所示,这软件中的硬件树,注意看红色的三角形,表示通讯是失败的,因为小编只是打开了仿真功能,并没有连接实际的从站。如果这个三角形是绿色的,就表示通讯正常了。在施耐德的Somachine软件中,所有的硬件组态都是采用此种形式来告诉编程开发人员,硬件是否正常。
小编曾经说过,欧美系PLC和日韩系PLC是不同的,欧美系PLC注重功能块的概念,不存在所谓的指令,因此,对于从站的读取和写入,都是通过功能块来完成的。由于是同一品牌的通讯,官方都已经开发好了专门的功能块,也就是符合PLCopen标准的功能块,我们直接调用接可以了。
1 变频器使能对于变频器的使能采用 MC_POWER_ATV 功能块。其中前面的MC_POWER是标准的PLCopen功能块,后面的ATV是施耐德官方在开发此功能块时加上的后缀,用来区分不同的从站,ATV是施耐德变频器的型号代码。同样,不同系列的变频器和伺服驱动器时通过后缀来区分的。
图二
如图二所示,这是对两个从站的使能操作,注意看红色圆圈部分,这是对不同从站的区分,功能块中输入引脚Axis表示我们要操作的从站轴号,在欧美系PLC中,几乎我们能操作的对象都是可以定义成变量的,同样,对于总线通讯的不同从站,也是按不同变量处理。因此,此处我们要填写我们在硬件组态中定义的轴名称。
当变量A 和变量B 分别为高电平时,就会对变频器进行使能操作。 输出引脚STATUS 和 ERROR是表示使能状态的,同样,我们也可以引入变量对此进行处理。
2 速度控制
变频器主要就是进行速度控制的,同样,它也是有相对应的功能块来完成的。
图三
如图三所示,通过MC_MOVEVELOCITY_ATV 来进行速度控制,大家可以看到,它是可以和使能模块共享轴号这个输入引脚的,这就是使用CFC编程语言的好处。当变量E_Fan为TRUE的时候,变频器就会以变量Vel_Fan定义的速度运行。
3 变频器的停止
变频器的停止和我们使用硬接线的停止是不同的,必须使用专门的功能块
图四
如图四所示,变频器需要使用MC_STOP_ATV 功能块来停止,当变量S_Fan为TRUE的时候,变频器就会停止。
以上,就是通过总线对变频器进行控制时基本的程序的编写,大家可以看到,采用CFC语言编写是非常便捷的,当然,日系PLC采用梯形图就可能不会使用此模式了,但可移植性大大降低。当然,控制变频器不止这三个功能块,还有很多,大家如果使用施耐德PLC可以参考相关手册,如果使用的是欧美系PLC,其套路是差不多的。
寄存器PLC地址与寄存器modbus协议地址
寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以是触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。
寄存器modbus协议地址指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002。在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。
支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应 当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种 “功能”读写而来。 功能码是 Modbus 地址的底层。 如果 Modbus 通 信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此 功能号与 Modbus 地址间的对应关系。
使用 modbus 地址时应注意下述问题:
1)40001~4xxxx 是美国 modicon 公司和 ge 公司 plc 使用的 modbus 地址,它是基于1的地址,即同类元件的首地址为1。西门子 plc 的 modbus 地址是基于0的地址。
2)美国的 modbus 地址左起第2位用来表示元件的类型,例如 i0.0的 modbus 地址为010001。 因为数据类型已经包含在功能码中了, 西门子的 i0.0的 modbus 地址实际上为000000, i2.0的 modbus 地址为 000016(或十六进制数16#0010) ,而不是010017。
3)、无论V寄存器还是M寄存器,里面的不同数据类型(VB、VW、VD、MB、MW、MD)都是基于寄存器内存总字节地址为偏移地址。
4)、在数据报文中,所有的modbus地址都是从0开始的。也就是首次出现的数据项在报文中的地址为0。比如:(All data addresses in Modbus messages are referenced to zero. The first occurrence of a data item is addressed as item number zero.)
5)、Modbus地址实际上分为两种情况。
第一种情况: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通信的程序,首先需要确定Modbus RTU的报文结构。他们一般不熟悉PLC,因此PLC的编程人员往往需要和上位机软件的编程人员一起来讨论Modbus的报文结构。
最容易出问题的就是报文里Modbus地址与PLC存储区地址的对应关系。
S7 PLC手册给出的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 modbus地址对照表
000001至000XXX是实际输出,对应%QX0.0-%QXX.X
010001至010XXX是实际输入,对应%IX0.0-%IXX.X
030001至030032是模拟量寄存器,对应%AIW0,16位一路依次类推
040001至040XXX是保持寄存器,对应%MX0.0-%MXX.X,1对1,要是%MW就对应16位,依次类推。施耐德PLC中 W表示字 16位,D表示双字 32位。比如:%MW10和%MD10。B表示字节 8位,X表示位。比如:%MB0和%MX0.0~%MX0.7
%MW10.4
%MW10是指一个字,一个字分为2个字节,一个字节8个位,也就是说%MW10中有16个位,从%MW10.0~%MW10.15。
%QW0.5.1.0.10
Q是输出 ,0是机架,5是0号机架的第五个模块,1是第五号模块的第一个通道,0是第一个通道的第0个字,10是第0个字的第10个位。
无论MX、MB、MW、MD都是基于内存总字节地址为偏移地址,也就是以%MB之后的地址为偏移地址。
施耐德plc寄存器地址对应的modubs地址
寄存器地址 modubs 说明 公式
%QX1.0 000001.0 开关量输出 %QXx.y=000001+x.y
%IX1.0 010001.0 开关量输入 %IXx.y=010001+x.y
%AIW0 030001 模拟量输入 %AIWx=030001+x
%MD40 0400801 保持寄存器 %MDx.y=040001+x*2.y
%MW50.0 040051.0 保持寄存器 %MWx.y=040001+x.y
%MX100.0 040051.0 保持寄存器 %MXx.y=040001+x/2.y
注意:
1、%MX100.0表示某个字节地址,因为%MW50这个地址中包含了%MB100、%MB101,%MX100.0其实是%MW50的第0位即40051.0
2、%MD40表示双字,%MD40对应的首地址是%MW*2,也就是%MW80,%MD40对应的modbus地址为0400801
西门子s7系列plc modbus地址对照表
例如:地址:40040;对应S7200地址:VW78;对应S7300地址:DB1.DBW78;
三菱FX系列PLC modbus地址对照表
OMRON PLC地址转MODBUS协议对照表
将OMRON PLC接入支持MODBUS协议的上位DCS系统中,通过ASC模块可满足用户的这一需求。具体地址对照关系参考下面链接。
https://wenku.baidu.com/view/3ff1d16da5e9856a5712601d.html
台达PLC寄存器地址与Modbus寄存器地址对照表
具体地址对照关系参考下面链接。
https://wenku.baidu.com/view/f884db6d102de2bd97058836.html
永宏PLC寄存器Modbus地址表
具体地址对照关系参考下面链接。
https://wenku.baidu.com/view/4843e77c30126edb6f1aff00bed5b9f3f90f72c8.html
信捷PLC寄存器Modbus地址表
相关问答
施耐德怎么写程序库?
施耐德编写程序库的方法通常是使用编程语言(如C++、Python等)来创建可重用的代码模块,以实现特定的功能。他们会首先确定程序库的需求和功能,然后设计和实现...
施耐德变频器11是什么代码?
施耐德变频器显示err11是电源电压不足。原因及处理办法:报警时可以用万用表或试电笔测试伺服驱动器的电源输入电压和输出电压是否正常,如果不正常,...施耐...
施耐德伺服控制器的故障代码?
1.AL001:过电流,主回路电流值超越电机瞬间最大电流值1.5倍时动作。2.AL002:过电压,主回路电压值高于规格值时动作。3.AL003:低电压,主回路电压值低于规...
施耐德伺服报警代码al180什么意思?
施耐德伺服报警代码al180是表示伺服电机的位置控制定位不正确,首先,确认控制器实际发送的脉冲的当前值是否与预期的一致。如果没有,请检查并更正程序;还有,...
施耐德变频器电流代码?
打开中文显示面板,在1.2监视里面就可以看见运行电流。或进入6监视屏幕菜单,6.1参数行选择,取消最后一个的参数显示把电机电流选上,退出来以后右上角就可以看...
施耐德310变频器故障代码?
施耐德变频器上出现的故障代码为AnF,那么就代表着变频器的负载发生了滑脱的状况,也就是变脾气你的编码器的速度和初始值也不匹配的。首先,我们要检查电机的参...
施耐德变频器报警代码含义?
施耐德变频器的报警代码含义为电动机超温出现这种故障现象时,检查与处置方式如下:1、检查变频器的运行参数与保护参数设置是否满足电动机运行要求2、检查电...
施耐德变频器故障代码?
答:施耐德变频器故障代码为eph1。eph1代表着变频器的负载发生了滑脱的状况,首先检查电机的参数是否稳定和负载的大小,然后再更换一个制动电阻器和机械连轴器...
施耐德变频器tnf什么意思?
施耐德变频器tnf是自整定故障意思。自整定故障。可能原因:1,特种电机或功率不适合变频器的电机。2,电机没有与变频器连接。修复措施:1,检查并确认电机/变...
施耐德变频器atv12代码nse?
你说的应该是NST,自由停车的意思。很容易看错的。重新上电,看是否显示。如果一直显示可能是控制自由停车的线断了,或者接法有误。你说的应该是NST,自由停车...