From 6b8cb1b9d271260b0d7d19334aa9e9ac24d4ae3c Mon Sep 17 00:00:00 2001
From: 严智鑫 <test>
Date: 星期一, 07 四月 2025 17:57:53 +0800
Subject: [PATCH] 通讯方式更改

---
 nglib/src/ng/devices/ModbusService.java      |  104 ++++++
 nglib/src/ng/devices/PlcBitObject.java       |  127 ++++++++
 nglib/src/ng/devices/PlcParameterInfo.java   |  115 +++++++
 nglib/.idea/encodings.xml                    |    8 
 nglib/src/ng/devices/InitUtil.java           |   91 ++++++
 nglib/src/builder/S7objectMachine.java       |   79 +++++
 nglib/src/builder/Manager.java               |   23 -
 nglib/src/ng/devices/PlcBitInfo.java         |   85 +++++
 nglib/src/builder/MachineManager.java        |    6 
 nglib/src/ng/devices/MysqlService.java       |    3 
 nglib/src/ng/devices/PlcParameterObject.java |  252 ++++++++++++++++
 11 files changed, 858 insertions(+), 35 deletions(-)

diff --git a/nglib/.idea/encodings.xml b/nglib/.idea/encodings.xml
index d60cdc1..83b0b33 100644
--- a/nglib/.idea/encodings.xml
+++ b/nglib/.idea/encodings.xml
@@ -6,10 +6,14 @@
     <file url="file://$PROJECT_DIR$/src/builder/MachineManager.java" charset="GBK" />
     <file url="file://$PROJECT_DIR$/src/builder/Manager.java" charset="GBK" />
     <file url="file://$PROJECT_DIR$/src/builder/S7control.java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/src/builder/S7control.java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/src/builder/S7control.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/builder/S7objectMachine.java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/builder/ThreadHttpServer.java" charset="GBK" />
     <file url="file://$PROJECT_DIR$/src/ng/db/DBSession.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/ng/devices/InitUtil.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/ng/devices/PlcBitInfo.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/ng/devices/PlcBitObject.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/ng/devices/PlcParameterInfo.java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/ng/devices/PlcParameterObject.java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/toTcp/TCPClient.java" charset="GBK" />
     <file url="PROJECT" charset="GBK" />
   </component>
diff --git a/nglib/src/builder/MachineManager.java b/nglib/src/builder/MachineManager.java
index ec6262f..c319e16 100644
--- a/nglib/src/builder/MachineManager.java
+++ b/nglib/src/builder/MachineManager.java
@@ -29,6 +29,7 @@
 		public String ProcName;
 		public String Name;
 		public byte FunctionType;
+		public String remarks;
 	
 	}
 	List<item> items=new ArrayList<item>();
@@ -53,7 +54,7 @@
 			if(itm.serv==null){
 				itm.serv=new MysqlService(itm.helper,itm.ID);
 
-				itm.serv.Run(itm.ID,itm.IP,itm.Port, (byte)1,itm.ReadOffset, itm.ReadSize,1000,itm.FunctionType);
+				itm.serv.Run(itm.ID,itm.IP,itm.Port, (byte)1,itm.ReadOffset, itm.ReadSize,1000,itm.FunctionType,itm.remarks);
 				System.out.println(String.format("设备启动-{%s}(%s)(%s)",itm.Name,itm.IP,itm.FunctionType));
 			}
 		}
@@ -79,7 +80,7 @@
 	
 	
 	
