• <blockquote id="eygoe"></blockquote>
  • <menu id="eygoe"></menu>
    <tt id="eygoe"></tt>
  • package cn.smarthse.online.test.modbus;


    import java.util.Arrays;


    import com.serotonin.io.serial.SerialParameters;

    import com.serotonin.modbus4j.ModbusFactory;

    import com.serotonin.modbus4j.ModbusMaster;

    import com.serotonin.modbus4j.exception.ModbusInitException;

    import com.serotonin.modbus4j.exception.ModbusTransportException;

    import com.serotonin.modbus4j.msg.ReadDiscreteInputsRequest;

    import com.serotonin.modbus4j.msg.ReadDiscreteInputsResponse;

    import com.serotonin.modbus4j.msg.ReadHoldingRegistersRequest;

    import com.serotonin.modbus4j.msg.ReadHoldingRegistersResponse;

    import com.serotonin.modbus4j.msg.WriteRegistersRequest;

    import com.serotonin.modbus4j.msg.WriteRegistersResponse;

    /**

     * 通過串口解析MODBUS協議

     */

    public class TestModbusDemo {

        /*

         * 設定MODBUS網絡上從站地址  SLAVE_ADDRESS = 1;

         * 串行波特率  BAUD_RATE = 9600;

         */

        private final static int SLAVE_ADDRESS = 1;

        private final static int BAUD_RATE = 9600;


        public static void main(String[] args) {

            SerialParameters serialParameters = new SerialParameters();

            /* 設定MODBUS通訊的串行口 */

            serialParameters.setCommPortId("COM3");

            /* 設定成無奇偶校驗 */

            serialParameters.setParity(0);

            /* 設定成數據位是8位 */

            serialParameters.setDataBits(8);

            /* 設定為1個停止位 */

            serialParameters.setStopBits(1);

            /* 設定端口名稱 */

            serialParameters.setPortOwnerName("COM3");

            /* 設定端口波特率 */

            serialParameters.setBaudRate(BAUD_RATE);

            /* 創建ModbusFactory工廠實例 */

            ModbusFactory modbusFactory = new ModbusFactory();

            /* 創建ModbusMaster實例 */

            ModbusMaster master = modbusFactory.createRtuMaster(serialParameters);

            /* 初始化 */

            try {

                master.init();

                readHoldingRegistersTest(master, SLAVE_ADDRESS, 0, 2);

                //readDiscreteInputTest(master, SLAVE_ADDRESS, 0, 100);

            } catch (ModbusInitException e) {

                e.printStackTrace();


            } finally {

                master.destroy();


            }

        }



        /**

         * 讀開關量型的輸入信號

         *

         * @param master  主站

         * @param slaveId 從站地址

         * @param start   起始偏移量

         * @param len     待讀的開關量的個數

         */

        private static void readDiscreteInputTest(ModbusMaster master, int slaveId, int start, int len) {

            try {

                ReadDiscreteInputsRequest request = new ReadDiscreteInputsRequest(slaveId, start, len);

                ReadDiscreteInputsResponse response = (ReadDiscreteInputsResponse) master.send(request);

                if (response.isException()) {

                    System.out.println("異常消息:" + response.getExceptionMessage());

                } else {

                    System.out.println(Arrays.toString(response.getBooleanData()));

                }

            } catch (ModbusTransportException e) {

                e.printStackTrace();

            }

        }



        /**

         * 讀保持寄存器上的內容

         *

         * @param master  主站

         * @param slaveId 從站地址

         * @param start   起始地址的偏移量

         * @param len     待讀寄存器的個數

         */

        private static void readHoldingRegistersTest(ModbusMaster master, int slaveId, int start, int len) {

            try {

                ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(slaveId, start, len);

                ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master.send(request);

                if (response.isException()) {

                    System.out.println("異常消息:" + response.getExceptionMessage());

                } else {

                    System.out.println(Arrays.toString(response.getShortData()));

                    short[] list = response.getShortData();

                    for (int i = 0; i < list.length; i++) {

                        System.out.print(list[i] + " ");

                    }

                }

            } catch (ModbusTransportException e) {

                e.printStackTrace();

            }

        }



        /**

         * 批量寫數據到保持寄存器

         *

         * @param master  主站

         * @param slaveId 從站地址

         * @param start   起始地址的偏移量

         * @param values  待寫數據

         */

        public static void writeRegistersTest(ModbusMaster master, int slaveId, int start, short[] values) {

            try {

                WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values);

                WriteRegistersResponse response = (WriteRegistersResponse) master.send(request);

                if (response.isException()) {

                    System.out.println("異常消息:" + response.getExceptionMessage());

                } else {

                    System.out.println("寫入成功");

                }

            } catch (ModbusTransportException e) {

                e.printStackTrace();

            }

        }

    }


    2020年12月31日

    溫濕度變送器 MODBUS TCP client C# demo
    4代TH4XW/TH4XG儀表二次開發UDP通訊python demo

    上一篇

    下一篇

    溫濕度變送器 MODBUS RTU java demo

    要引用這三個包:modbus4J.jar,RXTXcomm.jar,seroUtils.jar

    添加時間:

    米奇在线777在线精品视频,米奇影院888奇米色99在线,米奇777免费视频手机版