news 2026/8/29 9:59:13

欧姆龙CP1H与2台三菱变频器Modbus RTU通讯那些事儿

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
欧姆龙CP1H与2台三菱变频器Modbus RTU通讯那些事儿

欧姆龙cp1h与2台三菱变频器modbus rtu通讯程序。 程序有注释。 用的电脑在线模拟,选的威纶通mt8102ip,如果是真实触摸屏只需更改com口和买一根威纶通与欧姆龙232的通讯线即可。 控制正反转、状态显示、写入频率、加减速时间和读取频率、电流、输出电压,plc型号为cp1h-x40dt-d,变频器为三菱fr-e700(d700也能用) 零基础、基础差的朋友不适合。 适合有基础,但有某些个知识点不懂的朋友。

最近在研究欧姆龙CP1H与2台三菱变频器通过Modbus RTU进行通讯,这里和大家分享一下相关程序以及一些要点,有基础但在某些知识点上有困惑的朋友可以看过来啦,零基础和基础差的朋友可能不太适合这篇文章哦。

这次我是用电脑在线模拟,选的威纶通MT8102IP,如果是真实触摸屏的话,只需更改COM口并买一根威纶通与欧姆龙232的通讯线即可。PLC型号是CP1H - X40DT - D,变频器是三菱FR - E700(其实D700也能用)。

程序主体部分

// 定义通讯端口参数 #DEFINE COM_PORT 1 // 使用COM1口 #DEFINE BAUD_RATE 9600 // 波特率9600 #DEFINE DATA_BITS 7 // 数据位7位 #DEFINE STOP_BITS 2 // 停止位2位 #DEFINE PARITY EVEN // 偶校验 // 初始化Modbus RTU通讯 SEND_MSG: SET S120.00; // 开启通讯功能 MOV #0001 D100; // 站号设置为1(第一台变频器) MOV #0006 D101; // 功能码06,用于写入单个寄存器 MOV #0000 D102; // 寄存器地址,这里举例一个地址 MOV #0050 D103; // 写入数据,比如设定频率值 MOV #0004 D104; // 数据长度 MOV #0000 D105; // 错误代码暂存 MOV #0000 D106; // 通讯状态暂存 MOV #0000 D107; // 其他相关暂存 // 启动通讯发送 OUT S122.00; WDR; // 防止看门狗复位

代码分析

  1. 端口参数定义:通过#DEFINE来设置通讯端口的基本参数,像COM口、波特率、数据位、停止位和校验方式。这些参数必须和变频器的设置一致,不然通讯肯定出问题。
  2. 初始化通讯:先置位S120.00开启通讯功能,这就像给整个通讯系统上电一样。然后在D100-D107这些寄存器里设置各种通讯相关参数,比如站号、功能码、寄存器地址、写入数据等等。这里的站号要对应变频器实际设置的站号,功能码根据我们要实现的功能来选,像写入频率就选功能码06 。最后通过OUT S122.00启动通讯发送,同时用WDR防止看门狗复位,因为通讯过程可能稍微长一点,别让看门狗以为程序死机把它复位了。

控制正反转部分

// 正转控制 FORWARD_CONTROL: MOV #0001 D102; // 对应正转控制的寄存器地址 MOV #0001 D103; // 正转指令数据 MOV #0004 D104; MOV #0000 D105; MOV #0000 D106; MOV #0000 D107; OUT S122.00; WDR; // 反转控制 REVERSE_CONTROL: MOV #0001 D102; // 对应反转控制的寄存器地址 MOV #0002 D103; // 反转指令数据 MOV #0004 D104; MOV #0000 D105; MOV #0000 D106; MOV #0000 D107; OUT S122.00; WDR;

代码分析

正转和反转控制部分逻辑类似,都是先设置对应的寄存器地址(D102)和指令数据(D103)。正转时写入对应正转指令数据,反转同理。其他参数如数据长度等和初始化部分类似。设置好后同样通过OUT S122.00发送指令,并防止看门狗复位。

