ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

MCGS昆仑通态串口通信驱动原理与调试实战指南

MCGS昆仑通态串口通信驱动原理与调试实战指南 简介MCGS昆仑通态串口数据收发驱动是一份面向工业自动化组态应用的技术资源目标读者是需要在MCGS嵌入版、通用版或网络版中通过串行接口收发裸数据、完成设备联调的工程师。压缩包内共14个文件包含普通版与ARM嵌入式版两个驱动文件drv、可参考的测试工程MCG、动态库dll以及htm使用说明、jpg/png界面与接线示意图、xml/mso等配置辅助文件整体仅220KB轻量紧凑。已有6500余人学习浏览适用于PLC通讯、传感器数据接入、远程串口监控等典型场景。用户可借助示例工程快速上手串口参数配置与设备添加流程结合说明文档理解驱动调用方式、脚本收发逻辑及超时校验等异常处理思路减少现场调试中的试错成本。 做现场项目调试这些年我接过不少MCGS昆仑通态触摸屏跟第三方设备串口通信的活儿。最常被问到的一句话就是“我这个屏连PLC连不上是不是驱动没装好”一开始我还认真解释驱动文件的事后来发现真正的问题往往不在“装没装”而在于对MCGS串口数据收发这套机制理解有偏差。所以这次干脆把关于MCGS昆仑通态串口数据收发驱动的内容做一个系统梳理把设备窗口、父设备子设备、Modbus RTU协议、脚本收发的原理和实操都讲透顺便把串口调试助手、USB转串口这些调试工具怎么配合使用也一一说清楚。不管你是刚接触组态软件的新手还是已经在现场追过半天通讯故障的老手这篇都能提供一些能直接落地的参考。1. 先把话说明白MCGS的“驱动”到底是什么1.1 父设备与子设备串口和协议的关系很多人第一次接触“MCGS驱动文件”这个概念时会习惯性地把它想象成电脑上的驱动程序像是装个CH340驱动就能识别USB转串口那样。但MCGS昆仑通态里的“串口数据收发驱动”完全不是同一个逻辑。它不是一个放在系统里的inf文件而是组态软件里的一个设备对象这个对象负责管理串口资源、解析通信协议、把收到的数据写入实时数据库变量。MCGS的设备窗口采用了一层很聪明的结构父设备和子设备。父设备是“通用串口父设备”它对应物理串口本身里面设置串口号、波特率、数据位、校验位这些物理参数。子设备挂在父设备下面对应具体的通信协议解析。我常用一个生活化类比来解释父设备是快递公司负责在不同城市之间运输包裹子设备是分拣规则决定包裹到了之后怎么分类、派给谁。你把快递公司换掉从COM1换成COM3分拣规则不用变你换个分拣规则从Modbus换成自由协议运输通道也不用动。这种解耦设计的好处非常直观同一套串口通道可以挂多个不同类型的子设备比如一个触摸屏的COM2口既挂一个Modbus RTU子设备去读PLC又挂一个用户自定义驱动去读串口仪表互不干扰。每个子设备下面还能建立若干个通道每个通道对应设备里的一个寄存器地址最终映射到实时数据库里的一个变量。数据流的完整路径就是物理设备寄存器——串口线——父设备物理收发——子设备协议解析——通道地址映射——实时数据库变量——屏幕显示或者参与脚本逻辑。1.2 三种数据收发方式怎么选搞清楚子设备这个概念之后你就明白“驱动选择”其实就是“协议选择”。MCGS昆仑通态提供三种典型的数据收发方式对应不同现场需求第一种厂家专用驱动。MCGS官方维护了大量PLC厂家的专有协议驱动比如西门子、三菱、欧姆龙、台达也包括热词里提到的光洋K协议和伟创PLC。这类驱动的优点是地址映射和数据类型处理已经做好了你只要选对PLC型号填对站点号基本不用关心协议细节。缺点是如果你的PLC型号太老或者太偏门官方没有收录那就没得用。第二种标准通用协议日常用得最多的就是Modbus RTU。无论是PLC、仪表、变频器还是温控器只要支持Modbus RTU基本都能通过“莫迪康ModbusRTU”这个子设备接入。这也是我认为做串口通信最值得优先尝试的路径。第三种用户自定义驱动。当设备用私有协议比如以某几个特定帧头开头、带累加和校验的自定义报文Modbus这套用不上就需要走自定义协议。MCGS里的实现方式多数是靠用户自定义设备或脚本驱动用SendData和ReceiveData这类函数自己组帧、解析、校验。灵活但工作量也在那里后面我会专门展开。2. 串口通信硬核细节电平、接线和参数都得对上2.1 硬件准备RS232、RS485和USB转串口芯片软件选型再对硬件层面的坑一样能让你画面一直显示“通讯超时”。做MCGS串口通信前先把物理链路搞清楚。触摸屏的串口通常是九针COM口或者接线端子现场设备不外乎两种电气标准RS232和RS485。RS232是点对点通信发送和接收各用一根线参考地必须共地传输距离一般不超过15米。触摸屏DB9的2脚是RXD、3脚是TXD、5脚是GND要和设备交叉连接屏的TXD接设备的RXD屏的RXD接设备的TXD。经常有人拿直连串口线去接设备结果全双工收发变成“自己发自己收”这就是TX和RX没有交叉导致的。RS485则是差分信号A和B两根线支持一主多从距离能到1200米。触摸屏的485端子标A、B-对应设备的A、B正负。接线时注意A对A、B对B反了的话设备完全没响应。现在调试现场还有个绕不开的硬件就是USB转串口。热词里出现CH340、CP2102、FTDI、CH352这些名字全是USB转串口芯片的型号。CH340最常见便宜很多调试线都用它Windows一般自动装驱动CP2102和FTDI的驱动兼容性相对更好FTDI在工业场合更稳但也更贵。如果你要在电脑上用串口调试助手监视触摸屏和设备之间的通信数据一定要确认电脑能识别USB转串口并且记住映射出来的COM口号。我遇到过很多次设备连不上最后发现是USB转串口驱动没装好电脑压根没识别出COM口这跟MCGS本身毫无关系。2.2 通信参数和报文结构一个字节都不能差硬件接通之后软件层面的“约定”同样关键。串口通信的本质是收发双方按约定好的时间节奏和电信号格式传输字节这个约定就是波特率、数据位、停止位、校验位。MCGS父设备默认参数一般是9600波特率、8数据位、1停止位、无校验。Modbus RTU标准也默认9600,8,N,1。但现场设备不一定这么配尤其是老款仪表或特殊PLC可能默认4800甚至偶校验。你必须在设备侧菜单和MCGS父设备属性里同时改好任何一项不一致收到的都是乱码或者干脆没响应。报文结构方面以Modbus RTU为例一帧完整报文是设备地址(1字节) 功能码(1字节) 数据区(N字节) CRC校验(2字节低字节在前)。比如MCGS向地址为1的从站读保持寄存器报文就是01 03 00 00 00 02 C4 0B01是从站地址03是读保持寄存器功能码00 00是起始寄存器地址00 02是读取数量C4 0B是CRC校验。MCGS在子设备属性里设置了从站地址和寄存器范围后这些字节会由驱动自动生成不需要你手工计算。但调试时看到报文能明白它在干什么排查问题会快很多。地址映射还有两个容易踩的坑地址偏移和数据类型。有些PLC的寄存器地址从1开始编号而Modbus协议层的地址从0开始MCGS通道设置里就会出现“对应设备地址”要减1的情况。另外32位数据如浮点数、长整型在Modbus里通常占用两个连续寄存器MCGS里要勾选“32位访问”并注意字顺序否则读出来的数据可能是颠倒后的两个单字拼出来的错误值。3. 实操从零完成串口数据收发3.1 在组态环境里添加设备并配置参数前面把原理铺垫得差不多了下面按我习惯的标准步骤来一遍连线。打开MCGS组态环境选择对应触摸屏型号新建工程进入“设备窗口”。这是整个串口通信的配置主战场。右键空白处从工具箱里先添加“通用串口父设备”。双击父设备图标在属性页里设置串口号必须与实际接线一致、波特率、数据位、停止位、校验位。父设备下面接着挂子设备。选“莫迪康ModbusRTU”为例添加后双击子设备在“设备属性”里填从站地址。现场通常一台屏带多台从站我就再加一个“莫迪康ModbusRTU”取名叫“1号PLC”另一个改名“2号仪表”各自填对站号即可。然后是建立通道。选中子设备点“添加设备通道”填寄存器类型比如保持寄存器用4区对应功能码03/06/16、寄存器地址、数据类型、读写属性。通道建好后“连接实时数据库变量”就能在画面上用标签显示或按钮写入这个变量了。整个链路到这里就通了。如果通信正常设备窗口里子设备对应的“通讯状态”值一般会在0和2之间跳动这就是驱动在正常收发的直观证据。3.2 用串口调试助手模拟从站验证链路很多场景下现场设备还没就位或者你不想来回跑电控柜最好的办法就是用电脑的串口调试助手模拟设备端。先下载虚拟串口软件创建一对互联的虚拟串口比如COM3和COM4MCGS组态环境里父设备选COM3串口调试助手里选COM4两边就能通信。或者更简单用USB转串口线接到触摸屏的串口电脑上用串口调试助手监听。配置好之后启动MCGS运行环境如果链路通了调试助手会持续收到来自MCGS的请求帧比如经典的01 03 00 00 00 02 C4 0B。这是触摸屏在主动问从站“你地址1的保持寄存器0和1是什么内容”。正常情况下从站要回一帧01 03 04 41 20 00 00 ...01是从站地址03是功能码回显04是后续数据字节数后面四个字节是两路寄存器的值最后两位CRC。关键技巧来了调试时你可以先不回复或者故意回一个CRC错误帧观察MCGS这边报什么错。MCGS有“设备调试”功能窗口里会显示本次通信的详细信息。通过这些反馈你能精确区分问题出在物理链路、参数配置还是协议内容上。为了自动测试一些辅助工具还能用脚本按设备地址循环回包我经常拿它来模拟多个从站一起运行的场景验证不同站号是否正确分发。3.3 自由协议场景MCGS和自研设备通信怎么搞如果你要对接的单片机、自制电路板或者定制仪表用的是自定义协议Modbus路线走不通那就得上“用户自定义驱动”或脚本方式。MCGS昆仑通态在这方面提供的方案是用串口函数直接收发。简单说你可以把一个普通变量通常是字符串变量和一个“串口设备对象”绑定然后通过!SendData(设备号.通道号, 数据字符串)把要发的报文通过串口发出去再通过接收事件或查询缓冲区的方式把收到的数据解析到变量里。收到数据后通常先用字符串截取函数取出帧头、帧尾、数据段再按设备的协议文档解析成具体的工程量值。自由协议收发有几个非常容易踩的坑。第一是发送时机MCGS脚本是事件驱动的不是实时循环你不能像单片机那样无限轮询必须用定时器脚本定期触发发送命令。第二是接收缓冲如果不及时清空缓冲区上一帧的残余数据会污染下一帧解析结果常见现象是第一帧正常、第二帧乱码。第三是帧校验很多自研设备用累加和或异或校验你必须在脚本里用位运算自己算一遍拼进发送帧里别指望驱动自动生成。我在几个无线数传电台的项目里就是这么干的MCGS串口发一帧带地址和校验的报文给主电台主电台按地址路由到各分站分站回传的数据再由脚本解析成中继状态和传感器值。这套方案跑起来之后比Modbus灵活得多代价是没人替你兜底每一帧的格式和错误处理都得自己写扎实。4. 常见问题与排查技巧4.1 高频问题速查表把这些年我实际遇到的典型问题整理成一张速查表方便你在现场对照。现象可能原因排查方法通讯状态一直为0或超时物理接线错误、串口号不对检查接线和屏侧COM口设置用USB转串口监听物理电平上的请求帧有请求帧但设备无响应从站地址错误、设备没有配置为Modbus从站模式核对子设备站号与设备侧站号确认设备处于Modbus RTU从站模式数据乱码波特率或校验位不一致确认两端波特率、数据位、校验位完全一致收到一帧“半截报文”USB转串口监听干扰、总线竞争拔掉调试线后重新监听注意232的共地问题读上来的数据值明显不对地址偏移错误、32位数据字顺序反了检查通道寄存器地址是否需减1勾选“32位访问”调字高字低能发不能收接收数据绑定错误或脚本缓冲区未及时读取检查接收通道配置和脚本中缓冲区处理逻辑上电后第一次通信成功之后一直失败某个寄存器地址越界或从站设备溢出先用调试助手读最小范围的地址逐步扩大测试4.2 “一个串口接两台设备”能不能行热词里有一条很典型的问题“232串口一分二分别接两个灯可以吗”。这个场景直接用RS232做一对二在我的经验里基本救不了。RS232的电气结构是单端信号物理上不是为多点通信设计的强行一分二很容易造成电平冲突和反射导致两台设备都收不到数据。正确的做法是改用RS485总线。RS485本身就支持多点一主多从是它的标准工作模式把两台设备的A、B分别并联到屏的485端子上然后在两个子设备里分别设置不同的从站地址比如1号和2号。MCGS会在同一父设备下按轮询顺序依次和每个子设备通信只要设备侧都配好了各自的站号天然就是一对二、一对多。如果现场确实只有一个RS232接口又必须接两台设备建议用带隔离的232转485模块先把总线转成485再把多个设备挂上去。直接拿杜邦线分叉短期测试也许能侥幸跑通一到现场布线长一点、干扰大一点就会原形毕露。我自己在这个问题上吃过亏所以特别提醒一句别在232上一分二这不是接线美观问题是物理层规则问题。4.3 排查心法三层定位最后分享一下我的串口通讯排查心法一共三层。第一层看物理层设备有没有在线上发数据、电平对不对、接线松不松。这一层用USB转串口加调试助手监听就能确认如果连请求帧都看不到再改软件配置都是在空转。第二层看参数层波特率、校验位、数据位是否一致。这一层的验证很简单把调试助手的参数调得和屏一致看能不能解析出像样的请求帧。哪怕只是CRC不对至少说明字节已经过来了参数大概率没问题问题在协议内容。第三层看协议层地址、通道寄存器范围、CRC校验、功能码。这个阶段建议把设备侧配置文档打印出来逐帧比对请求和响应。我有一次调试一个温控器折腾了两小时最后发现是它的寄存器地址表起始编号是1不是0MCGS里做了地址偏移后一切才正常。这类问题靠猜是不行的必须对照协议文档逐字节核对。按这个顺序绝大多数串口数据收发问题都能收敛到具体某一层不需要反复重启设备或者乱改配置碰运气。MCGS昆仑通态串口数据收发驱动说到底就是一个“串口资源协议解析变量映射”的组合体。父设备负责把数据搬进来搬出去子设备负责理解数据的意义实时数据库负责把这些数据变成屏幕上有用的数值。用串口调试助手把自己的通讯链路跑通一次把常用的Modbus报文和自定义协议脚本都预先验证过一遍你再去现场点开“通讯状态”看到数值跳动的时候就会明白大部分所谓的驱动问题本质上都是接线、参数和协议这三件事里某一件没对齐而已。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进