欧姆龙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; // 防止看门狗复位代码分析
- 端口参数定义:通过
#DEFINE来设置通讯端口的基本参数,像COM口、波特率、数据位、停止位和校验方式。这些参数必须和变频器的设置一致,不然通讯肯定出问题。 - 初始化通讯:先置位
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口和准备好通讯线哦。