MODBUS -TCP RFID读卡器寄存器功能说明

MODBUS-TCP读卡器寄存器功能说明

本说明使用的设备:MODBUS TCP PLC 工业总线协议鹤岗读卡器可编程二次开发读写器-淘宝网 (taobao.com)

  • MODBUS ID读卡器适用125KHz低频RFID射频卡,MODBUS IC读卡器适用13.56MHz高频RFID 射频卡。
  • MODBUS读卡器能通过MODBUS-TCP方式与PLC通信,MODBUS读卡器为从站、PLC为主站,需要实现即时刷卡功能,可让PLC设备每隔0.2秒读卡一次。
  • 寄存器说明:

40001至40002共2个寄存器存放RFID卡号(4个字节),可用03功能码来读或连读。当这两个寄存器都为0时,读卡器可以继续读卡并将卡。

40003:存放读卡器的站号(机号),可读可写,只能用06功能码修改站号,用03功能码读取站号。

40004:设置读卡器刷卡时是否发响声,只能用06功能码,写1设置读卡时响声,写0表示刷卡不发出响声;同时这个寄存器可设置存放卡号的寄存器是否可以自动清0。可用03寄存器来读或连读多个寄存器。

40005:驱动读卡器响声,只能用06功能码,可用03寄存器来读或连读多个寄存器。

   如写为0表示短滴一声,见下表

0

短滴一声

1

短滴两声

2

短滴三声

3

长鸣一声

4

长鸣两声

5

长鸣三声

6

一长一短

7

一长两短

8

一长三短

9

两长一短

10

两长两短

11

两长三短

其他

短滴一声

40046:存放第一继电器状态,需用06功能码操作,写入0表示关闭继电器,写入非0表示开启的时长。

40047:存放第二继电器状态。

  • 在数据报文层面,Modbus TCP通讯就是去掉了Modbus协议本身最后2个字节的CRC校验,增加了MBAP 报文头的TCP数据传送方式,因TCP通讯是以IP地址寻址的,所以设备站号是无用的,一般可以取值0x00或0xFF),如从站号2读卡器读取40001开始的两个寄存器获取RFID卡号的数据的报文:

 Modbus 应用协议头(MBAP)

Modbus协议数据单元(PDU)

事务标识符

协议标识符

信息长度

站号

功能码

起始地址

寄存器数量

发送数据

55 05

00 00

00 06

00

03

00 00

00 02

Modbus 应用协议头(MBAP)

Modbus协议数据单元(PDU)

事务标识符

协议标识符

信息长度

站号

功能码

数据长度

数据信息

成功返回

55 05

00 00

00 06

00

03

04

28 5B 90 BB

其中:28 5B 90 BB 为卡的内码数据,寄存器内高字节在前,所以读取到的RFID卡号正码为:5B28BB90,转换成十进制为:1529396112;反码为:90BB285B, 转换成十进制为:2428184667。

Modbus Poll连接设备 

 

Modbus Poll连接设备获取寄存器内卡号 

 

 Modbus Poll连接设备读、写IC卡

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的Java Modbus-TCP示例,根据寄存器类型获取数据: ```java import java.net.InetAddress; import com.serotonin.modbus4j.*; import com.serotonin.modbus4j.exception.ModbusTransportException; public class ModbusTCPExample { public static void main(String[] args) throws Exception { // Define the Modbus TCP connection parameters InetAddress inetAddress = InetAddress.getByName("localhost"); int port = 502; // Create the Modbus master ModbusMaster master = ModbusUtil.createModbusMasterTCP(inetAddress, port); // Define the slave ID and the starting address of the registers to read int slaveId = 1; int startAddress = 0; // Define the number of registers to read int numRegisters = 10; // Define the type of register to read (holding, input, coil, or discrete) RegisterRange registerRange = RegisterRange.HOLDING_REGISTER; // Read the registers and print the values try { // Read the registers ReadResponse response = master.readInputRegisters(slaveId, startAddress, numRegisters, registerRange); // Print the register values for (int i = 0; i < numRegisters; i++) { System.out.println("Register " + (startAddress + i) + " = " + response.getShortData()[i]); } } catch (ModbusTransportException ex) { System.out.println("Modbus exception: " + ex.getMessage()); } finally { // Close the Modbus master master.disconnect(); } } } ``` 在示例中,我们首先定义了Modbus TCP连接参数,包括IP地址和端口号。然后,我们创建Modbus主机,并定义要读取的寄存器的起始地址、数量和类型。最后,我们从Modbus主机读取寄存器的值,并将其打印到控制台上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vx_13822155058

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值