ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

海康视觉系统通讯配置全解析:从相机到PLC的链路、协议与排障

海康视觉系统通讯配置全解析:从相机到PLC的链路、协议与排障 干了几年机器视觉项目的人基本都有过这样的经历相机画面能出、算法流程也调得差不多了结果卡在通讯配置上要么相机死活枚举不上要么PLC那边收不到结果要么软触发OK一切换硬触发就各种奇怪问题。海康这套东西单看每个模块都不复杂但串在一起的时候坑是一个接一个。这篇东西写的是海康视觉系统的通讯配置覆盖了工业相机与VisionMaster之间的连接、VisionMaster与PLC的数据交换、IO硬触发接线、以及脱离VisionMaster直接用SDK取流的方案。适合正在做视觉项目集成、或者在设备现场调试的人看尤其是那种第一次把海康相机和第三方设备互通的新手看完应该能少走不少弯路。1. 先弄明白海康视觉系统的通讯链路到底有几段1.1 一条产线级视觉项目的通讯全貌一个完整的视觉检测或引导项目通讯不是单一的一条线而是多条链路拼接起来的。我习惯把它拆成三段来看第一段是相机到软件。相机把图像数据通过GigE、USB3.0或CameraLink接口传给VisionMaster或SDK。这段通讯解决的是“图像怎么进来”的问题。第二段是软件到执行机构。VisionMaster把检测结果通过TCP/IP、Modbus、Profinet或IO信号发给PLC、机器人。这段解决的是“结果怎么送出去”的问题。第三段是工程师到设备。也就是你做二次开发时怎么从自己的程序里拉流、拿结果、控制相机。这段解决的是“我怎么集成它”的问题。这三段跨度很大每一段的技术栈都不一样。相机与软件之间主要看驱动和网络配置软件与PLC之间涉及协议设计和地址映射二次开发则要看SDK的接口规范和回调机制。大部分人翻车都是因为没有先把这个三层架构在脑子里建立起来遇到问题就往相机或软件上猜结果排查半天发现是IP地址不在同一网段。1.2 三个高频通讯需求采集、交互、集成结合我做过的项目海康视觉通讯的需求基本集中在三个场景上。第一个场景VisionMaster独立运行采集检测输出一气呵成。这种最常见用VM的流程编辑功能搭好方案相机拍照VM跑算法然后把OK/NG信号通过IO或者通讯发给PLC。这种场景下的通讯配置重点在相机连接和VM的通讯模块设置。第二个场景VisionMaster脱机运行由PLC或机器人主动触发。很多产线不是一直拍照的而是传感器感应到产品到位后PLC发一个信号触发相机拍照。这种场景下通讯的难点在触发链路PLC信号怎么进相机或者怎么通过软件触发VM执行结果怎么返回给PLC。第三个场景自己写上位机程序把海康相机当成一个数据源集成进来。比如用C#写Winform界面实时显示相机画面再做简单的图像处理。这种场景下你要面对的是海康的设备SDK而不是VisionMaster。通讯的难点在取流方式的选择和回调绑定。这三种场景没有谁优谁劣完全看项目需求。但如果你的项目既用了VM又想做深度定制那还会遇到VM二次开发接口的问题就是后面会提到的GUID相关的东西。2. 相机与VisionMaster之间的通讯IP地址这关就刷掉一半人2.1 GigE工业相机固定IP的正确打开方式海康的工业相机里GigE接口的出货量最大。GigE的好处是线缆长、带宽够、兼容性好但代价就是它对IP配置极其敏感。很多人在VM里点“查找设备”找不到相机或者找到了相机但采集报错十有八九是IP地址的问题。正确的操作是这样的。先用网线把相机和电脑直连。注意是直连不是通过交换机。虽然通过交换机理论上也可以但直连最省事能排除掉很多干扰因素。然后打开网络适配器设置把电脑的网卡IP改成固定IP。海康GigE相机出厂默认IP段是192.168.1.64子网掩码255.255.255.0。所以你电脑的IP要改成192.168.1.x比如192.168.1.100子网掩码255.255.255.0网关可以不填。如果你不固定IP让电脑自动获取那大概率拿不到和相机同一网段的地址视觉软件自然找不到设备。提示改完IP后在CMD里ping一下相机的IP比如 ping 192.168.1.64。如果能ping通说明物理链路和网络层都没有问题再往下查就是软件层面的设置如果ping不通先把网线、网卡驱动、IP地址这些底层问题解决再说。这个习惯能帮你省下大量排查时间。2.2 相机枚举不出来的完整排查链路如果相机在VisionMaster或者MVS海康的相机管理软件里枚举不到按这个顺序排查基本都能定位先看网卡状态。如果网卡显示未识别网络或者正在识别先等几秒。有时候Windows切IP需要时间。看相机指示灯。GigE相机的网口附近一般有Link指示灯通电后闪烁说明物理连接正常。用MVS单独试一下。VisionMaster找不到相机的时候先打开MVS看能不能搜到。MVS是海康的相机驱动软件它的设备列表里如果能看到相机说明相机和驱动没问题问题在VM那边的连接设置。检查是否被防火墙拦截。这个很隐蔽Windows防火墙会拦截GigE Vision协议使用的UDP广播导致软件搜不到设备。临时关闭防火墙再试一次如果好了就把相关程序加入白名单。检查网络类型。Windows会把网络分为公用网络和专用网络公用网络默认开启更多安全限制。把网卡所在的网络类型改成专用网络也能减少一些莫名奇妙的问题。如果以上都试了还不行换根网线试一下。工业现场网线断裂是常有的事尤其是拖链里的线缆。2.3 USB3.0接口和供电的坑除了GigE海康的小型相机和面阵相机里也有不少USB3.0接口的。USB3.0相机的好处是配置简单即插即用没有IP的概念适合实验台调试或小批量测试场景。但USB3.0相机有两个坑。一个是供电。USB3.0口的标准供电是5V/900mA左右如果相机功耗高或者用了延长线、转接头导致压降相机就会偶尔掉线、画面闪烁。遇到这种情况不要先怀疑相机质量看看是不是供电不足。海康原厂配的USB线一般比较扎实自己在淘宝买的线要注意屏蔽和线径别贪便宜。另一个是带宽占用。USB3.0是共享式的总线结构多台相机同时跑的时候带宽会被瓜分。如果插在同一个USB控制器上两台相机各跑到一半帧率就上不去了不是相机不行而是总线带宽就那么多。解决方法是把相机插到不同的USB控制器上或者降低帧率、缩小ROI。3. 和PLC通讯前先想清楚谁做主、谁做从、数据怎么对齐3.1 TCP/IP通讯里Server和Client的角色划分VisionMaster和PLC通讯最常用的是TCP/IP。TCP/IP的优势在于通用性强、不需要额外硬件网关、代码量也不大。但在配置之前你得先想明白一件事谁是Server谁是Client。这个不能拍脑袋要看PLC那边支持什么。有些PLC的TCP通讯功能块默认是做Server的它在某个端口上监听等待外部连接有些PLC的指令是做Client的主动去连接外部设备。你得先看PLC程序的写法然后让VM去适配它。在VisionMaster里配置TCP通讯时有两个角色要设置模块本身是Server还是Client以及通讯的数据区映射。VM 3.x版本里在“通讯管理”里添加TCP Server或者TCP Client配置好本地端口或远程IP端口然后在变量绑定里把通讯接收的数据映射到全局变量。这里有个常见的认知偏差很多人以为VM一定要做Server等PLC来连。其实反过来也可以。如果你的PLC那边做Server更方便VM就做Client主动连过去。只要地址和端口对得上通讯就能建立。反而是那种两边都默认自己是Server或者Client的情况最容易折腾半天连不上。3.2 触发信号与结果数据的协议设计通讯建立起来只是第一步真正体现水平的是通讯协议的设计。协议设计得不好现场调试就是无穷无尽的相互扯皮。以最常见的“PLC触发拍照VM返回OK/NG”为例我一般会定义这样一份数据表方向数据字段数据类型字节长度说明PLC→VM触发信号字Word2写1触发一次拍照完成响应后PLC写0复位PLC→VM产品型号字Word2用于切换不同检测配方VM→PLC完成标志字Word2拍照检测完成后置1VM→PLC检测结果字Word20OK1NGVM→PLC错误代码字Word20无错误其他为对应错误码VM→PLC测量值1浮点数Float4示例如宽度测量结果这套数据表看着简单但有几个关键点。第一触发信号一定要用边沿而不是电平。PLC写1触发后等VM回完成标志然后再写0复位。如果只是电平触发PLC一直保持1VM就会一直重复触发或者卡在判断条件里。第二VM的脚本模块里要处理标志位的置位和复位时序。曾见过有人把触发信号和完成标志用同一个位结果程序逻辑永远跑不对。第三数据类型要严格约定尤其是浮点数的高低字节顺序不同PLC品牌之间可能会有差异一定要在现场联调时用固定的测试值互相验证一下。3.3 走Profinet/Modbus时要注意的适配性问题TCP/IP虽然通用但在某些行业里PLC工程师更习惯Profinet或者Modbus。海康VM对这两种协议也有支持不过适配难度比TCP/IP要高一截。Profinet这种本质上需要你把自己模拟成一个Profinet从站设备。VM里要装对应的Profinet通讯插件然后配置设备名称和IP再到PLC那边组态时添加这个从站。这里面有一个适配性的坑PLC的Profinet主站对从站的GSD文件有版本要求VM的插件版本要和PLC的软件版本兼容。之前遇到过西门子S7-1200和VM通讯时PLC组态报设备故障查了半天发现是GSDML文件版本太旧换了新版本才正常。Modbus的话相对容易一些但要注意Modbus TCP和Modbus RTU的区别。VM可以通过网口走Modbus TCP也可以通过串口走Modbus RTU。如果你选了RTU那还要确认串口参数波特率、数据位、停止位、校验位这些必须和PLC完全一致。现场常见的故障就是波特率不一致导致通讯时断时续。在做协议选型时我的建议是如果你能主导方案优先选TCP/IP因为它最容易调试Wireshark一抓包什么都清楚。如果客户现场明确指定了Profinet或者Modbus那就提前做好适配性测试别等到了现场才发现版本不兼容。4. IO硬触发拍照接线和软件参数必须两头对得上4.1 海康相机IO接口的三种常用接法除了用PLC通过通讯协议触发另一种非常普遍的方案是IO硬触发。传感器检测到物体到位输出一个电平信号给相机IO口相机立刻曝光拍照。这种方式实时性最好也不依赖通讯链路的稳定性是高速产线上最常用的触发方式。海康工业相机的IO口一般是6芯或者12芯的航空插头不同型号定义略有不同但通常包含Line0、Line1、Line2等IO线以及对应的GND。常见的接法有三种PLC的NPN输出接相机IO。PLC输出低电平有效传感器触发时信号线被拉到低电平相机接收到下降沿后触发。这种接法需要注意PLC输出端和相机IO口的参考地必须共地。PLC的PNP输出接相机IO。输出高电平有效触发时信号线被拉到高电平相机接收到上升沿后触发。传感器直接接相机IO。很多光电传感器也是NPN或PNP输出可以直接接相机的IO输入但要注意传感器的供电电压和相机IO的耐压范围必要时加光耦隔离。海康相机大多采用光电耦合隔离的IO输入设计有一定的抗干扰能力但这不代表你可以忽略接线规范。特别是共地问题如果PLC和相机不共地电平参考不一致触发信号会极其不稳定。4.2 触发源、极性、滤波这些参数怎么配硬件接线只是第一步软件里的参数配不对线接好了也白搭。在MVS的相机属性里需要设置的主要参数有这几个触发源Trigger Source选择Line0、Line1等外部IO口或者软触发Software、定时器触发。触发极性Trigger Polarity上升沿还是下降沿。你接线时决定的高有效/低有效要在这里对应上。触发延时Trigger Delay从收到触发信号到开始曝光之间的延时。如果传感器安装位置和拍照位置有距离可以在软件里微调这个延时。滤波Debounce/Filter用来滤除信号上的毛刺干扰。工业现场的电磁干扰容易在IO线上感应出短脉冲设置一个合适的滤波时间可以有效避免误触发。举个例子。现场用NPN传感器物体到位时输出低电平Sensor感应到物体后信号线从高拉低。那你的触发极性就要选下降沿触发。如果你发现怎么调都不触发先拿万用表量一下IO口的电压变化确认信号确实到了相机端再检查极性设置。这种问题很多时候不是相机配置问题是传感器没对上或者线序接反了。4.3 现场干扰导致的误触发与重影问题IO硬触发最让人头疼的不是不触发而是误触发。产线设备一启动相机就开始莫名拍照或者拍出来的图有重影。这种问题背后的原因基本是电磁干扰。干扰从哪里来最典型的源头是变频器、伺服驱动器和电机的动力线。这些大功率设备在启停时会产生强烈的电磁脉冲通过空间辐射或共地回路耦合到相机的IO线上。如果IO线没有使用屏蔽双绞线或者屏蔽层没有单端接地那干扰信号就会直接叠加到触发信号上。处理措施按优先级排序IO线使用屏蔽双绞线屏蔽层在控制器端单端接地。IO线和动力线分开走线槽间距越远越好。实在无法避免交叉时尽量垂直交叉。在相机IO输入侧增加RC滤波或者直接在相机参数里开启输入滤波。一般设置几微秒到几十微秒的滤波时间就能滤掉大部分毛刺。检查现场接地系统PLC、相机、传感器的参考地要接到同一等电位点避免地环流。之前调试过一条产线相机每隔几秒钟就自己拍一张查了整整一天。最后发现是旁边的伺服刹车电阻在作怪IO线跟伺服动力线扎在一起走了30公分然后伺服一刹车就触发一次。把线分开之后问题立刻消失。这种问题你说它是硬件问题还是软件问题都不算是布线规范问题。但视觉工程师不把关就没人把关。5. RTSP取流与SDK二次开发脱离VisionMaster的通讯方案5.1 海康网络摄像头的RTSP取流地址格式不是所有海康视觉项目都是走工业相机VisionMaster的路线。有些场景用的是海康的工业网络摄像机或者安防摄像头尤其是做远程监控、图像采集这种应用时RTSP取流是最直接的方式。海康摄像头的RTSP地址格式是固定的rtsp://用户名:密码IP地址:554/Streaming/Channels/101其中用户名:密码是摄像头的登录凭证554是默认RTSP端口101表示主码流的第一个通道。如果你要拿子码流地址改成102。如果摄像头有多个通道前面的1表示通道号后面的01表示码流类型。比如rtsp://admin:admin123192.168.1.64:554/Streaming/Channels/101需要注意的是从2020年之后出厂的很多海康摄像机默认开启了RTSP鉴权直接用VLC或者浏览器访问RTSP地址时会要求输入用户名密码。如果你在代码里用FFmpeg拉流需要把用户名密码拼在URL里。如果修改过摄像头密码或者端口记得在IPC的配置页面里确认一下实际参数。RTSP这种方案适合什么场景呢最容易想到的是监控、远程巡检以及一些帧率要求不高的质量抽检。它不需要工业相机SDK也不需要在电脑上装MVS只要IPC和电脑在同一网络里就能通过FFmpeg、OpenCV或者VLC拉流做后续处理集成成本非常低。5.2 C# Winform集成海康SDK的完整操作如果你做的是上位机软件想在Winform界面上显示海康相机的实时画面并且做控制那就要用到海康的设备网络SDK了也就是大家常说的HCNetSDK。这个SDK支持C、C、C#等语言C#版本在Winform里集成很顺畅。基本步骤是这样的在海康官网下载设备网络SDK解压后找到hcnetsdk.dll和C#的封装类CHCNetSDK.cs。把你项目平台改成x64SDK目前以64位为主把dll放到运行目录。引入CHCNetSDK命名空间调用NET_DVR_Init()来初始化SDK。设置连接参数NET_DVR_DEVICEINFO_V30调用NET_DVR_Login_V30()登录设备IP地址、端口默认8000、用户名、密码填进去。使用NET_DVR_RealPlay_V40()开始实时预览这个函数需要传入一个预览参数结构体其中包含了你要把画面渲染到哪个窗口的句柄。回调函数里可以拿到每一帧的YUV数据用于录像或者图像处理。最后用NET_DVR_Logout()退出登录NET_DVR_Cleanup()释放SDK。这套操作里面最容易出问题的点有三个。第一是回调解绑如果在回调和主线程之间直接操作UI控件Winform会崩需要用委托切换到UI线程。第二是SDK版本和摄像头固件版本不兼容有些新固件的摄像头用老SDK登录会返回错误码。第三是错误码查不到对应含义遇到这种情况先调用NET_DVR_GetLastError()拿错误码然后对着SDK文档里的错误码表逐一对照。5.3 VisionMaster里的GUID到底怎么用VisionMaster做二次开发时会频繁碰到GUID这个概念。VM的流程、模块、变量每样东西基本上都有一个对应的GUID来区分。GUID在VM里的作用有两个层面。一是你写代码时要靠它来定位流程或模块比如你要在外部程序里启动一个VM流程就得先拿到这个流程的GUID二是VM的全局变量、配方、通讯模块也需要用GUID来绑定。那GUID在哪里获取最简单的办法是在VM软件里选中流程或者变量在属性栏或者右键菜单里能看到唯一标识。如果你是用VM的二次开发接口也可以通过遍历方法从流程列表里按名称找到对应的节点再读取它的GUID。在实际项目中我的做法一般是在调试阶段先用VM界面把流程搭好然后把每个关键模块的GUID记录到一个配置表里方便后续C#程序里调用时引用。C#程序里操作VM的核心逻辑是通过VisionMasterProxy或类似的接口类创建VM的宿主对象。加载你已经保存好的流程文件。用GUID定位到流程中的相机、算法块、输出模块。通过接口控制流程的执行或参数修改。这一套搞下来VM就成了一个可以被C#程序调用的视觉服务执行结果可以拿回上位机里再做业务逻辑判断集成灵活度比纯VM内部方案要高不少。6. 通讯故障排查与其瞎猜不如按链路逐段隔离6.1 通用排查方法从现象反推故障段位通讯故障的排查最忌讳的是东一榔头西一棒子。我自己的习惯是不管什么现象先判断是链路里哪一段的问题。一个判断原则如果相机画面出得来、检测能跑那问题大概率不在前端如果画面出不来则优先看IP、驱动和线缆。举个例子。VM里流程能跑但PLC收不到结果。这种时候就不要去折腾相机了直接抓TCP包看VM有没有发数据出来。如果VM根本没发那就是VM里的通讯模块配置有问题或者变量绑定不对。如果VM已经发了PLC收不到那去看PLC那边监听的IP端口对不对、数据格式对不对。再比如。PLC触发信号给了但VM流程没有启动。这种要分清触发方式。如果是IO硬触发先看相机有没有被触发拍照——相机有没有出图就知道如果相机出图了而VM没跑那是VM里触发信号的映射问题如果相机没出图那去查IO信号有没有到相机端。6.2 常用诊断工具与日志位置工欲善其事必先利其器。下面这些工具和日志位置是排查海康视觉通讯问题时的必备工具工具/日志用途备注MVS设备列表查看相机是否被系统识别在MVS主界面直接看Wireshark抓取网络包分析通讯报文过滤器可用tcp.portxxxCMD ping测试网络连通性ping不通就是物理层/网络层问题VM运行日志查看流程执行过程和错误信息在VM安装目录下的Log文件夹MVS日志查看相机驱动和SDK的运行日志在MVS安装目录下的Log文件夹事件查看器查看Windows层面的驱动和网络错误设备管理器里网卡的属性也有详情VM的日志是排查VM侧问题的一把钥匙。如果你流程明明是个“报错”状态但界面上看不到详细信息去日志目录把当天日志翻出来能看到具体的错误代码和异常堆栈定位问题快得多。6.3 高频问题原因速查表最后一节列一个我实战中遇到的高频问题速查表照着查比你翻手册快。现象最可能原因处理方式VM找不到相机IP不在同一网段固定电脑网卡IP为192.168.1.x相机掉线频繁线路接触不良或供电不足更换高质量网线/USB线检查供电VM能与相机连接但不出图触发模式设置了硬触发但无信号切换为连续采集模式测试确认PLC触发后VM不执行通讯变量映射错误或触发位没有变化抓包确认数据到达检查映射地址PLC收不到结果VM侧未发送或发送地址不对检查发送变量的使能状态确认远端IP端口硬触发偶尔多拍IO信号被干扰加滤波检查屏蔽接地画面卡顿带宽不足或丢包降低分辨率/帧率检查网线质量SDK登录设备失败端口不对或SDK版本过旧确认设备端口更新到最新SDKRTSP拉流黑屏码流类型不对或鉴权失败确认用户名密码试着用VLC验证地址这不是一个完整的故障字典但覆盖了80%的现场问题。遇到不在表里的故障回到6.1的排查思路从现象一层层往下剥总能找到根因。7. 一点个人经验通讯配置是视觉项目里最能体现功底的环节做视觉项目做了这些年我越来越觉得算法模型是视觉项目的上限但通讯配置决定了下限。算法不行至少你知道问题在哪里可以慢慢调通讯不通整个设备就是瘫的现场所有人都在等你一个信号那种压力搞过的人都懂。所以我的习惯是项目一开始就在方案设计阶段把通讯链路规划好而不是等设备装好了再临时配。具体包括相机的IP规划固定在哪个网段、VisionMaster和PLC的角色分配、通讯协议字段表、IO接线的定义和线缆走向全部在设计文档里定下来。到了现场照图施工就可以出问题也容易定位。其次一定要养成看日志的习惯。不管是MVS的日志还是VM的日志它们里面记录的信息远比界面上看到的错误提示更详细。很多人出问题就重启重启解决不了就重装折腾一圈下来还不知道为什么。其实很多时候日志里已经写得很清楚了。最后想说的是海康的文档做得不算好但生态大网上能找到的资料和案例很多。遇到问题先检索再说别急着开工具瞎试。把上面这套通讯配置的逻辑理解了再去看官方文档你会发现它其实也没那么绕。
返回列表