Mcgs触摸屏串口通信调试实战:从参数配置到乱码排查
2026/9/9 22:53:58 网站建设 项目流程

简介:面向MCGS组态软件开发者的串口通信资源,聚焦串口数据收发与自由口协议应用,系统讲解从硬件接线到软件调试的完整流程。内容涵盖串口参数配置(波特率、数据位、停止位、校验位等)、通信对象建立、发送与接收函数调用、超时重试与异常处理,以及接收数据的协议解析方法;同时详细说明自由口协议如何自定义起始位、数据区、校验位和结束位,以满足非标准协议设备接入需求。适合需要与PLC、仪表、传感器等设备进行自定义数据交换的工业自动化工程师。压缩包共5个文件,包含串口驱动文件、帮助文档、说明页面及动态库等类型,整体仅142KB,便于快速下载部署。已有903人学习使用,资源虽小但结构清晰,通过示例驱动和帮助文档可快速掌握串口参数设置与自由口协议报文组织技巧;对初学者而言,是理解MCGS串口通信的实用入门资料,对开发者也能提供排查问题的思路参考。 前阵子群里有人发了一段Mcgs触摸屏的串口调试截图,画面上的温度值忽大忽小,偶尔直接变成乱码。远程看了半天,最后发现就是校验位选错了一个选项——设备手册明明写的None,组态环境里却选了Even。这种问题做现场的人应该都不陌生,Mcgs串口数据收发看着简单,无非是参数一填、通道一连,但真正到了现场,乱码、超时、时好时坏这些毛病一个比一个难缠。这篇文章就把我从设备窗口底层逻辑到现场排查的完整经验梳理一遍,内容包括串口通信的工作原理、参数配置方法、组态步骤以及用串口调试助手验证收发的过程,适合刚接触Mcgs组态软件的新手,也适合被现场通信问题折腾过的调试工程师参考。

1. Mcgs串口通信的工作原理:设备窗口、设备构件和通道的关系

1.1 设备窗口是串口通信的中枢

Mcgs工程环境里通常有用户窗口、实时数据库、设备窗口、运行策略和主控窗口几大块,很多新手一开始只盯着用户窗口画画面,忽略了设备窗口。实际上,串口收发数据的源头就在设备窗口里。可以说,设备窗口就是Mcgs触摸屏和外部设备之间的通信中枢,所有通过串口进出的数据,都要经过这个窗口里的设备构件来管理。

初次接触的时候,我也犯过在用户窗口里找通信配置的错,翻了半天菜单一无所获。后来才明白,Mcgs的设计逻辑很清晰:画面上能看到的是用户窗口的事,而外部设备的数据入口是设备窗口的事。设备窗口里可以挂载各种设备构件,比如Modbus RTU设备、PLC驱动、仪表驱动等,Mcgs会按照设定好的周期主动去访问这些外部设备。

理解这个逻辑之后,整个通信过程就通了:触摸屏作为主站主动发起通信,外部仪表、PLC作为从站被动响应,设备窗口里的构件负责把外部设备的寄存器数据读回来,再转存到实时数据库里,最后用户窗口的画面对象通过变量关联把这些数据显示出来。整个链路里,设备窗口是起点也是枢纽,没有它,后面的所有画面和策略都拿不到真实数据。

1.2 设备构件与通道:从寄存器地址到组态变量的映射

真正的配置核心是设备构件和通道。Mcgs常用的做法是添加一个"通用串口父设备",然后在它下面挂具体的子设备构件,比如标准Modbus RTU设备。这种父子结构很实用:父设备负责串口参数,子设备负责协议参数和寄存器映射,一套串口下挂多个子设备时,只需改子设备各自的站号即可。

每个子设备构件里都有一个通道列表,一个通道对应外部设备的一个寄存器或线圈。举个例子,Modbus协议里的保持寄存器40001,通常对应通道“4x00001”,这个通道保存的是从外部设备读回来的原始值。把这个通道和实时数据库里新建的变量关联起来,画面上的数据显示框再去关联这个变量,数据就一层层传上来了。

这个映射关系是整个通信组态里最需要动脑子的地方。不同设备的寄存器定义差别很大,有的从0开始编号,有的从1开始,有的把寄存器地址做成偏移量。如果映射错位,读回来的数值可能完全对不上。我自己的习惯是先把设备手册里的寄存器表格整理出来,标注好地址、数据类型、读写属性,再照着这份表去建通道,基本不会出错。

