现场工程师出手-PCAPHub与云SSH隧道稳妥实现异地LAN工业联测

news2024/9/22 10:08:19

在去年,因为众所周知的因素影响,项目的甲方主动提出延缓设备的交付。作为乙方,尽管项目延缓是甲方提出的,但依旧希望按期交付,这样才能回款,熬过一年。其实,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 集线器上实现以太网隧道》

需要注意的是,通过手机连接云虚机进行数据交换,适用于临时搭建的窄带传感器网络,对宽带实时视频这种,可能需要专用的公网IP连接。另外,网络的安全性交给了SSH服务器。我们为了安全,没有在云虚机上开放SSH以外的端口,而是使用乙方的SSH连接,把云虚机本地的端口带回乙方本地。这样操作,无法登入云虚机的用户将无法连接调试网络。

1.1 连接关系

连接关系如下图所示:
链接关系

1.2 工作原理

其工作原理等效为在甲乙双方的交换机上插接一个直连网线。
等效原理乙方就像身临其境一般直接进行LAN以太网操作,甚至可以直接获取甲方网内的DHCP服务,ZigBee-LAN-Wifi等甲方设备的管理页面也可以直接操作。

为了完成这种连接,我们从右往左叙述过程。

(1)甲方

  1. 甲方设备都可以通过车间交换机访问。传感器、Zig-Bee中继器、Wifi中继的管理端也连接在交换机上。
  2. 车间交换机匀出一个口,连接便携计算机。
  3. 便携计算机通过手机热点Wifi或者USB热点,连接到云虚拟机。
  4. 便携计算机运行PCAPHub,工作在服务器模式,在TCP:12377监听。一方面,乙方的数据通过TCP:12377传过来,通过便携计算机LAN口抵达车间交换机;另一方面,车间交换机的数据会经由LAN口抓包发给乙方。
  5. 由于甲方没有固定的公网IP,便携计算机上需要安装一个Git,利用 ssh -R,把本地12377端口带到云虚机上。

甲方PCAPHub设施:
PIC
云虚机端口映射指令(在甲方git bash下运行):

ssh -o "StrictHostKeyChecking no"  -R 12377:127.0.0.1:12377 debug@123.234.243.132
如果强调本地监听(更安全),则为
ssh -o "StrictHostKeyChecking no"  -R 127.0.0.1:12377:127.0.0.1:12377 debug@123.234.243.132

(为保护乙方权益,IP地址为示意地址)

  • 为了安全起见,云虚机并没有设置12377端口为可见。 也就是说,如果从其他位置连接 123.234.243.132:12377,是连不上的。这是因为我们没有为PCAPHub加入认证策略。如果贸然把端口12377暴露在公网,可能会被恶意连接,或者插入一个智子程序(三体人?)干扰我们的实验。

(2)云虚机

  1. 云虚机运行着Debain系统,在甲方计算机完成ssh连接后,12377端口就被-R到云虚机上。
  2. 乙方也会运行一个SSH客户端,届时登入时,会继续把云虚机的12377端口-L到乙方本地。
  3. 乙方通过连接本机的12377端口,经由两级SSH隧道连接到甲方的PCAPHub本机的12377端口。

(3)乙方

  1. 便携式计算机通过园区wifi直接上网。SSH到云虚机,并把云虚机本机的12377 -L到本机。
  2. 便携计算机上的PCAPHub通过127.0.0.1::12377端口,去主动连接甲方,形成通道。
  3. 便携式计算机的PCAPHub 一方面把LAN口的本地数据通过12377端口发给甲方,同时,甲方会传送网络数据到本地,通过LAN口发到乙方的调试交换机。
  4. 乙方工程师的开发工作站,就可以直接通过局域网地址操作甲方的各类设备,好像自己就插接在甲方的交换机一样。

