首页 > 其他分享 >以太网通信控制板-关于MODBUS, IEEE754浮点数, 字节和位的转换

以太网通信控制板-关于MODBUS, IEEE754浮点数, 字节和位的转换

时间:2023-05-10 15:33:07浏览次数:39  
标签:00 16 浮点数 0x00 以太网 控制板 byteValue byte byt

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/CH579_DTU_PBX/index1.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

<iframe frameborder="0" height="1500" name="ifd" scrolling="auto" src="https://mnifdv.cn/resource/cnblogs/CH579_DTU_PBX/index1.html" width="100%"></iframe>

 

MODBUS协议

1,协议 == 格式

01 05 00 00 FF 00 8C 3A  这是MODBUS发送控制继电器吸合的一条数据

01 代表地址,这是为了区分多个设备

05 代表功能码,代表后面数据的功能,MODBUS规定05是写线圈命令

00 00 代表控制哪一路线圈,也就代表线圈的地址

FF 00 代表控制线圈吸合,这是规定

8C 3A 是前面的数据计算CRC16之后得到的16位数据,然后低位在前,高位在后

然后看这句话: 上面的看看就行啦,后面的才是要知道的.

 

2,假设我现在要发送个数据控制设备的继电器

假设设备地址是 0x01;  继电器地址是0x00 0x00;  控制继电器吸合

为了便于观察数据,每隔3S通过调试口输出数据

 

 

 

其实呢最主要的是计算CRC,还有就是注意下CRC的高低位, 有些设备规定把高位放到前面有些规定把低位放到前面.

 

modbus-16/modbus  计算方式是不变的,  如果设备是使用modbus-16/IBM 就把下面的值改为0

 

 

3,假设我现在要接收个MODBUS数据控制继电器

我就用板子的调试口来测试接收数据

 

 

01 05 00 00 FF 00 8C 3A   //控制吸合

01 05 00 00 00 00 CD CA  //控制断开

 

 

4,返回执行状态

 

5,补充知识,假设有个设置多路线圈(这块板子其实用不到,毕竟功能上主要作为DTU透传)

假设过来的数据是  0x55, 代表了设置8路线圈;

0x55对应二进制   01010101  咱就规定从左到右分别是代表控制第1路到第8路继电器, 0代表断开,1代表吸合

那边上面就是控制第1,3,5,7路断开; 控制第2,4,6,8路吸合;

然后就是用的字节和位之间的转换,

 

 

参考使用

 

 

 

反过来,是把位转为byte

 

 

 

IEEE754规约

1,假设我要发送个数: 678384324 ,假设用四字节来表示

平常的做法是不是  >>8啦  >>16啦  >>24啦 然后赋值

看下面的做法

 

 

 

只是注意一点,这个单片机转换以后,数据的低位存储在了数组的低位, 数据的高位存储在了数组的高位

(低位)0xc4,0x52,0x6f,0x28(高位)

所以真实的是  0x286f52c4

 

 

2.反过来转换就是

 

 

3,再看浮点数

 

 

反过来

 

 

4.注意哈这是标准的做法,而且高级语言C#,C++,JS,PHP啥的也是这样子的转换标准

列如C#

65536 转为16进制

   byte[] byt = BitConverter.GetBytes(65536);//转为byt,默认就是转成4字节

  转换之后  

  byt[0] = 0x00;

  byt[1] = 0x00;

  byt[2] = 0x01;

  byt[3] = 0x00;

  

220.5 转为16进制

//和咱单片机定义联合体解析一样的道理
//转为byt,默认就是转成4字节
byte[] byt = BitConverter.GetBytes(220.5f);

转换之后:

byt[0] = 0x00;
byt[1] = 0x80;
byt[2] = 0x5c;
byt[3] = 0x43;

 

注意:220.5f  后面需要加f

否则会按照double数据类型进行转换

按照 double 进行转换的,转换出来是8字节

byt[0] = 0x00;

byt[1] = 0x00;

byt[2] = 0x00;

byt[3] = 0x00;

byt[4] = 0x00;
byt[5] = 0x90;
byt[6] = 0x6B;
byt[7] = 0x40;

 

有16进制整形数据了,转为整形数据

  假设数据是65536    : 00 01 00 00

  

  byte[] byteValue = new byte[4];

  byteValue[3] = 0x00;
  byteValue[2] = 0x01;
  byteValue[1] = 0x00;
  byteValue[0] = 0x00;


  int intValue = BitConverter.ToInt32(byteValue,0);

  intValue 就是 65536

 

