故事作者:万泉河

最近创作

看看TA的故事

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

已锁定

万泉河

  • 帖子

    10900
  • 精华

    132
  • 被关注

    1008

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

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

1861

11

2023-06-01 22:32:48

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系列的**文件中,2个群都已经满员,然而游客也可以直接下载群文件,所以不会再扩展新群。****到历史文章中得到。 或者微信私信我获取。   

 

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

 

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

 

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

 

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

 

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


0601 【万泉河】优雅的80台MODBUS通讯的变频器例子 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3363条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。