1.3 循环扫描机制决定了你的通信效率

Mcgs对串口外部设备的访问方式不是事件触发的,而是循环扫描的。什么意思呢?就是触摸屏会按照你设定的采集周期,周期性地把子设备所有通道挨个读一遍,有写命令时再插入写操作。这个机制带来的直接后果是:通道越多、设备越多,一个完整扫描周期就越长。

如果你在一条RS485总线上挂了十几台设备,每台设备又建了二三十个通道,那触摸屏光轮询一遍就需要不短时间,画面的数据刷新自然就会变慢。所以做项目时我一般会控制每个从站的通道数量,只建立实际需要用到的寄存器通道,不要图省事把所有寄存器都加进来。另外一个实用技巧是把采集周期适当调小,比如默认的1000毫秒改成500毫秒,能明显提升刷新速度,但也要注意给通信留出余量,设得太快对质量差的线缆反而是负担。

2. 动手前的准备:接线、驱动和串口调试助手

2.1 硬件接线里最常见的三个坑

串口通信调试不顺利,很多时候问题根本不在软件,而在接线。先说说RS232,触摸屏的RS232接口用的是TXD、RXD、GND三根线,和外部设备连接时TXD要接对方的RXD,RXD接对方的TXD,也就是信号交叉连接。很多人第一次接线会做成直连,结果就是双方都在同一个针脚上发信号,自然谁也收不到谁。

RS485是另一种常见的现场总线形态,两根线分别是A和B,接法上A对A、B对B,看起来比RS232简单,但A/B反接的问题在实际现场非常常见。接反之后的表现通常是通信时好时坏,或者完全不通,用万用表量一下线序就能确认。还有一个容易忽略的点是屏蔽层的接地,对于距离比较长的RS485线路,屏蔽层应该选择单端接地,两端都接地反而容易形成地环路,引入干扰导致通信异常。

2.2 USB转串口驱动是调试的第一步

用电脑调试串口通信前,首先要确保驱动装好。市面上最常见的USB转串口芯片是CH340、FTDI FT232、CP2102和CH341,各家驱动不通用。我把USB转串口模块插到电脑后,先去设备管理器里看端口COM口有没有正确识别,如果出现黄色感叹号,多半是驱动没装对。

一个容易被忽略的细节是:CH340这类芯片的驱动版本太旧时,在Win10、Win11系统上可能出现识别不稳定或者打开串口失败的怪毛病。建议直接去芯片原厂官网下载最新驱动,不要随便用一个"万能驱动"工具。装好驱动后,记住设备管理器里显示的COM口号,比如COM3,后面所有串口助手和Mcgs配置里都要填这个号。

另外,不少现场工程师会把"USB转RS232线"和"USB转TTL模块"混为一谈。触摸屏自带的串口如果是RS232电平,直接用USB转RS232线就行;如果是TTL电平的调试口,就要用USB转TTL模块,电平不一致会导致通信完全不通,甚至可能烧坏接口芯片。

2.3 为什么我建议先在电脑上装一个串口调试助手

串口调试助手在Mcgs串口收发调试里扮演的角色,相当于万用表之于电路维修。Mcgs的触摸屏一侧没有直观的抓包工具,你很难直接看到它到底发了什么、收到了什么。串口调试助手可以把串口上的数据原样显示出来,既能模拟从站设备主动返回数据,也能监听通信过程。

实际调试中,我最常用的两种方式分别是:一,用虚拟串口软件在电脑上生成一对互相连通的串口,让Mcgs运行在电脑模拟环境下使用其中一个,调试助手使用另一个,这样就能在不接任何硬件的情况下,验证Mcgs的收码逻辑是否正常;二,在硬件现场,用USB转串口线把触摸屏的发送数据引到电脑上监听,判断触摸屏是否按照预期发出了请求帧。

调试助手的选择上,SSCOM和XCOM都是我用着比较顺手的,界面简单,支持自定义发送和定时发送,把仪表的数据帧格式填进去就能模拟从站响应。

3. 串口参数配置:不是填完就完事的五个参数

3.1 五个参数必须和设备端完全一致

