最后更新:2022-06-21 15:25:16 手机定位技术交流文章
此外,可以实现下列功能,以适应通信在实际环境中:
1.不连续数据传输受阻等待设置接收长度判断和加班判断
2.查看是否存在配置问题:
1字节 = 1长度 = 16位元 = 2字节未签名短
浮点数为4位元,32位元需要2个注册器存储int/uint
浮点数的进化转换:
c9 41 9a 99 -> 41 c9 99 9a(但并不是简单地拆分计算)
4*8 = 32个数字 31个数字是符号,30到238个数字是顺序代码,在第二步计算,最后的数字是其余的小数(由后23个数字确定)
1.将纬度数据(10英寸,浮点类型)转换为二进制格式;
2.移动 n 位数到小数的左边,直到最后1 位数停止,然后取得左移位数,计算序列代码,127+(左移位数);
3.尾号(总计22到0的23位)是小部件的二进制编码,其余未填补的位数为0;
然后将所有获得的二阶编码转换为16阶数据。
e.g.
让我们以6.91转换为二进制形式开始: 110.110100110101100
标准化它:调整第一个大于1的实数为小于2.
6.91 = 1.10111010001111010111000 * 2^2
所以S:0
EXP:2(左移位数小)+127(10个数字) =129(10个数字) =1001(2个数字)
10110100110101100(注:前面的1号不再需要)
组合:01001 10110100110101100
= 0100 0000 1101 1101 0001 1110 1011 1000= 4 0 D D 1 E B 8
网上转换网站: https://lostphp.com/hexconvert/
3.批量读并解析:
多条指令
一条指令
4.修改登记册数目:
多条指令一起修改
读写读三遍比对:
注意:如果要修改的值超过字符范围的大小,所有字节将强制转换。
5.面向对象设计模型
(1)
主要方法必须是静态的,以便修改,因为主要方法是由Java解释器调用,当时没有生成对象。
该方法可以通过静态修改方法调用,而不生成类实例对象。
如果没有静态修改方法,需要生成一个类的实例对象来调用方法。
(2)
java主函数通过一个新的对象调用非静态函数:
主要方法是静态方法,如果你想调用其他方法,要么只有另一种静态方法,在调用其非静态方法时,既说明当前类,又说明主要方法调用非静态方法,需要一个新的对象,因为静态方法和静态类属于模板,非静态类和方法属于对象。
(3)
其他类中的非静态变量不能直接调用,必须在该类中创建(通过调用新方法创建非静态函数)。
我自己设计的框架:
教员为我提供了更标准化的实际开发和应用框架:

IDevice:定义连接()判断函数,读写通用函数
IEncoder:编译读写指令
getRead/WriteCommand
IDecoder:获取消息ID和长度和值,检查合法性
getId、getHeadLength、getContentLength、getValue、checkIdLegality
字节操作类:
负责合并两个字节集(标题+文本)
转换类:
重写 getBytes():将不同类型的数据转换为字节
getShort,getChar,getInt,getLong,getFloat,getDouble,getString,getHexString,getCRC():将字节[]转换成不同的数据类型
enum PLCAddressType:
电路注册表,离散注册表,保留注册表,输入注册表
OperateResult: Pan-type, Save operation result judgment,等。
DeviceTemplate类:
实现接口实现IDevice设置地址和端口:
判断是否连接成功:
发送数据:
首先显示发送的数据并设置输出输入流:
接收时要先做判断:
当缓冲区1数据长度报文头部长度(从decoder.getHeadLength获取)时->当缓冲区2数据长度报文正文长度(从decoder.getContentLength获取)时->合并报文->检查id合法,否则报错:
->输出byte转十六进制:判断数据字节长度&判断是否错误代码
接收函数:
计算和设置加班时间+接收数据长度判决
首先将长度比作大小读入缓冲区
read(byte[] b, int off, int len)从b[off]开始,将输入流中的数据字节读入字节阵列,返回实际读取字节的整数形式。
读函数:
泛型[在Modbus TcpDeviceTest中调用]
确定连接是否成功: if(this.connect())
Send encoded message byte[]: Send (encoder.getReadCommand()
[在Modbus TcpEncoder中定义]
根据响应消息确定是否成功发送: this.decoder.getValue() [在Modbus TcpDecoder中定义]
否则报错
[实现在接口中定义的所有函数]
ModbusTcpDecoder implements Idecoder
从头条命令获取消息的文本长度:
getValue()判断它是短整数还是浮点类型:提取相应的字符
ModbusTcpDevice extends DeviceTemplate定义
ModbusTcpEncoder implements Iencoder编码发送内容
读指令:
说明书可以写成参考在开头提到的关于rtu的文章
本文由 在线网速测试 整理编辑,转载请注明出处。