对接扫码枪/打印机/报警器全是重复代码?C#上位机通用外设层封装实战 做工业上位机开发的朋友应该都有同感:业务逻辑没多少工作量,大半时间都耗在对接各种外设上。一条产线工位,扫码枪、标签打印机、声光报警器是标配,好点的还要加RFID读卡器、称重仪、指示灯。每个外设接口不一样、协议不一样,串口、USB、网口混着来,换个品牌就要重写半套代码,代码越堆越乱,出问题排查起来东找西找。前两年做汽配装配线的工位机项目,就结结实实被这事折磨过。最开始每个外设单独写对接,扫码枪用USB键盘模式、打印机走网口、报警器接串口,代码散在各个业务模块里。后来客户要换个品牌的标签打印机,连带改接口、改指令、改异常处理,折腾了快一周。再后面又要加RFID读卡器,看着一堆重复又零散的外设代码,实在忍不了,抽了一周时间重构了一层通用外设抽象层。重构完之后,所有外设对外都是统一的接口,业务层不用管底下是串口还是网口,也不用管是什么品牌的设备。后面再加新外设,只需要写个适配类,注册到设备管理器里就能用,维护量直接降了一大截。今天就把完整的设计思路、核心代码和现场踩过的坑全部分享出来。一、先捋清楚:工业上位机外设对接的普遍痛点很多人觉得外设对接没技术含量,就是调接口、发指令。真到现场跑起来才发现,零散的对接方式,坑全在后期维护里。接口碎片化严重:同是扫码枪,有USB键盘模式、USB HID模式、串口模式;同是打印机,有网口、串口、并口、USB。每种接口写法都不一样,没有统一范式。