zoukankan      html  css  js  c++  java
  • 16进制节码解析

    16进制节码解析

    前言:

      之前我们介绍了modbus_tk数据传输,当然只是介绍了最基本的modbus_tk使用方法,

      在使用时我们常用”16进制节码“传输内容今天就简单介绍一个16进制节码解析的实例

    从机:float形式数据

    主机:

    python:modbus_tk

    import modbus_tk.modbus_tcp as mt
    import modbus_tk.defines as md
    import struct
    
    
    # 浮点数转换
    def int2float(a, b):
        f = 0
        try:
            z0 = hex(a)[2:].zfill(4)  # 取0x后边的部分 右对齐 左补零
            z1 = hex(b)[2:].zfill(4)  # 取0x后边的部分 右对齐 左补零
            z = z0 + z1  # 高字节在前 低字节在后  ABCD型16进制编码数据
            z = z1 + z0  # 高字节在前 低字节在后 CDAB型16进制编码数据
            z = hex(a)[2:][2:] + hex(a)[2:][:2] + hex(b)[2:][2:] + hex(b)[2:][:2]  # BACD型16进制编码数据
            z = hex(b)[2:][2:] + hex(b)[2:][:2] + hex(a)[2:][2:] + hex(a)[2:][:2]  # DCBA型16进制编码数据
    
            f = struct.unpack('!f', bytes.fromhex(z))[0]  # 返回浮点数
        except BaseException as e:
            print(e)
        return f
    
    
    def register_network(ip='192.168.0.105', host=502):
        # 远程连接到服务器端
        # "192.168.0.105", 502
        master = mt.TcpMaster(ip, host)
        master.set_timeout(2)
    
        # @slave=1 : identifier of the slave. from 1 to 247.  0为广播所有的slave
        # @function_code=READ_HOLDING_REGISTERS:功能码
        # @starting_address=1:开始地址
        # @quantity_of_x=3:寄存器/线圈的数量
        # @output_value:一个整数或可迭代的值:1/[1,1,1,0,0,1]/xrange(12)
        # @data_format
        # @expected_length
        Hold_value = master.execute(slave=1, function_code=md.READ_HOLDING_REGISTERS, starting_address=0, quantity_of_x=10,
                                    output_value=5)
        print(Hold_value)
        Hold_value_list = [install for install in Hold_value]
        int2float(Hold_value_list[0], Hold_value_list[1])
        Hold_value_list[0] = float('%.2f' % int2float(Hold_value_list[0], Hold_value_list[1]))  
        print(Hold_value_list[0])
    
    
    register_network()

    当主机从从机采集数据时默认float形数据,从机会以ABCD四字节划分数据未,以打乱ABCD四字节的顺序而达到加密等目的

    以上实例中”Z“变量就是当ABCD打乱顺序后的解密方式。

     

    python
  • 相关阅读:
    Sublime Text 3065
    FBX .NET
    macbook pro的usb串口失效的的处理方法
    CMAKE使用
    Ctrl+Scroll改变所有Editor的缩放比例 (Code::Blocks)
    如何在Mac OSX 10.10上安装GDB
    yum安装指定(特定)版本(旧版本)软件包的方法
    MinGW: TOO MANY SECTIONS issue
    轻量级Image Library
    CodeLite的姿势
  • 原文地址:https://www.cnblogs.com/yongqi-wang/p/15331138.html
Copyright © 2011-2022 走看看