乙方脚本:

 ssh  -L 12377:127.0.0.1:12377 develop@123.234.243.132
 如果强调本地监听(更安全),则为
 ssh  -L 127.0.0.1:12377:127.0.0.1:12377 develop@123.234.243.132

乙方PCAP-Hub设置:
Client

(4)SSH心跳保活

要注意,在云虚机的SSH服务器上,sshd_config里设置SSH心跳,以便在没有流量的时候保持连接:

AllowAgentForwarding yes
AllowTcpForwarding yes
GatewayPorts yes
ClientAliveInterval 30
ClientAliveCountMax 3

1.3 最终效果

最终效果,就是乙方的工作站“仿佛”真的连接在甲方的车间交换机上,并能够方便的进行在线断点调试。有了这种高大上的模式支持,只用了1周就把各类参数、门限调整完毕,大大节约了时间成本,项目按时验收。

SSH原理如下:

SSH -R
SSH -L
12377
12377
甲方便携机
云虚机
乙方便携机

这种完全依靠SSH隧道来递交本地监听的方法,把安全性交给了SSH服务器和证书,可谓非常讨巧。12377端口自始至终不会直接出现在外部网络。

2. 题外话:现场工程师

在传统制造业、互联网,以及所有和工程相关的领域,都会生长着一类非常硬核的攻城狮。他们不仅是行业全栈工程师,又具有非常丰富的现场经验——编程、电气、电子、万用表、电烙铁都能来上两招。当某个问题出现,整个生产流程阻塞时,总能冷静分析原因,并竭尽全力、另辟蹊径利用手头的工具甚至现场创造工具,让系统迅速恢复运转。

具备这种“急诊医生”能力的技术人员,有正规的定义,叫做“现场工程师”。现场工程师是对所在行业具备完整的理论认知与实践经历,能够在系统工作的现场基于有限时间、有限资源、有限人手的情况下,创造性的解决问题的综合性工程技术人员。

现场工程师

2.1 现场工程师的其他案例

除了本文的案例,笔者曾经参加过很多现场填坑,有值得写一写和编程相关的琐碎、案例,都放在了《现场工程师》专栏里。比如文章《机械盘阵高并发——使用ImDisk 与 junction显著提高整体吞吐性能》较好的阐述了现场工程师的工作场景。

其实,和编程关系不大的案例还有很多,但CSDN是计算机相关论坛,所以就不太合适写这些奇怪的杂货。近几年快递很慢,现场工程师的应变能力得到了突出。不仅是行业典型的专业能力,一些“歪门邪道”的跨界应变也非常体现现场处置能力:

  • IO控制电路中一电阻断裂,使用铅笔芯(石墨)临时制作滑动可变电阻恢复流水线运转。为保证电阻的温变特性,使用食用油(大豆油)浸泡电阻降温。
  • 边远小厂控制盒一9V电源模块烧毁,使用12V电源+2个手电筒灯泡(小卖部买的老式手电)串联降压临时解决问题。
  • 使用工厂木门角铁磨制卡扣,固定后局部淬火暂时修复三角皮带。
  • 温度传感器失效,用摄像头+温度计+图像处理,得到温度值实现串口推送。
  • 震动传感器故障,使用音箱扬声器改装,拆掉纸盆,塑封固定,接入声卡麦口采集波形进行识别。

现场工程师不一定是程序猿,所有工业部位都会有类似特征的工程师。如化工、机械制造。他们所学的职业技能可能不同,但能力的本质又高度一致。

2.2 顶级现场工程师的素质

