我们做程序库封装的基本要义是高内聚低耦合, 而评价低耦合的终极体现则是使用实现过程的优雅程度。
换大白话说便是,即便一个啥都不懂的小白,经过简单的辅导,就可以实现应用。具备应用到工程现场中的能力。而至于原理不懂, 无所谓。能独立先把工作任务完成了最重要。这就是优雅。
我曾经发布了《0601 【万泉河】优雅的80个MODBUS通讯的变频器例子》,并将例子有偿或无偿分发给了部分感兴趣的学员。
然而发现,其实MODBUS通讯的技能, 并不是工控行业必备。有一些做非标设备的学员,各种轴类,张力控制应用等非常娴熟,然而十几年工作经验,都有可能没用过MODBUS通讯。因为实在用不到。
而有用过的学员, 经验也非常少。可能也就有过一次两次跟MODBUS仪表的通讯经验,所带的站点也不过是1-2台。所以80的例子就对他们来说有些上头。有学员来参加会议从飞机场见面后,就开始反复问我程序块中的SUBNET接口是什么。反复解释都不能理解。主要是他们的工程应用中没有机会遇到我们一个CPU下动辄几百台RTU需要控制的情况。
所以, 直到做相关行业的学员,在会上做了应用分享之后,疑惑才稍微打消。
然后,我在会上就许诺大家,我会做一个小白教程,带大家学会使用这套GML库的方法。所以本文另一个题目可以叫做: GML 库函数使用方法。
需要的设备:
1,一台CPU1214。
2,一台电脑。
即,我们可以在只有一台电脑+一台CPU的情况下,就完成MODBUS通讯实验学习。当然,也有可能不使用实体的CPU硬件,只用一台电脑,电脑上用PLCSIM的某个版本也可以实现。但我因为有这个CPU硬件,而电脑上跑不起来更高性能的PLCSIM,所以就没做这方面的测试验证。欢迎有读者参照本文做完实验后,可以再尝试在PLCSIM中验证实现。然后把是否可行的结果告诉我。
电脑上需要的软件:
1,TIA PORTAL V17
2,MODSCAN
3,MODSIM
以下是实验的具体步骤:
步骤1:
PORTAL软件中打开80变频器程序,检查CPU的IP:169.254.1.100
则设置电脑的网卡的IP为同网段,比如169.254.1.13。
步骤2:
打开程序中的NM_ACS500 (FB32),看到程序中读取变频器的频率和电流分别在4005和4006 。那么我们知道了,如果相应的地址有数据了,并且通讯成功了,PLC程序监控中就会有数值。
当然,这部分工作是倒叙的,是在已经有现成的设备块的情况下。而实际应用中,你应该根据所要通讯的设备的数据表来编写相应设备的控制程序。
步骤3:
运行MODSIM,打开MODBUS TCP通讯,并将40005和40006设置为数值自动增长。这里的device ID为1, 代表站地址为1,也可以再新开一个窗口,地址为2,则模拟了地址=2的站。
步骤4:
运行MODSCAN来检查从站通讯,设置通讯目标的IP为本机IP,或者127.0.0.1
然后可以读取到数值。然后MODSCAN可以关闭不再运行。
步骤5:
PLC程序中打开FB36:MTCP_X7v4
程序段3中IP4=13,即电脑的IP。这里是SUBNET=101,如果有更多的网络总线,可以为102,103等等。这个块里最多做了7条线。每条线对应了不同的IP。而工程应用中,同事们已经最多做到了10条,都是在这里简单复制增加。
步骤6
设备块(变频器)的实例化调用中,检查调用的SUBNET和站地址对应正确。
我前面给的例子的版本中,忘记了这里的MODBUS TCP通讯的SUBNET是从101开始的,因为原本做的是MODBUS RTU,定义在100以下,是另外一个程序块中实现的。那个时候大量使用的CP ptp模块来实现和RTU的通讯,后来增加了MODBUS TCP网关的方式,库函数中就做了2种方式兼容,再后来基本不再使用PTP模块,而是统一都用网关来转换,就把旧的模块删掉了,而SUBNET的定义还没变。
程序修改下载之后,CPU切换到运行,自动就通讯上了,ABB01站的频率和电流的数据已经有数值了。
而再MODSIM中增加站号2和3的数据模拟,相应的站的数据也会通讯成功读上来。
更进一步,如果增加一台电脑,比如运行虚拟机,通过不同的IP中运行MODSIM的数据仿真,也可以实现更多SUBNET总线的数据通讯。
这些都是可以直接通过组态和简单设置数据实现的。
而实现之后发现,对MODBUS通讯的机理特别是轮询部分丝毫没有涉及,有多少个站就平行调用多少个站的实例。就像PROFINET 的PN站点一样简单。
对MODBUS通讯需要做轮询这一点, 其实只有西门子和三菱等老牌PLC系统里面才需要做。而对于新的CODESYE等环境的平台, 子站都是组态之后就可以直接通讯的,与ETHERCAT, PROFINET并没有多少区别。这应该也是一大半同行对轮询不太感兴趣的原因。因为他们根本用不到啊!
所以倒过来看, 掌握所谓的轮询的技能也并不是行业必备的必杀技。你完全可以不选用这些产品, 以绕过这些难点嘛!比如顶多可以花点钱买个贵一点的PN/MODBUS网关,也可以省掉这些工作量。而实际上,我们开发这一套库函数,也只是因为以前的方案选用的专用的网关产品太贵,工程中反复用到,花费有点多,出于要省一点成本的目的,而另外花出了几个月的时间做的库。
最后对那些白嫖不到却强烈要求开源的同行说一下, 所谓的开源,是建立在各方水平级别相等的基础上的。至少对方开放源代码的代码,自己要能看得懂,理念方法要能认同,要有共同的价值观。最好还要能对方开源的内容有改进有贡献,这种开源才有意义。否则都算不上真正意义的开源。开源从来不是单向输出,也更不是什么道德楷模。
我近几年专门制作了不少例子的源代码供同行学习提高。比如80系列的一些例子,80模拟量的标准答案等,然而收效并不太好,大多数的同行表示从中学到了技能。然而也有不少的声音认为我做的太简单而借此反而嘲笑攻击我。甚至有人在我的帖子下面回复:看到有人骂你我就放心了。
我不知道他放的什么心。我唯一可以让他, 以及让所有同行放心一点的是,只要有一个这样谩骂的声音在,我就不会免费开源。毫无价值,毫无意义。我没有必要去讨好这样的价值观的同行。
审核编辑:汤梓红
-
cpu
+关注
关注
68文章
10855浏览量
211610 -
接口
+关注
关注
33文章
8580浏览量
151046 -
变频器
+关注
关注
251文章
6549浏览量
144547 -
MODBUS
+关注
关注
28文章
1802浏览量
76969 -
通讯
+关注
关注
9文章
902浏览量
34892
原文标题:0806 【万泉河】手把手带小白做MODBUS通讯实验
文章出处:【微信号:PLC标准化编程,微信公众号:PLC标准化编程】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论