串口通信里,波特率、数据位、校验位、停止位和流控这五个参数是通信双方能不能"听懂"彼此的前提。Mcgs父设备的串口参数设置窗口里,这几个项都会列出来,每一项都必须和外部设备的实际设置保持一致,否则就会出现乱码、通信超时或者完全无响应。

这里有一个最常见的认知误区:觉得波特率只要大约差不多就行。实际上,串口通信没有"大约"这回事,9600就是9600,19200就是19200,双方的时钟必须严格一致。收发双方波特率不一致时,接收方采样的点会逐渐偏离数据位的中心,导致一连串的字节错误,表现出来就是乱码。数据位一般是8位,也有老设备用7位;停止位一般是1位,也有用2位的;流控建议直接关闭,工业现场里硬件流控用得很少,配置不当反而会卡住通信。

3.2 校验位选错是乱码最隐蔽的原因

如果把这五个参数按坑人程度排个名,校验位绝对排第一。因为校验位错误造成的现象非常具有迷惑性:数据好像通了,设备也有响应,但读回来的数值偶尔对、偶尔错,甚至屏幕上显示一堆毫无规律的乱码。这种"通了又没完全通"的状态让很多人误以为是干扰问题,换线、加磁环、调接地,折腾一圈下来毫无进展。

校验位的工作原理很简单,就是在数据位后面附加一个额外的位,用来做奇偶校验检查。如果设备端配置的是无校验None,而Mcgs这边选了Even或者Odd,那么发送方的校验位会被接收方当成数据的一部分来解析,整个字节的位序就全乱了。我在项目里吃过几次亏之后养成了一个习惯:配置完参数后,第一时间去设备手册里核对原始说明书上的通信参数表格,而不是凭印象填。尤其是现场接手别人做了一半的工程,先把双方的参数截图对比一遍再动手。

调试助手验证阶段,也可以通过一个简单方法快速判断校验位是否一致:用串口助手按当前参数发送一个十六进制字节,比如AA,观察接收方能否按原样收到。能收到说明参数一致,收不到或者变字节数,优先怀疑校验位和数据位设置。

3.3 Mcgs里具体去哪里填这些参数

Mcgs组态环境下的入口并不难找:在设备窗口里双击通用串口父设备构件,弹出属性设置对话框,其中就有COM口、波特率、数据位、校验位、停止位几个下拉框。这里要注意,如果工程里没有添加通用串口父设备,直接挂子设备会报错,因为子设备必须挂在父设备下面才能工作。

子设备里也有自己的参数区域,主要是从站地址、协议类型、超时时间和采集周期。从站地址必须和实际设备上拨码设定的站号一致,我见过一个项目,设备站号拨的是3,子设备配置里却填了1,结果Modbus RTU通信永远超时。超时时间默认值通常是100毫秒到500毫秒之间,如果设备响应速度慢,可以适当调大,否则可能频繁报错。

4. 从设备窗口到画面显示:一次串口收发通信的完整组态过程

4.1 新建工程并添加串口设备构件

第一步是在Mcgs组态环境里新建工程,进入设备窗口。在设备工具箱里找到"通用串口父设备",双击或拖拽添加到设备窗口中,然后再找到对应的子设备构件,添加在父设备下面。如果工具箱里没找到想要的子设备,可以通过"设备管理"功能从设备驱动列表中选装,Mcgs自带的驱动库覆盖了常见的PLC、仪表和Modbus协议设备。

添加完成后,重点配置对象就两个:父设备的串口参数和子设备的通信参数。父设备里要确认串口编号和触摸屏实际使用的串口对应,比如触摸屏本身有COM1和COM2两个口,你要确认接线用的是哪一个。子设备里要填从站地址、协议类型等。配置到这里,Mcgs和外部设备之间的通信通道在软件层面就算建立了。

4.2 建立变量并完成通道连接

通道连接的步骤是:在子设备构件的通道列表里,根据设备手册添加需要访问的寄存器通道,然后在实时数据库里建立对应的数据变量,最后把通道和变量一一关联起来。举个例子,如果仪表把当前温度放在Modbus保持寄存器40001,那就添加一个"4x00001"通道,在实时数据库里建一个名为"温度PV"的数值型变量,再将这个通道的读写属性设置为只读,连接到"温度PV"变量。