我认识一个高中学弟,他是一个非常厉害的现场工程师(比我厉害多了,非计算机行业)。他的同事看他有点像看纪录片《病魔缠身》里的主角医师,“一看到他,就稳了”。本来公认要等五六天,花几万块才能解决的问题,他往往下班前几十块钱就解决——甚至还能撸一个小工具出来。这样的人,太厉害了,我了解他的成长过程,非常硬核。

  • 动手能力:现场工程师一定非常能动手。从开普勒望远镜到鸟叫门铃电路都能做,修机械闹钟调整游丝擒纵叉不在话下。
  • 学科体系:数学、外语、工业课程、计算机都不瘸腿,知其然,也知其所以然。
  • 兴趣驱动:特别会玩,别人头大的事情,对他是休息。90%的闲暇时间都在“玩”——以打磨各种小工具为乐,树莓派自制投喂机器喂乌龟、浇花。
  • 涉猎宽广: 电气、电子、编程、理论、机械都搞, 车间东门进去,抱着笔记本别着电工钳,西门出来,生产线就恢复了。
  • 吃苦耐劳: 手被车床卡破了,问题没解决,肿起来都不肯去医院,非要解决问题才下来。对待手艺非常痴迷和执着。

当然,他已经不仅是现场工程师了,还是团队Leader。具备这样素质的现场工程师,是制造业的宝贝,也是所有人的希望。比起他来,我的起点、经历都太窄了,还要继续努力啊!活到老,学到老。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/177218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

S7-1200PLC与ABB机器人进行PROFINET通信的具体方法和步骤详解

S7-1200PLC与ABB机器人进行PROFINET通信的具体方法和步骤详解 1. TIA博途一侧的配置: 当我们安装好RobotStudio软件后,可以在以下的目录中C:\ProgramData\ABB Industrial IT\Robotics IT\DistributionPackages\ABB.RobotWare-6.08.0134\RobotPackages\RobotWare_RPK_6.08.013…

【JavaWeb】JavaScript基础语法(上)

✨哈喽,进来的小伙伴们,你们好耶!✨ 🛰️🛰️系列专栏:【JavaWeb】 ✈️✈️本篇内容:JavaScript基础语法(上)! 🚀🚀代码托管平台github:JavaWeb代码存放仓库&#xff01…

ESP32设备驱动-TSL2561亮度传感器驱动

TSL2561亮度传感器驱动 1、TSL2561介绍 TSL2560 和 TSL2561 是第二代环境光传感器器件。每个都包含两个集成模数转换器 (ADC),用于集成来自两个光电二极管的电流。两个通道的整合同时发生。转换周期完成后,转换结果分别传送到通道 0 和通道 1 数据寄存器。传输是双缓冲的,…

【头歌】单链表的基本操作

单链表的基本操作第1关:单链表的插入操作任务描述本关任务:编写单链表的初始化、插入、遍历三个操作函数。相关知识链表是线性表的链式存储结构的别称,特点是以“指针”指示后继元素,因此线性表的元素可以存储在存储器中任意一组存…

Linux常用命令——speedtest-cli命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) speedtest-cli 命令行下测试服务器外网速度 补充说明 speedtest-cli是一个使用python编写的命令行脚本,通过调用speedtest.net测试上下行的接口来完成速度测试,最后我会测试运维生存时间…

YOLOV3 Pytorch版本代码解读

YOLOV3 Pytorch版本代码解读 代码与coco数据集关注wx公众号JokerTong回复yolov3即可获取 参考视频 YOLO系列算法 文章目录YOLOV3 Pytorch版本代码解读数据集准备与关键文件说明前提准备代码大致流程需要自行修改代码的部分项目代码解读一 数据与标签的读取二 模型构造convoluti…

数据库工具类的编写

