倍福EL6021使用Modbus RTU通信例程
EL6021简介
EL6021是倍福推出的RS422/485串口通信模块,一般用作Modbus RTU通信的主站,EL6021是单口RS422/485模块,EL6022是双口(DB9)RS422/485模块,且两个口可独立设置,互不影响。
EL6021支持2400…115200 kbuds的标准波特率,默认波特率为9600,8N1配置。
RS422支持全双工的通信模式,其发送数据线采用差分线对TxD+和TxD-,接收数据线也采用差分线对RxD+和RxD-,这样的设计方式增强了通信的抗干扰能力。
RS485支持半双工的通信模式,不支持全双工模式,只使用一对差分线进行数据传输,一般称为A和B或者TxD和RxD,这样的设计导致设备在发送数据的时候是无法接收数据的,因为总线被占用且正在进行发送操作。
EL6021出厂默认的工作模式是RS422。
EL6021针脚定义
EL6021采用快接端子的形式接线,其针脚定义如下图所示。
EL6021当作RS485主站参数设置
当EL6021当作485主站使用时,需要将TXD+和RXD+短接,TXD-和RXD-短接,短接后分别接入485设备的TX+脚(A脚)和TX-脚(B脚),且要设置其COM口参数如下图所示(启用半双工通信,关闭点对点功能)
EL6021使用Modbus RTU通信例程
当使用EL6021用作Modbus RTU主站时,需要购买TF6255软件模块的授权,但是我们做测试的话,可以激活7天试用授权即可,激活授权后还需要添加Tc2_Modbus RTU库才可以进行编程
加入Tc2_ModbusRTU库,可以使用关于Modbus RTU通信的各种功能块
以modsim32软件模拟从站,modsim软件可从起官网下载: Modsim官网,假定我们的设备需要读写保持寄存器来和主站交互,那么就可以做如下设置,假定该设备有10个保持寄存器,地址从40001-40010,如下图所示
双击对应的寄存器可以更改其值范围,值范围默认0-65535(一个WORD的大小)
程序编写如下,该程序实现了读写保持寄存器和读写线圈的功能,程序中需要注意的事项均以注释的形式进行了说明,变量的声明看名字就可以知道其功能,这里不再详细说明
// 变量声明区的内容
PROGRAM MAIN
VARReadRegEdge:R_TRIG;WriteRegEdge:R_TRIG;ReadCoilEdge:R_TRIG;WriteCoilEdge:R_TRIG;ReadRegDo:BOOL;WriteRegDo:BOOL;ReadCoilDo:BOOL;WriteCoilDo:BOOL;ReadWriteFun:ModbusRtuMaster_KL6x22B;DataRead : ARRAY[1..10] OF WORD;DataWrite:ARRAY[1..10] OF WORD:=[11,12,13,14,15,16,17,18,19,20];CoilRead:ARRAY[1..2]OF BYTE;CoilWrite:ARRAY[1..2] OF BYTE:=[244,156];
END_VAR
程序区的内容
//程序区内容
ReadRegEdge(CLK:= ReadRegDo, Q=> );ReadWriteFun.ReadRegs(UnitID:= 9, //从站地址Quantity:= 4, //读取4个字,以word计MBAddr:= 1, //地址偏移量cbLength:= SIZEOF(DataRead), //存放读取值的变量的大小,以byte计,该值必须大于等于Quantity值的一半pMemoryAddr:= ADR(DataRead), Execute:= ReadRegEdge.Q,Timeout:= T#100MS, BUSY=> , Error=> , ErrorId=> , cbRead=> );
WriteRegEdge(CLK:= WriteRegDo, Q=> );
ReadWriteFun.WriteRegs(UnitID:= 9, Quantity:= SIZEOF(DataWrite)/2, MBAddr:= 1, cbLength:= SIZEOF(DataWrite), pMemoryAddr:= ADR(DataWrite), Execute:= WriteRegEdge.Q,Timeout:= T#100MS, BUSY=> , Error=> , ErrorId=> , cbRead=> );
ReadCoilEdge(CLK:= ReadCoilDo, Q=> );
ReadWriteFun.ReadCoils(UnitID:= 9,//从站地址 Quantity:= 16, //要写入16个bit,以bit计MBAddr:= 0, //地址偏移量cbLength:= 2, //存放待写入变量的大小,以byte计,该值必须大于或等于Quantity的值(相同单位时)pMemoryAddr:= ADR(CoilRead), Execute:= ReadCoilEdge.Q, Timeout:= T#100MS, BUSY=> , Error=> , ErrorId=> , cbRead=> );
WriteCoilEdge(CLK:= WriteCoilDo, Q=> );
ReadWriteFun.WriteMultipleCoils(UnitID:= 9, Quantity:= 16, MBAddr:= 0, cbLength:= 16, pMemoryAddr:= ADR(CoilWrite), Execute:= WriteCoilEdge.Q, Timeout:= T#100MS, BUSY=> , Error=> , ErrorId=> , cbRead=> );
假定我们需要读取4个保持寄存器的值,且从地址偏移量为1的地址开始读取,如以上程序中所写的那样,检验一下读取的效果。
在Modsim32软件中,做如下设置,起始地址为40001,设置10个保持寄存器(length=10),从站的站地址为9,类型为03:HOLDING REGISTER,各个寄存器的数值设置如图所示。
那么我们读取的应该就是40002-40005地址中的值
当我们运行程序,给ReadRegDo一个上升沿触发读取保持寄存器的操作,此时可以观察到,DataRead数值中已经读取上来4个值,该值正是我们在Modsim32中40002-40005地址中存放的值
剩下的读写线圈和写保持寄存器可以自行测试,以上程序已打包,可供下载测试,注意,程序导入后,需要重新关联变量,因为测试平台不同,所用的模块也有类型和数量的差别,无法保证EtherCAT的拓扑结构完全一样,若不重新扫描IO和关联变量,直接激活的话会报错。
链接: EL6021 Modbus RTU demo程序
倍福EL6021使用Modbus RTU通信例程相关推荐
- Modbus RTU 通信应用案例
如何打开项目归档文件 例程中的TIA博途项目文件与STEP 7项目文件均为归档文件,需要按如下方式打开: TIA博途项目文件 1. 打开TIA博途软件,通过软件左下方"项目视图"按 ...
- 西门子S7-200PLC与V20变频器MODBUS RTU通信教程
西门子S7-200PLC与V20变频器MODBUS RTU通信教程 S7-200与V20的MODBUS RTU通讯 1.本教程的系统配置: (1)安装Step7 Micro/Win software和 ...
- Modbus RTU 通信工具设计
Modbus 是一个工业上常用的通讯协议.一种通讯约定. ModBus 协议是应用层报文传输协议(OSI 模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域. M ...
- java通信rs485_基于VB6.0与485仪表的Modbus RTU通信(含代码)
JZGKCHINA工控技术分享平台 尊重原创 勿抄袭 勿私放其他平台 前言 在写这边文章时,很纠结,到底要不要写呢?原因主要有3个:第一.VB6.0这么古老的语言现在还有人用吗?现在不是很流行C#.P ...
- 欧姆龙 PLC CP1E Modbus RTU通信程序
欧姆龙 PLC CP1E Modbus RTU通信程序,一个多站轮询通信,一个单站通信,稍微更改下Modbus通信地址可以跟其他Modbus设备进行通信!id=635998335748&
- S7-1200 PLC与PAC3200电能表的Modbus RTU通信(详细步骤)
S7-1200 PLC与PAC3200电能表的Modbus RTU通信 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站. 本文将主要介绍如何使用Mod ...
- 丰炜vb0和两台变频器的modbus rtu通信程序
丰炜vb0和两台变频器的modbus rtu通信程序 史上最好用的plc modbus rtu通讯程序, 通讯效果如视频,控制,反馈无延迟,真心好用,别的变频器支持modbus rtu一样可以使用. ...
- 丰炜vb0和两台变频器的modbus rtu通信程序 史上最好用的plc modbus rtu通讯程序, 通讯效果如视频,控制,反馈无延迟
丰炜vb0和两台变频器的modbus rtu通信程序 史上最好用的plc modbus rtu通讯程序, 通讯效果如视频,控制,反馈无延迟,真心好用,别的变频器支持modbus rtu一样可以使用id ...
- 欧姆龙 PLC CP1E 与电子称重仪表“柯力XK3101”Modbus RTU通信
欧姆龙 PLC CP1E 与电子称重仪表"柯力XK3101"Modbus RTU通信,稍微更改下Modbus通信地址可以跟其他Modbus设备进行通信! YID:554563599 ...
最新文章
- linux常用的命令行
- 检查Java中的字符串是空还是空[重复]
- 【C 语言】结构体 ( 结构体变量内存操作 | 通过 “ . “ 操作符操作结构体内存空间 | 通过 “ -> “ 操作符操作结构体内存空间 )
- 你需要了解的纯原生JS实现带有功能的前端购物车
- h5策划书_一个好的H5营销活动设计要如何进行策划
- nit计算机应用基础是考试大纲,全国计算机应用技术证书考试(NIT)考试大纲(计算机应用基础Windows XP)...
- vscode pyqt 环境搭建
- Linux 内核C -- 第02课:驱动中的指定初始化
- 3dsmax软件和maya软件各自的优劣势是什么?
- 吴恩达深度学习课后作业-目标检测的环境配置
- Play框架文件上传
- 三维地图前端arcgis_WebGIS简单实现一个区域炫酷的3D立体地图效果
- 树莓派+android+盒子,最强电视盒子诞生记-树莓派4电视盒子
- Day07 Scanner 类、 Random 类、 ArrayList 类 6.20
- 设计模式之设配器模式、外观模式
- Excel 2010 VBA 入门 129 利用窗体向工作表中录入数据
- C语言编程>第三周 ⑧ 打印出杨辉三角形(要求打印出10行)
- EM算法原理和python简单实现
- VLAN 虚拟局域网
- python二维数组随机取行,组成新的数组