简介这是一份以威纶通触摸屏与2台台达温控器Modbus RTU通信为核心的参考程序包面向工业自动化工程师、课程学员及竞赛备赛者。程序采用威纶通在线模拟方式演示通信逻辑真实触摸屏使用时只需修改COM口即可复用能帮助读者快速实现HMI与多台温控器之间的参数读取与远程控制。压缩包共4个文件约1.43MB包含2张图片、1份TXT通讯说明和1个HTML操作指南图片可用于核对接线与地址设置文本与网页文档则辅助理解配置流程和排错思路。从中可掌握Modbus RTU多站通信的地址映射、轮询方式及威纶通在线模拟的调试技巧对实际项目中的组网、通讯故障排查有直接参考价值。已有806人学习下载适合需要快速上手HMI与温控器联调的入门及中级开发者。1. 威纶通触摸屏连两台台达温控器一条Modbus RTU总线的通讯程序怎么搭很多非标设备都有“两个温区、两台台达温控器、一个操作屏”的配置。最省事的方案不是每台温控器边上挂一个操作面板而是从一个威纶通触摸屏后面拉一条RS-485总线把两台温控器按站号区分开用Modbus RTU轮询读写PV当前温度和SV设定温度。开发阶段用威纶通在线模拟在电脑上直接连实物设备调通下载到真实触摸屏时画面和逻辑都不用动只需把COM口从电脑的虚拟串口改成触摸屏的物理串口。这件事能成立前提是程序里触摸屏型号从一开始就固定选好、后续不再更换。下面按架构设计、寄存器映射、在线模拟调试、真机切换、扩展维护这个顺序把这个通讯程序里的关键参数和坑一次说透。2. RS-485一主两从架构为什么这么接、温控器寄存器怎么认2.1 为什么是一主两从而不是两个独立串口或模拟量先回答最容易被问的问题为什么不直接用两个串口各接一台温控器常见的小型HMI本身串口资源就有限很多型号只有一个内置RS-485口即使有第二个往往被打印机、条码枪或其他设备占掉把一个口让给温控器不值得。另一个原因是Modbus RTU天生就是为一主多从设计的挂一台也是轮询挂两台只是在同一根总线上多发一帧请求而已对HMI的负载差别很小。反过来看模拟量方案用PT100加变送器把温度变成4-20mA进HMI理论上能绕开通讯但每台温控器都要多拉一组信号线SV设定和报警状态还得另外接数字量或再走通讯表头显示和HMI显示还可能对不上。通讯接线只有一对双绞线PV、SV、报警、是否正在加热都能读到一次性把温控器整个数据模型搬到屏上。所以在“两台温控器、距离几十米、点数不多”这个典型场景里RS-485加Modbus RTU就是性价比最高的常规做法。需要提醒的是RS-485是半双工总线同一时刻只能有一个设备发送数据。威纶通触摸屏作为主站轮流对站号1和站号2发请求两个从站收到与自己站号匹配的请求后才应答。站号之外波特率、数据位、校验位、停止位这四个参数必须与温控器侧完全一致任何一项不匹配都会导致通讯超时。现场最常见的翻车不是协议选错而是这组参数里有一个被忽略了。提示一主两从的轮询压力很小但不要把画面元件做成每秒钟刷新几十个寄存器。读得越少、轮询越快也越稳定。2.2 台达温控器的寄存器映射PV、SV和10倍关系拿到任意一台台达温控器先找说明书里的“通讯地址表”不要凭经验硬填。常见系列的Modbus保持寄存器定义是寄存器40001存当前值PV寄存器40002存设定值SV。但不同系列的寄存器偏移可能不同有的型号PV和SV中间还夹着别的参数所以我的习惯是先读一版寄存器值再和面板显示对比确认。要特别注意的是量纲。温控器面板上显示“105.0℃”通讯报文里的数值往往是“1050”也就是实际温度的10倍。Modbus RTU协议本身不带小数点和量纲0.1℃的分辨率是通过“传整数、人机侧自己移位”实现的。因此在威纶通画面里数值显示元件的小数点位数要设为1位或者读回来后除以10否则你会看到几百上千度的离谱读数。SV写入同样适用这个规则。画面输入框里填“150.0”下发到温控器SV寄存器的值必须是1500写入命令用Modbus功能码06写单个保持寄存器这是默认做法。部分HMI驱动在写入时不做换算所以输入和写入之间的10倍关系必须在画面层或宏指令里处理掉这个问题放到避坑章节再展开。寄存器这块值得单独记一张速查表寄存器类型Modbus地址HMI地址写法属性内容说明保持寄存器400014x-1只读当前温度PV实际值需÷10保持寄存器400024x-2读写设定温度SV写入需×10“HMI地址写法”这列是威纶通EBPro里的习惯写法不是Modbus报文里的实际地址。两者差一个偏移这个偏移会在后面专门讲。2.3 通讯参数先定死站号、波特率、校验位对照表两台温控器接入同一总线之前先把下面这张表确认完再上电。配置项温控器1温控器2说明站号12必须在温控器面板或参数组里设置全总线唯一波特率96009600常见默认值以温控器侧为准数据位88Modbus RTU固定为8位校验位无N或偶E同左两台必须一致停止位28N2或18E1同左校验位不同时停止位可能不同协议Modbus RTUModbus RTU不是Modbus ASCII波特率我一般先用9600跑通了再考虑提速度。距离在几十米内、只有两台从站时9600和19200差别不大但9600对线缆和干扰的容忍度更好。停止位和校验位这两项是温控器侧参数组里最容易改错的地方很多温控器支持8N2和8E1两种格式如果HMI和温控器一个是8N2一个是8E1通讯会处于“偶尔能通、频繁超时”的诡异状态看起来像接触不良实际是帧格式不匹配。HMI侧设备列表里的超时时间一般保持默认重试次数可以设1次。两台温控器各读三四个寄存器即使加上重试总线占用率也很低。3. 在线模拟先跑通COM口映射、地址填法和验证顺序3.1 在线模拟和真机下载的差别COM口指向谁很关键威纶通EBPro有两种模拟方式。离线模拟是纯软件仿真画面能跑但不会和任何实物设备通讯。在线模拟不同它把工程放到电脑上以指定HMI型号的窗口运行同时借用电脑的串口资源把电脑的USB转RS-485虚拟COM口当作HMI串口来用。换句话说在线模拟是“假屏真设备”最适合现场调试程序还没下载到屏上就能先确认寄存器地址、数据类型、量纲转换和温控器参数是否匹配。这也解释了标题里那句话程序开发时设备列表里的COM口填的是电脑上USB转485适配器的COM号而这个COM号只对电脑有效。工程下载到真实触摸屏后同一个COM口必须改成触摸屏物理串口对应的端口编号。画面、宏指令、站号、寄存器地址都保留唯独这一个参数变了。所以“真实触摸屏只需修改COM口”是真的前提是工程里触摸屏型号从一开始就定好因为不同型号的物理串口数量、引脚定义和可用协议都不同型号一旦换掉COM口规划就整个推倒。在线模拟还有一个容易被忽略的用途它能绕过下载流程快速验证PLC地址和HMI地址的映射关系。特别是遇到那种“说明书上是40001HMI地址写4x-1还是4x-0”的疑惑时在线模拟连上实物温控器一个地址写下去数值立马就有反应比翻文档猜半天高效得多。提示在线模拟使用的是电脑的串口启动前务必关闭温控器自带的调试软件、串口助手等可能占用同一COM口的程序否则会提示串口打开失败。3.2 工程侧配置设备列表和画面元件地址速查表新建工程时选定HMI型号之后不要更换。在系统参数设置的“设备列表”里新增两个Modbus RTU从站设备分别命名为DT1、DT2对应站号1和2。两个设备的通讯参数完全一致唯一不同的是站号接口都指向同一个电脑COM口。常见的翻车点是把两台温控器放在同一个设备里只改站号地址。威纶通的驱动模型是一个设备对应一个从站两个从站应该建两条设备记录这样轮询调度才是干净的我一般是按物理设备一对一建方便后面维护。配置项在线模拟取值真实触摸屏取值说明设备名称DT1 / DT2DT1 / DT2名称可自定义便于识别设备类型Modbus RTUModbus RTU不能选ASCII站号1 / 21 / 2与温控器面板设置一致COM口电脑虚拟COM号如COM4触摸屏物理串口号下载到真屏前必改波特率96009600与温控器一致数据位88固定校验位无校验无校验与温控器参数组一致停止位22与温控器参数组一致画面上的元件地址写法也很固定。数值显示当前温度PV设备选DT1地址填4x-1数据类型选16位无符号或16位有符号取决于温控器手册温度不会为负时用无符号更简单小数点设1位。数值输入设定温度SV地址填4x-2小数点同样设1位写入时驱动按06功能码写保持寄存器。3.3 用一条RS-485线把两台温控器跑起来的启动顺序调试顺序值得严格按下面走避免把“没接线”和“地址错”混在一起排查。第一步硬件连接。USB转RS-485适配器的A端子接温控器1的AB端子接B-。温控器2的A和B-并到总线同一对线上也就是两条线从头串到尾。不要从两台温控器各拉两根线到适配器形成星型结构RS-485最忌讳这种接法。线用屏蔽双绞线屏蔽层在电脑这一端单点接地。第二步确认温控器参数。逐台在面板上把站号设为1和2波特率、校验、停止位按前面表格统一。这里必须用温控器面板或参数组一个个确认不要假设出厂值两台都一样。第三步在EBPro里把两个Modbus RTU设备的COM口指向电脑虚拟COM号。然后打开画面上的在线模拟按钮也可从菜单栏的“在线模拟”入口进入。弹出的模拟窗口就是程序里选定型号的软面板它会真实地通过电脑串口发报文。第四步观察两个数值显示元件。正常情况是几秒内刷新出当前温度且小数点位置正确。然后在数值输入框里给1号温控器写一个新SV值确认温控器面板上的设定值跟着变再给2号写一个两边都验过说明通讯闭环已经打通。第五步验证完成后关闭在线模拟把设备列表里两个设备的COM口改成真实触摸屏的物理串口编号下载工程到触摸屏就完成了整套迁移。整个过程里寄存器地址、站号、画面布局、量纲处理都不需要动。4. 换真实屏前的避坑清单COM口、站号、量纲、干扰四条线4.1 在线模拟全通真机下载后全部报通讯失败现象在线模拟时两台温控器数据都正常刷新下载到真实触摸屏后画面所有数值显示“###”或设备状态变成通讯异常。原因真实触摸屏的物理COM口与程序里设置的串口编号不一致或者该型号的某个COM口根本不支持RS-485。在线模拟时COM口指的是电脑的虚拟COM口那是调试通路换到真实屏后程序不会自动知道你要用屏上的哪个端口必须手动改。解决先查程序里选定的这个HMI型号的串口定义通常一个物理COM口支持RS-232和RS-485切换另一个COM可能只支持RS-422。确认用来接温控器的那个口确实支持RS-485后把设备列表里DT1、DT2的COM口改成这个物理端口编号。如果已经改对还是不通用万用表量屏侧485端子的A-B静态电压正常空载应在2V-6V之间偏低说明驱动能力或接线有问题。4.2 1号温控器正常2号一直超时无响应现象两台温控器接在同一总线上1号的温度正常显示2号的数值永远不变设备元件一直显示通讯错误。原因大概率是站号冲突或回线断开。常见的低级错误是两台温控器都保持出厂站号12号从机从没应答过自己站号的请求另一个常见原因是2号温控器的A/B线在端子排上松脱或者中间某一段线虚接。解决先把温控器面板切到通讯参数页逐台核对站号1号1、2号2独占不重复。接线方面检查2号温控器485端子的线是否压接牢靠尤其是经过中间端子排转接的地方RS-485链路是串联链路任何一个节点松动都会导致它后面的设备全部掉线。排查顺序是先看站号再看线不要上来就怀疑程序。4.3 温度显示105℃变成1050或者写入500却变成50现象HMI显示值和温控器表头差10倍写入值也差10倍有时一个方向差10倍、另一个方向对得上。原因温控器通讯数值本身就是0.1℃分辨率105℃对应整数1050没有小数点的协议数据直接显示出来就是1050。反过来在画面输入框里填50想把温度设成50℃如果不做换算直接写温控器收到的是5℃。解决数值显示元件的小数点位设为1位显示105.0数值输入元件同样设1位小数驱动写入时会按实际整数下发。注意有些版本的HMI驱动在设了小数点后会自动处理有些则不会必须在调试阶段用在线模拟实测一次“显示值表头值”再收工。如果写了宏指令做SV写保护宏内部要自己做数值乘除不能依赖画面元件的小数位设置。4.4 通讯运行一段时间后批量掉线断电重启又恢复现象刚上电一切正常跑几十分钟或半天后两个温控器同时通讯超时查看温控器面板表头还在正常显示触摸屏重启或给温控器重新上电后又能恢复一段时间。原因这种“会自愈的玄学故障”通常是现场干扰或总线物理链路问题。最常见的是两端的终端电阻缺失加上线长距离稍远信号在总线末端反射形成驻波干扰持续累积直到从站CRC校验频繁失败另一种是屏蔽层两端都接地形成地环路把现场变频器或加热设备的干扰耦合进了总线。解决在RS-485总线物理两端各并一个120Ω终端电阻。这里的两端指的是“总线电缆的两端”也就是1号温控器接线端子和最后面那台温控器的接线端子上不是触摸屏侧接一个、电脑侧接一个。屏蔽层只保留一端接地另一端悬空并用绝缘胶带包好。如果现场加热设备启停时故障更明显还要检查485总线是否和动力线走在同一个线槽里尽量分隔或换屏蔽层更密的电缆。4.5 USB转485适配器的虚拟COM口“飘移”在线模拟突然打不开串口现象上周在线模拟用COM4一切正常这周换了个USB口插适配器在线模拟启动时就提示打开串口失败但设备管理器里明明能看到端口。原因USB转485适配器的虚拟COM号不固定换个USB物理口Windows会重新分配一个新的COM编号原程序里写的还是COM4。另外就是有其他程序占用了这个COM口比如温控器厂商的调试软件没退出。解决打开设备管理器展开“端口COM和LPT”确认当前适配器实际分配的COM号把EBPro设备列表里的COM口同步改掉。如果反复插拔容易飘移可以在设备管理器里把该适配器的COM号固定成一个常用值比如COM3或COM4。在线模拟启动前养成习惯关掉所有可能占用串口的软件。5. 通讯调通之后更值得留的东西写保护、状态显示和再扩展5.1 给SV写入加一层范围保护的宏指令数值输入元件直接绑定4x-2时操作工误触可能把温度设定写成负值或超出温控器量程。常见做法是画面输入元件先写到本地LW地址由宏指令校验后再写入温控器。下面这段是常用的写法设备名称DT1、DT2对应前面建的从站。macro_command main() short sv1, sv2 // 读取画面上输入到本地LW10的设定值 GetData(sv1, Local HMI, LW, 10, 1) // 限制写入范围避免误操作写坏工艺参数 if sv1 0 AND sv1 40000 then // 数值是10倍格式40000对应4000.0℃ SetData(sv1, DT1, 4x, 2, 1) end if // 第二台温控器使用LW20逻辑相同 GetData(sv2, Local HMI, LW, 20, 1) if sv2 0 AND sv2 40000 then SetData(sv2, DT2, 4x, 2, 1) end if end macro_command这段宏指令说明三点。第一SetData第二个参数是设备名不是站号设备名在EBPro的设备列表里定义第三、四参数“4x, 2”表示写入Modbus保持寄存器地址2也就是温控器的SV寄存器40002。第二判断条件里的40000是10倍格式下的上限实际工艺上限按温控器量程自行换算这一步能挡住绝大多数误操作。第三宏指令在不同EBPro版本里的语法略有差异以你电脑上宏编辑器的语法提示为准这里提供的是最常见的写法。5.2 加一个通讯状态指示灯省掉以后一半的排查时间通讯程序调试完我习惯在画面角落放一个“通讯正常”指示灯用设备DT1和DT2各自的某个只读地址比如PV地址4x-1做数据变化触发。EBPro里可以给数值显示元件勾选“通知”当数据更新时置位一个本地线圈再用这个线圈驱动指示灯。这样做的好处是以后现场报“温度不动了”一眼看出是通讯断了还是温控器本身没在加热不用再拿电脑到现场抓报文。5.3 加第三台温控器的改动范围如果后续要接第三台台达温控器需要动的地方其实只有三处温控器站号设为3设备列表里新增一条Modbus RTU从站记录站号填3COM口和参数不变画面上复制一组显示输入元件设备名改成新设备。总线长度在几十米内不用特殊处理超过100米建议把波特率降到9600以下并在总线两端确认终端电阻。这个扩展弹性就是当初选Modbus RTU而不是模拟量方案最大的回报。我的习惯是每台温控器外壳上贴一张标签写明站号和SV量纲HMI密码分层设置把SV写入权限交给工艺员。这套东西看着不起眼但半年后设备出问题回来排查时能帮你省下大把时间。这篇关于威纶通和台达温控器Modbus RTU通讯程序的完整做法就到这里希望帮到你。本文还有配套的精品资源点击获取