package com.bjpowernode.jdbc.utils;import java.sql.*; import java.util.ResourceBundle;/*** 数据库工具类简化JDBC的代码编写。** 在同一个没有结束的程序中,DBUtil类只加载一次,加载一次以后,再次调用该类中的方法,本不会再…

基于Echarts构建大数据招聘岗位数据可视化大屏

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

SpringBoot 3.0.x使用SpringDoc

为什么使用SpringDoc 在Springfox3.0停更的两年里,SpringBoot进入3.0时代, SpringFox出现越来越多的问题,最为明显的就是解析器的问题,已经在上文 中解释清楚,这里就不再赘述。 SpringDoc是Spring官方推荐的API&#x…

Spring笔记上(基于注解开发)

一、第三方资源配置管理 以DataSource连接池对象为例,进行第三方资源配置管理。 1. 管理DataSource连接池对象 spring整合Druid、C3P0数据库连接池 1.1 管理Druid连接池 1、准备数据 create database if not exists spring_db character set utf8; use spring_db; …

二、python基础语法篇(黑马程序猿-python学习记录)

黑马程序猿的python学习视频:https://www.bilibili.com/video/BV1qW4y1a7fU/ 目录 一 、print 1. end 2. \t对齐 二、字面量 1. 字面量的含义 2. 常见的字面量类型 3. 如何基于print语句完成各类字面量的输出 三、 注释的分类 1. 单行注释 2. 多行注释 3. 注释的…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《9》

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《1》:论文源地址,克隆MXNet版本的源码,安装环境与测试,以及对下载的源码的每个目录做什么用的,做个解释。 MXNet的Faster R-CNN(基于区域提议网络的实时目标检测…

【手写 Vue2.x 源码】第四十一篇 - 组件部分 - 生成组件的真实节点

一,前言 上篇,介绍了组件部分-组件的生命周期,主要涉及以下几部分: 本篇,组件部分-生成组件的真实节点; 二,生成组件的真实节点 1,前文回顾 前篇,在 createElement 方…

【剧前爆米花--爪哇岛寻宝】Java中有关异常类的详细讲解

作者:困了电视剧 专栏:《JavaSE语法与底层详解》 文章分布:这是一篇关于Java中异常类的文章,在本篇文章中详细讲解了异常的使用逻辑和底层的执行过程,如有疏漏,欢迎大佬指正! 目录 异常的体系结…

<C++>哈希

文章目录1. unordered系列容器1.1 unordered_map1.1.1 unordered_map的文档介绍1.1.2 unordered_map的接口说明1.2 unordered_set2. 哈希概念3. 哈希冲突4. 哈希函数5. 哈希冲突解决5.1 闭散列5.1.1 线性探测5.1.2 二次探测5.2 开散列5.3 开散列与闭散列比较6. 模拟实现1. unor…

配置野火霸道V2环境

配置野火霸道V2环境野火霸道开发板学习笔记信息说明下载安装Keil5配置Keil以使用DAP下载器DAP下载器的使用使用串口下载程序安装USB转串口驱动CH340检查是否安装成功配置MCUISP软件野火霸道开发板学习笔记 信息说明 日期 : 2023-01-23开发板: 野火霸道V2芯片型号: STM32F103Z…

[Paper Reading] Towards Conversational Recommendation over Multi-Type Dialogs

[Paper Reading] Towards Conversational Recommendation over Multi-Type Dialogs 文章目录[Paper Reading] Towards Conversational Recommendation over Multi-Type Dialogs论文简介快速回顾论文(借助scispace)梳理一下文章内容(参考百度N…

自动化将Gitee的仓库导入Github

自动化将Gitee的仓库导入Github准备工作获取方式gitee的授权码github授权码工具源码用法下载gitee所有仓库到本地下载并更新到github(自动创建仓库)写在最后本方法能实现自动创建仓库 脚本及用法放在文章最后了,需要的自取 转跳到结尾 准备工…

高性能 Java 框架。Solon v1.12.3 发布(春节前兮的最后更)

一个更现代感的 Java "生态型"应用开发框架:更快、更小、更自由。不是 Spring,没有 Servlet,也无关 JavaEE;新兴独立的开放生态 (已有150来个生态插件) 。主框架仅 0.1 MB。 相对于 Spring Boot…

计算正整数的阶乘math.factorial()

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】计算正整数的阶乘math.factorial()[太阳]选择题请问math.factorial(3)的输出结果是?import mathprint("【执行】math.factorial(3):",math.factorial(3))print("【执行】math.f…