优雅的80个MODBUS通讯的变频器例子

电子说

1.3w人已加入

描述

0601 【万泉河】优雅的80台MODBUS通讯的变频器例子

为什么是80?80是我做的一系列PLC编程的例子,前面做过80个双联开关,80个模拟量的处理。现在把这个80系列继续做下去,准备控制80台MODBUS通讯的变频器。

有人会骂:胡闹!MODBUS通讯怎么可能带那么多站点!

没错,一条RS485总线肯定带不了这么多。所以我们打算使用MODBUS TCP转MODBUS RTU的网关来实现。一个网关转换出来一条485总线,可以带10台RTU(大约),那么8个网关就可以带80台了。当然也可以直接买那种一台网关带8路485输出的网关。

总之,就不在PLC上扩展RS485口了,反正数量也不够,价格也没有优势。所以,对PLC来说,做的只是MODBUS  TCP通讯,当然原理和RTU是完全相同的。

都需要轮询。即, 每条总线上根据其挂载的RTU的数量以及需要的读写数据区进行循环读取,而各条总线之间互相不干扰,各自循环。

很多品牌的变频器原生支持MODBUS RTU通讯接口,所以这种通讯方案成本造价比较低廉,在工程项目中应用比较广泛。

我们这里控制的是ABB  ACS系列的变频器。演示了针对ABB变频器所制作的专用的FB模块。然而后续也会有插曲,比如实际施工时,因为供应商原因或者采购周期原因, 其中的个别几台ABB变频器被替代成了DANFOSS变频器,然而我们如何不受干扰,如何通过模块化的手段,适应了这种现场的变更,而没有被折腾到崩溃。相信有一定工程经验的同行都或多或少会有过这样的经历。

实现的过程

按照我在宇宙观的文章里的观点, 在运行逻辑固定的情况下,一个控制对象完全可以实现模块化封装。那么要控制一台ABB变频器,我们需要送给它的参数只有2个:子网号和MODBUS站地址。

通讯

然后它就该能够自动完成数据的轮询读写。而至于它的数据区的地址,需要的数据的数量,都在这个块里面了。只需要根据产品说明书的通讯部分,查阅后设计好这个FB块即可。  外围原本也不需要知道。

而至于485总线的通讯参数以及网关的IP地址等,都是在网关的相关参数部分实现,具体的设备对象是不需要每个都录入的。

在完成通讯功能的基础上, 控制的其他内容, 按照行业特点和需求,比如有的行业习惯于用通讯只读取状态和电流频率等数值,而对变频器启停控制仍然需要通过端子实现, 那么上述封装还可以增加IO管脚,这里不再演示。

我这里讲到的当然不是畅想,而是已经完成的历史。

程序的具体调用情况:

通讯

程序中有屏蔽的部分,代表实际应用中,如果有设备减少, 也只需要屏蔽相应的调用,不再需要修改逻辑,数据区的排列,循环次数等等。全都不需要。需要的只是将调用这一行屏蔽。

而在声明区

通讯

看到第5台设备竟然诡异地变成了DANFOSS, 原因也是现场临时改动了变频器的型号,那么我们也只需要简单修改调用的FB的数据类型。其他的都不需要再动了。

当然,为DANFOSS又设计了专用的FB块。因为它的控制字,状态字地址与ABB都不同,所以当然需要专门再定制。

我曾经写过文章计划将所完成的这套GML MODBUS库的方法推广到西门子之外的其它品牌的PLC。然而响应者寥寥。可想而知我还是走的太超前了,同行们还都停留在原有的每个项目都去做程序做轮询,通过读取数据到一个大的数据块,然后控制逻辑中使用的模式。也是我自己曾经所采取的方式。

现在计划逐步放开分享这部分的程序源代码。包括所有品牌型号的标准化的学员,以及用量大于等于3台的WANQ的用户都可以免费得到。看到文章后可以私下向我索要。各位得到后在此基础上再发展研发的其它产品的模块,请务必再回馈我一份。完整的内容应当是一个FB以及这个通讯单元的应用说明书。

程序是V17下做的。原本是库函数在更低的环境下做的,调试也完全没有问题。只不过我现在电脑上只有V17,所以就用V17演示了。你如果要在低版本下实现,需要逐个块的内容逐个复制迁移到低版本中。大部分程序块是用SCL写的, 应该还算方便。

西门子之外的其它品牌的标准化的学员,你也只能得到V17的这个程序版本参考后可以在其它品牌中实现。那些品牌的MODBUS通讯我都没做过,所以我自己做不了。这些方面的拓展,有劳各位了。SMART 200的GML库函数我做过了,但控制对象不是变频器,这部分的学员可以私信我获取,但你需要做个ABB或者其它品牌的变频器的应用回馈我。 

除此之外,如果有人要移植到其他品牌中,做的过程中可以咨询我,我可以给予一些帮助。

而对于用户之外的更多的同行,如果对这个框架结构感兴趣,可以分享一个删减版,我会把MODBUS 通讯部分的功能块删除后再打包后分享。获取方式我会分享到80系列的QQ群文件中,2个群都已经满员,然而游客也可以直接下载群文件,所以不会再扩展新群。群号到历史文章中得到。或者微信私信我获取。  

虽然这个分享是有删减的, 但仍然是有价值的,删除的只是MODBUS通讯部分的6个功能块而已。而其他的模块化的封装,包括ABB变频器, DANFOSS变频器的控制块,以及我以前提到过的中央报警指示灯HA2的块,想了想也都保留在里面了,有爱好学习的可以参考。

咱们行业的习惯,大家还是更习惯自己的功能块自己用,用着放心。所以大家可以在参考我提出的思想的基础上自己补齐并调试实现。

RS485网络中不同子网的MODBUS站号是可以有重复的,当然也可以不重复。 这些都是随现场调试人员而定,只需要对应正确就可以。

另外,同一个子网上,也有可能不仅仅挂变频器,还会挂其他的仪表等设备,只需要在一个子网内不与现有设备的MODBUS站号冲突即可。但在程序的编写方面,则是在另外的环节,比如我有可能再写一个80台电能表的例子。然而与变频器毫无关系。即便同处一个485网络,也不需要再去协调轮询周期。

即, 那些把循环指令当核心算法的同行们可以知道了,循环只是在通讯逻辑内部实现的,不需要时刻挂在脑门上。

审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分