这里有一个Delphi/C语言背景的人比较容易理解的说法:变量是内存地址,通道是设备寄存器的映像,连接就是把两者绑定在一起。绑定完成后,Mcgs每次采集到的新值会自动写入这个变量,用户窗口里的显示控件只要关联这个变量,数据就会实时刷新。对于需要下发的数据,比如设置目标温度,可以再建一个可读写的通道,把画面上的输入框关联到对应的写变量,运行时修改输入框的值就能触发写入。

4.3 画面组态:让数据可见、可操作

用户窗口里的操作相对直观:从工具箱拖一个标签或数据显示控件到画面上,双击打开属性对话框,在输入输出连接里关联刚建好的温度变量,运行时这个控件就会显示串口读回来的实时值。如果想让温度值后面带单位,可以再叠加一个静态标签写上"℃"。对于调节参数,用一个输入框控件关联写变量,操作员就能在触摸屏上直接改目标值。

动画效果也可以简单做一下,比如热词里提到的"风扇旋转动画"。这不复杂,准备一组角度不同的风扇叶片图片,或者用旋转动画功能绑定一个速度变量,运行时通过变量值驱动图片切换或旋转角度。动画连接和串口通信关联起来后,电机的实际转速通过串口读回来,画面上的风扇动画就能实时反映现场状态。这类动效虽然不是功能必须,但在做整套设备监控画面时很提升交互感和专业度。

4.4 用脚本策略实现主动读写下发

设备构件自带的周期性采集能覆盖大多数数据读取场景,但有些项目需要在特定时间主动写值或者批量处理数据,这时候就要用到运行策略了。在运行策略里新增一个循环脚本,或者直接在按钮的脚本属性里写代码,通过给变量赋值来触发写操作。比如要把50这个数值写到设备的保持寄存器40002,只需要在脚本里把关联变量赋值为50,Mcgs检测到变量变化后就会自动通过串口下发写命令。

脚本编写上,Mcgs的语法接近Basic,上手门槛不高。我常做的一个小技巧是:在处理报警确认时,用一个脚本把确认状态变量先置1,延时几百毫秒后再置0,以匹配外部设备的脉冲触发要求。注意脚本策略的循环周期不要太短,否则频繁的写操作会占用太多串口通信时间。通过这种方式,串口数据收发就不只是单向显示,而是真正实现了双向交互控制。

5. 用串口调试助手模拟设备,把Mcgs收发改到明处

5.1 先在电脑上搭一套虚拟串口环境

没有硬件在手边时,我通常会借助虚拟串口软件,比如VSPD这类工具,在电脑上虚拟出一对互联的串口,例如COM5和COM6。这对虚拟串口的特点是一端写入数据,另一端就能读到。然后让Mcgs的工程以模拟方式运行,串口通信参数指向COM5,同时打开串口调试助手占用COM6。

这样搭建的好处是:触摸屏程序的串口收发逻辑可以在没有硬件的情况下完整跑起来。你可以在调试助手里手动输入Modbus请求帧来模拟从站设备的响应,或者观察Mcgs通过COM5发出来的读请求帧。把整个通信过程放到电脑桌面上来调试,比在触摸屏和仪表之间反复插拔线缆要高效得多。

5.2 用Modbus协议帧模拟设备的返回数据

如果子设备配置的是标准Modbus RTU,那么通信帧格式是有固定规范的。Mcgs作为主站会发送读保持寄存器的请求帧,比如请求地址01的设备读取起始地址0000、数量0001的帧是:01 03 00 00 00 01 84 0A。调试助手里收到这个请求后,按Modbus RTU协议回复一帧数据:01 03 02 02 1B 39 7F,其中02 1B就是寄存器值,换算成十进制是539,代表温度53.9℃。

重点在于验证两件事:一是Mcgs确实发出了正确的请求,二是它能否正确解析返回的数据并在画面上显示。如果模拟返回帧的校验码CRC写错了,Mcgs也会把它当成无效数据。所以在调试助手里模拟回复时,CRC计算一定要准确,我习惯在图方便时用支持自动CRC计算的串口调试工具,或者先把帧放到CRC在线计算器里算好再填进去。这一步走通了,基本就能确定Mcgs侧的程序配置没有问题。

5.3 判断是触摸屏没发还是设备没回