有16进制浮点数数据了,转为浮点数

  假设数据是 220.5     :43 5C 80 00

  

  byte[] byteValue = new byte[4];

  byteValue[0] = 0x43;
  byteValue[1] = 0x5c;
  byteValue[2] = 0x80;
  byteValue[3] = 0x00;


  float floatValue = BitConverter.ToSingle(byteValue, 0);

  floatValue计算出来就是 220.5

 

标签:00,16,浮点数,0x00,以太网,控制板,byteValue,byte,byt
From: https://www.cnblogs.com/yangfengwu/p/17388155.html

相关文章

  • 以太网扫盲(一)各种网络总线 mii总线,mdio总线介绍
    本文主要介绍以太网的MAC(MediaAccessControl,即媒体访问控制子层协议)和PHY(物理层)之间的MII(MediaIndependentInterface,媒体独立接口),以及MII的各种衍生版本——GMII、SGMII、RMII、RGMII等。简介从硬件的角度看,以太网接口电路主要由MAC(MediaAccessControl)控制器和物理层接口......
  • 【驱动】以太网扫盲(二)phy寄存器简介
    PHY寄存器的地址空间为5位,从0到31最多可以定义32个寄存器(随着芯片功能不断增加,很多PHY芯片采用分页技术来扩展地址空间以定义更多的寄存器),IEEE802.3定义了地址为0-15这16个寄存器的功能,地址16-31的寄存器留给芯片制造商自由定义,如下表所示。官方介绍请参考......
  • 【驱动】以太网扫盲(四)phy驱动link up流程分析
    1.简介在调试网口驱动的过程中发现phy芯片的驱动框架结构还有点复杂,不仔细研究的话还不好搞懂,另外百度到的资料也不够全面,这篇就总结梳理一下这方面的知识。我们知道一个phy驱动的原理是非常简单的,一般流程如下:1、用轮询/中断的方式通过mdio总线读取phy芯片的状态。2......
  • 接单日记(一):理解浮点数运算的误差
    目录接单日记(一):理解浮点数运算的误差一、实验目的二、实验内容三、程序及结果接单日记(一):理解浮点数运算的误差此为一个实验报告,故遵守实验报告的格式。一、实验目的理解python中的浮点数计算存在的一个误差问题理解这种误差对程序带来的危害理解如何解决程序产生的误差......
  • 汉源高科1路百兆FX光口+4路百兆电口工业级以太网交换机工业导轨式四口工业级光纤收发
    汉源高科HY5700-4514F-SC20系列工业级光纤收发器支持1个百兆光纤接口,4个百兆以太网电接口。用户可根据工业应用现场的实际需要,选择合适的光纤的接口类型以及光接口的传输距离。汉源高科HY5700-4514F-SC20工业级光纤收发器支持超宽电压输入范围,可提供双电源冗余接入。该系列专门针对......
  • 正的浮点数相加的示例程序 Verilog
    modulefloat_adder( input        clk, input       rst_n, input        en, input   [31:0]  aIn, input   [31:0]  bIn, outputreg     busy, outputreg   out......
  • 浮点数规格化的目的,方式,和形式
        ......
  • 以太网链路聚合与交换机堆叠、集群
    随着业务的发展和园区网络规模的不断扩大,用户对于网络的带宽、可靠性要求越来越高。对于这种情况,传统解决方案通过升级设备方式提高网络带宽,同时通过部署冗余链路并辅以STP协议实现高可靠,然而这种方案存在灵活度低、故障恢复时间长、配置复杂、成本高等缺点。为了解决这些问题,我们......
  • 以太网发送测试软件分享
     测试以太网发送功能,计数器支持,帧大小是100字节,包含MAC地址。 下载地址:https://files.cnblogs.com/files/fpga-design/eth_loop_test.zip?t=1682226199&download=true ......
  • [Mellanox] 安装MFT并配置网卡为以太网模式
    [Mellanox]安装MFT并配置网卡为以太网模式当我们想要配置Mellanox网卡时,如果出现了下面情况:$sudomststartmst:commandnotfound这说明我们的系统中缺少MFT。MFT是一套管理Mellanox网卡的工具,也是MLEX_OFED中的一部分。如果你不小心搞丢了MFT,可以用下面的方法安装:去......