//package org.gyk.modules.sssj.util;
//
//import com.serotonin.io.serial.SerialParameters;
//import com.serotonin.modbus4j.ModbusFactory;
//import com.serotonin.modbus4j.ModbusMaster;
//import com.serotonin.modbus4j.code.DataType;
//import com.serotonin.modbus4j.exception.ErrorResponseException;
//import com.serotonin.modbus4j.exception.ModbusInitException;
//import com.serotonin.modbus4j.exception.ModbusTransportException;
//import com.serotonin.modbus4j.ip.IpParameters;
//import com.serotonin.modbus4j.msg.*;
//import com.serotonin.modbus4j.locator.BaseLocator;
//import com.serotonin.util.queue.ByteQueue;
//import org.gyk.modules.sssj.entity.JldPar;
//
//import java.math.BigInteger;
//import java.time.LocalDateTime;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
///**
// * @Description: MODBUS通讯数据获取
// * @Author: liao
// * @Date:   2021-04-05
// * @Version: V1.0
// */
//
//public class  ModbusTools {
//
//    public static String getComData() {
//
//        /* 创建ModbusFactory实例 */
//        ModbusFactory modbusFactory = new ModbusFactory();
//        //创建Com参数
//        SerialParameters serialParameters = new SerialParameters();
//
//        /* 设定MODBUS通讯的串行口 */
//        serialParameters.setCommPortId("COM1");
//        /* 设定成无奇偶校验 */
//        serialParameters.setParity(0);
//        /* 设定成数据位是8位 */
//        serialParameters.setDataBits(8);
//        /* 设定为1个停止位 */
//        serialParameters.setStopBits(1);
//        /* 设定端口名称 */
//        serialParameters.setPortOwnerName("COM1");
//        /* 设定端口波特率 */
//        serialParameters.setBaudRate(9600);
//
//        /* 创建ModbusMaster实例 */
//        ModbusMaster master = modbusFactory.createRtuMaster(serialParameters);
//        /* 初始化 */
//        try {
//            master.init();
//            System.out.println("======PLC通讯初始化成功=======");
//        } catch (ModbusInitException e) {
//            System.out.println("======PLC通讯初始化异常=======");
//        }
//        ModbusRequest modbusRequest = null;
//        //读取寄存器的值
//        try {
//            //PLC读取参数 通过站内部计量点ID号读取，30个参数，60个地址  240个寄存器
//            modbusRequest = new ReadHoldingRegistersRequest(1, 1, 60);
//        } catch (ModbusTransportException e) {
//            e.printStackTrace();
//        }
//        ModbusResponse modbusResponse = null;
//        try {
//            //向现场的PLC发送读取请求
//            modbusResponse = master.send(modbusRequest);
//        } catch (ModbusTransportException e) {
//            e.printStackTrace();
//        }
//        // 定义存放读取的寄存器数据的变量   类型未知 需要现场调试
//        ByteQueue byteQueue = new ByteQueue(60);
//        modbusResponse.write(byteQueue);
//        return "";
//    }
//
//    /**
//     * 读保持寄存器上的内容
//     *
//     * @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();
//        }
//    }
//
//    public static List<JldPar> getPar(String Ip, Integer port, Integer jldNo) {
//        /* 创建ModbusFactory实例 */
//        ModbusFactory modbusFactory = new ModbusFactory();
//        //创建Tcp IP参数
//        IpParameters ipParameters = new IpParameters();
//        ipParameters.setHost(Ip);
//
//        /* 创建ModbusMaster实例 */
//        ModbusMaster master = modbusFactory.createTcpMaster(ipParameters, true);
//        /* 初始化 */
//        try {
//            master.init();
//            System.out.println("======PLC通讯初始化成功=======");
//        } catch (ModbusInitException e) {
//            System.out.println("======PLC通讯初始化异常=======");
//        }
//        ModbusRequest modbusRequest = null;
//        //读取寄存器的值
//        try {
//            //PLC读取参数 通过站内部计量点ID号读取，30个参数，60个地址,  240个寄存器,  24360  PLC中参数起始地址
//            modbusRequest = new ReadHoldingRegistersRequest(1, 24360 + 240 * jldNo, 60);
//        } catch (ModbusTransportException e) {
//            e.printStackTrace();
//        }
//        ModbusResponse modbusResponse = null;
//        try {
//        //向现场的PLC发送读取请求
//            modbusResponse = master.send(modbusRequest);
//        } catch (ModbusTransportException e) {
//            e.printStackTrace();
//        }
//        // 定义存放读取的寄存器数据的变量   类型未知 需要现场调试
//        ByteQueue byteQueue = new ByteQueue(60);
//        modbusResponse.write(byteQueue);
//        List<JldPar> listPar = tranData(byteQueue);
//        return listPar;
//    }
//
//
//    private static List<JldPar> tranData(ByteQueue byteQueue) {
//        List<JldPar> listPar = new ArrayList<>();
//
//        String[] tempWord;
//        tempWord = new String[120];
//        for (int j = 0;  j < 120; j++) {
//            tempWord[j] = String.format("%02x", byteQueue.peek(j+3));
//        }
//
//        String [] strWord=new String[60];
//        for (int j = 0; j < 60; j++) {
//            strWord[j] = tempWord[j*2]+tempWord[j*2+1];
//        }
//
//
//        String[] sngPar = new String[30];
//
//        for (int j = 0; j < 30; j++) {
//            if (j <= 21) {
//                sngPar[j] = String.valueOf(getFloat(strWord[j * 2 + 1] + strWord[j * 2]));
//            } else {
//                sngPar[j] = String.valueOf(getFloat(strWord[j * 2 + 1] + strWord[j * 2]));
//            }
//        }
//
//        JldPar jldPar = new JldPar();
//        jldPar.setReadTime(LocalDateTime.now().toString());
//        jldPar.setCH4(sngPar[0]);
//        jldPar.setN2(sngPar[1]);
//        jldPar.setCO2(sngPar[2]);
//        jldPar.setC2H6(sngPar[3]);
//        jldPar.setC3H8(sngPar[4]);
//        jldPar.setH2O(sngPar[5]);
//        jldPar.setH2S(sngPar[6]);
//        jldPar.setH2(sngPar[7]);
//        jldPar.setCO(sngPar[8]);
//        jldPar.setO2(sngPar[9]);
//        jldPar.setI_C4H10(sngPar[10]);
//        jldPar.setN_C4H10(sngPar[11]);
//        jldPar.setI_C5H12(sngPar[12]);
//        jldPar.setN_C5H12(sngPar[13]);
//        jldPar.setN_C6H14(sngPar[14]);
//        jldPar.setN_C7H16(sngPar[15]);
//        jldPar.setN_C8H18(sngPar[16]);
//        jldPar.setN_C9H20(sngPar[17]);
//        jldPar.setN_C10H22(sngPar[18]);
//        jldPar.setHe(sngPar[19]);
//        jldPar.setAr(sngPar[20]);
//        jldPar.setBak(sngPar[21]);
//        jldPar.setGJ(sngPar[22]);
//        jldPar.setKJ(sngPar[23]);
//        jldPar.setGr(sngPar[24]);
//        jldPar.setDLND(sngPar[25]);
//        jldPar.setDSZS(sngPar[26]);
//        jldPar.setBAK1(sngPar[27]);
//        jldPar.setBAK2(sngPar[28]);
//        jldPar.setBAK3("读取成功");
//
//        listPar.add(jldPar);
//        return listPar;
//    }
//
//    private static float getFloat(String _strData) {
//        float f = Float.intBitsToFloat(new BigInteger(_strData,16).intValue());
//        return f;
//    }
//
//
//
////    public static int getInt(byte[] bytes) {
////        return (0xff & bytes[0]) | (0xff00 & (bytes[1] << 8)) | (0xff0000 & (bytes[2] << 16)) | (0xff000000 & (bytes[3] << 24));
////    }
//
//
//}