在实际现场调试里,通信失败时最大的疑问是"到底哪边出了问题"。用串口调试助手做一个简单的分断测试就能定位:把触摸屏的串口发送线接到USB转串口模块的接收端,打开串口助手监听,观察是否有数据帧发出。有数据帧说明触摸屏在正常工作,问题在设备响应或者接线;没有数据帧,说明Mcgs参数配置有问题,或者串口号选错了。

反过来,如果想验证外部设备是否有响应,可以临时断开触摸屏,让串口助手直接和设备通信,手动发送请求帧。通常设备手册里都有通信示例帧,直接用助手发一次,能收到设备的正常响应,说明设备和线缆都没问题,故障范围就缩小到了Mcgs工程配置。这种分断定位的习惯让我在现场省了大量时间,不会漫无目的地反复试。

6. 现场高频故障的排查链路:乱码、超时、时好时坏

6.1 乱码:先查参数,再查干扰

乱码是最常见的现象,但也是最容易误判的。我的固定排查顺序是:第一步,核对波特率和校验位,这是乱码的最主要原因,把Mcgs父设备参数和设备手册放在一起逐项对照。第二步,用串口助手直接监听触摸屏发出的数据帧,如果助手里显示的数据就是乱的,说明触摸屏一侧的串口参数或者硬件有问题;如果助手显示正常,而触摸屏画面上显示乱码,问题反而在设备返回的数据或者变量解析上。

参数确认无误后还有乱码,才考虑干扰。工业现场的电机的启停、变频器的开关都会产生电磁干扰,串口线过长或者没有用屏蔽线时会把这些干扰引入数据线。处理方式是换用屏蔽双绞线、屏蔽层单端接地、把通信线和动力电缆分开走线。还有一点容易被忽略:触摸屏和仪表之间如果电源没有共地,RS232通信也可能出现杂乱的乱码,把两边GND连起来往往立竿见影。

6.2 超时和通信失败:从站地址、寄存器、时间参数层层排查

通信超时的现象通常是画面上的数据长时间不更新,设备构件里还能看到采集报错计数。排查思路按可能性排序:先看从站地址是否匹配,再看寄存器地址和功能码是否在设备支持的范围内,然后看超时时间设置是否太短。Modbus RTU还有一个特性:请求帧和响应帧之间的间隔时间是有要求的,如果设备处理速度慢,而Mcgs设置的超时时间过短,设备还没来得及回复就被判定为超时了。

处理这种问题时,我的经验是把采集周期和超时时间都放宽,比如采集周期调到1000毫秒,超时时间调到800毫秒,看通信能否恢复正常。如果能恢复,说明是时间参数的问题;依然超时,再用串口助手分断排查。另外,Modbus设备有些寄存器是只读的,如果用写功能码去写只读寄存器,设备会返回异常码,Mcgs侧也会报错。这时候要仔细核对设备手册里的寄存器属性表,确认读写权限设置正确。

6.3 时好时坏的隐患:接触、电源、总线拓扑

时好时坏的通信故障最考验耐心,因为不是每次都复现。最常见的元凶是接触不良,用了劣质DB9接头或者端子排接线不牢固,设备震动之后偶尔接通偶尔断开,表现出来就是数据偶尔正常偶尔超时。排查方式是重新压接所有连接点,检查端子螺丝是否拧紧。我遇到过一台现场设备,问题出在一根杜邦线插了一半没插到底,愣是排查了一个下午。

电源质量也不可忽视。很多仪表和触摸屏共用开关电源,当现场有大功率设备启动时,电源电压瞬间跌落,串口通信芯片工作异常,通信就会出错。可以在通信异常的同时观察触摸屏背光是否闪烁,如果电源不稳,优先给触摸屏和仪表分别供电,或者在电源输出端加大容量电解电容。总线路由方面,RS485总线要采用手拉手拓扑,避免星型接法,终端电阻按照设备手册要求决定是否短接,这些细节都会导致通信时好时坏。

最后再分享一个我自己的习惯:每次做完一个Mcgs串口通信项目,我都会把设备的寄存器表、通信参数、接线图以及调试过程中遇到的所有异常现象和解决办法整理成一份简短的说明文档,放到项目工程目录下。这样过半年之后设备出问题再回现场,不用重新翻手册、重新踩坑,照着文档就能快速定位问题。串口数据收发这件事,做通了不难,难的是把所有可能的坑提前填平,让设备在现场稳定地跑下去。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询