0806 【万泉河】手把手带小白做MODBUS通讯实验
我们做程序库封装的基本要义是高内聚低耦合, 而评价低耦合的终极体现则是使用实现过程的优雅程度。
换大白话说便是,即便一个啥都不懂的小白,经过简单的辅导,就可以实现应用。具备应用到工程现场中的能力。 而至于原理不懂, 无所谓。 能独立先把工作任务完成了最重要。这就是优雅。
我曾经发布了《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模拟量的标准答案等,然而收效并不太好,大多数的同行表示从中学到了技能。然而也有不少的声音认为我做的太简单
0806 【万泉河】手把手带小白做MODBUS通讯实验.pdf