-	public void createDevice(DBHelper helper,int DeviceID,String Name,String Ip,int Port,int ReadOffset,int ReadSize,String ProcName,byte FunctionType){
+	public void createDevice(DBHelper helper,int DeviceID,String Name,String Ip,int Port,int ReadOffset,int ReadSize,String ProcName,byte FunctionType,String remarks){
 		synchronized(items){
 			
 			item itm=new item();
@@ -92,6 +93,7 @@
 			itm.ReadOffset=ReadOffset;		//读取偏移
 			itm.ReadSize=ReadSize;//发送偏移
 			itm.FunctionType=FunctionType;
+			itm.remarks=remarks;
 			/*if(DeviceID==6 || DeviceID==19 || DeviceID==29 || DeviceID==30){
 				itm.ReadOffset=12000;
 			}*/
diff --git a/nglib/src/builder/Manager.java b/nglib/src/builder/Manager.java
index 644db4b..6cbe3a6 100644
--- a/nglib/src/builder/Manager.java
+++ b/nglib/src/builder/Manager.java
@@ -82,7 +82,7 @@
 			//读取设备列表
 			DBHelper db=DBHelper.getDBHelper("mes");
 			sn=DBHelper.getDBHelper("mes").createSession(false);
-			sn.createSql("select id,machine_name,ip_address,port,flag,read_size,read_offset,function_type from machine where id>=80");
+			sn.createSql("select id,machine_name,ip_address,port,flag,read_size,read_offset,function_type,remarks from machine where flag=1");
 			ResultSet set= sn.query().getCurrentResult();
 
 			//创建所有设备通讯
@@ -95,22 +95,9 @@
 			   int readSize=set.getInt(6);
 			   int readOffset=set.getInt(7);
 			   byte functionType=set.getByte(8);
+			   String remarks=set.getString(9);
 			   if(flag==1){
-				   mmgr.createDevice(db,id,name,ip,port,readOffset,readSize,null,functionType);
-//				   if(port==102){
-//					   if(id==78){
-//						   S7control s7=new S7control(EPlcType.S1500, ip, port, 0, 0);
-//						   System.out.println("S7-S1500:"+s7.readWord("DB34.122",  1));
-//						   s7.writeWord("DB34.122",26);
-//						   System.out.println("S7-S1500:"+s7.readWord("DB34.122",  1));
-//					   }else{
-//						   S7control s7=new S7control(EPlcType.S1200, ip, port, 0, 0);
-//						   System.out.println("S7-S1200:"+s7.readWord("DB20.0",  1));
-//					   }
-//				   }else{
-//
-//				   }
-
+				   mmgr.createDevice(db,id,name,ip,port,readOffset,readSize,null,functionType,remarks);
 			   }
 
 			}
@@ -219,10 +206,6 @@
 			// TODO: handle exception
 			System.out.println("错误");
 		}
-	}
-	@Override
-	public void start() {
-
 	}
 
 	public static void main(String[] args){
diff --git a/nglib/src/builder/S7objectMachine.java b/nglib/src/builder/S7objectMachine.java
new file mode 100644
index 0000000..cb72023
--- /dev/null
+++ b/nglib/src/builder/S7objectMachine.java
@@ -0,0 +1,79 @@
+package builder;
+
+import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
+import ng.devices.InitUtil;
+import ng.devices.PlcParameterInfo;
+import ng.devices.PlcParameterObject;
+
+import java.util.LinkedHashMap;
+
+
+/**
+ * @Author : yanzhixin
+ * @Date: 2024/4/9 15:13
+ * @Description:
+ */
+public class S7objectMachine extends Thread {
+    public S7control plccontrol; // PLC閫氳绫诲疄渚�
+    private EPlcType plcType = EPlcType.S1200; // 瑗块棬瀛怭LC绫诲瀷
+    private String ip = ""; // plc ip鍦板潃
+    private int port = 102; // plc 绔彛鍙�
+    private String plcFileName=""; // json鍚嶇О
+    public PlcParameterObject PlcMesObject;
+    public S7objectMachine(String ip, int port, String plcFileName, EPlcType plcType) {
+        initialize(ip,port,plcFileName,plcType);
+        if (plccontrol == null) {
+            plccontrol = new S7control(this.plcType, this.ip, this.port, 0, 0);
+            //String plcFileUrl = System.getProperty("user.dir") + "D:/HangZhouMes/JsonFile/"+this.plcFileName+".json";
+            String plcFileUrl = "D:/mes/JsonFile/"+this.plcFileName+".json";
+            PlcMesObject = InitUtil.initword(plcFileUrl);
+        }
+    }
+    public void initialize(String ip,int port,String plcFileName,EPlcType plcType){
+        this.ip = ip;
+        this.port = port;
+        this.plcFileName = plcFileName;
+        this.plcType=  plcType;
+    }
+
+    /**
+     * 鎵撳嵃鍙傛暟鍊�
+     */
+    public void consoleLogInfo(){
+        String logInfo=this.plcFileName+" ";
+        LinkedHashMap<String, PlcParameterInfo> thisPlcParameterInfo=PlcMesObject.getPlcParameterMap();
+        for (String key:thisPlcParameterInfo.keySet()) {
+            logInfo+=key+":"+thisPlcParameterInfo.get(key).getValue()+",";
+        }
+    }
+    @Override
+    public void run() {
+        while (this != null) {
+            try {
+                Thread.sleep(100);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            try {
+                byte[] resultValues=new byte[PlcMesObject.getPlcAddressLength()];
+                int maxRead=1092;
+                int size=PlcMesObject.getPlcAddressLength()%maxRead==0?
+                        (PlcMesObject.getPlcAddressLength()/maxRead):
+                        (PlcMesObject.getPlcAddressLength()/maxRead+1);
+                for (int i = 0; i <size ; i++) {
+                    int begin=i*maxRead;
+                    int length=(i==size-1?PlcMesObject.getPlcAddressLength()-begin:maxRead);
+                    String beginAddress=PlcMesObject.getPlcAddressBegin().substring(0, PlcMesObject.getPlcAddressBegin().indexOf("."))+"."+begin;
+                    byte[] getplcvlues = plccontrol.readByte(beginAddress, length);
+                    System.arraycopy(getplcvlues,0,resultValues,begin,length);
+                }
+                if (resultValues != null) {
+                    PlcMesObject.setPlcParameterList(resultValues);
+                }
+            } catch (Exception e) {
+                //log.info("寮傚父:ip:{},port:{}",this.ip,this.port);
+            }
+
+        }
+    }
+}
diff --git a/nglib/src/ng/devices/InitUtil.java b/nglib/src/ng/devices/InitUtil.java
new file mode 100644
index 0000000..98378f7
--- /dev/null
+++ b/nglib/src/ng/devices/InitUtil.java
@@ -0,0 +1,91 @@
+package ng.devices;
+
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
+public class InitUtil {
+    //鍒濆鍖杦ord
+    public static PlcParameterObject initword(String jsonFilePath) {
+        try {
+            FileReader fileReader = new FileReader(jsonFilePath);
+            BufferedReader bufferedReader = new BufferedReader(fileReader);
+
+            StringBuilder content = new StringBuilder();
+            String line;
+
+            while ((line = bufferedReader.readLine()) != null) {
+                content.append(line);
+            }
+
+            bufferedReader.close();
+            fileReader.close();
+
+            JSONObject jsonfileobj = new JSONObject(content.toString());
+            JSONArray jsonArray = jsonfileobj.getJSONArray("parameteInfor");
+            PlcParameterObject plcParameterObject = new PlcParameterObject();
+            plcParameterObject.setPlcAddressBegin(jsonfileobj.getStr("plcAddressBegin"));//璁剧疆璧峰浣嶅湴鍧�
+            plcParameterObject.setPlcAddressLength(Integer.valueOf(jsonfileobj.getStr("plcAddressLenght")));//璁剧疆鍦板潃闀垮害
+
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject parameterObj = jsonArray.getJSONObject(i);
+                PlcParameterInfo plcParameterInfo = new PlcParameterInfo(jsonfileobj.getStr("plcAddressBegin")); //鍙傛暟瀹炰緥
+                String codeid = parameterObj.getStr("codeId");
+                plcParameterInfo.setCodeId(codeid);
+                plcParameterInfo.setAddressIndex(Integer.valueOf(parameterObj.getStr("addressIndex")));
+                //plcParameterInfo.setRatio(Integer.valueOf(parameterObj.getStr("ratio")));
+                plcParameterInfo.setAddressLength(Integer.valueOf(parameterObj.getStr("addressLenght")));
+                plcParameterInfo.setUnit(parameterObj.getStr("unit"));
+                plcParameterObject.addPlcParameter(plcParameterInfo);
+            }
+            return plcParameterObject;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    //鍒濆鍖朾it
+    public static PlcBitObject initbit(String jsonFilePath) {
+        PlcBitObject plcBitObject = new PlcBitObject();
+
+        try {
+            FileReader fileReader = new FileReader(jsonFilePath);
+            BufferedReader bufferedReader = new BufferedReader(fileReader);
+
+            StringBuilder content = new StringBuilder();
+            String line;
+
+            while ((line = bufferedReader.readLine()) != null) {
+                content.append(line);
+            }
+
+            bufferedReader.close();
+            fileReader.close();
+
+            JSONObject jsonfileobj = new JSONObject(content.toString());
+            JSONArray jsonArray = jsonfileobj.getJSONArray("parameteInfor");
+            plcBitObject.setPlcAddressBegin(jsonfileobj.getStr("plcAddressBegin"));//璁剧疆璧峰浣嶅湴鍧�
+            plcBitObject.setPlcAddressLength(Integer.valueOf(jsonfileobj.getStr("plcAddressLenght")));//璁剧疆鍦板潃闀垮害
+
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject parameterObj = jsonArray.getJSONObject(i);
+
+                PlcBitInfo plcBitInfo = new PlcBitInfo(jsonfileobj.getStr("plcAddressBegin")); //鍙傛暟瀹炰緥
+                String codeid = parameterObj.getStr("codeId");
+                plcBitInfo.setCodeId(codeid);
+                plcBitInfo.setAddressIndex(Integer.valueOf(parameterObj.getStr("addressIndex")));
+
+                plcBitObject.addPlcBit(plcBitInfo);
+            }
+            System.out.println("");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return plcBitObject;
+    }
+}
diff --git a/nglib/src/ng/devices/ModbusService.java b/nglib/src/ng/devices/ModbusService.java
index 897a45a..a183c95 100644
--- a/nglib/src/ng/devices/ModbusService.java
+++ b/nglib/src/ng/devices/ModbusService.java
@@ -1,6 +1,9 @@
 package ng.devices;
 
+import java.sql.CallableStatement;
+import java.sql.Connection;
 import java.sql.SQLException;
+import java.util.List;
 
 import builder.S7control;
 import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
@@ -10,6 +13,7 @@
 
 
 public abstract class ModbusService implements Runnable  {
+
 
 	//modbus瀹㈡埛绔�
 	protected ModbusClient client;
@@ -28,6 +32,7 @@
 	protected  String ip;
 	//璁惧绔彛
 	protected int port;
+	protected String remarks;
 	//绾跨▼
 	java.lang.Thread thread;
 	//缂撳啿鍖猴紙鏈嶅姟鍏佽鍙戦�佽秴杩囧崗璁姹傜殑鏁版嵁锛屾墍浠ョ紦鍐插尯鏇村ぇ锛�
@@ -43,7 +48,7 @@
     }
 
     //杩愯
-    public void Run(int MachineID,String ip,int port,byte state,int ReadOffset,int ReadSize,int timeout,byte FunctionType){
+    public void Run(int MachineID,String ip,int port,byte state,int ReadOffset,int ReadSize,int timeout,byte FunctionType,String remarks){
     	//璁剧疆鍙傛暟
     	this.machineID=MachineID;
     	this.ip=ip;
@@ -51,6 +56,7 @@
     	this.readOffset=ReadOffset;
     	this.readSize=ReadSize;
 		this.functionType= FunctionType;
+		this.remarks= remarks;
 
     	//鍚姩绾跨▼
 		if(this.port==102){
@@ -98,6 +104,92 @@
     	}
     	return msg;
     }
+	//涓�娆7璇诲彇琛屼负
+	String onceS7(){
+		try {
+			DBSession sn=null;
+			String result=null;
+			String flag=null;
+			String messsage="000000000000000000";
+			EPlcType ePlcType=null;
+			if(this.machineID==78){
+				ePlcType=EPlcType.S1500;
+			}else{
+				ePlcType=EPlcType.S1200;
+			}
+			S7control s7=new S7control(ePlcType, ip, port, 0, 0);
+			//List<Integer> word=s7.readWord("DB34.122",  1);
+			List<Integer> listWord=s7.readWord(this.remarks,(this.readSize/2));
+			if(listWord==null){
+				System.out.println("notread");
+				return "";
+			}
+            for(int i=0;i<listWord.size();i++){
+				//System.out.println("i  "+listWord.size()+"   "+messsage);
+				messsage+=HexUtil.intTo2ByteHex(listWord.get(i));
+			}
+
+			//System.out.println(messsage);
+			//System.out.println(ip+"  "+s7.readWord("DB34.122",  1));
+			//鏁版嵁搴�
+			DBHelper db=DBHelper.getDBHelper("mes");
+			try{
+				//鍒涘缓杩炴帴
+				sn=db.createSession(false);
+				Connection con= sn.getConnection();
+				//璋冪敤閭d釜瀛樺偍杩囩▼
+				CallableStatement sql=con.prepareCall("{call Total_method(?,?,?,?)}");
+				sql.registerOutParameter(3, java.sql.Types.VARCHAR);
+				sql.registerOutParameter(4, java.sql.Types.VARCHAR);
+				sql.setString(1, messsage);
+				sql.setLong(2, machineID);
+				sql.execute();
+				//璇诲彇杩斿洖鍙傛暟
+				result= sql.getString(3);
+				flag= sql.getString(4);
+				if (result!=null&&result.length()>0){
+					String []results=result.split(",");
+					//寰楀埌瀛樺偍杩囩▼杩斿洖鐨勫�硷紝鏁扮粍绗竴涓负鍦板潃锛岀浜屼釜涓哄��
+					int resultsLength=results.length;
+					int resultsSize=resultsLength/2;
+
+					for(int i=1;i<resultsSize+1;i++){
+						int addressIndex=(i-1)*2;
+						int valueIndex=i*2-1;
+						s7.writeWord(results[addressIndex],Integer.valueOf(results[valueIndex]));//鍙傛暟缁勫啓鍏�
+					}
+//					if(results.length==2){
+//						s7.writeWord(results[0],Integer.valueOf(results[1]) );
+//					}
+//					if(results.length==4){
+//						s7.writeWord(results[0],Integer.valueOf(results[1]));//閰嶆柟
+//						s7.writeWord(results[2],Integer.valueOf(results[3]));//閫熷害
+//					}
+					List<Integer> listWord2=s7.readWord(this.remarks,(this.readSize/2));
+					System.out.println(listWord2.size());
+
+				}
+
+
+			}
+			catch(Exception e){
+				e.printStackTrace();
+			}
+			finally{
+				sn.close();
+
+			}
+
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		finally{
+
+		}
+
+		return "";
+	}
 
 	public void SendPLC(int Address, int count, byte[] buffer, int offset) {
 		this.client.write(Address, count, buffer, offset);
@@ -123,15 +215,7 @@
 				try {
 					java.lang.Thread.sleep(UpadateInterval);
 					if(this.port==102){
-						if(this.machineID==78){
-							S7control s7=new S7control(EPlcType.S1500, ip, port, 0, 0);
-							System.out.println("S7-S1500:"+s7.readWord("DB34.122",  1));
-							s7.writeWord("DB34.122",26);
-							System.out.println("S7-S1500:"+s7.readWord("DB34.122",  1));
-						}else{
-							S7control s7=new S7control(EPlcType.S1200, ip, port, 0, 0);
-							System.out.println("S7-S1200:"+s7.readWord("DB20.0",  1));
-						}
+						String back=onceS7();
 					}else{
 						String back=once();
 					}
diff --git a/nglib/src/ng/devices/MysqlService.java b/nglib/src/ng/devices/MysqlService.java
index f064719..8a4079f 100644
--- a/nglib/src/ng/devices/MysqlService.java
+++ b/nglib/src/ng/devices/MysqlService.java
@@ -112,7 +112,7 @@
 	    DBSession sn=null;
 	    String result=null;
 	    String flag=null;
-	    System.out.println(lastGet);
+
 	    try{
 	    //创建连接
 	    	sn=this.db.createSession(false);
@@ -149,6 +149,7 @@
 	    		//更新最后一次发送
 	       this.lastSend=result;
 	       //返回要发送的报文
+				System.out.println(result);
 	       return this.fillPack(arg1,result);
 	    	}
 	    	}
diff --git a/nglib/src/ng/devices/PlcBitInfo.java b/nglib/src/ng/devices/PlcBitInfo.java
new file mode 100644
index 0000000..2fbf3eb
--- /dev/null
+++ b/nglib/src/ng/devices/PlcBitInfo.java
@@ -0,0 +1,85 @@
+package ng.devices;
+
+public class PlcBitInfo {
+
+    public PlcBitInfo(String startAddress) {
+        this.startAddress = startAddress;
+    }
+
+    private String startAddress;
+    // 鍙傛暟鏍囪瘑
+    private String codeId;
+
+    // 鍙傛暟鍚嶇О
+    private String name;
+
+    // 璇诲彇 鍙傛暟鍊�
+    private Boolean value;
+    // 鍙傛暟鍦板潃
+    private int addressIndex;
+
+    public String getCodeId() {
+        return this.codeId;
+    }
+
+    public void setCodeId(String codeId) {
+        this.codeId = codeId;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Boolean getValue() {
+        return this.value;
+    }
+
+    public void setValue(Boolean value) {
+        this.value = value;
+    }
+
+
+    public int getAddressIndex() {
+        return this.addressIndex;
+    }
+
+    /**
+     * 鑾峰彇鍦板潃
+     *
+     * @param index 绱㈠紩鍦板潃
+     */
+    public String getAddress(int index) {
+        String[] stringdatas = this.startAddress.trim().split("\\.");
+        if (stringdatas.length < 2) {
+            return null;
+        }
+        int dbwindex = 0;
+        int bitindex = 0;
+        if (stringdatas.length == 3) {
+            dbwindex = Integer.parseInt(stringdatas[1]);
+            bitindex = Integer.parseInt(stringdatas[2]);
+        } else
+        {
+            return null;
+        }
+        dbwindex += index / 8;
+        bitindex += index % 8;
+        return stringdatas[0] + "." + dbwindex + "." + bitindex;
+    }
+    /**
+     * 鑾峰彇鍦板潃
+     *
+     */
+    public String getAddress() {
+      return   getAddress(this.addressIndex);
+    }
+
+
+    public void setAddressIndex(int addressindex) {
+        this.addressIndex = addressindex;
+    }
+}
diff --git a/nglib/src/ng/devices/PlcBitObject.java b/nglib/src/ng/devices/PlcBitObject.java
new file mode 100644
index 0000000..81ee4f6
--- /dev/null
+++ b/nglib/src/ng/devices/PlcBitObject.java
@@ -0,0 +1,127 @@
+package ng.devices;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+public class PlcBitObject {
+
+    // 璇ユā鍧楁暟鎹被鍨嬶紝鏁版嵁璧峰浣嶇疆
+    private String plcAddressBegin;
+    // 鏁版嵁鍦板潃闀垮害锛氱涓�鍙傛暟鍒版渶鍚庝竴涓弬鏁扮殑闀垮害
+    private int plcAddressLength;
+    //private ArrayList<PlcBitInfo> plcBitList;
+    private LinkedHashMap<String,PlcBitInfo> plcBitMap;
+
+    /**
+     * @return 鏁版嵁鍖哄紑濮嬪湴鍧�
+     */
+    public String getPlcAddressBegin() {
+        return plcAddressBegin;
+    }
+
+    /**
+     * @param plcAddressBegin 璁剧疆鏁版嵁鍖哄紑濮嬪湴鍧�
+     */
+    public void setPlcAddressBegin(String plcAddressBegin) {
+        this.plcAddressBegin = plcAddressBegin;
+    }
+
+    /**
+     * @return 鏁版嵁鍖� 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    public int getPlcAddressLength() {
+        return plcAddressLength;
+    }
+
+    /**
+     * @return 璁剧疆锛氭暟鎹尯 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    public void setPlcAddressLength(int plcAddressLength) {
+        this.plcAddressLength = plcAddressLength;
+    }
+
+    /**
+     * @return 鑾峰彇鍙傛暟瀹炰緥闆嗗悎
+     */
+    public LinkedHashMap<String,PlcBitInfo> getBitMap() {
+        return plcBitMap;
+    }
+
+    /**
+     * 鏍规嵁鍙傛暟鏍囪瘑 鑾峰彇鏌愪釜鍙傛暟瀹炰緥
+     *
+     * @param codeid 鍙傛暟鏍囪瘑
+     * @return 鑾峰彇鏌愪釜鍙傛暟瀹炰緥
+     */
+    public PlcBitInfo getPlcBit(String codeid) {
+        if (plcBitMap != null) {
+            /*for (PlcBitInfo plcbitInfo : plcBitList) {
+                if (plcbitInfo.getCodeId().equals(codeid))
+                    return plcbitInfo;
+            }*/
+            return plcBitMap.get(codeid);
+        } else
+        {
+            return null;
+        }
+    }
+
+    /**
+     * 鏍规嵁鍙傛暟鏍囪瘑 鑾峰彇鏌愪釜鍙傛暟瀹炰緥
+     *
+     * @param codeids 鍙傛暟鏍囪瘑
+     * @return 鑾峰彇鏌愪釜鍙傛暟瀹炰緥
+     */
+    public List<Boolean> getPlcBitValues(List<String> codeids) {
+        List<Boolean> arrayList = new ArrayList<>();
+        if (plcBitMap != null) {
+            for (String codeId : codeids) { // 鎸夌収浼犲叆鍙傛暟鐨勯『搴忛亶鍘�
+                    arrayList.add(plcBitMap.get(codeId).getValue());
+            }
+        }
+        return arrayList;
+    }
+
+
+    public List<String> getAddressListByCodeId(List<String> codeIdList) {
+        List<String> addressList = new ArrayList<>();
+        for (String codeId : codeIdList) {
+            addressList.add(plcBitMap.get(codeId).getAddress());
+        }
+        return addressList;
+    }
+
+
+    /**
+     * 娣诲姞鍙傛暟瀹炰緥
+     *
+     * @param param 鍙傛暟瀹炰緥
+     */
+    public void addPlcBit(PlcBitInfo param) {
+        if (plcBitMap != null) {
+            plcBitMap.put(param.getCodeId(), param);
+        }
+        else {
+            plcBitMap = new LinkedHashMap<String,PlcBitInfo>();
+            plcBitMap.put(param.getCodeId(),param);
+        }
+    }
+
+    /**
+     * 鏍规嵁PLC杩斿洖鐨勬暟鎹� 缁欏弬鏁板疄渚嬭祴鍊�
+     *
+     * @param plcValueArray PLC璇诲彇鍥炴潵鐨刡yte绫诲瀷鏁版嵁闆嗗悎
+     */
+    public void setPlcBitList(List<Boolean> plcValueArray) {
+        if (plcBitMap != null) {
+            Collection<PlcBitInfo> values=plcBitMap.values();
+            for (PlcBitInfo plcbitInfo : values) {
+                plcbitInfo.setValue(plcValueArray.get(plcbitInfo.getAddressIndex()));
+            }
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/nglib/src/ng/devices/PlcParameterInfo.java b/nglib/src/ng/devices/PlcParameterInfo.java
new file mode 100644
index 0000000..61c87f8
--- /dev/null
+++ b/nglib/src/ng/devices/PlcParameterInfo.java
@@ -0,0 +1,115 @@
+package ng.devices;
+
+public class PlcParameterInfo {
+    public PlcParameterInfo(String startAddress) {
+        this.startAddress = startAddress;
+    }
+
+    private String startAddress;
+    // 鍙傛暟鏍囪瘑
+    private String codeId;
+
+    // 鍙傛暟鍚嶇О
+    private String name;
+
+    // 璇诲彇 鍙傛暟鍊�
+    private String value;
+
+    // // 鍐欏叆 鍙傛暟鍊�
+    // private String writeValue;
+
+    // 鍙傛暟鍗曚綅
+    private String unit;
+
+    // 鍙傛暟鍊艰浆鎹㈢郴鏁�
+    private int ratio;
+
+    // 鍙傛暟鍦板潃
+    private int addressIndex;
+
+    // 鍙傛暟鍦板潃浣嶉暱搴�
+    private int addressLength;
+
+    public String getCodeId() {
+        return this.codeId;
+    }
+
+    public void setCodeId(String codeId) {
+        this.codeId = codeId;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    // public String getWriteValue() {
+    //     return this.writeValue;
+    // }
+
+    // public void setWriteValue(String writeValue) {
+    //     this.writeValue = writeValue;
+    // }
+
+    public String getUnit() {
+        return this.unit;
+    }
+
+    public void setUnit(String unit) {
+        this.unit = unit;
+    }
+
+    public int getAddressIndex() {
+        return this.addressIndex;
+    }
+
+    public void setAddressIndex(int addressindex) {
+        this.addressIndex = addressindex;
+    }
+
+    public int getAddressLength() {
+        return this.addressLength;
+    }
+
+    public void setAddressLength(int addresslength) {
+        this.addressLength = addresslength;
+    }
+
+    public int getRatio() {
+        return this.ratio;
+    }
+
+    public void setRatio(int ratio) {
+        this.ratio = ratio;
+    }
+
+    /**
+     * 鑾峰彇鍦板潃
+     *
+     * @param index 绱㈠紩鍦板潃
+     */
+    public String getAddress(int index) {
+        String[] stringdatas = this.startAddress.trim().split("\\.");
+        int addressLength = this.addressLength;
+        if (addressLength < 2) {
+            return null;
+        }
+        int wordindex = Integer.parseInt(stringdatas[1]) + index;
+        return stringdatas[0] + "." + wordindex;
+    }
+
+    public String getAddress() {
+        return getAddress(this.addressIndex);
+    }
+}
\ No newline at end of file
diff --git a/nglib/src/ng/devices/PlcParameterObject.java b/nglib/src/ng/devices/PlcParameterObject.java
new file mode 100644
index 0000000..84c6db0
--- /dev/null
+++ b/nglib/src/ng/devices/PlcParameterObject.java
@@ -0,0 +1,252 @@
+package ng.devices;
+
+import com.github.s7connector.impl.serializer.converter.StringConverter;
+import com.github.xingshuangs.iot.utils.IntegerUtil;
+import com.github.xingshuangs.iot.utils.ShortUtil;
+
+import java.lang.reflect.Array;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+public class PlcParameterObject {
+
+    // 璇ユā鍧楁暟鎹被鍨嬶紝鏁版嵁璧峰浣嶇疆
+    private String plcAddressBegin;
+    // 鏁版嵁鍦板潃闀垮害锛氱涓�鍙傛暟鍒版渶鍚庝竴涓弬鏁扮殑闀垮害
+    private int plcAddressLength;
+    private LinkedHashMap<String,PlcParameterInfo> plcParameterMap;
+
+
+    /**
+     * @return 鏁版嵁鍖哄紑濮嬪湴鍧�
+     */
+    public String getPlcAddressBegin() {
+        return plcAddressBegin;
+    }
+
+    /**
+     * @param plcAddressBegin 璁剧疆鏁版嵁鍖哄紑濮嬪湴鍧�
+     */
+    public void setPlcAddressBegin(String plcAddressBegin) {
+        this.plcAddressBegin = plcAddressBegin;
+    }
+
+    /**
+     * @return 鏁版嵁鍖� 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    public int getPlcAddressLength() {
+        return plcAddressLength;
+    }
+
+    /**
+     * @return 璁剧疆锛氭暟鎹尯 璇诲彇鎵�鏈夋暟鎹墍闇�鐨勯暱搴︼紙浠yte绫诲瀷涓哄熀鍑嗭級
+     */
+    public void setPlcAddressLength(int plcAddressLength) {
+        this.plcAddressLength = plcAddressLength;
+    }
+
+    /**
+     * @return 鑾峰彇鍙傛暟瀹炰緥闆嗗悎
+     */
+    public LinkedHashMap<String,PlcParameterInfo> getPlcParameterMap() {
+        return plcParameterMap;
+    }
+
+    /**
+     * 鏍规嵁鍙傛暟鏍囪瘑 鑾峰彇鏌愪釜鍙傛暟瀹炰緥
+     *
+     * @param codeid 鍙傛暟鏍囪瘑
+     * @return 鑾峰彇鏌愪釜鍙傛暟瀹炰緥
+     */
+    public PlcParameterInfo getPlcParameter(String codeid) {
+        if (plcParameterMap != null) {
+            return plcParameterMap.get(codeid);
+        } else {
+            return null;
+        }
+        /*if (plcParameterList != null) {
+            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
+                if (plcParameterInfo.getCodeId().equals(codeid))
+                    return plcParameterInfo;
+            }
+            return null;
+        } else
+            return null;*/
+    }
+
+
+    /**
+     * 鏍规嵁鍙傛暟鏍囪瘑 鑾峰彇鏌愪釜鍙傛暟瀹炰緥
+     *
+     * @param codeids 鍙傛暟鏍囪瘑
+     * @return 鑾峰彇鏌愪釜鍙傛暟瀹炰緥
+     */
+    public List<String> getPlcParameterValues(List<String> codeids) {
+        List<String> arrayList = new ArrayList<>();
+        if (plcParameterMap != null) {
+            /*Map<String, PlcParameterInfo> resultMap = new LinkedHashMap<>(); // 浣跨敤 LinkedHashMap 淇濈暀鎻掑叆椤哄簭
+            for (PlcParameterInfo plcParameterInfo : plcParameterList) {
+                if (codeids.contains(plcParameterInfo.getCodeId())) {
+                    resultMap.put(plcParameterInfo.getCodeId(), plcParameterInfo);
+                }
+            }*/
+            for (String codeId : codeids) { // 鎸夌収浼犲叆鍙傛暟鐨勯『搴忛亶鍘�
+                PlcParameterInfo plcParameterInfo = plcParameterMap.get(codeId);
+                if (plcParameterInfo != null) {
+                    arrayList.add(plcParameterInfo.getValue());
+                } else {
+                    arrayList.add(null); // 濡傛灉鎵句笉鍒板搴旂殑鍊硷紝娣诲姞 null
+                }
+            }
+        }
+        return arrayList;
+    }
+
+    /**
+     * 鏍规嵁鍙傛暟鏍囪瘑 鑾峰彇浼犲叆鍙傛暟鐨刾lc鍦板潃
+     *
+     * @param codeIdList 鍙傛暟鏍囪瘑
+     * @return 浼犲叆鍙傛暟鐨刾lc鍦板潃
+     */
+    public List<String> getAddressListByCodeId(List<String> codeIdList) {
+        List<String> addressList = new ArrayList<>();
+        if (plcParameterMap!=null)
+        {
+            for (String codeId : codeIdList) {
+                    String address = plcParameterMap.get(codeId).getAddress();
+                    if (address != null) {
+                        addressList.add(address);
+                    }
+        }
+        }
+        return addressList;
+    }
+
+
+    /**
+     * 娣诲姞鍙傛暟瀹炰緥
+     *
+     * @param param 鍙傛暟瀹炰緥
+     */
+    public void addPlcParameter(PlcParameterInfo param) {
+        if (plcParameterMap != null) {
+            plcParameterMap.put(param.getCodeId(), param);
+        }
+        else {
+            plcParameterMap =new  LinkedHashMap<String,PlcParameterInfo>();
+            plcParameterMap.put(param.getCodeId(), param);
+        }
+        /*if (plcParameterList != null)
+            plcParameterList.add(param);
+        else {
+            plcParameterList = new ArrayList<PlcParameterInfo>();
+            plcParameterList.add(param);
+        }*/
+    }
+
+    /**
+     * 鏍规嵁PLC杩斿洖鐨勬暟鎹� 缁欏弬鏁板疄渚嬭祴鍊�
+     *
+     * @param plcValueArray PLC璇诲彇鍥炴潵鐨刡yte绫诲瀷鏁版嵁闆嗗悎
+     */
+    public void setPlcParameterList(byte[] plcValueArray) {
+        if (plcParameterMap != null) {
+            Collection<PlcParameterInfo> values=  plcParameterMap.values();
+            for (PlcParameterInfo plcParameterInfo :values) {
+                byte[] valueList = new byte[plcParameterInfo.getAddressLength()];
+//                System.out.println(plcParameterInfo.getAddressLength());
+                for (int i = 0; i < plcParameterInfo.getAddressLength(); i++) {
+                    Array.setByte(valueList, i, plcValueArray[plcParameterInfo.getAddressIndex() + i]);
+                }
+                if (plcParameterInfo.getAddressLength() == 2) {
+                    plcParameterInfo.setValue(String.valueOf(ShortUtil.toUInt16(valueList)));
+                } else if (plcParameterInfo.getAddressLength() == 4) {
+                    plcParameterInfo.setValue(String.valueOf(IntegerUtil.toUInt32(valueList)));
+                }else if(plcParameterInfo.getAddressLength()==256){
+                    StringConverter converter = new StringConverter();
+                    String s="";
+                    String extract1 = converter.extract(s.getClass(),valueList, 0, 0);
+                    plcParameterInfo.setValue(extract1);
+                }else {
+                    plcParameterInfo.setValue((byteToHexString(valueList)));
+                }
+            }
+        }
+    }
+    /**
+     * 鎶婂啓鍏ュ�艰浆鍖栦负byte[]
+     * @param param 鍙傛暟瀹炰緥
+     * @param data 鍐欏叆鍊肩殑瀛楃绫诲瀷
+     */
+    public byte[] setValueToBytes(PlcParameterInfo param, String data) {
+        if (param.getAddressLength() == 2) {
+            return ShortUtil.toByteArray(Integer.parseInt(data));
+
+        } else if (param.getAddressLength() == 4) {
+
+            return IntegerUtil.toByteArray(Long.parseLong(data));
+        }
+        else if (param.getAddressLength() >10) {
+           return data.getBytes();
+        } else {
+            return data.getBytes();
+        }
+    }
+
+    /**
+     * short绫诲瀷杞琤yte[]
+     *
+     * @param s short绫诲瀷鍊�
+     */
+    public static byte[] short2byte(short s) {
+        byte[] b = new byte[2];
+        for (int i = 0; i < 2; i++) {
+            int offset = 16 - (i + 1) * 8; //璁$畻鍋忕Щ閲�
+            b[i] = (byte) ((s >> offset) & 0xff); //鎶�16浣嶅垎涓�2涓�8浣嶈繘琛屽垎鍒瓨鍌�
+        }
+        return b;
+    }
+
+    /**
+     * byte[]绫诲瀷杞瑂hort
+     *
+     * @param b byte[]绫诲瀷鍊�
+     */
+    public static short byte2short(byte[] b) {
+        short l = 0;
+        for (int i = 0; i < 2; i++) {
+            l <<= 8; //<<=鍜屾垜浠殑 +=鏄竴鏍风殑锛屾剰鎬濆氨鏄� l = l << 8
+            l |= (b[i] & 0xff); //鍜屼笂闈篃鏄竴鏍风殑  l = l | (b[i]&0xff)
+        }
+        return l;
+    }
+
+    /**
+     * byte[]绫诲瀷杞瑂hort
+     *
+     * @param b byte[]绫诲瀷鍊�
+     */
+    public static int byte2int(byte[] b) {
+        int l = 0;
+        for (int i = 0; i < 4; i++) {
+            l <<= 8; //<<=鍜屾垜浠殑 +=鏄竴鏍风殑锛屾剰鎬濆氨鏄� l = l << 8
+            l |= (b[3-i] & 0xff); //鍜屼笂闈篃鏄竴鏍风殑  l = l | (b[i]&0xff)
+        }
+        return l;
+    }
+    public static byte[] int2byte(int s){
+        byte[] b = new byte[2];
+        for(int i = 0; i < 4; i++){
+            int offset = 16 - (i+1)*8; //鍥犱负byte鍗�4涓瓧鑺傦紝鎵�浠ヨ璁$畻鍋忕Щ閲�
+            b[i] = (byte)((s >> offset)&0xff); //鎶�32浣嶅垎涓�4涓�8浣嶈繘琛屽垎鍒瓨鍌�
+        }
+        return b;
+    }
+    public static String byteToHexString(byte[] bytes) {
+        String str = new String(bytes, StandardCharsets.UTF_8).trim();
+        return str;
+    }
+}
\ No newline at end of file

--
Gitblit v1.8.0