CODESYS与触摸屏通信实战:从Modbus TCP到原生标签的完整配置指南

发布时间:2026/10/5 3:59:21
CODESYS与触摸屏通信实战:从Modbus TCP到原生标签的完整配置指南
搞工控的应该都有感触CODESYS这几年几乎成了PLC编程界的“公共交通”汇川、禾川、欧姆龙一部分系列甚至树莓派上都能跑CODESYS。可一到CODESYS连接触摸屏这一步不少兄弟就开始挠头PLC程序在软件里监控得好好的变量都能跳一接HMI要么屏幕上全是“####”要么数值死活不对要么连设备都搜不到。这篇文章不绕弯子直接把CODESYS连接触摸屏这条路完整走一遍从通信方案怎么选、工程要怎么配到联调怎么验证、踩过的坑怎么填重点用威纶通触摸屏做实例其他品牌昆仑通态、台达、MCGS等思路都一样照葫芦画瓢就能上手。1. 连接前的整体思路先搞清楚你要用什么方式通信1.1 CODESYS与触摸屏通信的本质很多新手容易把这事想复杂其实CODESYS连触摸屏本质上就是“触摸屏作为主站/客户端去读写CODESYS运行环境中PLC工程里的变量”。传统的PLC比如三菱FX系列、西门子S7-200 SMART给触摸屏留的无非是D寄存器、M线圈、V区这类“地址”而CODESYS里没有这么直观的地址概念变量就是变量比如PLC_PRG.bRun、GVL_HMI.rTemp。所以CODESYS连触摸屏要解决的核心问题只有一个怎么让触摸屏能够访问到CODESYS里的符号变量。由此引出两条完全不同的路线把符号变量“翻译”成Modbus寄存器地址触摸屏按地址读写。直接让触摸屏通过CODESYS的符号协议访问原始变量名。这两条路分别对应了后面要详细说的Modbus TCP方案和CODESYS原生标签方案。理解了这一点后面所有配置就都不是死记硬背而是知道自己在做什么了。1.2 三种主流通信方案怎么选Modbus TCP、OPC UA、原生标签实际项目里跑得最多的就是下面三种各有各的适用场景方案协议类型优点缺点典型场景Modbus TCP标准工业以太网协议通用性极强调试工具多几乎所有触摸屏都支持地址管理靠手工数据类型受限项目大了容易乱跨品牌互联、老设备改造、现场统一走Modbus采集OPC UA现代工业互操作标准支持加密、符号访问、复杂数据结构CODESYS原生支持部分老触摸屏不支持证书配置有点麻烦新项目、多系统数据集成、对安全有要求的项目CODESYS V3原生标签CODESYS私有/半公开协议开发效率最高画面里直接填变量名不用管地址映射主要靠威纶通等少数HMI软件原生支持版本匹配要小心单机设备、快速开发、后期维护方便选型逻辑并不复杂。如果是改造项目现场已经统一走了Modbus或者触摸屏品牌比较杂那就老老实实选Modbus TCP如果是全新项目HMI又支持OPC UA那直接上OPC UA省去地址映射的麻烦如果你就想在办公室快速把界面拉起来、看到数据首选CODESYS V3原生标签尤其威纶通配合CODESYS非常丝滑。我自己的习惯是非标单机项目优先CODESYS V3原生标签开发效率高、变量名可读性强涉及MES、上位机、第三方采集的系统再考虑OPC UA或Modbus TCP因为跨系统通信时标准协议更稳。2. 实操准备环境搭建与关键配置项2.1 CODESYS侧先准备好这几样别一上来就配触摸屏CODESYS侧的东西没准备好后面全白搭。按清单过一遍CODESYS开发环境我用的是CODESYS V3.5 SP19以上的版本界面和功能都稳定。版本太低的话部分Modbus设备和符号配置的入口位置会不太一样。运行环境可以是汇川、禾川这类基于CODESYS的实体PLC也可以在Windows上跑一个CODESYS Control Win V3软PLC用于仿真调试。只要支持以太网思路一致。Modbus TCP Slave设备如果你选Modbus TCP方案需要确认开发环境的设备仓库里有“Modbus TCP Slave”这个设备。标准安装默认会带如果找不到检查安装时是不是把库组件精简掉了。符号配置Symbol Configuration如果用原生标签方式需要在Application属性里勾选生成符号文件并在下载工程时一并下载。一个小提示实体PLC和软PLC在IP配置上不同。实体PLC通常在厂家自带的系统配置界面里设IPCODESYS Control Win V3跑在Windows上IP就是这台电脑的IP比如在办公室笔记本上仿真触摸屏软件也装在这台电脑上那IP直接用127.0.0.1就行。2.2 触摸屏侧软件和驱动别选错触摸屏这边主要把组态软件装好、型号选对。不同品牌的驱动入口差异很大容易踩坑威纶通软件用EasyBuilder Pro现在也有新的Leadsys Studio。新增设备时PLC类型里有“MODBUS TCP/IP”和“CODESYS V3”两个选项分别对应两条路线。选错驱动是最常见的低级错误但我也见过不少老工程师把CODESYS V3工程用Modbus驱动去连结果地址全对不上。昆仑通态MCGS在设备窗口里添加“Modbus TCP”主站设备然后在子设备里配置远程PLC的IP和寄存器区。台达DOPSoft或者Leadsys Studio系驱动也要区分Modbus TCP和CODESYS。这里有个容易被忽略的点触摸屏的组态软件版本和固件版本也会影响驱动支持。比如威纶通老型号的触摸屏固件太旧CODESYS V3原生驱动可能刷不出来。遇到这种情况先升级固件再谈通信。2.3 网络参数规划别在这些细节上翻车通信调不通一大半原因是网络参数没规划好。我强烈建议在给触摸屏和PLC通电之前先把IP规划写下来。一个典型的规划设备IP地址子网掩码端口CODESYS PLC192.168.1.10255.255.255.0Modbus TCP监听502触摸屏192.168.1.20255.255.255.0无固定监听端口作为客户端主动连PLC调试电脑192.168.1.100255.255.255.0无需要注意的细节IP必须同一网段。192.168.1.10和192.168.0.20表面看都是192.168开头但第三段不一样照样不通。端口别被占用。Modbus TCP固定监听502Windows上如果跑了一些占用502端口的程序软PLC会起不来。可以用netstat -ano | findstr :502查一下。防火墙该关就关。Windows自带的防火墙经常拦截PLC和HMI之间数据尤其是第一次运行软PLC时系统还会弹窗问你是否允许手一抖点了取消后面怎么都不通。有些PLC支持DHCP但默认开启如果没有固定IP往上一接很容易造成地址飘移。现场环境建议固定IP。物理连接上现在的网卡和交换机基本都支持自适应直连线、交叉线都无所谓但尽量别让触摸屏和PLC之间串太多层网络减少排查复杂度。3. 实战步骤以威纶通触摸屏为例完整走一遍3.1 CODESYS工程侧把Modbus TCP从站配置出来如果选Modbus TCP方案CODESYS侧就要做成从站Slave触摸屏作为主站Master来访问。步骤说细一点跟着操作就行。第一步准备测试变量。在CODESYS工程里新建一个全局变量表GVL_HMI加入三个典型变量tCount : INT; // 计数器用来观察实时变化 rTemp : REAL; // 浮点温度值 xRun : BOOL; // 运行状态在PLC_PRG里写两行测试逻辑比如每秒计数一次再生成一个温度值。这样联调时数据会动一眼就能看出通没通。第二步添加Modbus TCP Slave设备。在设备树里右键“DeviceCODESYS Control ...”选择“添加设备”在设备列表里找到“Modbus TCP Slave”并添加。不同版本的路径略有差异一般能在“现场总线”→“Modbus”分类下找到。如果没有这个设备项说明安装CODESYS时没有把Modbus相关功能装全需要重新安装或手动导入设备描述文件。第三步配置Modbus从站参数。双击添加好的“Modbus TCP Slave”进入配置界面单元IDUnit ID设为1触摸屏侧连接时填同样的ID。端口保持默认502。在“寄存器区”或“Modbus从站通道”配置里增加保持寄存器区Holding Registers功能码对应0x03读、0x06写单个、0x10写多个起始地址设为0寄存器数量按需设置比如16个。这个“保持寄存器区”就是触摸屏能看到的数据区。起始地址0保存了第一个寄存器触摸屏读40001时读到的就是这个区域偏移0处的数据。第四步把寄存器区映射到PLC变量。这是最关键的一步。我建议直接用数组映射的方式在GVL_HMI里定义一个数组aHoldRegs : ARRAY[0..15] OF WORD;然后在Modbus Slave设备的I/O映射页面把保持寄存器通道绑定到这个数组变量上。为什么推荐数组映射而不是一个一个绑定因为Modbus从站设备在I/O映射里绑定单个变量时变量多了以后非常难维护用一个WORD数组接收全部寄存器再在PLC程序里做一次数据搬运逻辑集中、排查方便。程序里可以用UNION或者指针方式把REAL浮点数和两个WORD互相转换这一步在联调时很有用。第五步编译、下载、运行。把工程下载到PLC或软PLC后先别急着碰触摸屏用调试工具验证一下从站是不是真的能访问。3.2 触摸屏工程侧两种方式任你选方式一使用Modbus TCP驱动打开EBPro新建一个工程选对触摸屏型号然后进“系统参数”→“设备列表”新增一个设备PLC类型选择“MODBUS TCP/IP”。接口类型选“以太网”。IP地址填CODESYS侧PLC的IP比如192.168.1.10。端口填502站号填1。然后新建一个画面拖一个“数值显示”元件在地址设置里选择4x保持寄存器类型地址填0。此时实际访问的Modbus地址就是40001对应CODESYS里保持寄存器区第0个寄存器。再拖一个“位状态指示灯”元件地址类型选择0x线圈地址填0对应功能码0x01的线圈区。如果CODESYS侧没有配线圈区这个元件会一直读不到值这是正常的。方式二使用CODESYS V3原生标签驱动如果你觉得寄存器地址太绕用原生标签方式会舒服很多。在CODESYS工程里右键Application选择“符号配置”Symbol Configuration确保“支持符号”被勾选然后生成并下载。触摸屏这边的操作是在EBPro里新增设备PLC类型选择“CODESYS V3”。接口类型选“以太网”填入CODESYS所在设备的IP端口按驱动说明填CODESYS Gateway场景下常用8501。此时画面元件的地址可以直接填写变量名比如GVL_HMI.tCount、GVL_HMI.xRun连数据类型都能自动识别。这种方式的好处是程序里加一个变量触摸屏画面里直接改个变量名就行不需要重新规划寄存器地址表。缺点是依赖CODESYS网关服务电脑上的CODESYS Gateway必须处于运行状态且触摸屏能看到这台主机。3.3 联调验证怎么判断通没通一定要按顺序排查别跳步。先ping。触摸屏软件所在电脑或触摸屏本体ping一下PLC的IPping不通后面一切免谈。如果是软PLC跑在同一台电脑上ping127.0.0.1能通不代表防火墙放行了502端口所以下一步直接用工具验证。再用Modbus工具验证。下载一个Modbus Poll或者ModScan按照前面规划的IP、端口502、站号1、功能码03、起始地址0、寄存器长度16去连一次如果能读出数据说明CODESYS从站没问题问题一定在触摸屏侧配置。最后用触摸屏在线模拟。EBPro有“在线模拟”功能不需要接实体屏就能在电脑上跑画面。电脑同时跑着CODESYS软PLC和EBPro模拟器时画面里的数值元件如果开始跳动就说明整条链路通了。我习惯在CODESYS里写一个秒脉冲计数器触摸屏画面上放一个实时跳动的计数器数值这样有没有卡顿、有没有掉线一眼就能看出来。4. 常见问题与排查技巧实录4.1 通信不通的几大原因排查表这么多年下来CODESYS连触摸屏的故障九成以上都是下面这张表里的原因。直接照表查效率最高现象可能原因排查与解决方法完全连不上设备图标显示离线IP不在同一网段核对PLC、触摸屏、电脑三者的IP和子网掩码连得上但数据全是0或无变化Modbus寄存器区没映射变量或者映射了但程序没搬运检查CODESYS里Modbus Slave的I/O映射是否绑定了变量数值能显示但偶尔跳“####”通信不稳定可能是网络延迟或触摸屏轮询时间太短适当增大触摸屏的通信超时时间检查网络交换机32位浮点数值乱跳字序/字节序不一致在触摸屏侧调整双字顺序低字在前/高字在前始终连接失败Modbus Poll也读不了防火墙拦截或502端口被占用关闭Windows防火墙或者用netstat检查端口占用CODESYS V3原生标签方式连不上CODESYS Gateway未运行打开CODESYS Gateway服务确认网络端口开放4.2 标签读不到、变量刷新慢的细节这类问题往往更隐蔽不是完全不通而是“能用但别扭”。变量刷新慢先看触摸屏后台的轮询设置。EBPro里每个元件请求的数据是在后台分批轮询的如果画面里元件很多通信量大的时候刷新率会明显下降。可以把常用变量设成“持续读取”或者把不用的元件删掉减少请求总数。符号表读不到多半是CODESYS侧符号配置没生成或者生成后又改了变量但没重新下载。记住一个规律改了变量名必须重新生成符号文件并下载到运行环境触摸屏才会识别。还有一个非常容易踩的坑CODESYS里REAL类型32位浮点在Modbus中要占两个寄存器读取时必须指定“32位方式”同时注意字序。比如rTemp是REALPLC侧把它搬运到aHoldRegs[2]和aHoldRegs[3]两个寄存器中触摸屏侧读4x0003时就要选“32位浮点”格式哪两个寄存器在前、哪两个在后得两边对齐。这种问题不会让你断连但会让你对数据产生严重怀疑排查起来非常耗时间。4.3 仿真环境下怎么和外部触摸屏联调不少项目在办公室阶段没有实体PLC这时候可以在Windows上跑CODESYS Control Win V3做仿真再配合触摸屏的仿真/模拟软件联调效果和真机几乎一样。具体操作不复杂先安装CODESYS Control Win V3在CODESYS开发环境里把设备和运行环境关联好把工程下载到这个软PLC上并启动。触摸屏侧如果是EBPro直接点“在线模拟”它会以本机IP去连PLC所以触摸屏驱动设置里的IP填127.0.0.1或者本机局域网IP都可以。用软PLC仿真时有个典型问题CODESYS开发软件、CODESYS运行环境、触摸屏模拟器都在同一台电脑上有时候端口监听列表看着正常但触摸屏就是连不上。这时候优先检查CODESYS Gateway是否在运行它是原生标签方式通信的桥梁很多人在安装CODESYS后把它设成了手动启动重启电脑后就没起来。包括这些年行业里流行的“Leadsys Studio仿真环境下与外部触摸屏进行自由标签通信”本质也是把触摸屏组态软件的模拟运行当成一台虚拟HMI通过与CODESYS软PLC之间的自由标签通信来实现整机虚拟调试验证画面和数据链路。4.4 第三方工具读取CODESYS变量的经验做项目免不了要用上位机或者数据记录工具去读CODESYS的变量比如热词里提到的PLC-Recorder这类软件。它的配置思路和触摸屏完全一样要么走Modbus TCP要么走OPC UA。如果PLC-Recorder走Modbus TCP你需要先把CODESYS侧的从站配置好然后把寄存器地址填到采集点表里。要注意的是第三方工具通常只认地址不认变量名所以一份清晰的“寄存器地址映射表”比什么都重要。我建议在CODESYS工程里专门建一个注释齐全的全局变量表把变量名、数据类型、寄存器偏移、触摸屏地址、采集工具地址都列出来项目后期能省出一大把时间。如果走OPC UACODESYS侧需要添加OPC UA Server设备配置好安全策略然后在PLC-Recorder里添加OPC UA客户端连接浏览节点就能看到CODESYS的变量树比Modbus方便很多但首次配置证书有点绕。4.5 几个容易绕远的延伸场景昆仑通态触摸屏的配方数据要写给PLC本质上是把配方寄存器区写进PLC的Modbus保持寄存器区再在PLC程序里基于配方索引搬运。和普通读写没有本质区别只是地址规划要更严谨。威纶通触摸屏走485串口通信如果现场不是以太网环境Modbus RTU也是一条路。CODESYS侧需要添加Modbus Serial Slave设备串口参数波特率、数据位、停止位、校验位两边要完全一致。注意CODESYS Control Win V3软PLC默认没有物理串口做RTU调试时最好直接上实体PLC或加串口服务器。触摸屏直接连数据库比如MySQL这是另一个方向要么靠触摸屏自身的SQL功能要么像CODESYS里用数据库类库做数据落盘。不要在排查通信问题时把这几件事混在一起容易绕远。5. 一点实操心得收尾调试CODESYS和触摸屏通信我最大的体会是先定协议再定地址最后才动画面。很多人一上来就在画面上拖控件填地址变量名和寄存器规划得乱七八糟出了问题既没法通信、又没法查。还有一个个人经验无论用什么方式通信都建议在CODESYS里预留一个“心跳寄存器”。让PLC程序周期性写入一个累加值触摸屏画面上放一个只有几像素、随时可见的数值框来显示这个心跳哪怕项目交付了也别删。现场设备出问题第一个看心跳是否还在变化能把通信问题跟程序逻辑问题瞬间分开减少很多来回沟通的成本。最后还有一个容易被忽略的小细节修改了CODESYS工程并重新下载后触摸屏侧如果还显示旧数据很多时候不是通信断了而是HMI的驱动还在用旧的符号表或旧的寄存器缓存。把触摸屏画面重新“下载一次”或断电重启一下往往就好了。遇到这种“莫名其妙”的问题先别怀疑硬件先做最朴素的复位操作能省不少事。