状态显示、读取频率、电流和输出电压部分

// 读取频率 READ_FREQUENCY: MOV #0001 D100; // 站号 MOV #0003 D101; // 功能码03,用于读取多个寄存器 MOV #0002 D102; // 频率寄存器起始地址 MOV #0002 D103; // 读取2个寄存器(根据频率数据存储情况) MOV #0004 D104; MOV #0000 D105; MOV #0000 D106; MOV #0000 D107; OUT S122.00; WDR; // 读取电流 READ_CURRENT: MOV #0001 D100; MOV #0003 D101; MOV #0004 D102; // 电流寄存器起始地址 MOV #0002 D103; // 读取2个寄存器 MOV #0004 D104; MOV #0000 D105; MOV #0000 D106; MOV #0000 D107; OUT S122.00; WDR; // 读取输出电压 READ_VOLTAGE: MOV #0001 D100; MOV #0003 D101; MOV #0006 D102; // 电压寄存器起始地址 MOV #0002 D103; // 读取2个寄存器 MOV #0004 D104; MOV #0000 D105; MOV #0000 D106; MOV #0000 D107; OUT S122.00; WDR;

代码分析

读取频率、电流和输出电压都使用功能码03来读取多个寄存器。不同的是寄存器起始地址,根据变频器手册找到频率、电流、电压对应的寄存器地址分别设置在D102里。读取的寄存器个数根据数据存储情况来,一般可能是2个寄存器。设置好这些参数后,同样启动通讯发送并防止看门狗复位。

总的来说,欧姆龙CP1H与三菱变频器通过Modbus RTU通讯,关键在于参数设置准确和指令发送正确,希望这篇文章对有相关疑惑的朋友有所帮助。要是实际连接真实触摸屏,记得按前面说的改COM口和准备好通讯线哦。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 6:36:22

从零到一:30分钟搞定阿里通义Z-Image-Turbo WebUI二次开发环境

从零到一:30分钟搞定阿里通义Z-Image-Turbo WebUI二次开发环境 为什么选择预装环境进行二次开发 如果你正在尝试对阿里通义Z-Image-Turbo进行二次开发,可能会遇到本地环境配置的各种问题。从CUDA版本冲突到Python依赖包不兼容,这些问题往往…

作者头像 李华
网站建设 2026/8/29 6:36:22

Python+Matplotlib:大数据可视化的高效解决方案

Python+Matplotlib:大数据可视化的高效实践指南——从百万级数据到交互式图表 一、引言:大数据可视化的「痛」与「解」 你有没有过这样的崩溃瞬间? 面对100万行的用户行为数据,用Matplotlib画折线图时,程序卡了5分钟还没出图;想做个能拖动时间轴的交互式图,却不知道怎…

作者头像 李华
网站建设 2026/8/21 11:53:59

手机号码隐藏中间4位

以下方法都是使用正则的方式 JAVA val phone"182345678902"; const phoneReg /^1\d{10}$/; if (!phoneReg.test(phone)) {console.log(手机号格式错误);return false; } var replacephone.replace(/(\d{3})\d{4}(\d{4})/, $1****$2);JS String phone"182345678…

作者头像 李华
网站建设 2026/8/29 9:38:46

Linux scp命令:高效远程文件传输指南

使用scp命令复制远程文件到本地 scp(secure copy)是基于SSH协议的安全文件传输工具,适用于Linux/Unix系统之间的文件传输。 从远程服务器复制文件到本地 基本语法格式: scp [选项] 用户名远程服务器IP:远程文件路径 本地目标路径常…

作者头像 李华
网站建设 2026/8/26 14:31:42

Z-Image-Turbo商业应用指南:从快速验证到稳定部署的全流程

Z-Image-Turbo商业应用指南:从快速验证到稳定部署的全流程 作为一名产品经理,当你需要评估Z-Image-Turbo在企业应用中的可行性时,技术团队资源紧张可能会成为一大障碍。本文将带你从零开始,自主完成从原型验证到生产部署的全流程测…

作者头像 李华