ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

组态王通过TCP与MCGS触摸屏通讯配置与排错

组态王通过TCP与MCGS触摸屏通讯配置与排错 我手上做过的泵站、水处理和几条包装线项目上位机清一色是组态王现场操作面板则基本被MCGS的TPC系列触摸屏占满这两家的东西凑在一条产线上是常态。早年中间靠一根RS485串线硬拉碰上变频器一开、地电位一偏通讯就开始抽风维护工半夜打电话说画面全是问号。后来我把能上网口的场子全改成走TCP一条网线过去干扰问题基本消失调试也从拿着万用表量电压变成了打开调试助手看报文。这篇就说清楚组态王通过TCP和MCGS触屏通讯这件事它到底是什么、能解决哪些现场问题、从零到跑通要做哪几步、参数怎么配、地址怎么对、坏了怎么查适合刚接手上位机联调的朋友也适合已经会点组态但被跨品牌通讯卡过的老手。1. 先把需求想清楚为什么非得让这两家走TCP1.1 一个典型现场上位机和触摸屏各自为战我遇到最多的场景是这样的中控室里放一台工控机跑组态王负责全厂数据汇总、报表、报警记录和远程操作现场每台设备旁边装一块MCGS触摸屏负责本地操作、参数设置和状态显示。这就带来一个问题两边都要看同一批数据也得能互相下发指令。传统做法是各接各的PLC组态王从PLC读触摸屏也从PLC读两条通道互不相干。听起来挺干净但现场一跑就露馅——两次读取的时间点不一样中控看到的电流值和现场屏上差了半秒操作工按了屏上的启动中控画面要等一两秒才变色遇上工艺要求高的场合这种不同步就是事故隐患。另一种更常见的场景是改造老设备只有触摸屏做本地控制甲方突然要求把数据上传到中控。这时PLC的通讯口可能已经被触摸屏占死了或者PLC根本没有空闲网口唯一能动的就是触摸屏那个网口。让触摸屏把数据转出来给组态王是最省事的一条路。触摸屏在这里扮演的是数据网关它自己跟PLC照常通讯同时开一个TCP服务端把需要共享的变量放到寄存器区里等组态王来读。理解了这个背景就明白为什么说组态王通过TCP和MCGS触屏通讯本质上是解决跨品牌、跨设备的数据共享与操作同步问题。它不是简单地连个网而是把两块原本独立的控制系统拼成一张网。1.2 三种可行链路我逐个拆给你看把组态王和MCGS触屏用TCP串起来落到实操上有三条路我按现场使用频率从高到低排方案角色分配数据格式开发量适用场景Modbus TCP从站模式触摸屏做服务端组态王做客户端标准Modbus报文小纯配置90%的常规项目自定义TCP透传一方服务端一方客户端收发原始字节自定报文中需定协议特殊数据、大数据量、私有格式中间网关/OPC中转第三方软件或网关做桥各自协议大多一层多品牌混杂、点数极多先说Modbus TCP从站模式这是我笔记本里存得最熟的一套。MCGS触摸屏里挂一个通用TCP/IP父设备加一个ModbusTCP子设备把屏设成服务端端口默认502屏内部的、需要共享的变量通过通道连接挂到4区保持寄存器上。组态王那边新建一个ModbusTCP设备IP填触摸屏地址端口填502站号跟屏上设的从站号一致变量连到对应的40001这类地址。整条链路不用写一行代码全靠配置稳定性和可维护性最好。再讲自定义TCP透传。有些项目传输的不是简单的开关量而是一整条工艺配方或者几百字节的流水数据用Modbus一区一区拼会很别扭。这时候可以用MCGS的网口收发驱动或者TCP/IP透传屏和上位机之间直接收发字节流报文格式自己定比如帧头加长度加数据加校验。好处是灵活坏处是协议要自己维护双方字节序、帧同步、粘包处理都得考虑调试成本明显上去。我一般只在Modbus实在装不下的时候才走这条路。最后是第三方中转。比如现场PLC是西门子的触摸屏和PLC走的是厂商私有协议同时还要跟另外几个品牌的设备连这时中间放一台网关做协议转换两边各自对接。这种方案点数多了以后反而清晰但多一层设备就多一个故障点预算也上去了。小项目真心不建议。提示选方案前先数清楚要共享多少点、是什么类型。几十个开关量加模拟量无脑选Modbus TCP超过几百点且刷新要求高再考虑透传或网关。1.3 网络拓扑和硬件准备别在这步偷懒拓扑上我推荐星型结构别用手拉手串着接。中控工控机、触摸屏、PLC全接到一台工业交换机上各占一个口。原因很简单串着接一台设备网口坏了下游全断排查起来要命星型接法里拔掉哪根线影响谁一目了然。硬件上要留意三件事。第一触摸屏的网口数量。TPC系列很多型号只有一个以太网口这个口如果已经用来连PLC那它跟组态王通讯就得共用这个口屏内部做协议转发这是完全可行的但要确认屏的固件和驱动版本支持多设备并发。第二IP规划。我习惯把触摸屏放在100段以后的固定地址比如192.168.1.101、192.168.1.102中控工控机放192.168.1.10PLC放192.168.1.11起同一网段、同一子网掩码255.255.255.0地址表写在工程文档里后期谁接手都不迷糊。第三交换机。别拿家用几十块的路由器凑合工业现场振动、温度、电磁干扰都不是消费级设备扛得住的选带导轨安装、支持冗余电源的工业交换机几百块的东西能省掉无数扯皮。2. TCP通讯绕不开的基础细节2.1 三次握手和长连接在组态软件里意味着什么很多人一提到TCP就头大其实对做组态的人来说不需要背协议规范只要理解连接是怎么建立的、什么时候断。客户端发起连接时先发一个同步包服务端回一个同步加确认客户端再回一个确认这就是三次握手三下交互完链路才算通。之后数据就可以双向跑了。这个动作在Modbus TCP里就是组态王作为客户端去连触摸屏502端口的过程正常情况下几十毫秒就完成。关键在于长连接还是短连接。Modbus TCP标准做法是长连接组态王连上触摸屏后这条通道一直保持后续每次读写都在这条通道上发报文不再重复握手。长连接的好处是响应快、开销小坏处是一旦链路中间断了比如交换机重启、网线被碰掉客户端如果不知道断开就会一直往死连接里发数据画面数据全部卡住不变。这就引出组态王里两个重要参数通讯超时时间和通讯故障恢复时间。超时时间决定发出去多久没回应就判定为失败我一般设1000毫秒恢复时间决定判定失败后隔多久重试我设3000到5000毫秒。这两个值设得太短网络稍微抖一下画面就报通讯故障、频繁告警设得太长真断线时半天不报警操作工看着旧数据以为是实时值这是很危险的。我的经验是先在现场用ping连续压测十分钟看平均延迟再把超时设成平均延迟的十倍左右比较稳。注意长连接模式下现场任何一次网络设备重启都要考虑连接重建的时间。组态王一般能自动重连但前提是这些超时和恢复参数配置合理。2.2 IP、端口和子网掩码配置里最容易翻车的地方端口这块Modbus TCP的规范端口是502触摸屏做服务端时默认也是502。有些现场为了避开和别的服务冲突会改成别的端口比如503、1502。一旦改了两端必须同步改我见过不止一次只改了一头调试半天找不到原因。还有个坑是端口占用触摸屏或者其他设备上如果有别的程序抢占了502服务端就起不来所以屏上最好别装无关的东西。子网掩码必须两端一致。工控机和触摸屏都是255.255.255.0还好最怕的是现场已有网络用了别的掩码比如255.255.0.0你新加的屏按255.255.255.0配短时间ping得通跨网段一访问就出问题。IP地址也要查重两个设备撞了同一个IP现象是时通时不通ping丢包特别迷惑人。我现在的习惯是上线前拿一根网线单独连屏和笔记本把地址固定好再接入主网络避免跟老设备打架。还有个常被忽略的点触摸屏的网关地址。如果中控和现场不在同一个网段需要跨网段访问那就得给触摸屏配网关指向所在网段的路由器地址同网段的话网关可以留空。这个配错了现象就是同网段能通、跨网段不通。网络层调通之后用命令行验证是最快的ping 192.168.1.101 telnet 192.168.1.101 502ping通说明三层可达telnet 502能连上说明四层端口开放。两条都过问题基本就落到应用层配置上了这时候再去看设备地址、寄存器映射才有意义。顺序反了会浪费大量时间。2.3 寄存器地址怎么对得上号这是通讯的命门Modbus协议把数据分成四个区每个区有自己的编号段这是所有对接问题的根源也是新手最容易晕的地方区名功能地址段读写常见用途线圈可读写位00001-09999读/写启停命令、开关状态离散输入只读位10001-19999只读限位、故障反馈输入寄存器只读字30001-39999只读只读的模拟量保持寄存器可读写字40001-49999读/写设定值、参数、共享数据触摸屏这边把变量挂到4区某个偏移上组态王那边就要去读同一个偏移。听起来简单实际最容易错的是偏移从0还是从1开始。有的软件界面上写寄存器地址填0表示第一个有的填1表示第一个两家规则不一样一个偏移差读到的就是隔壁那个变量的值。我在现场的标准动作是先在触摸屏上做一个已知值的测试变量比如固定值1234组态王读过来核对确认偏移规则再把真实变量批量挂上去。这一步花十分钟能省下后面几小时的排查。还有个隐患是数据长度和字序。一个寄存器是16位能装0到65535的整数但实际项目里的流量、温度经常是小数需要32位浮点甚至32位整数占两个寄存器。这时就涉及高低字顺序问题同样的浮点数一方按高字在前存一方按低字在前读结果就是一个天文数字。组态王和MCGS在这方面都提供字序选项对接前必须确认。我的土办法是写一个固定值像12.5进去两边读出来一对对不上就调字序或者勾字节交换对上为止。3. MCGS触摸屏侧把它配成一个合格的TCP服务端3.1 先建工程把网口参数固定下来打开MCGS组态环境新建工程选择匹配的TPC型号。工程建好后第一件事是设置屏本身的网络参数位置一般在系统参数或设备属性里的网络设置页IP地址、子网掩码、网关按第2章规划好的填进去。这一步其实改的是触摸屏操作系统的网络配置跟工程是绑定的工程下载后生效。这里有个细节值得说改完网络参数一定要重新下载工程并重启屏有时候在线改完当时能用一断电重启又回旧参数就是因为参数没写进工程文件。我吃过这个亏现场调了半天第二天开机全崩后来养成习惯——所有网络参数改动都走工程下载流程不用在线调试窗口的临时修改。默认通讯端口保持502除非有明确理由才改。屏上如果有多个物理网口或者支持扩展模块要确认服务端绑定在哪个口上别连到空闲口还纳闷为什么不通。3.2 设备窗口挂通用TCP/IP父设备再挂ModbusTCP子设备这是MCGS侧的核心配置步骤逻辑是父设备负责底层TCP链路子设备负责Modbus协议解析。在设备窗口里双击打开先添加一个通用TCP/IP父设备双击它的属性把工作模式选成TCP服务器也就是服务端本地IP填屏自己的地址端口填502。工作模式这里要特别注意很多人稀里糊涂选了客户端结果变成屏主动去连别的设备组态王这边就更连不上两头都等在原地。父设备配好之后在它下面添加子设备选ModbusTCP或者Modbus RTU/TCP这类驱动。子设备属性里通常要填从站地址这个地址是逻辑站号屏自己做服务端时也要给它分配一个站号一般填1也有的驱动叫设备地址或者主机地址。组态王那边读的时候设备地址填的必须跟这里一致否则请求发出去了服务端不认这个站号直接不响应。采集周期和通讯等待时间这两个参数也别忽略。采集周期决定触摸屏内部多久刷新一次这些共享数据设50到200毫秒比较常见等待时间设太长会拖慢响应设太短网络稍微抖一下就超时报错。我一般采集周期100毫秒起步根据实际数据量和网络负载再微调。提示如果现场要求触摸屏主动把数据推给上位机反过来把屏设成客户端、组态王侧开服务端也可以。角色可以互换核心是两端角色必须一客一服不能都当服务端干等。3.3 通道连接把屏里的变量一个个挂到寄存器上设备挂好只是打通了链路真正把数据放上去靠的是通道连接。在实时数据库里先定义好要共享的变量类型分开关型和数值型。然后回到设备窗口双击ModbusTCP子设备进入通道连接界面把变量一个个连到寄存器地址上。操作上选一个变量给它指定4区地址比如40001。注意界面上通常让你填的是一段地址加上偏移比如选4区偏移填0对应40001。前面说的偏移从0还是从1的坑就在这。我的做法是在4区最前面留出一片测试区比如40001到40010先把这一批固定值变量挂上确认映射无误后再挂真实业务变量最后把测试区清掉。这样逻辑清晰、返工少。挂完变量把工程下载到触摸屏重启后服务端就起来了。这时候别急着去配组态王先在电脑上验证一下——这是我在3.4节要说的。3.4 用调试助手先自测能少走一大半弯路屏端配完我强烈建议先拿一个Modbus调试工具做单侧验证。这类工具Modbus Poll、Modbus Slave、各种Modbus客户端工具在电脑上跑填屏的IP、端口、站号直接去读40001那片测试区。能读到值说明屏端服务端、寄存器映射、网络链路三样都对问题不在屏这边。读不到或者读出来是异常码就按这个顺序排查先确认IP和端口通不通再看站号对不对再看偏移规则最后看寄存器区选得对不对比如错选了3区。整个排查过程不到半小时比直接两边一起调高效得多。自测还有一个额外好处能看到报文原始内容。工具里一般有报文显示窗口你能看到请求帧是03功能码读保持寄存器、起始地址、数量响应帧里跟着数据和CRC。这在你后面排查组态王读取异常时非常有用因为两边错误现象经常长得一样只有看报文才能区分到底是谁的问题。4. 组态王侧建工程、装驱动、连设备4.1 6.55和7.5版本装驱动的路子不太一样组态王版本是个不能忽略的变量。6.55和7.5在驱动管理和安装方式上差别挺明显我两种都用过提醒几点。6.55时代驱动安装用的是设备安装向导通常在开始菜单或者工程目录下有个专门的安装工具选驱动目录按提示走装完重启工程才能看到新设备。7.5把这块整合成了设备安装工具界面更规整支持驱动包批量安装也能看到已安装驱动的清单装完同样建议重启软件让驱动生效。另一个差异是变量词典和新建工程的操作路径略有调整7.5对大数据量工程的响应的确好一些但界面变化让习惯了6.55的人一时摸不着北。我的建议是如果甲方用哪个版本你就用哪个版本调试别为了顺手换个版本导致现场工程打不开或者驱动不匹配那才是真麻烦。驱动装完在设备窗口里新建设备选PLC大类下的Modbus再选ModbusTCP这一项。名字自己起一个清楚的比如MCGS屏1方便后面维护。设备地址填逻辑站号和第3章屏端设的从站号一致。通讯参数里填触摸屏的IP地址和端口502。4.2 设备属性里的参数哪些必须对设备配好后右侧属性栏有一堆参数我挑几个关键的讲。通讯超时和故障恢复时间按第2.1节的经验值设。这里还有尝试恢复次数采集频率之类的项。采集频率决定了组态王多久轮询一次这个设备设100毫秒意味着每秒读10次点数多的时候这个值会影响CPU和网络负载。现场几十个点的项目500毫秒到1秒就够了那种几十毫秒的要求往往是把节奏设得太紧张实际对工艺没有任何意义反而增加误报概率。IP地址和端口必须是屏的实际地址站号必须和屏端一致。这三样只要有一个错现象都是通讯失败或读不到数据很难靠猜区分所以我在设备属性里会加备注把这三项写在工程文档里后期交接省事。4.3 数据词典变量类型和地址要一一对应设备配好接下来建变量。在数据词典里新建变量每个变量都要指定类型和连接设备。类型上开关量选离散或者位型模拟量选整型、浮点等。连接设备选刚才建的那个ModbusTCP设备连接项里填寄存器地址。组态王里Modbus驱动的寄存器地址一般写作40001这一类的形式或者分区间填偏移具体看驱动版本——有的版本让你先在连接项里选区域再填偏移数字。这里再强调一次偏移规则一定要和屏端对齐。最稳妥的验证方法还是在4区开头留测试变量两边读一次对一次。变量名我习惯用设备含义的格式比如M1_Start、M1_Current一方面自己看着清楚另一方面批量建变量时不容易串行。变量描述这一栏别嫌麻烦写上中文含义和量程运行调试时鼠标悬停就能看到查问题特别快。对于32位数据变量类型要选对应的长整型或浮点同时注意字序设置跟屏端确认清楚。前面说过用固定值验证这里同样适用——建一个浮点变量连到屏上的浮点测试变量比对数值对不上就调字序。4.4 画面绑定和运行调试变量建好最后一步是把它们拖到画面上灯、按钮、数值显示、趋势曲线想怎么用怎么用。运行一下看数值是不是实时跳动、按钮下发是不是立即生效。我在这一步会做两件验收一是操作回路闭环在组态王画面上点一个按钮看触摸屏上对应的指示灯和屏上真实设备的反应对不对确认下行数据真的到了二是数据一致性同一时刻对比中控画面和现场触摸屏上的同一个数值差个一两百毫秒正常差一大截就有问题。跑通之后别急着收工做一次断电重启测试。工控机重启、触摸屏重启、交换机重启各种情况都试一遍观察恢复时间和数据是否正确。很多工程是当时能跑一断电就傻眼提前测出来能避免后面的检修夜战。5. 联调现场那些年踩过的坑和排查套路5.1 常见问题速查表我把这些年现场遇到的典型问题整理成一张表按现象查原因比一条条翻手册快得多现象可能原因排查动作组态王提示通讯失败IP错、端口错、站号不一致ping通后telnet端口核对站号ping通但连不上502屏端服务端没起来或模式选成了客户端看屏端设备属性工作模式读到恒定0或65535偏移错、变量未挂载、数据未刷新用调试工具单独读屏端验证浮点数读出来是天文数字32位字序不匹配固定值测试调字序或勾字节交换数据时通时断、ping丢包IP冲突、网线接触不良、干扰查IP表换根好网线看交换机灯画面数据不跳动组态王采集频率为0或被禁用检查设备属性与变量连接状态按钮下发无效写到只读区、地址写反确认写到4区且地址与屏端一致断电重启后参数丢失网络参数未下载进工程用工程下载方式而不是在线临时改这张表贴在我的工具箱盖子上十年了还在用。5.2 抓包到底看什么别被满屏报文吓到第一次抓报文的人通常会被密密麻麻的十六进制搞晕其实只要抓住几个点就能定位问题。用Wireshark这类工具在工控机上抓过滤条件只留屏的IP和502端口剩下的帧就不多了。看什么先看有没有三次握手。如果只看到工控机反复发同步包屏不回那问题在网络层或屏端服务端没起来应用层配置不用看了。如果握手成功再找Modbus请求帧和响应帧。请求帧里会带功能码、起始地址、寄存器数量响应帧跟着数据。请求发了但没响应说明屏端没处理或者站号不认响应里带异常码功能码最高位置1说明屏端理解请求但拒绝执行通常是地址越界或不允许的功能。还有个直观的指标是响应时间。正常情况下响应在几十毫秒内如果经常几百毫秒甚至超时就要考虑是不是点数太多、采集频率太高或者屏端CPU忙于处理本地逻辑顾不上应答。看到这种规律性的慢响应先把采集频率降下来试试往往立竿见影。注意抓包工具本身对网络有额外负载抓包时间别太长尤其在生产网络里抓到关键帧就停别长时间跑着。5.3 几个容易忽略的细节坑网线质量。这个看起来是废话但真的有人拿一根压得松松的水晶头网线接生产设备跑两天丢一次包。工业环境我建议用带屏蔽层的成品网线超五类以上长度别超过交换机到设备的最远距离一般控制在80米以内超过就考虑加交换机或换成光纤。交换机端口速率协商。老交换机跟新触摸屏之间偶尔会协商出半双工或者10兆这种低速模式现象是能通但丢包、延迟大。表现异常的时候去交换机管理界面看看端口状态必要时手工锁定速率和双工模式。防火墙和杀毒软件。上位机装了防火墙出站连接看似不受限但很多安全管理软件会拦截未知程序的网络访问。组态王进程和调试工具都加进白名单。这条在专网里也要注意别以为内网就没人管。多个上位机同时读一块屏。Modbus TCP理论上支持多个客户端但触摸屏的处理能力有限两三个客户端还行七八个同时轮询屏就喘了。真有多客户端需求考虑用网关或者让组态王做一次汇聚再分发。6. 让它长跑稳定刷新、心跳和后期扩展6.1 心跳和断线重连写给长时间运行的工程一台屏挂在那里跑几年中间网络波动、交换机重启、电源闪断都会发生稳定性靠的不是不出事而是出事了能自己恢复。Modbus TCP长连接本身不带心跳机制靠的是组态王按采集频率不断发请求服务器断线后请求超时客户端判定失败并进入重连流程恢复时间参数决定重连间隔。我在实际工程里会把恢复时间设成3到5秒不要太急频繁重连会给屏和交换机增加没必要负担也不要太长半分钟以上就影响操作了。另外重要变量在画面上加通讯状态指示灯。组态王里可以定义一个读取设备通讯状态的变量一旦断线它能报警操作工知道数据不可信这比默默显示旧值安全得多。6.2 刷新周期别贪快够用就行触摸屏的CPU算力就那么点既要处理本地画面和逻辑又要响应上位机轮询。采集频率设太低数值小、频率高比如设成20毫秒屏端每秒要处理50次请求几百个点堆上去屏自己都会卡。我通常按数据重要性分级关键的启停状态、报警位设200到500毫秒温度、液位这类慢变量设1秒报表用的累计量2到5秒都无所谓。分级之后整体负载降一大截实时数据也够用。6.3 点数涨了、屏多了怎么扩展单屏单上位机跑顺以后项目往往会往上长一台工控机要看十几块屏或者现场又加了几条线。这时候有几点建议。一是分组轮询组态王里把不同触摸屏配成不同设备各自独立的采集频率避免一块慢拖累全部。二是地址规划要提前做多屏之间不要用同样的寄存器号乱映射最好每个屏对应一块地址段或者按屏号统一命名后期维护才不至于抓瞎。三是考虑统一数据出口如果将来还要对接MES或更大的平台可以让组态王作为汇聚点再往上走一层接口而不是让每块屏都对外单开通道那样会成倍增加管理和安全负担。回到最初那个问题——组态王和MCGS触摸屏通过TCP对接说到底就是用标准协议把两台各司其职的设备连成一条数据通路难点不在协议本身而在细节地址对齐、字序、超时、网络规划每一项都平平无奇但每一项都能让你在深夜的现场多待两小时。我现在的习惯是每次新项目先在实验台上用小规模把这三关过一遍再上现场批量配置这个流程帮我省下的返工时间比任何技巧都实在。
返回列表