资讯动态

汇川InProShop实现Modbus通讯:RTU与TCP配置全攻略

发布时间:2026/9/16 13:18:42 来源:尧图企业网站定制
去年做了个改造项目现场是一台汇川AM401要跟三台变频器走Modbus通讯。变频器没有网口只有RS485所以老老实实接了根两芯屏蔽线在InProShop里添加Modbus从站、配参数、映射变量前后不到半小时通讯就通了。后面又一个新项目从站换成了带网口的仪表这次没碰串口直接走以太网配TCP速度确实快不少。两套都跑下来我对“汇川InProShop实现Modbus通讯的两种方式”算是有了比较完整的理解。很多新手刚打开InProShop时容易懵——RTU和TCP到底差在哪接线上有什么讲究配置时该注意什么为什么读回来的浮点数乱码了这篇文章我就把两种方式从头到尾拆开讲清楚再聊聊我的选型思路希望能帮你少走点弯路。1. 先搞明白InProShop里的Modbus到底有两种什么方式1.1 InProShop就是汇川皮、Codesys芯汇川的新一代PLC比如AM系列、H5U系列、Easy系列用的上位机编程软件叫InProShop而InProShop的核心是基于3S公司的Codesys V3.5内核开发的。这一点直接影响你后面的所有操作习惯InProShop的设备树、库管理器、POU组织方式跟Codesys几乎一模一样。换句话说网上搜到的Codesys用Modbus的教程大概率也能迁移到InProShop上。理解了这层关系你会发现在InProShop里做Modbus通讯本质上就是在Codesys生态里做Modbus通讯。不过InProShop做了汇川自己的底层封装有些设备模型、驱动库跟原版Codesys略有差异所以最好是先用InProShop自带的库和设备描述文件。1.2 两种方式的本质串口RTU和网口TCPModbus协议在工业自动化领域有好几种载体最常见的两种就是Modbus RTU和Modbus TCP。RTU跑在串口上用的是RS232或者RS485物理层TCP跑在以太网上底层是TCP/IP协议栈。RTU报文紧凑功能码、数据、CRC校验一眼就能看懂但由于串口天生是半双工通信同一时刻只能一问一答像一个对讲机——你说完话要松开按键等对方回话。TCP则多了一个MBAP报文头依靠IP地址和端口号寻址全双工通信双方可以同时收发更像打电话。搞清楚RTU和TCP的底层差异后InProShop里还有一个容易被忽略的维度不管RTU还是TCP都有“设备组态映射”和“功能块编程调用”两条实现路径。设备组态映射是在设备树里把Modbus从站的寄存器直接拖拽映射成PLC变量几乎不用写代码功能块调用则是在ST语言里手动调用库函数灵活但代码量多。我在下文的实操介绍中会同时带出这两条路径因为新手经常卡在这个选择上。2. 方式一Modbus RTU串口通讯接线和配置全流程2.1 接线不只是插上去就行RS485这些细节必须注意RTU通讯物理层用RS485最常见因为RS485是差分信号传输抗干扰能力强理论传输距离能到1200米。先别急着买线以下几个细节一步错后面全白搭。第一A/B线绝对不能接反。RS485靠A和B两线之间的电压差表示逻辑接反了要么完全不通要么偶尔能通偶尔断线。汇川PLC的485端子在不同系列上标法不一样有的标A/B有的标D/D−还有的标/−接之前最好用万用表确认一下别信经验主义。第二通讯参数必须完全一致。波特率、数据位、停止位、校验位PLC侧和从站设备侧必须“对暗号”对上。工业现场最常见的是9600波特率、8数据位、1停止位、无校验但也有不少设备出厂默认是19200或者带偶校验。如果通讯不上第一个查的就是这里。第三终端电阻和屏蔽层不能忘。RS485总线两端需要并联120欧终端电阻尤其在距离长或者设备数量多的时候。屏蔽层要单端接地不要两端都接否则可能形成地环路反而引入干扰。我见过一个现场通讯总是丢包排查半天发现是屏蔽层两端都接地了拆掉一端后故障消失。2.2 InProShop里添加RTU从站参数这样设置硬件接好线接下来就在InProShop里组态。以AM系列为例操作流程基本是在设备树左侧的项目树中找到“PLC”下的串口设备右键追加设备选择“Modbus Serial Master”。配置主机串口参数波特率、数据位、停止位、校验方式必须和你的从站设备一致。在Modbus Serial Master下面添加Modbus从站填入从站地址1~247。在从站下添加通信通道选择功能码读保持寄存器用03读输入寄存器用04写单个寄存器用06写多个寄存器用16。配置寄存器地址和映射变量把从站的数据映射到PLC内部变量。这里有个特别容易踩的坑就是寄存器地址错位问题。Modbus协议层地址是0开始的但很多仪表手册上写的地址是40001、30001这种PLC风格地址把40001当成协议地址去填你就会发现读取的数据整体偏了一位读出来全是0或者错位数据。经验做法是当仪表手册写“保持寄存器地址40001”时对应到InProShop组态里一般要填0如果手册直接给的是十六进制地址0x0000那就直接填0依此类推。不同的从站驱动对地址的偏移处理不一样拿不准时可以用Modbus Poll这类工具发一帧报文对比验证一下比瞎猜高效得多。2.3 RTU的适用场景和脾气RTU适合哪些场合我的判断标准是从站设备没有网口、距离远、现场环境电磁干扰不算特别恶劣、从站数量不多。RS485差分传输对共模干扰有天然抑制能力长距离布线成本也低——两芯屏蔽线一米几块钱比网线加交换机便宜多了。RTU的局限也很明显半双工一问一答轮询周期等于单站通讯周期乘以从站数量。8个从站每站50毫秒一轮下来就是400毫秒起步实时性自然上不去。如果点位不多、刷新周期几十毫秒到一两秒都能接受RTU完全够用如果要求毫秒级同步、或者从站数量超过10个RTU就会很吃力。3. 方式二Modbus TCP网口通讯配置更快但也别掉以轻心3.1 为什么说TCP配置“无脑”但IP规划是重灾区Modbus TCP在配置直观性上确实比RTU好不少。一根网线插上PLC的以太网口再连到交换机或者从站设备硬件上就结束了。没有A/B线没有终端电阻没有波特率校验位物理层几乎不需要担心。InProShop里配置TCP的步骤大概是先给PLC本体设置IP地址比如192.168.1.10子网掩码255.255.255.0。在设备树里追加“Modbus TCP Master”设备。在Master下面添加从站填从站IP地址端口号默认502。添加通道选择功能码映射变量跟RTU的组态逻辑一致。看跟RTU的操作思路几乎相同只是把串口参数换成了IP和端口。但是很多新手栽在IP规划上。最常见的问题就是PLC和从站不在同一个网段比如PLC设成了192.168.1.10仪表设成了192.168.0.50这就是两个网段不经过路由器永远不通。另外端口号502是Modbus标准端口不要乱改除非从站设备明确支持自定义端口并有特殊需求。还有一个隐藏坑是“多个Master占用同一个网口”。在InProShop里如果设备树中存在多个Modbus TCP Master且都绑定了同一个物理网口运行后可能出现资源冲突。处理方法一般是只建一个Master把多个从站挂在一个Master下面而不是建多个Master。3.2 配置式I/O映射和功能块编程两条实现路径怎么选这点值得单独拎出来说。同样是Modbus TCPInProShop里你可以走“配置式”也可以走“功能块式”。配置式是我最推荐新手用的方式在设备树里添加Modbus从站后从站下面会出现通道配置和I/O映射表你只需要把从站寄存器的地址跟PLC变量关联起来系统后台自动完成周期性读写。整个过程中你不需要写一行通讯代码跟组态软件做HMI变量绑定的体验差不多。功能块式则是在PLC程序中调用Modbus库函数比如ModbusMasterReadHoldingRegisters、ModbusMasterWriteMultipleRegisters需要自己管理功能块实例、触发条件、完成标志和数据缓冲区。好处是灵活适合通讯协议比较特殊、标准组态覆盖不了的场景或者想在程序里动态切换通讯参数的场合缺点是代码量大幅增加调试难度也高。表格对比一下对比项配置式设备组态I/O映射功能块式库函数编程上手难度低不需要写代码高需要ST语言基础配置速度快拖拽映射慢需要逐个实例化灵活性受组态框架限制高可自定义逻辑调试便利性直观在线监视变量需要监控功能块内部状态适用场景常规读写、点位固定特殊功能码、动态报文、批量操作对于大部分设备和仪表通讯场景配置式完全够用。功能块式更适合有特殊通讯需求的资深玩家。新手如果一上来就选功能块式很容易被一堆数据缓冲区和完成位搞晕。4. 两种方式的核心对比不只是快和慢4.1 关键参数对比表把RTU和TCP放在一起做个直观的参数对比对比项Modbus RTUModbus TCP物理介质RS232 / RS485双绞线以太网双绞线超五类以上最大理论传输距离RS485约1200米一般100米加交换机可扩展典型通讯速率9600bps~115200bps10/100Mbps甚至千兆通信方式半双工一问一答全双工可同时收发电文从站数量理论上最多247个实际受扫描周期限制理论上连接数更多受PLC性能和网络设备限制抗干扰能力RS485差分信号较强依赖网线和交换机质量强电干扰需注意布线成本低两芯屏蔽线很便宜相对较高需要网线、水晶头、交换机调试复杂程度接线有一定门槛地址偏移需注意网络配置直观IP冲突需注意数据刷新速度较慢受波特率和轮询周期限制快几乎是即时响应这个表格基本能回答“哪个好”的问题。但我要强调一句通信方式没有绝对的好坏只有合不合适。RTU慢但在长距离、低成本、简单可靠这些维度上依然是王者。TCP快但在强干扰环境或者布线不规范的场合一样会出问题。4.2 实时性、稳定性和成本三个最容易被忽略的维度很多新手对比RTU和TCP只盯着速度看觉得TCP就代表着高级、快速、稳定。实际操作中你会发现三个维度才是真正决定项目成败的关键。实时性方面TCP确实快但“快”不等于“实时”。如果你的交换机组网拓扑不合理或者网络里有广播风暴TCP一样会延迟甚至超时。RTU虽然慢但RS485是独占总线的只要轮询周期设置合理它的时间确定性反而很强——每一轮询周期是多少就是多少很少出现毫无规律的抖动。对某些严格要求固定刷新周期的场合RTU这种“木讷可靠”反而成了优点。稳定性方面RS485在工业现场经过了三十年锤炼抗干扰能力有口皆碑而且布线简单故障点少。TCP的稳定性则高度依赖网线质量、水晶头压接工艺、交换机品质和网络规划。网线滋滋啦啦接触不良、交换机电口被雷击打坏这些问题在TCP项目里我都遇到过。不是说TCP不稳定而是它的稳定性建立在整个链路都可靠的前提之上。成本方面很多人以为TCP要贵很多其实不一定。现在汇川PLC本体都带以太网口Modbus TCP不需要额外的硬件成本反而是一些老式从站设备选带网口的型号可能要贵几百甚至上千元。RS485接口几乎所有仪表都标配成本优势在于从站设备和线缆。如果现场恰好交换机、网线都现成TCP反而可能更省钱。4.3 新手的三个思维误区误区一“TCP比RTU高级所以一定选TCP。”如果从站设备根本没有网口或者距离超过200米且不方便加交换机选TCP就是自己给自己找麻烦。误区二“RTU很麻烦配置难。”老实说RTU的接线和参数配置只要按照规范做难度并不比TCP高。甚至有时候RTU更容易排查问题因为它物理链路简单拿万用表量一下就知道通不通。误区三“RTU速度慢调速就能解决一切。”把波特率从9600调到115200确实能加快但不是所有从站设备都支持高波特率且高波特率对线缆质量和抗干扰要求更高。真到了数据量大的场景该上TCP就上TCP别硬抗。5. 新手该怎么选一套可执行的判断流程5.1 三分钟决策法每次有朋友问RTU还是TCP我都让他按顺序回答三个问题基本三分钟内就能得出答案。第一个问题从站设备支持哪种物理接口如果设备只有RS485别无选择直接RTU如果设备只有网口直接TCP如果两种都支持进入第二个问题。第二个问题通讯距离和现场环境怎么样距离超过两百米、或者现场变频器特别多且不方便做网络布线优先考虑RTU走RS485双绞线抗干扰强且成本低。距离在几十米内、机柜内环境干净、网线走线方便那么TCP更合适。第三个问题数据量和实时性要求高不高点位很少、刷新周期也就一两百毫秒甚至更慢两者都行数据量大、刷新频率要求高、多个从站并发读写TCP明显更胜一筹。我平时还常用一个更省心的思路优先看从站设备的接口接口决定下限再看数据量和距离要求决定上限。下限上限一夹答案自然就出来了。5.2 从省心角度我更推荐新手优先用TCP如果你是完全的新手手上的从站设备又能支持网口我个人建议优先尝试Modbus TCP。原因有三点第一TCP没有A/B接线、终端电阻这些硬件细节配置过程中少了一大半坑第二IP地址和端口号的概念比较直观出现问题排查路径更短第三数据映射和在线监视的体验接近HMI组态容易建立正反馈。当然前提是你得把IP规划做好。PLC、电脑、从站设备必须在同一个网段电脑防火墙记得关掉或者放行502端口。很多新手第一次用TCP调试时PLC和电脑都连不上最后发现是电脑防火墙拦截了。5.3 两种都支持时如何优雅地切换不少汇川PLC从站设备比如伺服、变频器同时支持RS485和以太网口。项目初期方案摇摆不定时你可以在程序里把通讯参数做成可配置的结构体变量串口模式下存波特率、从站地址TCP模式下存IP、端口后期切换方案时只改参数、不动程序逻辑。这样计划赶不上变化的时候你还能淡定应对。6. 实操实录一个完整的RTU读取浮点数据案例含高低字节坑6.1 场景说明一台汇川AM402作为主站通过RS485读取第三方温度变送器的3个32位浮点数据温度、压力、流量。变送器支持Modbus RTU协议从站地址设为1波特率96008数据位1停止位无校验数据刷新要求1秒一次。这个场景很典型项目不大从站只有一台距离大概100米数据量不大。用RTU完全够用而且变送器只有RS485接口不存在选择困难。6.2 配置步骤详解第一步硬件接线。把变送器的RS485 A/B线分别接到AM402的串口端子上。确认PLC侧的A/B定义别接反。第二步添加主站设备。在InProShop设备树中右键点击串口设备追加“Modbus Serial Master”。在弹出的参数配置窗口里把串口参数设置为波特率9600、数据位8、停止位1、校验None与变送器一致。第三步添加从站。在Master下添加Modbus从站从站地址填1。此时要注意有些版本的InProShop在从站地址这里会有“Unit ID”的概念填1即可。第四步配置通道。在从站下面添加通信通道选择读保持寄存器功能码03。变送器的手册表明温度存放在寄存器起始地址0x0000占用2个寄存器压力在0x0002占2个流量在0x0004占2个。于是添加3个通道分别填起始地址0、2、4每个通道读取长度2个寄存器。第五步映射变量。在I/O映射表里为每个通道建立PLC侧变量比如temp_raw、pressure_raw、flow_raw数据类型选WORD阵列。映射完成后编译下载到PLC就可以在线监视了。6.3 浮点数乱码问题与高低字转换把变量在线监视后你会遇到一个经典现象读上来的数据跟现场表显完全对不上要么是天文数字要么是负数要么是乱七八糟的浮点。这就是Modbus通讯里最经典的“高低字节序坑”。Modbus是Big-Endian大端传输高字节在前。而汇川PLC内部对小端还是大端的处理以及不同仪表厂商寄存器存储顺序的差异都会导致读上来的字节数据需要二次加工。更麻烦的是同样是32位浮点数有的仪表是“ABCD”传输PLC需要按“CDAB”组合有的仪表是“CDAB”传输PLC需要原样组合。我的解决办法是用UNION联合体把两个16位WORD重组成一个32位浮点数然后根据实际仪表格式决定是否做字交换。在InProShop的ST代码里大致是这样的逻辑定义一个联合体包含两个WORD和一个REAL成员把通道读取到的两个WORD赋给联合体的WORD数组再读取REAL成员。如果对不上就交换两个WORD的位置再试一次。这个方法我在多个项目里验证过稳定有效。交换Word顺序还有一种更直接的方式用SWAP功能块对DWORD做高低16位交换。Codesys内核带有字节序处理指令可以节省手工拼装的麻烦。关键是你要先确认仪表的存储格式再决定要不要交换、交换几个字段。6.4 验证与结果配置完成后我先用Modbus Poll软件模拟这个变送器把PLC程序和变量逻辑调通再接真实仪表。实测下来三个浮点数据都能稳定读取在线监视1小时无超时无错包。这里我特别想强调Modbus Poll的价值——它是调试Modbus通讯的利器可以模拟主站或者从站让你在没有真实设备的情况下先把PLC侧程序验证完大幅减少现场调试时间。7. 常见问题与排查技巧实录7.1 通讯不上先查这12个地方我把这些年遇到过的Modbus通讯故障整理成一张速查表。每次通讯不上按顺序排查绝大部分问题都能定位到症状检查项说明完全不通RS485 A/B是否接反检查PLC侧和从站侧接线定义完全不通通讯参数是否一致波特率、校验、停止位必须完全相同完全不通从站地址是否冲突RS485总线上地址不能重复完全不通从站是否上电有些从站是独立供电没上电当然不通完全不通屏蔽层是否接地不接地抗干扰差偶尔也会完全不通完全不通终端电阻是否安装长线必须两端加120欧电阻时通时断线缆是否老化或接触不良检查端子是否拧紧测一下线路通断时通时断总线负载是否过多超过32个标准收发器需加中继器时通时断电磁干扰严重检查是否和强电同槽敷设屏蔽层单端接地TCP不通IP是否同网段PLC和从站必须网络互通TCP不通电脑防火墙是否拦截调试时放行502端口TCP不通交换机端口/网线质量检查网线和水晶头换根线试试7.2 读写数据为0或乱码能通讯上但数据全0或者乱成一团这种情况通常不是链路问题而是数据解释问题。地址错位是头号嫌疑。前面说过Modbus协议地址和仪表手册地址之间常有1个地址的偏差。如果你填了寄存器地址1但实际数据在地址0读回来的自然是错数据。用Modbus Poll手动发送一帧报文把地址从0到5逐个试一遍很快就能定位正确地址。功能码不匹配也一样常见。仪表手册明确写“保持寄存器”你就用03功能码去读写“输入寄存器”就用04。混着用大概率读不到有效数据。字节序和字序问题造成的“乱码”我前面提到过这属于数据处理层面的问题跟通讯本身无关。只要把数据重组方式调整正确数值就正常了。还有一个很多人忽略的场景从站某些寄存器是“命令型”的需要先写入控制字才允许读数据。如果从站侧没有使能或没有启动运行寄存器返回的就是0。遇到这种情况先看手册有没有类似的启动流程。7.3 通讯偶尔超时通讯偶尔超时是最让人头大的问题因为不可复现。我遇到过的超时原因主要有这么几类。轮询周期设置太短从站设备来不及响应。这种情况常见于把轮询周期从100毫秒强行改到20毫秒从站是单片机系统响应时间跟不上。解决办法很简单把轮询周期适当拉长或者减少一次性读取的寄存器数量。Modbus标准中主站发请求后从站默认要在某个时间窗口内响应周期太短会导致主站误判超时。同一个串口被多个Master重复绑定。在InProShop里如果设备树中有多个主站设备同时挂在同一个物理串口上运行后可能出现总线争用表现为偶发超时。解决办法是从设备树中删除多余的主站只保留一个把从站全部挂到它下面。485总线阻抗不匹配。长线传输时没有加终端电阻信号反射会导致数据帧偶发错误。两端各加一个120欧电阻通常能解决。TCP场景下还有一种情况网络中有广播报文占用带宽或者交换机型号老旧、背板带宽不够。这种问题需要靠抓包工具或交换机统计信息定位普通应用场景并不多见。8. 关于汇川伺服编码器线数的一个延伸提醒很多人在调试汇川伺服时会在驱动器里看到“编码器线数262144”这个参数然后陷入困惑这个数值能改吗是不是改成别的值就能提高精度借着这篇讲汇川通讯的文章我简单说一下。262144这个数字来自2的18次方也就是18位增量编码器的物理分辨率。它是编码器硬件本身决定的不是用户可以随意修改的软件参数。强行修改编码器线数大概率会直接报编码器故障用都别想用。精度不够的时候正确做法是调整电子齿轮比或者选择更高分辨率的编码器型号而不是去掰扯编码器本身的数值。这个参数也提醒了我们一件事调试前先看清楚设备手册里的出厂默认参数不要乱动底层数据。很多看似参数设置的问题实际上是不理解硬件原理导致的。9. 我的选型体会做过的Modbus通讯项目多了之后我的整体体会是RTU和TCP是并列的两条路不是替代关系。现场从站设备的接口往往已经帮你做好了选择的一半真正需要动脑的是数据量、距离和调试效率这些工程约束。别因为“TCP听起来高级”而硬选也别因为“RTU老土”而嫌弃合适的才是最好的。最后分享两个实用小技巧。第一无论RTU还是TCP都建议在调试初期先用Modbus Poll或者Modbus Slave做仿真验证先跑通上位机和下位机的交互逻辑再接真实设备能省去大量现场排查时间。第二开始做通讯程序之前花十分钟把从站的寄存器表整理成Excel表格标注好地址、功能码、数据类型和字节序这张表是你后期调试和排查问题的地图。地图画好了路就不会走歪。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价