modbus tcp通讯

描述

通过MODBUS4J采集硬件,插件modbus4j 3.3。

概念

  1. 线圈(0x01,可读可写)和离散输入(0x02,只读取)只能存储状态布尔值,其一个地址就只有一个binary位,就存储一个数据量。

  2. 保持寄存器(0x03,可读可写)和输入寄存器(0x04,只能读)一个地址有16个bit位,前8位和后8位组成两个byte数据。
    二进制数、有/无符号十进制数、十六进制数一个数据量,即对应一个地址数量;
    按照IEEE754标准,一个单精度浮点数需要32位bit,即对应两个地址数量,最多能精确7位有效数字;
    按照IEEE754标准,一个双精度浮点数需要64位bit,即对应四个地址数量,最多能精确15位有效数字;

  3. 这些bit并非按顺序存储,而是按以下步骤:
    1、判断长度是否是8的倍数,不足则高位补0,补成0的倍数
    2、8位一组分组
    3、按小端模式,高位存储在高地址

例如:浮点数123.4556,对应的二进制为:01000010 11110110 11101001 01111001 (本来就是32位)

modbus

个人认为它是一个主站绑定机器的ip与端口负责对外通讯,可以理解成一个socket程序。

slave

个人理解成挂下主站下的子程序,它只能通过主程序 的IP端口进行访问读写,它可以是多个,每个子程序都有唯一的ID,

offset

子程序的数据类据地址

dataType

子程序的数据类型:线圈(只有一个binary位),保持寄存器(0x03)和输入寄存器(0x04)一个地址有16个bit位,前8位和后8位组成两个byte数据。
二进制数、有/无符号十进制数、十六进制数一个数据量,即对应一个地址

枚举类com.serotonin.modbus4j.code常用常量

 /** Constant <code>BINARY=1</code>  线圈(0x01)和离散输入(0x02)*/
    public static final int BINARY = 1;

    /** 无符号的2字节,只能正数与0</code> */
    public static final int TWO_BYTE_INT_UNSIGNED = 2;
    /** 有符号的2节节,可表示正负</code> */
    public static final int TWO_BYTE_INT_SIGNED = 3;
    /** Constant <code>TWO_BYTE_INT_UNSIGNED_SWAPPED=22</code> */
    public static final int TWO_BYTE_INT_UNSIGNED_SWAPPED = 22;
    /** Constant <code>TWO_BYTE_INT_SIGNED_SWAPPED=23</code> */
    public static final int TWO_BYTE_INT_SIGNED_SWAPPED = 23;

    /** Constant <code>FOUR_BYTE_INT_UNSIGNED=4</code> */
    public static final int FOUR_BYTE_INT_UNSIGNED = 4;
    /** Constant <code>FOUR_BYTE_INT_SIGNED=5</code> */
    public static final int FOUR_BYTE_INT_SIGNED = 5;
    /** Constant <code>FOUR_BYTE_INT_UNSIGNED_SWAPPED=6</code> */
    public static final int FOUR_BYTE_INT_UNSIGNED_SWAPPED = 6;
    /** Constant <code>FOUR_BYTE_INT_SIGNED_SWAPPED=7</code> */
    public static final int FOUR_BYTE_INT_SIGNED_SWAPPED = 7;
    /* 0xAABBCCDD is transmitted as 0xDDCCBBAA */
    /** Constant <code>FOUR_BYTE_INT_UNSIGNED_SWAPPED_SWAPPED=24</code> */
    public static final int FOUR_BYTE_INT_UNSIGNED_SWAPPED_SWAPPED = 24;
    /** Constant <code>FOUR_BYTE_INT_SIGNED_SWAPPED_SWAPPED=25</code> */
    public static final int FOUR_BYTE_INT_SIGNED_SWAPPED_SWAPPED = 25;
    
    /** Constant <code>FOUR_BYTE_FLOAT=8</code> */
    public static final int FOUR_BYTE_FLOAT = 8;
    /** Constant <code>FOUR_BYTE_FLOAT_SWAPPED=9</code> */
    public static final int FOUR_BYTE_FLOAT_SWAPPED = 9;
    /** Constant <code>FOUR_BYTE_FLOAT_SWAPPED_INVERTED=21</code> */
    public static final int FOUR_BYTE_FLOAT_SWAPPED_INVERTED = 21;

    /** Constant <code>EIGHT_BYTE_INT_UNSIGNED=10</code> */
    public static final int EIGHT_BYTE_INT_UNSIGNED = 10;
    /** Constant <code>EIGHT_BYTE_INT_SIGNED=11</code> */
    public static final int EIGHT_BYTE_INT_SIGNED = 11;
    /** Constant <code>EIGHT_BYTE_INT_UNSIGNED_SWAPPED=12</code> */
    public static final int EIGHT_BYTE_INT_UNSIGNED_SWAPPED = 12;
    /** Constant <code>EIGHT_BYTE_INT_SIGNED_SWAPPED=13</code> */
    public static final int EIGHT_BYTE_INT_SIGNED_SWAPPED = 13;
    /** Constant <code>EIGHT_BYTE_FLOAT=14</code> */
    public static final int EIGHT_BYTE_FLOAT = 14;
    /** Constant <code>EIGHT_BYTE_FLOAT_SWAPPED=15</code> */
    public static final int EIGHT_BYTE_FLOAT_SWAPPED = 15;

    /** Constant <code>TWO_BYTE_BCD=16</code> */
    public static final int TWO_BYTE_BCD = 16;
    /** Constant <code>FOUR_BYTE_BCD=17</code> */
    public static final int FOUR_BYTE_BCD = 17;
    /** Constant <code>FOUR_BYTE_BCD_SWAPPED=20</code> */
    public static final int FOUR_BYTE_BCD_SWAPPED = 20;

    /** Constant <code>CHAR=18</code> */
    public static final int CHAR = 18;
    /** Constant <code>VARCHAR=19</code> */
    public static final int VARCHAR = 19;
    
    //MOD10K two, three and four register types
    /** Constant <code>FOUR_BYTE_MOD_10K=26</code> */
    public static final int FOUR_BYTE_MOD_10K = 26;
    /** Constant <code>SIX_BYTE_MOD_10K=27</code> */
    public static final int SIX_BYTE_MOD_10K = 27;
    /** Constant <code>EIGHT_BYTE_MOD_10K=28</code> */
    public static final int EIGHT_BYTE_MOD_10K = 28;
    /** Constant <code>FOUR_BYTE_MOD_10K_SWAPPED=29</code> */
    public static final int FOUR_BYTE_MOD_10K_SWAPPED = 29;
    /** Constant <code>SIX_BYTE_MOD_10K_SWAPPED=30</code> */
    public static final int SIX_BYTE_MOD_10K_SWAPPED = 30;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梁晓山(ben)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值