在去年,因为众所周知的因素影响,项目的甲方主动提出延缓设备的交付。作为乙方,尽管项目延缓是甲方提出的,但依旧希望按期交付,这样才能回款,熬过一年。其实,2022年初,几类传感器、压控温控阀等已经安装到位,弱电也已经通到了交换机。遗留工作,主要是新控制软件的现场调试。由于设备工作在甲方车间现场的LAN中,而甲方车间并没有连接互联网,这使得乙方的技术人员无法连接到现场LAN开展调试(一些细节和时间事件,如液体、压力无法准确模拟)。为了尽快完成升级改造,乙方请到我来协助解决远程调试的问题,还发给我一个工卡,职务是“特聘现场工程师”,关于这个头衔,文章后面有题外话。先直奔主题。
1.PCAPHub与云IP实现异地LAN工业联测
接到这个项目,马上想到使用云虚拟机(静态公网IP)为中继,在甲方临时配置一个互联网连接,而后使用SSH端口映射(-L,-R)把要调试的端口带到云虚机,从而完成乙方、甲方的联调。相关技术参考:《ssh服务器重定向功能在家庭宽带动态ip资源发布中的应用》
但是,这种方式只能映射固定的端口到云虚机,而且必须是TCP协议的。详细了解乙方的软件,存在大量的UDP数据,以及广播、组播,所以不适用。如果只映射远程桌面(VNC,Linux),是可以连接到控制台的Arm器件的,但只能配置运行,若要支持乙方远程基于真实车间条件开展断点调试,还是要搞定局域网UDP的转接,把甲方的整个局域网带给乙方。
最终,我选择直接改造基于PCAP的软Hub,加入以太网隧道,一劳永逸的解决调试问题。这个技术已经在前面专门介绍,参考《EthernetOnTCP–基于Qt QSslSocket 套接字在PCAP 集线器上实现以太网隧道》
1.1 连接关系
连接关系如下图所示:
1.2 工作原理
其工作原理等效为在甲乙双方的交换机上插接一个直连网线。
乙方就像身临其境一般直接进行LAN以太网操作,甚至可以直接获取甲方网内的DHCP服务,ZigBee-LAN-Wifi等甲方设备的管理页面也可以直接操作。
为了完成这种连接,我们从右往左叙述过程。
(1)甲方
- 甲方设备都可以通过车间交换机访问。传感器、Zig-Bee中继器、Wifi中继的管理端也连接在交换机上。
- 车间交换机匀出一个口,连接便携计算机。
- 便携计算机通过手机热点Wifi或者USB热点,连接到云虚拟机。
- 便携计算机运行PCAPHub,工作在服务器模式,在TCP:12377监听。一方面,乙方的数据通过TCP:12377传过来,通过便携计算机LAN口抵达车间交换机;另一方面,车间交换机的数据会经由LAN口抓包发给乙方。
- 由于甲方没有固定的公网IP,便携计算机上需要安装一个Git,利用 ssh -R,把本地12377端口带到云虚机上。
甲方PCAPHub设施:
云虚机端口映射指令(在甲方git bash下运行):
ssh -o "StrictHostKeyChecking no" -R 0.0.0.0:12377:127.0.0.1:12377 debug@123.234.243.132
或者简写为
ssh -o "StrictHostKeyChecking no" -R 12377:127.0.0.1:12377 debug@123.234.243.132
(为保护乙方权益,IP地址为示意地址)
(2)云虚机
- 云虚机运行着Debain系统,在甲方计算机完成ssh连接后,12377端口就被带到公网云地址123.234.243.132上。
- 一旦有客户端连接123.234.243.132:12377,会自动连接到甲方的PCAPHub本机的12377端口。
(3)乙方
- 便携式计算机通过园区wifi直接上网。
- 便携计算机上的PCAPHub通过12377端口,去主动连接 123.234.243.132:12377,形成通道。
- 便携式计算机的PCAPHub 一方面把LAN口的本地数据通过12377端口发给甲方,同时,甲方会传送网络数据到本地,通过LAN口发到乙方的调试交换机。
- 乙方工程师的开发工作站,就可以直接通过局域网地址操作甲方的各类设备,好像自己就插接在甲方的交换机一样。
乙方PCAP-Hub设置:
1.3 最终效果
最终效果,就是乙方的工作站“仿佛”真的连接在甲方的车间交换机上,并能够方便的进行在线断点调试。有了这种高大上的模式支持,只用了1周就把各类参数、门限调整完毕,大大节约了时间成本,项目按时验收。
2. 题外话:现场工程师
在传统制造业、互联网,以及所有和工程相关的领域,都会生长着一类非常硬核的攻城狮。他们不仅是行业全栈工程师,又具有非常丰富的现场经验——编程、电气、电子、万用表、电烙铁都能来上两招。当某个问题出现,整个生产流程阻塞时,总能冷静分析原因,并竭尽全力、另辟蹊径利用手头的工具甚至现场创造工具,让系统迅速恢复运转。
具备这种“急诊医生”能力的技术人员,有正规的定义,叫做“现场工程师”。现场工程师是对所在行业具备完整的理论认知与实践经历,能够在系统工作的现场基于有限时间、有限资源、有限人手的情况下,创造性的解决问题的综合性工程技术人员。
2.1 现场工程师的其他案例
除了本文的案例,笔者曾经参加过很多现场填坑,有值得写一写和编程相关的琐碎、案例,都放在了《现场工程师》专栏里。比如文章《机械盘阵高并发——使用ImDisk 与 junction显著提高整体吞吐性能》较好的阐述了现场工程师的工作场景。
其实,和编程关系不大的案例还有很多,但CSDN是计算机相关论坛,所以就不太合适写这些奇怪的杂货。近几年快递很慢,现场工程师的应变能力得到了突出。不仅是行业典型的专业能力,一些“歪门邪道”的跨界应变也非常体现现场处置能力:
- IO控制电路中一电阻断裂,使用铅笔芯(石墨)临时制作滑动可变电阻恢复流水线运转。为保证电阻的温变特性,使用食用油(大豆油)浸泡电阻降温。
- 边远小厂控制盒一9V电源模块烧毁,使用12V电源+2个手电筒灯泡(小卖部买的老式手电)串联降压临时解决问题。
- 使用工厂木门角铁磨制卡扣,固定后局部淬火暂时修复三角皮带。
- 温度传感器失效,用摄像头+温度计+图像处理,得到温度值实现串口推送。
- 震动传感器故障,使用音箱扬声器改装,拆掉纸盆,塑封固定,接入声卡麦口采集波形进行识别。
现场工程师不一定是程序猿,所有工业部位都会有类似特征的工程师。如化工、机械制造。他们所学的职业技能可能不同,但能力的本质又高度一致。
2.2 顶级现场工程师的素质
我认识一个高中学弟,他是一个非常厉害的现场工程师(比我厉害多了,非计算机行业)。他的同事看他有点像看纪录片《病魔缠身》里的主角医师,“一看到他,就稳了”。本来公认要等五六天,花几万块才能解决的问题,他往往下班前几十块钱就解决——甚至还能撸一个小工具出来。这样的人,太厉害了,我了解他的成长过程,非常硬核。
- 动手能力:现场工程师一定非常能动手。从开普勒望远镜到鸟叫门铃电路都能做,修机械闹钟调整游丝擒纵叉不在话下。
- 学科体系:数学、外语、工业课程、计算机都不瘸腿,知其然,也知其所以然。
- 兴趣驱动:特别会玩,别人头大的事情,对他是休息。90%的闲暇时间都在“玩”——以打磨各种小工具为乐,树莓派自制投喂机器喂乌龟、浇花。
- 涉猎宽广: 电气、电子、编程、理论、机械都搞, 车间东门进去,抱着笔记本别着电工钳,西门出来,生产线就恢复了。
- 吃苦耐劳: 手被车床卡破了,问题没解决,肿起来都不肯去医院,非要解决问题才下来。对待手艺非常痴迷和执着。
当然,他已经不仅是现场工程师了,还是团队Leader。具备这样素质的现场工程师,是制造业的宝贝,也是所有人的希望。比起他来,我的起点、经历都太窄了,还要继续努力啊!活到老,学到老。