冯工聊数采NodeSCADA · 工控老兵手记 · MES下发PLC S7-200Smart 三菱Q系列MC协议


24年的时候,山东一家食品厂找到我。他们生产不同品类的产品,工艺参数各不相同。比如做肉糜类的时候,设备温度要设到50度,搅拌210秒;换成面食类,温度就降到40度,搅拌120秒。以前换产品,得工艺到现场一台台改设备参数。客户希望把这些工艺参数统一放到MES里管理,让设备根据当前生产的产品,自动用上对应的那一套工艺参数,不用再靠人工。

现场有两个需要解决的麻烦点。

一个是MES。这套MES是客户好几年前上的成品系统,早就交付完了,二次开发费用非常高。可以理解为动不了,没法做二次开发。能用的只有它对外开的一个HTTP查询接口——给它一个产品号,和设备编号,它能返回这个产品的工艺参数。也就是说,MES可以查询数据,但是指望它主动干别的事不现实。

另一个是设备。现场4台PLC,1台西门子S7-200 Smart,3台三菱Q系列,两个品牌、两种协议。而且PLC所在的设备网络,跟MES所在的内网是不通的,两边碰不上面。

这篇就分享一下,在MES动不了的前提下,这件事是如何完成的。


先把网络铺好

PLC不能直接接进工厂内网,这是安全底线。设备网络一旦暴露在内网里,谁都可能连接到PLC,生产设备的安全没法保证。

办法是加一台工控机做中间层。挑了台带双网卡的,常通电不断电。一块网卡接设备网络,连那几台PLC;另一块网卡接工厂内网,能够连接到MES。PLC始终待在自己的设备网络里,从工厂办公网络这头是访问不到的,两边在物理上就是隔开的。

在这里插入图片描述

中间所有的工作,都在这台工控机上完成。


思路:把逻辑放在中间层

MES动不了,那就别指望MES。

换个思路:既然MES能查工艺参数,PLC能被读写,那就在中间放一个角色,让它一头去问MES要参数,一头把参数写给PLC。这个角色,就是装在工控机上的NodeSCADA。

整个逻辑,我全放在NodeSCADA里,靠它的自定义函数来实现。MES不知道有NodeSCADA,PLC也不知道有MES,两边都只管做自己最简单的那部分。

具体怎么转,得先说说现场工人是怎么操作的。


生产时现场是怎么换产品的

换产品是个低频操作。通常是一个批次从头做到尾,做完了,才换下一个产品接着做。不是频繁切换。

工人换产品,是在设备的触摸屏上选产品号。每台设备支持的产品种类不一样,有的能选4种,有的能选10种,但操作是一样的——选中哪个,PLC里那个"当前产品号"的地址就更新成对应的值。

NodeSCADA要做的,就是盯住这个产品号。


NodeSCADA的自定义函数:盯着产品号,变了就执行更新参数逻辑

NodeSCADA里写了一个自定义函数,核心就一件事:监测每台设备的产品号有没有变。

平时没人换产品,产品号不动,函数也不会被调用。一旦工人在触摸屏上选了新产品,产品号变了,NodeSCADA马上就能发现,接着跑这么个逻辑:

第一步,通过V函数拿到新的产品号。

第二步,带着产品号和设备标识,去调MES那个查询接口,问它:这个产品在这台设备上,温度和搅拌时间该是多少?MES返回参数,比如温度50、搅拌210。

第三步,把这两个值写进这台PLC的温度、搅拌时间地址。

第四步,写完,把"参数就绪"标志位置成true。

这一串下来,等于NodeSCADA替MES把"下发"这个动作做了,而MES自始至终只回答了一个查询。

在这里插入图片描述


握手:别让设备使用旧参数生产

这里有个细节得处理好。

工人选完新产品,到NodeSCADA查完参数、写进PLC,中间是有时间差的。要查MES、要走网络、要写PLC,虽然通常两秒内就能办完,但这两秒里,设备里的参数还是上一个产品的旧值。要是设备这时候就按旧参数开干,做出来的东西就不对了。

所以PLC里有一个"参数就绪"标志位来把关,逻辑是这样:

工人一改产品号,PLC自己先把"参数就绪“重置成false——意思是新产品选了,但配套的新参数还没到。

NodeSCADA这边,查到参数、写进PLC之后,再把"参数就绪"写成true——意思是这个新产品的参数,已经给你更新好了,可以用了。

设备只认这个标志位:为true,才当作参数是跟当前产品对得上的,正常生产;为false,就知道参数还在路上,等着。

一个置false(PLC),一个置true(NodeSCADA),中间那点延迟就被这个标志位保护住了,不会出现参数没到位、设备先动手的情况。

因为西门子设备已经交付好几年,实际上是使用的报警点位实现的是否可以继续生产的限制


两种协议,一套配置

设备侧1台西门子、3台三菱,协议不同,但在NodeSCADA里的配置是一样的。

西门子S7-200 Smart走S7协议,填个IP就能连,这个型号不像1200那样还要进软件开通信权限,102端口直接是开着的。三菱Q系列走MC协议,确认PLC的以太网模块开了MC协议端口,把IP和端口填上就行。

各设备各建一个连接器,各自配好产品号、温度、搅拌时间、参数就绪这几个点位。温度带小数,配成浮点;搅拌时间是整秒,配成整型;产品号和标志位按实际类型配。。

NodeSCADA同时管着两种协议,西门子的和三菱的摆在一个界面里,读写的API都一样。


做完之后

上线之后,现场换产品的流程基本没变,工人还是在触摸屏上选产品号,该怎么操作怎么操作。不一样的是,选完之后,温度和搅拌时间自己就对上了,不用人再去改。

以前换一次产品,工艺得拿着参数表跑遍5台设备,一台台改。西门子和三菱的操作还是两套界面,又慢又容易出错,偶尔漏改一台,那台出来的货就跟别的对不上。现在选个产品号,两秒钟参数就位,5台设备全同步,工艺一致性比以前稳。

更省心的是MES那头,一行代码没动。客户原本以为这种老系统要打通,怎么也得找原厂改造一番,结果只用了它本来就有的一个查询接口。所有的逻辑都在NodeSCADA这一层。


这个项目的关键,是想明白"主动方"放在哪儿。MES是个动不了的老系统,那就别让它当主动方,把它当成一个查参数的数据源就行。真正干活的逻辑,放在中间那台工控机里,用NodeSCADA的自定义函数,一边问MES、一边写PLC,自己形成了闭环。


冯工聊数采NodeSCADA · 持续更新工控数采实战经验

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