• <mark id="a1mpo"><big id="a1mpo"><legend id="a1mpo"></legend></big></mark><p id="a1mpo"></p>
    1. <cite id="a1mpo"><li id="a1mpo"><pre id="a1mpo"></pre></li></cite>
      <legend id="a1mpo"><track id="a1mpo"></track></legend>

        亚洲国产成人精品女人久久久,久久99精品久久久久久青青,超碰成人人人做人人爽,暖暖免费观看电视在线高清,亚洲国产成人精品女人久久久,欧美人与动zozo,日韩精品久久久肉伦网站,光棍天堂在线手机播放免费

        MODBUS讀取的整數(shù)數(shù)據(jù)如何按位取值?

        作者:領(lǐng)祺@玉嬌龍 日期:2023-02-04 閱讀量:

        按位取值是指該測(cè)點(diǎn)的數(shù)據(jù)類型為16位有/無(wú)符號(hào)、32位有/無(wú)符號(hào)時(shí),將讀到的值按BIT位解析,起始位終止位相同時(shí),表示解析1位數(shù)據(jù),值為0或1;起始位和終止位根據(jù)數(shù)據(jù)類型不同,最小0,最大31;

        例如讀到的值為十進(jìn)制的10,那么將其轉(zhuǎn)換為二進(jìn)制為0000 1010,其第0位(起始位和終止位都配置成0)0,第1為1,第2位為0,第3位為1。

        杭州領(lǐng)祺科技智能物聯(lián)網(wǎng)關(guān)支持MODBUS采集、轉(zhuǎn)發(fā)、監(jiān)聽(tīng),支持485串口MODBUS異構(gòu)組網(wǎng),支持多上位機(jī)WEB組態(tài)同時(shí)接收信息,支持MODBUS和M-BUS協(xié)議轉(zhuǎn)換,MODBUS TCP MODBUS RTU等各種協(xié)議轉(zhuǎn)換、混采。

        在線幫助文檔

        https://dingiiot.com/help-doc/drive_page/modbus-rtu%E9%87%87%E9%9B%86/

        設(shè)備地址:從設(shè)備的地址編號(hào)

        CRC校驗(yàn):用來(lái)確認(rèn)接收消息完整性和正確性

        Java代碼取值實(shí)現(xiàn)

        網(wǎng)上有許多開(kāi)源的modbos工具包,例如modbus4j、jamod等。這里選用jamod,以Modbus RTU通訊為例

        maven依賴如下,同時(shí)需要在C://Windows//System32目錄下,放入RXTXcomm.jar、rxtxParallel.dll、rxtxSerial.dll三個(gè)文件,用來(lái)實(shí)現(xiàn)串口通信

        net.wimpi

        jamod

        1.2

        創(chuàng)建和串口的連接

        public class ModBusConnection {

        public static SerialConnection getSerialConnection() throws Exception {

        SerialParameters parameters = new SerialParameters();

        // 串口名稱

        parameters.setPortName("COM2");

        // 波特率

        parameters.setBaudRate(9600);

        // 數(shù)據(jù)位8位

        parameters.setDatabits(SerialPort.DATABITS_8);

        // 停止位2位

        parameters.setStopbits(SerialPort.STOPBITS_2);

        // 無(wú)奇偶校驗(yàn)位

        parameters.setParity(SerialPort.PARITY_NONE);

        // rtu模式,取代默認(rèn)的ascii模式

        parameters.setEncoding("rtu");

        SerialConnection connection = new SerialConnection(parameters);

        connection.open();

        return connection;

        }

        }

        創(chuàng)建request取數(shù)工具類

        public class ModBusUtil {

        /**

        * 讀寫(xiě) boolean類型 function code 01

        * @param connection con

        * @param param param

        * @return BitVector

        */

        public static BitVector readCoils(SerialConnection connection, ModBusRequest param) throws Exception {

        ReadCoilsRequest request = new ReadCoilsRequest(param.getAddressNo(), param.getWordCount());

        request.setUnitID(param.getSlaveId());

        ReadCoilsResponse response = (ReadCoilsResponse) getResponse(connection, request);

        return response.getCoils();

        }

        /**

        * 只讀 boolean類型 function code 02

        * @param connection con

        * @param param param

        * @return BitVector

        */

        public static BitVector readInputDiscretes(SerialConnection connection, ModBusRequest param) throws Exception {

        ReadInputDiscretesRequest request = new ReadInputDiscretesRequest(param.getAddressNo(), param.getWordCount());

        request.setUnitID(param.getSlaveId());

        ReadInputDiscretesResponse response = (ReadInputDiscretesResponse) getResponse(connection, request);

        return response.getDiscretes();

        }

        /**

        * 讀寫(xiě) int類型 function code 03

        * @param connection con

        * @param param param

        * @return InputRegister

        */

        public static InputRegister[] readMultipleRegisters(SerialConnection connection, ModBusRequest param) throws Exception {

        ReadMultipleRegistersRequest request = new ReadMultipleRegistersRequest(param.getAddressNo(), param.getWordCount());

        request.setUnitID(param.getSlaveId());

        ReadMultipleRegistersResponse response = (ReadMultipleRegistersResponse) getResponse(connection, request);

        return response.getRegisters();

        }

        /**

        * 只讀 int類型 function code 04

        * @param connection con

        * @param param param

        * @return InputRegister

        */

        public static InputRegister[] readInputRegisters(SerialConnection connection, ModBusRequest param) throws Exception {

        // 寄存器地址編號(hào) 屬性數(shù)據(jù)數(shù)量

        ReadInputRegistersRequest request = new ReadInputRegistersRequest(param.getAddressNo(), param.getWordCount());

        // 從設(shè)備編號(hào)

        request.setUnitID(param.getSlaveId());

        ReadInputRegistersResponse response = (ReadInputRegistersResponse) getResponse(connection, request);

        return response.getRegisters();

        }

        /**

        * 獲取response

        * @param connection con

        * @param request req

        * @return ModbusResponse

        */

        private static ModbusResponse getResponse(SerialConnection connection, ModbusRequest request) throws Exception {

        ModbusSerialTransaction transaction = new ModbusSerialTransaction(connection);

        transaction.setRequest(request);

        transaction.execute();

        return transaction.getResponse();

        }

        }

        main方法測(cè)試類

        public class SerialPortTest {

        public static void main(String[] args) throws Exception {

        SerialConnection connection = ModBusConnection.getSerialConnection();

        ModBusRequest param = new ModBusRequest();

        // 從設(shè)備id編號(hào)

        param.setSlaveId(1);

        // 寄存器地址編號(hào) 這邊使用了function 01,addressNo=0表示寄存器地址為00001

        param.setAddressNo(0);

        // 讀取數(shù)據(jù)個(gè)數(shù)

        param.setWordCount(1);

        InputRegister[] registers = ModBusUtil.readInputRegisters(connection, param);

        for (InputRegister register : registers) {

        System.out.println(register.getValue());

        }

        connection.close();

        }

        }





        分享到: