From 325f387716802ea5198f37f03366ca0ccfec4849 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A6=82=E6=84=8F=20=E5=BD=AD?= <2417589739@qq.com> Date: Sat, 30 Mar 2024 19:17:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B2=E5=8F=A3=E9=80=9A=E8=AE=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 + .../bonait/bnframework/HBL/API/APIHelper.java | 535 ++++++++++++ .../bonait/bnframework/HBL/API/APIResult.java | 21 + .../bnframework/HBL/API/APIResultT.java | 21 + .../com/bonait/bnframework/HBL/API/Utils.java | 57 ++ .../HBL/Communication/CommBase.java | 44 + .../Communication/Modbus/ExceptionServer.java | 89 ++ .../Modbus/IExceptionHandling.java | 15 + .../Communication/Modbus/IModbusMaster.java | 10 + .../HBL/Communication/Modbus/IRead.java | 23 + .../HBL/Communication/Modbus/IWrite.java | 24 + .../Communication/Modbus/ModbusMaster.java | 622 ++++++++++++++ .../HBL/Communication/Siemens/CommHelper.java | 157 ++++ .../Communication/Siemens/SiemensHelper.java | 360 ++++++++ .../CustomView}/ShadowContainer.java | 3 +- .../bnframework/HBL/DataUtil/ByteLib.java | 81 ++ .../HBL/DataUtil/ByteTransDataFormat.java | 51 ++ .../bnframework/HBL/DataUtil/Convert.java | 108 +++ .../HBL/DataUtil/DataConvertLib.java | 244 ++++++ .../bnframework/HBL/DataUtil/FloatLib.java | 31 + .../bnframework/HBL/DataUtil/IntLib.java | 51 ++ .../HBL/DataUtil/NotifyPropVar.java | 37 + .../bnframework/HBL/DataUtil/ShortLib.java | 51 ++ .../HBL/Dialog/AlertDialogButton.java | 8 + .../HBL/Dialog/DialogActivity.java | 15 + .../bnframework/HBL/Dialog/DialogManager.java | 309 +++++++ .../bnframework/HBL/Dialog/DialogType.java | 7 + .../bnframework/HBL/Dialog/DialogView.java | 35 + .../bnframework/HBL/Dialog/IDialogAction.java | 6 + .../helper => HBL/Enum}/DataFormat.java | 2 +- .../com/bonait/bnframework/HBL/Executor.java | 43 + .../bnframework/HBL/Interface/IRun.java | 5 + .../helper/I => HBL/Interface}/IRunT.java | 2 +- .../HBL/Logs/IMessageLogNotify.java | 7 + .../bnframework/HBL/Logs/MessageLog.java | 62 ++ .../bonait/bnframework/HBL/NetworkUtils.java | 230 +++++ .../bnframework/HBL/Result/IResult.java | 30 + .../bnframework/HBL/Result/OperateResult.java | 78 ++ .../HBL/Result/OperateResultT.java | 88 ++ .../bnframework/HBL/Result/ResultCode.java | 38 + .../bnframework/HBL/Thread/IThread.java | 5 + .../HBL/Thread/IThreadComplete.java | 7 + .../bnframework/HBL/Thread/ThreadManager.java | 110 +++ .../bnframework/HBL/Thread/ThreadModel.java | 8 + .../bonait/bnframework/HBL/Trig/RTrig.java | 44 + .../com/bonait/bnframework/MainActivity.java | 28 +- .../bonait/bnframework/MainApplication.java | 2 - .../bnframework/business/ConfigData.java | 9 +- .../business/ExecuteTheRecipe.java | 206 ++--- .../bonait/bnframework/business/MainInit.java | 135 ++- .../bnframework/business/OrderServer.java | 27 +- .../bnframework/common/constant/DataBus.java | 2 +- .../common/helper/I/IMessageLogNotify.java | 13 - .../bnframework/common/helper/I/IRun.java | 5 - .../bnframework/common/helper/I/IThread.java | 7 - .../bnframework/common/helper/MQTT.java | 3 +- .../bnframework/common/helper/MessageLog.java | 89 -- .../common/helper/ModbusHelper.java | 20 + .../bnframework/common/helper/RTrig.java | 2 +- .../common/helper/ThreadManager.java | 75 -- .../common/helper/mode/ThreadModel.java | 9 - .../common/modbus/ModbusTcpHelper.java | 44 - .../common/modbus/ModbusTcpServer.java | 812 ------------------ .../bnframework/common/oss/OssHelper.java | 3 +- .../BottomNavigationMainActivity.java | 83 +- .../modules/home/adapter/wdsz_adapter.java | 1 - .../home/fragment/MakeGoodFragment.java | 7 +- .../fragment/from/GoodPeiFangActivity.java | 1 - .../home/fragment/from/ZdqxActivity.java | 2 +- .../mode/Silos_item_jiaoyan_fragment.java | 2 +- .../home/fragment/mode/silos_jiaoyan.java | 2 +- .../welcome/activity/LoginActivity.java | 4 +- app/src/main/res/drawable/bg_btn_cancel.xml | 27 + app/src/main/res/drawable/dialog_back.xml | 5 + .../res/drawable/dialog_error_title_back.xml | 5 + .../res/drawable/dialog_info_title_back.xml | 5 + .../res/drawable/dialog_warn_title_back.xml | 5 + app/src/main/res/layout/activity_dialog.xml | 84 ++ app/src/main/res/values/styles.xml | 18 + 79 files changed, 4186 insertions(+), 1336 deletions(-) create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/API/APIHelper.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/API/APIResult.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/API/APIResultT.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/API/Utils.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Communication/CommBase.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/ExceptionServer.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IExceptionHandling.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IModbusMaster.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IRead.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IWrite.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/ModbusMaster.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Communication/Siemens/CommHelper.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Communication/Siemens/SiemensHelper.java rename app/src/main/java/com/bonait/bnframework/{common => HBL/CustomView}/ShadowContainer.java (99%) create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ByteLib.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ByteTransDataFormat.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/DataUtil/Convert.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/DataUtil/DataConvertLib.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/DataUtil/FloatLib.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/DataUtil/IntLib.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/DataUtil/NotifyPropVar.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ShortLib.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Dialog/AlertDialogButton.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogActivity.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogManager.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogType.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogView.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Dialog/IDialogAction.java rename app/src/main/java/com/bonait/bnframework/{common/helper => HBL/Enum}/DataFormat.java (59%) create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Executor.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Interface/IRun.java rename app/src/main/java/com/bonait/bnframework/{common/helper/I => HBL/Interface}/IRunT.java (51%) create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Logs/IMessageLogNotify.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Logs/MessageLog.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/NetworkUtils.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Result/IResult.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Result/OperateResult.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Result/OperateResultT.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Result/ResultCode.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Thread/IThread.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Thread/IThreadComplete.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Thread/ThreadManager.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Thread/ThreadModel.java create mode 100644 app/src/main/java/com/bonait/bnframework/HBL/Trig/RTrig.java delete mode 100644 app/src/main/java/com/bonait/bnframework/common/helper/I/IMessageLogNotify.java delete mode 100644 app/src/main/java/com/bonait/bnframework/common/helper/I/IRun.java delete mode 100644 app/src/main/java/com/bonait/bnframework/common/helper/I/IThread.java delete mode 100644 app/src/main/java/com/bonait/bnframework/common/helper/MessageLog.java create mode 100644 app/src/main/java/com/bonait/bnframework/common/helper/ModbusHelper.java delete mode 100644 app/src/main/java/com/bonait/bnframework/common/helper/ThreadManager.java delete mode 100644 app/src/main/java/com/bonait/bnframework/common/helper/mode/ThreadModel.java delete mode 100644 app/src/main/java/com/bonait/bnframework/common/modbus/ModbusTcpHelper.java delete mode 100644 app/src/main/java/com/bonait/bnframework/common/modbus/ModbusTcpServer.java create mode 100644 app/src/main/res/drawable/bg_btn_cancel.xml create mode 100644 app/src/main/res/drawable/dialog_back.xml create mode 100644 app/src/main/res/drawable/dialog_error_title_back.xml create mode 100644 app/src/main/res/drawable/dialog_info_title_back.xml create mode 100644 app/src/main/res/drawable/dialog_warn_title_back.xml create mode 100644 app/src/main/res/layout/activity_dialog.xml diff --git a/app/build.gradle b/app/build.gradle index f1c442e0..e184a1a1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,6 +34,8 @@ android { } compileOptions { + //启用对新语言API的支持的标志 + coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } @@ -151,4 +153,8 @@ dependencies { implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4' implementation 'com.contrarywind:Android-PickerView:3.2.6' + + implementation 'com.github.xingshuangs:iot-communication:1.5.0' + + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6' } diff --git a/app/src/main/java/com/bonait/bnframework/HBL/API/APIHelper.java b/app/src/main/java/com/bonait/bnframework/HBL/API/APIHelper.java new file mode 100644 index 00000000..e4f7b836 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/API/APIHelper.java @@ -0,0 +1,535 @@ +package com.bonait.bnframework.HBL.API; + +import com.bonait.bnframework.HBL.Interface.IRunT; +import com.bonait.bnframework.HBL.Logs.MessageLog; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.Field; +import java.lang.reflect.Type; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; + +public class APIHelper { + + private static String key="64059261-1599-472c-b418-3c18b4e3883e"; + + /** + * 获取加密后的签名 + * @param t + * @return + */ + public static String GetSign(Object t,String key){ + AtomicReference retstr = new AtomicReference<>(""); + List fields = Arrays.asList(t.getClass().getFields()); + Collections.sort(fields, Comparator.comparing(Field::getName)); + fields.forEach(item->{ + if( item.getName().toUpperCase()!="sign".toUpperCase()){ + try { + if(item.get(t)!=null&&!item.get(t).toString().isEmpty()){ + Type type = item.getGenericType(); + String typeName = type.toString(); + switch(typeName){ + case "class java.util.Date": + case "class java.lang.String": + case "byte": + case "int": + case "float": + case "double": + case "long": + case "short": + case "boolean": + retstr.set(retstr.get() + item.getName() + "=" + item.get(t) + "&"); + break; + default: +// String a= new GsonBuilder().serializeNulls().create().toJson(item.get(t));//保留为空的属性 + String a= new Gson().toJson(item.get(t)); + retstr.set(retstr.get() + item.getName() + "=" + a + "&"); + break; + } + } + } catch (Exception e) { + } + } + }); + String tempSign="&key="+key; + if(retstr.get().length()>0){ + tempSign=retstr.get().substring(0, retstr.get().length()-1)+"&key="+key; + } +// String tempSign=retstr.get().substring(0, retstr.get().length()-1)+"&key="+key; + StringBuilder sb = new StringBuilder(); + try{ + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] digest = md.digest(tempSign.toUpperCase().getBytes()); + for (byte b : digest) { + sb.append(Integer.toHexString((b & 0xFF) | 0x100).substring(1,3)); + } + }catch (Exception e){ + + } + return sb.toString().toUpperCase(); + } + + public static String Post(String url, Map parameters, Map headers) throws IOException { + HttpURLConnection connection = null; + InputStream inputStream = null; + BufferedReader reader = null; + StringBuffer buffer = new StringBuffer(); + try { + URL requestUrl = new URL(url); + connection = (HttpURLConnection) requestUrl.openConnection(); + connection.setRequestMethod("POST"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + connection.setDoOutput(true); + connection.setDoInput(true); + // 设置header + if (headers != null) { + for (Map.Entry entry : headers.entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + } + // 设置参数 + if (parameters != null) { + StringBuilder stringBuilder = new StringBuilder(); + for (Map.Entry entry : parameters.entrySet()) { + stringBuilder.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8")).append("&"); + } + String params = stringBuilder.toString(); + byte[] postData = params.getBytes("UTF-8"); + connection.setRequestProperty("Content-Length", Integer.toString(postData.length)); + try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { + outputStream.write(postData); + } + } + // 获取响应结果 + int statusCode = connection.getResponseCode(); + if (statusCode == HttpURLConnection.HTTP_OK) { + inputStream = connection.getInputStream(); + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line; + while ((line = reader.readLine()) != null) { + buffer.append(line); + } + } else { + throw new IOException("服务器返回错误,状态码:" + statusCode); + } + }catch (Exception e){ + MessageLog.ShowError("POST 请求异常:"+e.toString()); + }finally { + // 关闭连接和流 + if (reader != null) { + reader.close(); + } + if (inputStream != null) { + inputStream.close(); + } + if (connection != null) { + connection.disconnect(); + } + } + return buffer.toString(); + } + public static String Post(String url, String body, Map headers) throws IOException { + HttpURLConnection connection = null; + InputStream inputStream = null; + BufferedReader reader = null; + StringBuffer buffer = new StringBuffer(); + try { + URL requestUrl = new URL(url); + connection = (HttpURLConnection) requestUrl.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");// "Fiddler" + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Charset", "UTF-8"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + connection.setDoOutput(true); + connection.setDoInput(true); + // 设置header + if (headers != null) { + for (Map.Entry entry : headers.entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + } + // 设置参数 + if (!body .isEmpty()) { + connection.setRequestProperty("Content-Length", Integer.toString(body.getBytes().length)); + try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { + outputStream.write(body.getBytes()); + } + } + // 获取响应结果 + int statusCode = connection.getResponseCode(); + if (statusCode == HttpURLConnection.HTTP_OK) { + inputStream = connection.getInputStream(); + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line; + while ((line = reader.readLine()) != null) { + buffer.append(line); + } + } else { + throw new IOException("服务器返回错误,状态码:" + statusCode); + } + }catch (Exception e){ + MessageLog.ShowError("POST 请求异常:"+e.toString()); + }finally { + // 关闭连接和流 + if (reader != null) { + reader.close(); + } + if (inputStream != null) { + inputStream.close(); + } + if (connection != null) { + connection.disconnect(); + } + } + return buffer.toString(); + } + public static String Post(String url, Object body, Map headers) throws IOException { + HttpURLConnection connection = null; + InputStream inputStream = null; + BufferedReader reader = null; + StringBuffer buffer = new StringBuffer(); + try { + URL requestUrl = new URL(url); + connection = (HttpURLConnection) requestUrl.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");// "Fiddler" + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Charset", "UTF-8"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + connection.setDoOutput(true); + connection.setDoInput(true); + // 设置header + if (headers != null) { + for (Map.Entry entry : headers.entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + } + // 设置参数 + if (body !=null) { + byte[] bytes = new Gson().toJson(body).getBytes(); + connection.setRequestProperty("Content-Length", Integer.toString(bytes.length)); + try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { + outputStream.write(bytes); + } + } + // 获取响应结果 + int statusCode = connection.getResponseCode(); + if (statusCode == HttpURLConnection.HTTP_OK) { + inputStream = connection.getInputStream(); + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line; + while ((line = reader.readLine()) != null) { + buffer.append(line); + } + } else { + throw new IOException("服务器返回错误,状态码:" + statusCode); + } + }catch (Exception e){ + MessageLog.ShowError("POST 请求异常:"+e.toString()); + }finally { + // 关闭连接和流 + if (reader != null) { + reader.close(); + } + if (inputStream != null) { + inputStream.close(); + } + if (connection != null) { + connection.disconnect(); + } + } + return buffer.toString(); + } + public static void Post(String url, Object body, IRunT callback) { + new Thread(()->{ + HttpURLConnection connection = null; + InputStream inputStream = null; + BufferedReader reader = null; + StringBuffer buffer = new StringBuffer(); + try { + URL requestUrl = new URL(url); + connection = (HttpURLConnection) requestUrl.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");// "Fiddler" + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Charset", "UTF-8"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + connection.setDoOutput(true); + connection.setDoInput(true); + + if(body!=null){ + //获取签名信息 + String sign = GetSign(body,key); + + //设置请求头 + connection.setRequestProperty("key", key); + connection.setRequestProperty("sign", sign); + + + //设置请求 body + byte[] bytes = new Gson().toJson(body).getBytes(); + connection.setRequestProperty("Content-Length", Integer.toString(bytes.length)); + try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { + outputStream.write(bytes); + } + } + + // 获取响应结果 + int statusCode = connection.getResponseCode(); + if (statusCode == HttpURLConnection.HTTP_OK) { + inputStream = connection.getInputStream(); + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line; + while ((line = reader.readLine()) != null) { + buffer.append(line); + } + } else { + throw new IOException("服务器返回错误,状态码:" + statusCode); + } + }catch (Exception e){ + MessageLog.ShowError("POST 请求异常:"+e.toString()); + return; + }finally { + try{ + // 关闭连接和流 + if (reader != null) reader.close(); + + if (inputStream != null) inputStream.close(); + + if (connection != null) connection.disconnect(); + + }catch(Exception e){ + MessageLog.ShowError("POST 请求异常:"+e.toString()); + return; + } + } + + try{ + APIResult res = new GsonBuilder().serializeNulls().create().fromJson(buffer.toString(), APIResult.class); + if(res!=null)if(callback!=null) callback.Run(res); + }catch(Exception e){ + + } + }).start(); + + } + public static void Post(String url, Object body,String signkey, IRunT callback) { + new Thread(()->{ + HttpURLConnection connection = null; + InputStream inputStream = null; + BufferedReader reader = null; + StringBuffer buffer = new StringBuffer(); + try { + URL requestUrl = new URL(url); + connection = (HttpURLConnection) requestUrl.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");// "Fiddler" + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Charset", "UTF-8"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + connection.setDoOutput(true); + connection.setDoInput(true); + + if(body!=null){ + //获取签名信息 + String sign = GetSign(body,signkey); + + MessageLog.ShowInfo("签名信息:"+sign); + + //设置请求头 + connection.setRequestProperty("key", signkey); +// connection.setRequestProperty("sign", sign); + + + //设置请求 body + byte[] bytes = new Gson().toJson(body).getBytes(); + connection.setRequestProperty("Content-Length", Integer.toString(bytes.length)); + try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { + outputStream.write(bytes); + } + } + + // 获取响应结果 + int statusCode = connection.getResponseCode(); + if (statusCode == HttpURLConnection.HTTP_OK) { + inputStream = connection.getInputStream(); + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line; + while ((line = reader.readLine()) != null) { + buffer.append(line); + } + } else { + throw new IOException("服务器返回错误,状态码:" + statusCode); + } + }catch (Exception e){ + MessageLog.ShowError("POST 请求异常:"+e.toString()); + return; + }finally { + try{ + // 关闭连接和流 + if (reader != null) reader.close(); + + if (inputStream != null) inputStream.close(); + + if (connection != null) connection.disconnect(); + + }catch(Exception e){ + MessageLog.ShowError("POST 请求异常:"+e.toString()); + return; + } + } + + try{ + APIResult res = new GsonBuilder().serializeNulls().create().fromJson(buffer.toString(), APIResult.class); + if(res!=null)if(callback!=null) callback.Run(res); + }catch(Exception e){ + MessageLog.ShowError("POST 请求异常:"+e.toString()); + } + }).start(); + + } + + public static void PostT(String url, Object body,String signkey ,IRunT> callback) { + new Thread(()->{ + HttpURLConnection connection = null; + InputStream inputStream = null; + BufferedReader reader = null; + StringBuffer buffer = new StringBuffer(); + try { + URL requestUrl = new URL(url); + connection = (HttpURLConnection) requestUrl.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");// "Fiddler" + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Charset", "UTF-8"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + connection.setDoOutput(true); + connection.setDoInput(true); + + if(body!=null){ + //获取签名信息 + String sign = GetSign(body,signkey); + + //设置请求头 + connection.setRequestProperty("key", signkey); + connection.setRequestProperty("sign", sign); + + + //设置请求 body + byte[] bytes = new Gson().toJson(body).getBytes(); + connection.setRequestProperty("Content-Length", Integer.toString(bytes.length)); + try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { + outputStream.write(bytes); + } + } + + // 获取响应结果 + int statusCode = connection.getResponseCode(); + if (statusCode == HttpURLConnection.HTTP_OK) { + inputStream = connection.getInputStream(); + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line; + while ((line = reader.readLine()) != null) { + buffer.append(line); + } + } else { + throw new IOException("服务器返回错误,状态码:" + statusCode); + } + }catch (Exception e){ + MessageLog.ShowError("POST 请求异常:"+e.toString()); + return; + }finally { + try{ + // 关闭连接和流 + if (reader != null) reader.close(); + if (inputStream != null) inputStream.close(); + if (connection != null) connection.disconnect(); + }catch(Exception e){ + MessageLog.ShowError("POST 请求异常:"+e.toString()); + return; + } + } + try{ + + APIResultT res = new GsonBuilder().serializeNulls().create().fromJson(buffer.toString(), APIResultT.class); + if(res!=null)if(callback!=null) callback.Run(res); + }catch(Exception e){ + MessageLog.ShowError("POST请求返回值解析异常,"+e.toString()); + } + }).start(); + + } + public static void get(String urlAdd,Map params,IRunT callback) { + new Thread(()->{ + try { + String ResponseAdd = BuildUrlWithParams(urlAdd,params);//请求地址和参数 + URL url = new URL(ResponseAdd); + HttpURLConnection Connection = (HttpURLConnection) url.openConnection(); + Connection.setRequestMethod("GET"); + Connection.setConnectTimeout(3000); + Connection.setReadTimeout(3000); + int responseCode = Connection.getResponseCode(); + if (responseCode == Connection.HTTP_OK) { + InputStream inputStream = Connection.getInputStream(); + ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(); + byte[] bytes = new byte[1024]; + int length = 0; + while ((length = inputStream.read(bytes)) != -1) { + arrayOutputStream.write(bytes, 0, length); + arrayOutputStream.flush();//强制释放缓冲区 + } + String s = arrayOutputStream.toString(); + if(callback!=null)callback.Run(s); + } else { + MessageLog.ShowError("get 请求失败"); + } + } catch (Exception e) { + MessageLog.ShowError(e); + } + }).start(); + } + + /** + * 请求参数拼接 + * @param Url 请求地址 + * @param params 请求参数 + * @return + */ + public static String BuildUrlWithParams(String Url,Map params){ + StringBuilder sb = new StringBuilder(Url); + if(params!=null&&!params.isEmpty()){ + sb.append("?"); + + params.forEach((key,value)->{ + sb.append(key).append("=").append(value).append("&"); + }); + + sb.deleteCharAt(sb.length()-1); + } + return sb.toString(); + } + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/API/APIResult.java b/app/src/main/java/com/bonait/bnframework/HBL/API/APIResult.java new file mode 100644 index 00000000..0e0e76d7 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/API/APIResult.java @@ -0,0 +1,21 @@ +package com.bonait.bnframework.HBL.API; + +import com.google.gson.GsonBuilder; + +public class APIResult { + public int statusCode ; + + public Object data ; + + public String succeeded ; + + public String errors ; + + public String extras ; + + public int timestamp ; + + public String toString(){ + return new GsonBuilder().serializeNulls().create().toJson(this);//保留为空的属性 + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/API/APIResultT.java b/app/src/main/java/com/bonait/bnframework/HBL/API/APIResultT.java new file mode 100644 index 00000000..23753a8e --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/API/APIResultT.java @@ -0,0 +1,21 @@ +package com.bonait.bnframework.HBL.API; + +import com.google.gson.GsonBuilder; + +public class APIResultT { + public int statusCode ; + + public T data ; + + public String succeeded ; + + public String errors ; + + public String extras ; + + public int timestamp ; + + public String toString(){ + return new GsonBuilder().serializeNulls().create().toJson(this);//保留为空的属性 + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/API/Utils.java b/app/src/main/java/com/bonait/bnframework/HBL/API/Utils.java new file mode 100644 index 00000000..34d201f9 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/API/Utils.java @@ -0,0 +1,57 @@ +package com.bonait.bnframework.HBL.API; + +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.cert.X509Certificate; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +public class Utils { + + /** + * 禁用SSL验证 + */ + public static void disableSSLCertChecking() { + try { + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + + @Override + public void checkClientTrusted(X509Certificate[] certs, String authType) { + } + + @Override + public void checkServerTrusted(X509Certificate[] certs, String authType) { + } + } + }; + + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, trustAllCerts, new SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + + // Create all-trusting host name verifier + HostnameVerifier allHostsValid = new HostnameVerifier() { + public boolean verify(String hostname, SSLSession session) { + return true; + } + }; + + // Install the all-trusting host verifier + HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Communication/CommBase.java b/app/src/main/java/com/bonait/bnframework/HBL/Communication/CommBase.java new file mode 100644 index 00000000..6a163d48 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Communication/CommBase.java @@ -0,0 +1,44 @@ +package com.bonait.bnframework.HBL.Communication; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.LineNumberReader; + +public class CommBase { + /** + * Ping PLC地址是否通畅 + * @param address + * @param pingTimes ping的次数 + * @param timeOut 超时时间 10 + * @return + */ + public boolean NetPing(String address, int pingTimes, int timeOut) { + Process process = null; + try { + process = Runtime.getRuntime().exec( "ping " + "-c " + pingTimes + " -w " + timeOut+ " "+address); + InputStreamReader r = new InputStreamReader(process.getInputStream()); + LineNumberReader returnData = new LineNumberReader(r); + String returnMsg=""; + String line = ""; + while ((line = returnData.readLine()) != null) { + System.out.println(line); + returnMsg += line; + } + + if(returnMsg.indexOf("100% packet loss")!=-1){ + System.out.println("与 " +address +" 连接不畅通."); + //ToastUtils.info("与 " +address +" 连接不畅通."); + return false; + } else{ + System.out.println("与 " +address +" 连接畅通."); + //ToastUtils.info("与 " +address +" 连接不畅通."); + return true; + } + } catch (IOException e) { + // e.printStackTrace(); + } + return false; + + } + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/ExceptionServer.java b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/ExceptionServer.java new file mode 100644 index 00000000..a9f7b415 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/ExceptionServer.java @@ -0,0 +1,89 @@ +package com.bonait.bnframework.HBL.Communication.Modbus; + +import com.bonait.bnframework.HBL.Logs.MessageLog; +import com.bonait.bnframework.HBL.Result.OperateResultT; +import com.licheedev.modbus4android.ModbusRespException; +import com.serotonin.modbus4j.exception.ModbusInitException; +import com.serotonin.modbus4j.exception.ModbusTransportException; + +import java.util.concurrent.ExecutionException; + +public class ExceptionServer { + + public ExceptionServer(String Address, int length,IExceptionHandling excpet) + { + try { + int add = GetAddress(Address); + if (add < 0) { + MessageLog.ShowError("地址解析失败=" + Address); + return; + } + if (excpet!=null) excpet.onSuccess(add); + } catch (InterruptedException e) { + MessageLog.ShowError("onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); + if (excpet!=null) excpet.onFailure(e.toString()); + } catch (ExecutionException e) { + MessageLog.ShowError("onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); + if (excpet!=null) excpet.onFailure(e.toString()); + } catch (ModbusTransportException e) { + MessageLog.ShowError("onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); + if (excpet!=null) excpet.onFailure(e.toString()); + } catch (ModbusInitException e) { + MessageLog.ShowError("onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); + if (excpet!=null) excpet.onFailure(e.toString()); + } catch (ModbusRespException e) { + MessageLog.ShowError("onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); + if (excpet!=null) excpet.onFailure(e.toString()); + } + } + + public int GetAddress(String address) { + if (address == null) return -1; + if (address.length() > 0) { + address = address.trim(); + try{ + if (address.toUpperCase().contains("M") &&address.toUpperCase().contains(".")&& address.length() >= 4) { + String[] res = address.substring(1).split("[.]"); + if (res != null && res.length == 2) { + int firstAdd = Integer.parseInt(res[0]); + int endAdd = Integer.parseInt(res[1]); + if (endAdd >= 0 && endAdd <= 7) { + return (firstAdd * 8) + 320 + endAdd; + } + } + } else if (address.toUpperCase().contains("I") && address.length() >= 4) { + String[] res = address.substring(1).split("[.]"); + if (res != null && res.length == 2) { + int firstAdd = Integer.parseInt(res[0]); + int endAdd = Integer.parseInt(res[1]); + if (endAdd >= 0 && endAdd <= 7) { + return (firstAdd * 8) + endAdd; + } + } + } else if ((address.toUpperCase().contains("VW") || address.toUpperCase().contains("VD")) && address.length() >= 3) { + String res = address.substring(2); + if (res != null) { + int tempAdd = Integer.parseInt(res); + return (tempAdd / 2) + 100; + } + }else if (address.toUpperCase().contains("M")&&address.length() >=2){ + return Integer.parseInt(address.substring(1))+4000; + }else if (address.toUpperCase().contains("X")&&address.length() >=2){ + int xadd = Integer.parseInt( address.substring(1)); + return (xadd / 10 * 8) + xadd % 10; + }else if (address.toUpperCase().contains("Y")&&address.length() >=2){ + int yadd = Integer.parseInt( address.substring(1)); + return ((yadd / 10 * 8) + yadd % 10) + 300; + }else if (address.toUpperCase().contains("D")&&address.length() >=2){ + return Integer.parseInt( address.substring(1)); + } + else { + return Integer.parseInt(address); + } + }catch (Exception e){ + MessageLog.ShowError(e); + } + } + return -1; + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IExceptionHandling.java b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IExceptionHandling.java new file mode 100644 index 00000000..8569475e --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IExceptionHandling.java @@ -0,0 +1,15 @@ +package com.bonait.bnframework.HBL.Communication.Modbus; + +import com.licheedev.modbus4android.ModbusRespException; +import com.serotonin.modbus4j.exception.ModbusInitException; +import com.serotonin.modbus4j.exception.ModbusTransportException; + +import java.util.concurrent.ExecutionException; + +public interface IExceptionHandling { + void onSuccess(int add)throws InterruptedException, ExecutionException, ModbusTransportException, + ModbusInitException, ModbusRespException; + + + void onFailure(String error); +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IModbusMaster.java b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IModbusMaster.java new file mode 100644 index 00000000..f8b3f32a --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IModbusMaster.java @@ -0,0 +1,10 @@ +package com.bonait.bnframework.HBL.Communication.Modbus; + +import com.bonait.bnframework.HBL.Result.OperateResult; + +public interface IModbusMaster { + OperateResult TcpConnect(String ip, int port); + OperateResult RtuConnect(String com, int baudRate); + boolean getConnected(); + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IRead.java b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IRead.java new file mode 100644 index 00000000..197ad8b4 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IRead.java @@ -0,0 +1,23 @@ +package com.bonait.bnframework.HBL.Communication.Modbus; + +import com.bonait.bnframework.HBL.Enum.DataFormat; +import com.bonait.bnframework.HBL.Result.OperateResultT; + +public interface IRead { + + OperateResultT ReadBool(String address, int length); + OperateResultT ReadBool(String address); + + OperateResultT ReadShort(String address, int length); + OperateResultT ReadShort(String address); + + OperateResultT ReadInt(String address, int length); + OperateResultT ReadInt(String address); + + OperateResultT ReadByte(String address, int length); + + OperateResultT ReadString(String address, int length); + + OperateResultT ReadFloat(String address, int length); + OperateResultT ReadFloat(String address); +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IWrite.java b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IWrite.java new file mode 100644 index 00000000..dde2fbc1 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/IWrite.java @@ -0,0 +1,24 @@ +package com.bonait.bnframework.HBL.Communication.Modbus; + +import com.bonait.bnframework.HBL.Result.OperateResult; +import com.bonait.bnframework.common.helper.I.IWriteCallBack; + +public interface IWrite { + OperateResult WriteBool(String address, boolean value); + OperateResult WriteBool(String address, boolean[] value); + OperateResult WriteBool(String address, boolean[] value, int slaveId); + + OperateResult WriteShort(String address, short value); + OperateResult WriteShort(String address, short[] value); + OperateResult WriteShort(String address, short[] value, int slaveId); + + OperateResult WriteInt(String address, int value); + OperateResult WriteInt(String address, int[] value); + OperateResult WriteInt(String address, int[] value, int slaveId); + + OperateResult WriteString(String address, String value, int slaveId); + + OperateResult WriteFloat(String address, float value); + OperateResult WriteFloat(String address, float[] value); + OperateResult WriteFloat(String address, float[] value, int slaveId); +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/ModbusMaster.java b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/ModbusMaster.java new file mode 100644 index 00000000..ecd4e6cb --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Modbus/ModbusMaster.java @@ -0,0 +1,622 @@ +package com.bonait.bnframework.HBL.Communication.Modbus; + +import static com.bonait.bnframework.HBL.DataUtil.DataConvertLib.ByteToShort; + +import com.bonait.bnframework.HBL.Communication.CommBase; +import com.bonait.bnframework.HBL.DataUtil.FloatLib; +import com.bonait.bnframework.HBL.DataUtil.IntLib; +import com.bonait.bnframework.HBL.DataUtil.ShortLib; +import com.bonait.bnframework.HBL.Enum.DataFormat; +import com.bonait.bnframework.HBL.Interface.IRunT; +import com.bonait.bnframework.HBL.Logs.MessageLog; +import com.bonait.bnframework.HBL.Result.OperateResult; +import com.bonait.bnframework.HBL.Result.OperateResultT; +import com.licheedev.modbus4android.ModbusCallback; +import com.licheedev.modbus4android.ModbusParam; +import com.licheedev.modbus4android.ModbusRespException; +import com.licheedev.modbus4android.ModbusWorker; +import com.licheedev.modbus4android.param.SerialParam; +import com.licheedev.modbus4android.param.TcpParam; +import com.serotonin.modbus4j.exception.ModbusInitException; +import com.serotonin.modbus4j.exception.ModbusTransportException; +import com.serotonin.modbus4j.msg.ReadCoilsResponse; +import com.serotonin.modbus4j.msg.ReadHoldingRegistersResponse; + +import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicReference; + +public class ModbusMaster implements IRead,IWrite ,IModbusMaster{ + + private boolean IsConnected=false; + + private ModbusWorker mw = new ModbusWorker(); + public boolean IsReconnection=true; + public DataFormat WriteDataFormat= DataFormat.ABCD; + + public DataFormat ReadDataFormat= DataFormat.BADC; + + public int SlaveId=1; + + @Override + public OperateResult TcpConnect(String ip, int port) { + try{ + MessageLog.ShowInfo("开始验证网络:"+ip ); + boolean status = false; + while (!status&&IsReconnection) { + try { + status =new CommBase().NetPing(ip,1,1);//status为0则代表通,为1则代表不通。 + Thread.sleep(1000); + } catch (Exception e) { + MessageLog.ShowInfo("设备 " + ip + " 网络验证失败"); + } + } + MessageLog.ShowInfo("开始连接Modbus TCP" ); + ModbusParam param= TcpParam.create(ip, port).setTimeout(1000).setRetries(0).setEncapsulated(false).setKeepAlive(true); + AtomicReference errorInfo=new AtomicReference<>(""); + while (IsConnected==false) + { + errorInfo.set(""); + mw.init(param, new ModbusCallback() { + @Override + public void onSuccess(com.serotonin.modbus4j.ModbusMaster modbusMaster) { + IsConnected=true; + MessageLog.ShowInfo("Modbus TCP 连接成功" ); + } + @Override + public void onFailure(Throwable tr) { + IsConnected = false; + errorInfo.set(tr.getMessage()); + MessageLog.ShowInfo("Modbus TCP 连接失败" ); + } + @Override + public void onFinally() { + + } + }); + if(!IsReconnection)break; + if(IsConnected==false) Thread.sleep(5000); + } + if(IsConnected)return OperateResult.CreateSuccess(); + else return OperateResult.CreateFailed(errorInfo.get()); + }catch(Exception ex){ + return OperateResult.CreateFailed(ex); + } + } + + @Override + public OperateResult RtuConnect(String com, int baudRate) { + try{ + MessageLog.ShowInfo("开始连接Modbus RTU" ); + ModbusParam param= SerialParam.create(com, baudRate) // 串口地址和波特率 + .setDataBits(8) // 数据位 + .setParity(0) // 校验位 + .setStopBits(1) // 停止位 + .setTimeout(500).setRetries(0); // 不重试 + AtomicReference errorInfo=new AtomicReference<>(""); + while (IsConnected==false) + { + mw.init(param, new ModbusCallback() { + @Override + public void onSuccess(com.serotonin.modbus4j.ModbusMaster modbusMaster) { + IsConnected=true; + MessageLog.ShowInfo("Modbus RTU 连接成功" ); + } + @Override + public void onFailure(Throwable tr) { + IsConnected = false; + errorInfo.set(tr.getMessage()); + MessageLog.ShowInfo("Modbus RTU 连接失败" ); + } + @Override + public void onFinally() { + + } + }); + if(!IsReconnection)break; + if(IsConnected==false) Thread.sleep(5000); + } + if(IsConnected)return OperateResult.CreateSuccess(); + else return OperateResult.CreateFailed(errorInfo.get()); + }catch(Exception ex){ + return OperateResult.CreateFailed(ex); + } + } + + @Override + public boolean getConnected() { + return IsConnected; + } + + public OperateResultT Read(String address, int length){ +// if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference>(); + try{ + String typeName= resultValue.get().Content.getClass().getCanonicalName(); + switch(typeName){ + case "java.lang.String": + resultValue.set((OperateResultT)ReadString(address,length)); + break; + case "java.lang.Byte": + resultValue.set((OperateResultT)ReadByte(address,1)); + break; + case "java.lang.Integer": + resultValue.set((OperateResultT)ReadInt(address)); + break; + case "java.lang.Float": + resultValue.set((OperateResultT)ReadFloat(address)); + break; + case "java.lang.Short": + resultValue.set((OperateResultT)ReadShort(address)); + break; + case "java.lang.Boolean": + resultValue.set((OperateResultT)ReadBool(address)); + break; + case "int[]": + resultValue.set((OperateResultT)ReadInt(address,length)); + break; + case "float[]": + resultValue.set((OperateResultT)ReadFloat(address,length)); + break; + case "short[]": + resultValue.set((OperateResultT)ReadShort(address,length)); + break; + case "boolean[]": + resultValue.set((OperateResultT)ReadBool(address,length)); + break; + default: + resultValue.set(OperateResultT.CreateFailedT("不匹配的数据类型:"+typeName)); + break; + } + }catch(Exception ex){ + resultValue.set(OperateResultT.CreateFailedT(ex)); + } +// if(result!=null)result.Run(resultValue.get()); + return resultValue.get(); + } + + public OperateResultT Read(String address){ +// if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + resultValue.set(Read(address,1)); + return resultValue.get(); + } + public OperateResult Write(String address,T value) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + AtomicReferenceresultValue=new AtomicReference<>(); + try{ + String typeName= value.getClass().getCanonicalName(); + switch(typeName){ + case "java.lang.String": + resultValue.set(WriteString(address,value.toString(),SlaveId)); + break; + case "java.lang.Integer": + resultValue.set(WriteInt(address,Integer.parseInt(value.toString()))); + break; + case "java.lang.Float": + resultValue.set(WriteFloat(address,Float.parseFloat(value.toString()))); + break; + case "java.lang.Short": + resultValue.set(WriteShort(address,Short.parseShort(value.toString()))); + break; + case "java.lang.Boolean": + resultValue.set(WriteBool(address,Boolean.parseBoolean(value.toString()))); + break; + case "int[]": + resultValue.set(WriteInt(address,(int[])value)); + break; + case "float[]": + resultValue.set(WriteFloat(address,(float[])value)); + break; + case "short[]": + resultValue.set(WriteShort(address,(short[])value)); + break; + case "boolean[]": + resultValue.set(WriteBool(address,(boolean[])value)); + break; + default: + resultValue.set(OperateResult.CreateFailed("不匹配的数据类型:"+typeName)); + break; + } + }catch(Exception ex){ + resultValue.set(OperateResult.CreateFailed(ex)); + } + return resultValue.get(); + } + + @Override + public OperateResultT ReadBool(String address, int length) { + if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + new ExceptionServer(address, length, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + ReadCoilsResponse res = mw.syncReadCoil(SlaveId, add, length); + boolean[] data = res.getBooleanData(); + boolean[] result = Arrays.copyOfRange(data, 0, length); + resultValue.set(OperateResultT.CreateSuccess(result)); + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResultT.CreateFailedT(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResultT ReadBool(String address) { + if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + ReadBool(address,1).OnSource((s)->{ + resultValue.set(OperateResultT.CreateSuccess(s.Content[0])); + }).OnFailed(s->{ + resultValue.set(OperateResultT.CreateFailedT(s.message)); + }); + return resultValue.get(); + } + + @Override + public OperateResultT ReadShort(String address, int length) { + if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + new ExceptionServer(address, length, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + ReadHoldingRegistersResponse res = mw.syncReadHoldingRegisters(SlaveId, add, length); + short[] data = res.getShortData(); + if (data.length == length) { + resultValue.set(OperateResultT.CreateSuccess(data)); + } + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResultT.CreateFailedT(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResultT ReadShort(String address) { + if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + ReadShort(address,1).OnSource((s)->{ + resultValue.set(OperateResultT.CreateSuccess(s.Content[0])); + }).OnFailed(s->{ + resultValue.set(OperateResultT.CreateFailedT(s.message)); + }); + return resultValue.get(); + } + @Override + public OperateResultT ReadInt(String address, int length) { + if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + new ExceptionServer(address, length, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + ReadHoldingRegistersResponse res = mw.syncReadHoldingRegisters(SlaveId, add, length * 2); + int[] tempValues= IntLib.ToInts(res.getData(),ReadDataFormat); + if(tempValues.length==length){ + resultValue.set(OperateResultT.CreateSuccess(tempValues)); + }else{ + resultValue.set(OperateResultT.CreateFailedT(address+",读取失败,返回长度和实际读取长度不匹配")); + } + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResultT.CreateFailedT(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResultT ReadInt(String address) { + if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + ReadInt(address,1).OnSource((s)->{ + resultValue.set(OperateResultT.CreateSuccess(s.Content[0])); + }).OnFailed(s->{ + resultValue.set(OperateResultT.CreateFailedT(s.message)); + }); + return resultValue.get(); + } + + @Override + public OperateResultT ReadByte(String address, int length) { + if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + new ExceptionServer(address, length, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + int tempLength=length; + if (length%2!=0){ + tempLength++; + } + ReadHoldingRegistersResponse res = mw.syncReadHoldingRegisters(SlaveId, add, tempLength ); + byte[] data = res.getData(); + if(data.length==tempLength){ + byte[] result = Arrays.copyOfRange(data, 0, length); + resultValue.set(OperateResultT.CreateSuccess(result)); + }else{ + resultValue.set(OperateResultT.CreateFailedT(address+",读取失败,返回长度和实际读取长度不匹配")); + } + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResultT.CreateFailedT(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResultT ReadString(String address, int length) { + if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + new ExceptionServer(address, length, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + ReadHoldingRegistersResponse res = mw.syncReadHoldingRegisters(SlaveId, add, length); + byte[] data = res.getData(); + try { + if (data.length ==length*2) { + resultValue.set(OperateResultT.CreateSuccess(new String(data, "UTF-8").trim())); + } + } catch (UnsupportedEncodingException ex) { + resultValue.set(OperateResultT.CreateFailedT(address+",读取失败,字符串解析失败:"+ex.toString())); + } + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResultT.CreateFailedT(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResultT ReadFloat(String address, int length) { + if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + new ExceptionServer(address, length, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + ReadHoldingRegistersResponse res = mw.syncReadHoldingRegisters(SlaveId, add, length*2); + float[] tempValues = FloatLib.ToFloats(res.getData(),ReadDataFormat); + if (tempValues.length == length) { + resultValue.set(OperateResultT.CreateSuccess(tempValues)); + }else{ + resultValue.set(OperateResultT.CreateFailedT(address+",读取失败,返回长度和实际读取长度不匹配")); + } + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResultT.CreateFailedT(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResultT ReadFloat(String address) { + if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} + AtomicReference>resultValue=new AtomicReference<>(); + ReadFloat(address,1).OnSource((s)->{ + resultValue.set(OperateResultT.CreateSuccess(s.Content[0])); + }).OnFailed(s->{ + resultValue.set(OperateResultT.CreateFailedT(s.message)); + }); + return resultValue.get(); + } + + @Override + public OperateResult WriteBool(String address, boolean value) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + return WriteBool(address,new boolean[]{value}); + } + + @Override + public OperateResult WriteBool(String address, boolean[] value) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + AtomicReferenceresultValue=new AtomicReference<>(); + new ExceptionServer(address, 1, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + mw.syncWriteCoils(SlaveId, add, value); + resultValue.set(OperateResult.CreateSuccess()); + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResult.CreateFailed(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResult WriteBool(String address, boolean[] value, int slaveId) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + AtomicReferenceresultValue=new AtomicReference<>(); + new ExceptionServer(address, 1, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + mw.syncWriteCoils(slaveId, add, value); + resultValue.set(OperateResult.CreateSuccess()); + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResult.CreateFailed(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResult WriteShort(String address, short value) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + return WriteShort(address, new short[]{value}); + } + + @Override + public OperateResult WriteShort(String address, short[] value) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + AtomicReferenceresultValue=new AtomicReference<>(); + new ExceptionServer(address, 1, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + mw.syncWriteRegisters(SlaveId, add, value); + resultValue.set(OperateResult.CreateSuccess()); + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResult.CreateFailed(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResult WriteShort(String address, short[] value, int slaveId) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + AtomicReferenceresultValue=new AtomicReference<>(); + new ExceptionServer(address, 1, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + mw.syncWriteRegisters(slaveId, add, value); + resultValue.set(OperateResult.CreateSuccess()); + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResult.CreateFailed(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResult WriteInt(String address, int value) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + return WriteInt(address, new int[]{value}); + } + + @Override + public OperateResult WriteInt(String address, int[] value) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + AtomicReferenceresultValue=new AtomicReference<>(); + new ExceptionServer(address, 1, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + short[] send=ShortLib.ToShorts(value,WriteDataFormat); + mw.syncWriteRegisters(SlaveId, add,send); + resultValue.set(OperateResult.CreateSuccess()); + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResult.CreateFailed(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResult WriteInt(String address, int[] value, int slaveId) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + AtomicReferenceresultValue=new AtomicReference<>(); + new ExceptionServer(address, 1, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + short[] send=ShortLib.ToShorts(value,WriteDataFormat); + mw. syncWriteRegisters(slaveId, add,send); + resultValue.set(OperateResult.CreateSuccess()); + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResult.CreateFailed(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResult WriteString(String address, String value, int slaveId) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + AtomicReferenceresultValue=new AtomicReference<>(); + new ExceptionServer(address, 1, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + byte[] bytes= value.getBytes(); + short[] send =ByteToShort(bytes); + mw.syncWriteRegisters(slaveId, add, send); + resultValue.set(OperateResult.CreateSuccess()); + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResult.CreateFailed(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResult WriteFloat(String address, float value) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + return WriteFloat(address, new float[]{value}); + } + + @Override + public OperateResult WriteFloat(String address, float[] value) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + AtomicReferenceresultValue=new AtomicReference<>(); + new ExceptionServer(address, 1, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + short[] send=ShortLib.ToShorts(value,WriteDataFormat); + mw.syncWriteRegisters(SlaveId, add, send); + resultValue.set(OperateResult.CreateSuccess()); + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResult.CreateFailed(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + + @Override + public OperateResult WriteFloat(String address, float[] value, int slaveId) { + if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} + AtomicReferenceresultValue=new AtomicReference<>(); + new ExceptionServer(address, 1, new IExceptionHandling() { + @Override + public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { + short[] send=ShortLib.ToShorts(value,WriteDataFormat); + mw.syncWriteRegisters(slaveId, add, send); + resultValue.set(OperateResult.CreateSuccess()); + } + + @Override + public void onFailure(String error){ + resultValue.set(OperateResult.CreateFailed(address+",读取异常:"+error)); + } + }); + return resultValue.get(); + } + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Communication/Siemens/CommHelper.java b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Siemens/CommHelper.java new file mode 100644 index 00000000..74c417c9 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Siemens/CommHelper.java @@ -0,0 +1,157 @@ +package com.bonait.bnframework.HBL.Communication.Siemens; + +import com.bonait.bnframework.HBL.DataUtil.Convert; +import com.bonait.bnframework.HBL.Interface.IRun; +import com.bonait.bnframework.HBL.Logs.MessageLog; +import com.bonait.bnframework.HBL.Result.OperateResult; +import com.bonait.bnframework.HBL.Result.OperateResultT; +import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType; + +public class CommHelper { + + private static CommHelper mInstance; //实例变量设置私有,防止直接通过类名访问 + + private CommHelper() { //默认构造函数私有,防止类外直接new创建对象 + } + + public static synchronized CommHelper get() { //静态同步方法作为唯一的实例对象获取方式 + if (mInstance == null) { + mInstance = new CommHelper(); + } + return mInstance; + } + private String IPAddress="127.0.0.1"; + public boolean IsConnected(){ + return siemens.IsConnected; + } + public IRun ConnectOk; + + public SiemensHelper siemens=new SiemensHelper(EPlcType.S200_SMART, IPAddress); + + public void Connect(){ + new Thread(new Runnable() { + @Override + public void run() { + MessageLog.ShowInfo("开始连接PLC"); + int tempFlag=0; + while (!siemens.checkConnected()){ + try{ + tempFlag++; + siemens=new SiemensHelper(EPlcType.S200_SMART, IPAddress); + siemens.connect(); + siemens.Delay(1000); + }catch (Exception e){ + if(tempFlag==1)MessageLog.ShowInfo("PLC连接失败:"+e.getMessage()); + siemens.Delay(1000); + } + } + if(ConnectOk!=null)ConnectOk.Run(); + siemens.IsConnected=true; + MessageLog.ShowInfo("PLC连接成功"); + } + }).start(); + } + + + + public void writePLC(String add,Object value){ + if(!IsConnected()) { + MessageLog.ShowInfo(add+":写入数据失败,连接已断开"); + return; + } + if(value==null) { + MessageLog.ShowInfo("writePLC:写入值为空"); + return; + } + try{ + if(add.toUpperCase().contains("VD")){ + Float tempVD= Float.parseFloat(value.toString()); + siemens.WriteFloat32(add,tempVD); + } + else if (add.toUpperCase().contains("VW")){ + Integer tempVW= Integer.parseInt(value.toString()); + siemens.WriteUInt16(add,tempVW); + } + else if (add.toUpperCase().contains("V")){ + Boolean tempV= Boolean.parseBoolean(value.toString()); + siemens.WriteBoolean(add,tempV); + } + }catch (Exception e){ + MessageLog.ShowInfo("writePLC:写入失败,"+e.getMessage()); + } + + } + + public Object readPLC(String add){ + try{ + if(add.toUpperCase().contains("VD")){ + return siemens.ReadFloat32(add); + } + else if (add.toUpperCase().contains("VW")||add.toUpperCase().contains("IW")||add.toUpperCase().contains("QW")){ + return siemens.ReadUInt16(add); + } + else if (add.toUpperCase().contains("V")){ + return siemens.ReadBoolean(add); + } + }catch (Exception e){ + MessageLog.ShowInfo("readPLC:读取失败,"+e.getMessage()); + } + return new Object(); + } + + public OperateResultT Read(String add){ + if(!IsConnected()) return OperateResultT.CreateFailedT(add+":读取数据失败,连接已断开"); + OperateResultT result = new OperateResultT<>(); + String typeName=result.Content.getClass() .getName(); + try{ + if(typeName.contains("Boolean")){ + return Convert.TryToGenericity(siemens.ReadBoolean(add)); + }else if(typeName.contains("Integer")){ + if(add.toUpperCase().contains("VD")){ + return Convert.TryToGenericity(siemens.ReadInt32(add)); + } + else if (add.toUpperCase().contains("VW")||add.toUpperCase().contains("IW")||add.toUpperCase().contains("QW")){ + return Convert.TryToGenericity(siemens.ReadUInt16(add)); + } + }else if(typeName.contains("Short")){ + return Convert.TryToGenericity(siemens.ReadInt16(add)); + }else if(typeName.contains("Float")){ + return Convert.TryToGenericity(siemens.ReadFloat32(add)); + }else{ + return OperateResultT.CreateFailedT(typeName+" 暂不支持的数据类型"); + } + }catch (Exception e){ + return OperateResultT.CreateFailedT(e); + } + return result; + } + + public OperateResult Write(String add, T value){ + if(!IsConnected()) return OperateResult.CreateFailed(add+":读取数据失败,连接已断开"); + if(value ==null) return OperateResult.CreateFailed(add+":写入值无效"); + String typeName=value.getClass() .getName(); + try{ + + if(typeName.contains("Boolean")){ + Convert.TryToGenericity(value).OnSource(s->{ siemens.WriteBoolean(add,s.Content);}); + }else if(typeName.contains("Integer")){ + if(add.toUpperCase().contains("VD")){ + Convert.TryToGenericity(value).OnSource(s->{ siemens.WriteInt32(add,s.Content);}); + } + else if (add.toUpperCase().contains("VW")){ + Convert.TryToGenericity(value).OnSource(s->{ siemens.WriteUInt16(add,s.Content);}); + } + }else if(typeName.contains("Short")){ + Convert.TryToGenericity(value).OnSource(s->{ siemens.WriteInt16(add,s.Content);}); + }else if(typeName.contains("Float")){ + Convert.TryToGenericity(value).OnSource(s->{ siemens.WriteFloat32(add,s.Content);}); + }else{ + return OperateResult.CreateFailed(typeName+" 暂不支持的数据类型"); + } + return OperateResult.CreateSuccess(); + }catch (Exception e){ + return OperateResult.CreateFailed(e); + } + } + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Communication/Siemens/SiemensHelper.java b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Siemens/SiemensHelper.java new file mode 100644 index 00000000..4db60e71 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Communication/Siemens/SiemensHelper.java @@ -0,0 +1,360 @@ +package com.bonait.bnframework.HBL.Communication.Siemens; + +import android.util.Log; + +import com.bonait.bnframework.HBL.Logs.MessageLog; +import com.github.xingshuangs.iot.exceptions.SocketRuntimeException; +import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType; +import com.github.xingshuangs.iot.protocol.s7.model.DataItem; +import com.github.xingshuangs.iot.protocol.s7.service.S7PLC; +import com.github.xingshuangs.iot.protocol.s7.utils.AddressUtil; +import com.github.xingshuangs.iot.utils.FloatUtil; +import com.github.xingshuangs.iot.utils.IntegerUtil; +import com.github.xingshuangs.iot.utils.ShortUtil; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class SiemensHelper extends S7PLC { + public Boolean IsConnected=false; + + public boolean CancelWrite=false; + + + public void Delay(long millis){ + try{ + Thread.sleep(millis); + }catch(InterruptedException e){ + + } + } + + public boolean ReadBoolean(String address){ + boolean result=false; + while(true){ + try { + result=this.readBoolean(address); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(1000); + } + } + return result; + } + + public List ReadBoolean(String... address) { + List result=new ArrayList<>(); + while(true){ + try { + result=this.readBoolean(Arrays.asList(address)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(1000); + } + } + return result; + } + + public short ReadInt16(String address) { + short result=0; + while(true){ + try { + DataItem dataItem = this.readS7Data(AddressUtil.parseByte(address, 2)); + result= ShortUtil.toInt16(dataItem.getData()); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(1000); + } + } + return result; + + } + + public List ReadInt16(String... address) { + List result=new ArrayList<>(); + while(true){ + try { + result=this.readInt16(Arrays.asList(address)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(1000); + } + } + + return result; + } + + public int ReadUInt16(String address) { + int result=0; + while(true){ + try { + DataItem dataItem = this.readS7Data(AddressUtil.parseByte(address, 2)); + result= ShortUtil.toUInt16(dataItem.getData()); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(1000); + } + } + return result; + } + + public List ReadUInt16(String... address) { + List result=new ArrayList<>(); + while(true){ + try { + result=this.readUInt16(Arrays.asList(address)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(1000); + } + } + return result; + } + + public int ReadInt32(String address) { + int result=0; + while(true){ + try { + DataItem dataItem = this.readS7Data(AddressUtil.parseByte(address, 4)); + result= IntegerUtil.toInt32(dataItem.getData()); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(1000); + } + } + return result; + } + + public List ReadInt32(String... address) { + List result=new ArrayList<>(); + while(true){ + try { + result=this.readInt32(Arrays.asList(address)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(1000); + } + } + return result; + } + + public float ReadFloat32(String address) { + float result=0f; + while(true){ + try { + DataItem dataItem = this.readS7Data(AddressUtil.parseByte(address, 4)); + result= FloatUtil.toFloat32(dataItem.getData()); + + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(1000); + } + } + return result; + } + + public List ReadFloat32(String... address) { + List result=new ArrayList<>(); + while(true){ + try { + result=this.readFloat32(Arrays.asList(address)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(1000); + } + } + return result; + } + + public void WriteBoolean(String address, boolean data) { + if(!IsConnected){ + MessageLog.ShowInfo(address+":写入数据失败,连接已断开"); + return; + } + while (true) { + try { + this.writeS7Data(AddressUtil.parseBit(address), DataItem.createReqByBoolean(data)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(100); + if(CancelWrite)break; + } + catch (Exception e){ + MessageLog.ShowError("WriteBoolean 写入异常:"+e.toString()); + break; + } + } + } + + public void WriteUInt16(String address, int data) { + if(!IsConnected){ + MessageLog.ShowInfo(address+":写入数据失败,连接已断开"); + return; + } + while (true) { + try { + this.writeByte(address, ShortUtil.toByteArray(data)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(100); + if(CancelWrite)break; + } + catch (Exception e){ + MessageLog.ShowError("WriteUInt16 写入异常:"+e.toString()); + break; + } + } + } + + public void WriteInt16(String address, short data) { + if(!IsConnected){ + MessageLog.ShowInfo(address+":写入数据失败,连接已断开"); + return; + } + while (true) { + try { + Log.e("info","准备写入数据:"+data); + this.writeByte(address, ShortUtil.toByteArray(data)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + Log.e("socketException","写入:"+data+"失败"); + this.close(); + IsConnected=false; + Delay(100); + if(CancelWrite)break; + } + catch (Exception e){ + MessageLog.ShowError("WriteInt16 写入异常:"+e.toString()); + break; + } + } + } + + public void WriteUInt32(String address, long data) { + if(!IsConnected){ + MessageLog.ShowInfo(address+":写入数据失败,连接已断开"); + return; + } + while (true) { + try { + this.writeByte(address, IntegerUtil.toByteArray(data)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(100); + if(CancelWrite)break; + } + catch (Exception e){ + MessageLog.ShowError("WriteUInt32 写入异常:"+e.toString()); + break; + } + } + } + + public void WriteInt32(String address, int data) { + if(!IsConnected){ + MessageLog.ShowInfo(address+":写入数据失败,连接已断开"); + return; + } + while (true) { + try { + this.writeByte(address, IntegerUtil.toByteArray(data)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(100); + if(CancelWrite)break; + } + catch (Exception e){ + MessageLog.ShowError("WriteInt32 写入异常:"+e.toString()); + break; + } + } + } + + public void WriteFloat32(String address, float data) { + if(!IsConnected){ + MessageLog.ShowInfo(address+":写入数据失败,连接已断开"); + return; + } + while (true) { + try { + this.writeByte(address, FloatUtil.toByteArray(data)); + IsConnected=true; + break; + } + catch(SocketRuntimeException ex){ + this.close(); + IsConnected=false; + Delay(100); + if(CancelWrite)break; + } + catch (Exception e){ + MessageLog.ShowError("WriteFloat32 写入异常:"+e.toString()); + break; + } + } + } + + public SiemensHelper(EPlcType PlcType, String ip){ + super(PlcType, ip); + } + +} diff --git a/app/src/main/java/com/bonait/bnframework/common/ShadowContainer.java b/app/src/main/java/com/bonait/bnframework/HBL/CustomView/ShadowContainer.java similarity index 99% rename from app/src/main/java/com/bonait/bnframework/common/ShadowContainer.java rename to app/src/main/java/com/bonait/bnframework/HBL/CustomView/ShadowContainer.java index 5927b76c..c6c885be 100644 --- a/app/src/main/java/com/bonait/bnframework/common/ShadowContainer.java +++ b/app/src/main/java/com/bonait/bnframework/HBL/CustomView/ShadowContainer.java @@ -1,4 +1,4 @@ -package com.bonait.bnframework.common; +package com.bonait.bnframework.HBL.CustomView; import android.content.Context; import android.content.res.TypedArray; @@ -211,4 +211,3 @@ public class ShadowContainer extends ViewGroup { } - diff --git a/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ByteLib.java b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ByteLib.java new file mode 100644 index 00000000..42f0d3aa --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ByteLib.java @@ -0,0 +1,81 @@ +package com.bonait.bnframework.HBL.DataUtil; + + +import com.bonait.bnframework.HBL.Enum.DataFormat; + +public class ByteLib { + + public static byte[] ToBytes(short value, DataFormat df) { + byte[] b = new byte[2]; + b[0]=(byte)((value>>8)&0xff); + b[1]=(byte)((value>>0)&0xff); + return new ByteTransDataFormat().ByteTransDataFormat2(b,df,0); + } + + public static byte[] ToBytes(short[] value,DataFormat df) { + byte[] b = new byte[value.length*2]; + for (int i = 0; i < value.length; i++) + { + b[i*2]=(byte)((value[i]>>8)&0xff); + b[i*2+1]=(byte)((value[i]>>0)&0xff); + } + return new ByteTransDataFormat().ByteTransDataFormat2(b,df,0); + } + + public static byte[] ToBytes(float value,DataFormat df) { + int tempValue = Float.floatToRawIntBits(value); + byte[] b = new byte[4]; + b[0]=(byte)((tempValue>>24)&0xff); + b[1]=(byte)((tempValue>>16)&0xff); + b[2]=(byte)((tempValue>>8)&0xff); + b[3]=(byte)((tempValue>>0)&0xff); + return new ByteTransDataFormat().ByteTransDataFormat4(b,df,0); + } + + public static byte[] ToBytes(float[] value,DataFormat df) { + byte[] b = new byte[value.length*4]; + for (int i=0;i>24)&0xff); + b[i*4+1]=(byte)((tempValue>>16)&0xff); + b[i*4+2]=(byte)((tempValue>>8)&0xff); + b[i*4+3]=(byte)((tempValue>>0)&0xff); + } + return new ByteTransDataFormat().ByteTransDataFormat4(b,df,0); + } + + public static byte[] ToBytes(int value,DataFormat df) { + byte[] b = new byte[4]; + b[0]=(byte)((value>>24)&0xff); + b[1]=(byte)((value>>16)&0xff); + b[2]=(byte)((value>>8)&0xff); + b[3]=(byte)((value>>0)&0xff); + return new ByteTransDataFormat().ByteTransDataFormat4(b,df,0); + } + + public static byte[] ToBytes(int[] value,DataFormat df) { + byte[] b = new byte[value.length*4]; + for (int i=0;i>24)&0xff); + b[i*4+1]=(byte)((value[i]>>16)&0xff); + b[i*4+2]=(byte)((value[i]>>8)&0xff); + b[i*4+3]=(byte)((value[i]>>0)&0xff); + } + return new ByteTransDataFormat().ByteTransDataFormat4(b,df,0); + } + + public static boolean GetBit(byte value,int offset) + { + if (offset > 8 || offset < 1) return false; + return (value & 1 << offset - 1) == 0 ? false : true; + } + + public static byte SetBit(byte value,int offset, boolean val) + { + if (offset > 8 || offset < 1) return value; + int ConvertValue = 1 << offset - 1; + return (byte)(val ? value | ConvertValue : value & ~ConvertValue); + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ByteTransDataFormat.java b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ByteTransDataFormat.java new file mode 100644 index 00000000..1f43c500 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ByteTransDataFormat.java @@ -0,0 +1,51 @@ +package com.bonait.bnframework.HBL.DataUtil; + + +import com.bonait.bnframework.HBL.Enum.DataFormat; + +public class ByteTransDataFormat { + public byte[] ByteTransDataFormat2(byte[] data, DataFormat df, int offset ){ + if (offset+2<2) return new byte[2]; + byte[] numArray = new byte[2]; + if (df==DataFormat.ABCD||df==DataFormat.BADC){ + numArray[0] = data[offset+1]; + numArray[1] = data[offset]; + } + else { + numArray[0] = data[offset]; + numArray[1] = data[offset+1]; + } + return numArray; + } + + public byte[] ByteTransDataFormat4(byte[] data, DataFormat df,int offset ){ + if (offset+4<4) return new byte[4]; + byte[] numArray = new byte[4]; + if (df==DataFormat.ABCD){ + numArray[0] = data[offset+3]; + numArray[1] = data[offset+2]; + numArray[2] = data[offset+1]; + numArray[3] = data[offset]; + } + else if (df==DataFormat.BADC){ + numArray[0] = data[offset+2]; + numArray[1] = data[offset+3]; + numArray[2] = data[offset]; + numArray[3] = data[offset+1]; + } + else if(df==DataFormat.CDAB){ + numArray[0] = data[offset+1]; + numArray[1] = data[offset]; + numArray[2] = data[offset+3]; + numArray[3] = data[offset+2]; + } + else if(df==DataFormat.DCBA){ + numArray[0] = data[offset]; + numArray[1] = data[offset+1]; + numArray[2] = data[offset+2]; + numArray[3] = data[offset+3]; + } + return numArray; + } +} + diff --git a/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/Convert.java b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/Convert.java new file mode 100644 index 00000000..59a98ebb --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/Convert.java @@ -0,0 +1,108 @@ +package com.bonait.bnframework.HBL.DataUtil; + + +import com.alibaba.fastjson.TypeReference; +import com.bonait.bnframework.HBL.Result.OperateResultT; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +public class Convert { + public static OperateResultT TryToBoolean(Object value){ + if(value==null) return OperateResultT.CreateFailedT("TryToBoolean:转换对象为空"); + try{ + return OperateResultT.CreateSuccess(Boolean.parseBoolean(value.toString())); + }catch (Exception e) { + return OperateResultT.CreateFailedT(e); + } + } + + public static OperateResultT TryToInt(Object value){ + if(value==null) return OperateResultT.CreateFailedT("TryToInt:转换对象为空"); + try{ + return OperateResultT.CreateSuccess(Integer.parseInt(value.toString())); + }catch (Exception e) { + return OperateResultT.CreateFailedT(e); + } + } + + public static OperateResultT TryToShort(Object value){ + if(value==null) return OperateResultT.CreateFailedT("TryToShort:转换对象为空"); + try{ + return OperateResultT.CreateSuccess(Short.parseShort(value.toString())); + }catch (Exception e) { + return OperateResultT.CreateFailedT(e); + } + } + + public static OperateResultT TryToFloat(Object value){ + if(value==null) return OperateResultT.CreateFailedT("TryToFloat:转换对象为空"); + try{ + return OperateResultT.CreateSuccess(Float.parseFloat(value.toString())); + }catch (Exception e) { + return OperateResultT.CreateFailedT(e); + } + } + + public static OperateResultT TryToGenericity( Object value){ + if(value==null) return OperateResultT.CreateFailedT("TryToGenericity:转换对象为空"); + try{ + return OperateResultT.CreateSuccess((T)value); + }catch (Exception e) { + return OperateResultT.CreateFailedT(e); + } + } + +// public static OperateResultT TryToNumber(Object value,Class type){ +// if(value==null) return OperateResultT.CreateFailedT("TryToGenericity:转换对象为空"); +// try{ +// String temp = value.toString(); +// if(type==Integer.TYPE){ +// return OperateResultT.CreateSuccess((T)Integer.valueOf(temp)); +// }else if (type==Short.TYPE){ +// return OperateResultT.CreateSuccess((T)Short.valueOf(temp)); +// }else if (type==Byte.TYPE){ +// return OperateResultT.CreateSuccess((T)Byte.valueOf(temp)); +// }else if (type==Float.TYPE){ +// return OperateResultT.CreateSuccess((T)Float.valueOf(temp)); +// }else if (type==Long.TYPE){ +// return OperateResultT.CreateSuccess((T)Long.valueOf(temp)); +// }else if (type==Double.TYPE){ +// return OperateResultT.CreateSuccess((T)Double.valueOf(temp)); +// }else if (type.getName().contains(Boolean.TYPE.getName())){ +// return OperateResultT.CreateSuccess((T)Boolean.valueOf(temp)); +// }else if (type.getName().contains(String.class.getName())){ +// return OperateResultT.CreateSuccess((T)temp); +// } +// return OperateResultT.CreateSuccess((T)value); +// }catch (Exception e) { +// return OperateResultT.CreateFailedT(e); +// } +// } + + public static OperateResultT fromJson(Object value, Class clazz) { + if(value==null) return OperateResultT.CreateFailedT("TryToBoolean:转换对象为空"); + try{ + Gson gson = new GsonBuilder().create(); + String temp = gson.toJson(value); + T arr = gson.fromJson(temp, clazz); + if(arr!=null)return OperateResultT.CreateSuccess( arr ); + else return OperateResultT.CreateFailedT("返回对象为空"); + }catch (Exception e) { + return OperateResultT.CreateFailedT(e); + } + } + + public static OperateResultT fromJson(String value, Class clazz) { + if(value==null||value.isEmpty()) return OperateResultT.CreateFailedT("TryToBoolean:转换对象为空"); + try{ + Gson gson = new GsonBuilder().create(); + T arr = gson.fromJson(value, clazz); + if(arr!=null)return OperateResultT.CreateSuccess( arr); + else return OperateResultT.CreateFailedT("返回对象为空"); + }catch (Exception e) { + return OperateResultT.CreateFailedT(e); + } + } + + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/DataConvertLib.java b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/DataConvertLib.java new file mode 100644 index 00000000..2e4198fe --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/DataConvertLib.java @@ -0,0 +1,244 @@ +package com.bonait.bnframework.HBL.DataUtil; + + + + +import com.bonait.bnframework.HBL.Enum.DataFormat; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; + +public class DataConvertLib { + + /*** + * 字节数组转换成浮点数 + * @param ,需要转换的字节 + * @param ,转换的数据格式 + * @return + */ + public static Float BytesToFloat(byte[] buffers, DataFormat df) { + if (buffers.length == 4) { + byte[] bytes = new byte[4]; + if (df == DataFormat.ABCD) { + bytes[0] = buffers[3]; + bytes[1] = buffers[2]; + bytes[2] = buffers[1]; + bytes[3] = buffers[0]; + } else if (df == DataFormat.CDAB) { + bytes[0] = buffers[1]; + bytes[1] = buffers[0]; + bytes[2] = buffers[3]; + bytes[3] = buffers[2]; + } else if (df == DataFormat.BADC) { + bytes[0] = buffers[2]; + bytes[1] = buffers[3]; + bytes[2] = buffers[0]; + bytes[3] = buffers[1]; + } else if (df == DataFormat.DCBA) { + bytes[0] = buffers[0]; + bytes[1] = buffers[1]; + bytes[2] = buffers[2]; + bytes[3] = buffers[3]; + } + return ByteBuffer.wrap(bytes).getFloat(); + } + return 0.0f; + } + + /** + * 字节数组转换成整形 + * @param ,需要转换的字节数组 + * @param ,转换的数据格式 + * @return + */ + public static Integer BytesToInt(byte[] buffers, DataFormat df) { + if (buffers.length == 4) { + byte[] bytes = new byte[4]; + if (df == DataFormat.ABCD) { + bytes[0] = buffers[3]; + bytes[1] = buffers[2]; + bytes[2] = buffers[1]; + bytes[3] = buffers[0]; + } else if (df == DataFormat.CDAB) { + bytes[0] = buffers[1]; + bytes[1] = buffers[0]; + bytes[2] = buffers[3]; + bytes[3] = buffers[2]; + } else if (df == DataFormat.BADC) { + bytes[0] = buffers[2]; + bytes[1] = buffers[3]; + bytes[2] = buffers[0]; + bytes[3] = buffers[1]; + } else if (df == DataFormat.DCBA) { + bytes[0] = buffers[0]; + bytes[1] = buffers[1]; + bytes[2] = buffers[2]; + bytes[3] = buffers[3]; + } + return ByteBuffer.wrap(bytes).getInt(); + } + return 0; + } + + /** + * 32位整数转换成字节 + * @param ,number + * @return + */ + public static byte[] IntToByte(int number) { + int temp = number; + byte[] b = new byte[4]; + for (int i = 0; i < b.length; i++) { + b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位 + temp = temp >> 8; // 向右移8位 + } + return b; + } + + /** + * 32位整形转换成16位整数数组 + * @param ,value + * @return + */ + public static short[] IntToShorts(int value) { + short[] res = new short[2]; + int temp = value; + byte[] b = new byte[4]; + for (int i = 0; i < b.length; i++) { + b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位 + temp = temp >> 8; // 向右移8位 + } + for (int i = 0; i < res.length; i++) { + short s0 = (short) (b[i * 2] & 0xff);// 最低位 + short s1 = (short) (b[i * 2 + 1] & 0xff); + s1 <<= 8; + res[i] = (short) (s0 | s1); + } + return res; + } + + public static String GetString(short[] src, int start, int len) throws UnsupportedEncodingException { + short[] temp = new short[len]; + for (int i = 0; i < len; i++) { + temp[i] = src[i + start]; + } + byte[] bytesTemp = shorts2Bytes(temp); + for (int i = 0; i < bytesTemp.length; i++) { + byte b = bytesTemp[i]; + } + String str = new String(bytesTemp, "UTF-8"); + return str; + } + + public static short[] ByteToShort(byte[] bytes) { + + int len=bytes.length; + if (bytes.length%2!=0) len++; + byte[] tempBytes=new byte[len]; + short[] result = new short[len/2]; + for (int i=0;i> 8); + } + return byteValue; + } + + public static int GetAddress(String address) { + if (address == null) return -1; + if (address.length() > 0) { + address = address.trim(); + if (address.toUpperCase().contains("M") && address.length() >= 4) { + String[] res = address.substring(1).split("[.]"); + if (res != null && res.length == 2) { + try { + int firstAdd = Integer.parseInt(res[0]); + int endAdd = Integer.parseInt(res[1]); + if (endAdd >= 0 && endAdd <= 7) { + return (firstAdd * 8) + 320 + endAdd; + } + } catch (NumberFormatException e) { + return -1; + } + } + } else if (address.toUpperCase().contains("I") && address.length() >= 4) { + String[] res = address.substring(1).split("[.]"); + if (res != null && res.length == 2) { + try { + int firstAdd = Integer.parseInt(res[0]); + int endAdd = Integer.parseInt(res[1]); + if (endAdd >= 0 && endAdd <= 7) { + return (firstAdd * 8) + endAdd; + } + } catch (NumberFormatException e) { + return -1; + } + } + } else if ((address.toUpperCase().contains("VW") || address.toUpperCase().contains("VD")) && address.length() >= 3) { + String res = address.substring(2); + if (res != null) { + try { + int tempAdd = Integer.parseInt(res); + return (tempAdd / 2) + 100; + } catch (NumberFormatException e) { + return -1; + } + } + }else if (address.toUpperCase().contains("GI") &&address.length() >=3){ + String res = address.substring(2); + if (res != null) { + try { + return Integer.parseInt(res); + } catch (NumberFormatException e) { + return -1; + } + } + } + else { + try { + return Integer.parseInt(address); + } catch (NumberFormatException e) { + return -1; + } + } + } + return -1; + } + + + /** + * 获取布尔位地址信息 + * 列:M2.5 = getBitSingleAdd("M",2,5); + * + * @param Prefix 地址标头 + * @param startAdd 起始地址编号 + * @param num 要获取的第几位数量 + * @return + */ + public static String getBitSingleAdd(String Prefix, int startAdd, int num) { + if (num > 0) { + int FirstAdd = num / 8; + int EndAdd = num % 8; + if (EndAdd == 0) { + FirstAdd--; + EndAdd = 7; + } else { + EndAdd--; + } + return Prefix + FirstAdd + startAdd + "." + EndAdd; + } + return ""; + } + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/FloatLib.java b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/FloatLib.java new file mode 100644 index 00000000..2b1103bf --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/FloatLib.java @@ -0,0 +1,31 @@ +package com.bonait.bnframework.HBL.DataUtil; + + + + +import com.bonait.bnframework.HBL.Enum.DataFormat; + +import java.nio.ByteBuffer; + +public class FloatLib { + public static float ToFloat(byte[] bytes, DataFormat df) { + byte[] res= new ByteTransDataFormat().ByteTransDataFormat4(bytes,df,0); + return ByteBuffer.wrap(res).getFloat(); + } + + public static float[] ToFloats(byte[] bytes, DataFormat df) { + byte[] tempBytes=new byte[bytes.length]; + if (bytes.length%4!=0) + { + int offset=4-bytes.length%4; + tempBytes=new byte[bytes.length+offset]; + } + for (int i=0;i 32 || offset < 1) return false; + return (value & 1 << offset - 1) == 0 ? false : true; + } + + public static int SetBit(int value,int offset, boolean val) + { + if (offset > 32 || offset < 1) return value; + int ConvertValue =1 << offset - 1; + return val ? value | ConvertValue : value & ~ConvertValue; + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/NotifyPropVar.java b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/NotifyPropVar.java new file mode 100644 index 00000000..15edf09b --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/NotifyPropVar.java @@ -0,0 +1,37 @@ +package com.bonait.bnframework.HBL.DataUtil; + + + +import com.bonait.bnframework.HBL.Interface.IRunT; + +import java.io.Serializable; +import java.util.LinkedHashMap; + +public class NotifyPropVar { + + public NotifyPropVar(T defaultValue){ + _value=defaultValue; + } + public IRunT ChangeNotify; + + private boolean IsFirst=false; + private LinkedHashMap> changedNotifys=new LinkedHashMap<>(); + + public void Register(String key,IRunT notify){ + if(changedNotifys.containsKey(key))changedNotifys.remove(key); + changedNotifys.put(key,notify); + } + + private T _value; + public T getValue(){ return _value; } + public void setValue(T value){ + if (value != null && !value.equals(_value) || !IsFirst) + { + _value=value; + if(ChangeNotify!=null) ChangeNotify.Run(value); + changedNotifys.values().forEach(item->{item.Run(value);}); + IsFirst = true; + } + } +} + diff --git a/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ShortLib.java b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ShortLib.java new file mode 100644 index 00000000..43968463 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/DataUtil/ShortLib.java @@ -0,0 +1,51 @@ +package com.bonait.bnframework.HBL.DataUtil; + + + + +import com.bonait.bnframework.HBL.Enum.DataFormat; + +import java.nio.ByteBuffer; + +public class ShortLib { + public static short ToShort(byte[] bytes, DataFormat df) { + byte[] res= new ByteTransDataFormat().ByteTransDataFormat2(bytes,df,0); + short result= ByteBuffer.wrap(res).getShort(); + return result; + } + + public static short[] ToShorts(byte[] bytes, DataFormat df) { + byte[] tempBytes=new byte[bytes.length]; + if (bytes.length%2!=0){ tempBytes=new byte[bytes.length+1]; } + for (int i=0; i 16 || offset < 1) return false; + return (value & 1 << offset - 1) == 0 ? false : true; + } + + public static short SetBit(short value,int offset, boolean val) + { + if (offset > 16 || offset < 1) return value; + short ConvertValue = (short)(1 << offset - 1); + return (short)(val ? value | ConvertValue : value & ~ConvertValue); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Dialog/AlertDialogButton.java b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/AlertDialogButton.java new file mode 100644 index 00000000..63480341 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/AlertDialogButton.java @@ -0,0 +1,8 @@ +package com.bonait.bnframework.HBL.Dialog; + +public enum AlertDialogButton { + OK , + OKCancel, + YesNoCancel, + YesNo, +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogActivity.java b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogActivity.java new file mode 100644 index 00000000..117c1ffe --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogActivity.java @@ -0,0 +1,15 @@ +package com.bonait.bnframework.HBL.Dialog; + +import android.os.Bundle; + +import androidx.appcompat.app.AppCompatActivity; + +import com.bonait.bnframework.R; + +public class DialogActivity extends AppCompatActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_dialog); + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogManager.java b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogManager.java new file mode 100644 index 00000000..dc60435d --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogManager.java @@ -0,0 +1,309 @@ +package com.bonait.bnframework.HBL.Dialog; + +import android.app.Activity; +import android.content.Context; +import android.view.View; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.bonait.bnframework.HBL.Logs.MessageLog; +import com.bonait.bnframework.R; + +/** + * 自定义弹框 + * 需要在 res->values->styles.xml中添加 custom_dialog2样式 + * 需要在layout中添加dialog布局页面 + */ +public class DialogManager { + +// private static DialogView dview; + + private static Context mContext; + + private static Activity mActivity; + + public static void Init(Context context,Activity activity){ + mContext = context; + mActivity=activity; + } + + /** + * 对话框,自定义按钮,非阻塞 + * */ + private static void showDialog(String message, AlertDialogButton btn,DialogType dt, IDialogAction action) { + if(mContext==null) return; + try{ + DialogView dview=new DialogView(mContext, R.layout.activity_dialog, R.style.custom_dialog2); + if (dview != null) { + if (!dview.isShowing()) { + + String btnName1="确定"; + String btnName2="取消"; + if(btn==AlertDialogButton.YesNoCancel||btn==AlertDialogButton.YesNo){ + btnName1="是"; + btnName2="否"; + } + + dview.setCanceledOnTouchOutside(false);//禁用触摸其它区域关闭弹框 + RelativeLayout rlTitle = (RelativeLayout) dview.findViewById(R.id.rl_title); + if(dt== DialogType.提示)rlTitle.setBackgroundResource(R.drawable.dialog_info_title_back); + if(dt== DialogType.警告)rlTitle.setBackgroundResource(R.drawable.dialog_warn_title_back); + if(dt== DialogType.错误)rlTitle.setBackgroundResource(R.drawable.dialog_error_title_back); + TextView Tv=(TextView)dview.findViewById(R.id.tv_Title); + TextView Info=(TextView)dview.findViewById(R.id.tv_Info); + Button ok = (Button)dview.findViewById(R.id.btn_ok); + Button cancel = (Button)dview.findViewById(R.id.btn_cancel); + + Tv.setText(dt.toString()); + Info.setText(message); + ok.setText(btnName1); + cancel.setText(btnName2); + + if(btn==AlertDialogButton.OK)cancel.setVisibility(View.GONE); + + ok.setOnClickListener(view->{ + if(action!=null)action.ExitDialog(true); + hide(dview); + }); + + cancel.setOnClickListener(view->{ + if(action!=null)action.ExitDialog(false); + hide(dview); + }); + dview.show(); + } + } + }catch(Exception e){ + MessageLog.ShowError("打开弹框异常:"+e.toString()); + } + } + + /** + * 对话框,自定义按钮,非阻塞 + * */ + private static void showDialog(Context ct,String message, AlertDialogButton btn,DialogType dt, IDialogAction action) { + if(ct==null) return; + try{ + DialogView dview=new DialogView(ct, R.layout.activity_dialog, R.style.custom_dialog2); + if (dview != null) { + if (!dview.isShowing()) { + + String btnName1="确定"; + String btnName2="取消"; + if(btn==AlertDialogButton.YesNoCancel||btn==AlertDialogButton.YesNo){ + btnName1="是"; + btnName2="否"; + } + + dview.setCanceledOnTouchOutside(false);//禁用触摸其它区域关闭弹框 + RelativeLayout rlTitle = (RelativeLayout) dview.findViewById(R.id.rl_title); + if(dt== DialogType.提示)rlTitle.setBackgroundResource(R.drawable.dialog_info_title_back); + if(dt== DialogType.警告)rlTitle.setBackgroundResource(R.drawable.dialog_warn_title_back); + if(dt== DialogType.错误)rlTitle.setBackgroundResource(R.drawable.dialog_error_title_back); + TextView Tv=(TextView)dview.findViewById(R.id.tv_Title); + TextView Info=(TextView)dview.findViewById(R.id.tv_Info); + Button ok = (Button)dview.findViewById(R.id.btn_ok); + Button cancel = (Button)dview.findViewById(R.id.btn_cancel); + + Tv.setText(dt.toString()); + Info.setText(message); + ok.setText(btnName1); + cancel.setText(btnName2); + + if(btn==AlertDialogButton.OK)cancel.setVisibility(View.GONE); + + ok.setOnClickListener(view->{ + if(action!=null)action.ExitDialog(true); + hide(dview); + }); + + cancel.setOnClickListener(view->{ + if(action!=null)action.ExitDialog(false); + hide(dview); + }); + dview.show(); + } + } + }catch(Exception e){ + MessageLog.ShowError("打开弹框异常:"+e.toString()); + } + } + + /** + * 对话框,自定义按钮,非阻塞 + * */ + private static void showDialog(Activity activity,String message, AlertDialogButton btn,DialogType dt, IDialogAction action) { + if(activity==null) return; + try{ + DialogView dview1=new DialogView(activity, R.layout.activity_dialog, R.style.custom_dialog2); + if (dview1 != null) { + if (!dview1.isShowing()) { + + String btnName1="确定"; + String btnName2="取消"; + if(btn==AlertDialogButton.YesNoCancel||btn==AlertDialogButton.YesNo){ + btnName1="是"; + btnName2="否"; + } + + dview1.setCanceledOnTouchOutside(false);//禁用触摸其它区域关闭弹框 + RelativeLayout rlTitle = (RelativeLayout) dview1.findViewById(R.id.rl_title); + if(dt== DialogType.提示)rlTitle.setBackgroundResource(R.drawable.dialog_info_title_back); + if(dt== DialogType.警告)rlTitle.setBackgroundResource(R.drawable.dialog_warn_title_back); + if(dt== DialogType.错误)rlTitle.setBackgroundResource(R.drawable.dialog_error_title_back); + TextView Tv=(TextView)dview1.findViewById(R.id.tv_Title); + TextView Info=(TextView)dview1.findViewById(R.id.tv_Info); + Button ok = (Button)dview1.findViewById(R.id.btn_ok); + Button cancel = (Button)dview1.findViewById(R.id.btn_cancel); + + Tv.setText(dt.toString()); + Info.setText(message); + ok.setText(btnName1); + cancel.setText(btnName2); + + if(btn==AlertDialogButton.OK)cancel.setVisibility(View.GONE); + + ok.setOnClickListener(view->{ + if(action!=null)action.ExitDialog(true); + hide(dview1); + }); + + cancel.setOnClickListener(view->{ + if(action!=null)action.ExitDialog(false); + hide(dview1); + }); + dview1.show(); + } + } + }catch(Exception e){ + MessageLog.ShowError("打开弹框异常:"+e.toString()); + } + } + + /** + * 隐藏弹框 + * @param view + */ + private static void hide(DialogView view) { + if (view != null) { + if (view.isShowing()) { + view.dismiss(); + } + } + } + + /** + * 信息提示框 + * @param message 提示信息 + * @param btn 显示按钮 + * @param action 执行回调 + */ + public static void showInfo(String message, AlertDialogButton btn, IDialogAction action) { + if(mActivity!=null) + mActivity.runOnUiThread(()->{showDialog(message,btn,DialogType.提示,action);}); + else showDialog(message,btn,DialogType.提示,action); + } + + /** + * 警告提示框 + * @param message 警告信息 + * @param btn 显示按钮 + * @param action 执行回调 + */ + public static void showWarn(String message, AlertDialogButton btn, IDialogAction action) { + if(mActivity!=null) + mActivity.runOnUiThread(()->{showDialog(message,btn,DialogType.警告,action);}); + else showDialog(message,btn,DialogType.警告,action); + } + + /** + * 错误提示框 + * @param message 错误信息 + * @param btn 显示按钮 + * @param action 执行回调 + */ + public static void showError(String message, AlertDialogButton btn, IDialogAction action) { + if(mActivity!=null) + mActivity.runOnUiThread(()->{showDialog(message,btn,DialogType.错误,action);}); + else showDialog(message,btn,DialogType.错误,action); + } + + + + /** + * 信息提示框 + * @param message 提示信息 + * @param btn 显示按钮 + * @param action 执行回调 + */ + public static void showInfo( Context ct,String message, AlertDialogButton btn, IDialogAction action) { + if(mActivity!=null) + mActivity.runOnUiThread(()->{showDialog(ct,message,btn,DialogType.提示,action);}); + else showDialog(ct,message,btn,DialogType.提示,action); + } + + /** + * 警告提示框 + * @param message 警告信息 + * @param btn 显示按钮 + * @param action 执行回调 + */ + public static void showWarn( Context ct,String message, AlertDialogButton btn, IDialogAction action) { + if(mActivity!=null) + mActivity.runOnUiThread(()->{showDialog(ct,message,btn,DialogType.警告,action);}); + else showDialog(ct,message,btn,DialogType.警告,action); + } + + /** + * 错误提示框 + * @param message 错误信息 + * @param btn 显示按钮 + * @param action 执行回调 + */ + public static void showError( Context ct,String message, AlertDialogButton btn, IDialogAction action) { + if(mActivity!=null) + mActivity.runOnUiThread(()->{showDialog(ct,message,btn,DialogType.错误,action);}); + else showDialog(ct,message,btn,DialogType.错误,action); + } + + + + /** + * 信息提示框 + * @param message 提示信息 + * @param btn 显示按钮 + * @param action 执行回调 + */ + public static void showInfo( Activity activity,String message, AlertDialogButton btn, IDialogAction action) { + if(mActivity!=null) + mActivity.runOnUiThread(()->{showDialog(activity,message,btn,DialogType.提示,action);}); + else showDialog(activity,message,btn,DialogType.提示,action); + } + + /** + * 警告提示框 + * @param message 警告信息 + * @param btn 显示按钮 + * @param action 执行回调 + */ + public static void showWarn(Activity activity,String message, AlertDialogButton btn, IDialogAction action) { + if(mActivity!=null) + mActivity.runOnUiThread(()->{showDialog(activity,message,btn,DialogType.警告,action);}); + else showDialog(activity,message,btn,DialogType.警告,action); + } + + /** + * 错误提示框 + * @param message 错误信息 + * @param btn 显示按钮 + * @param action 执行回调 + */ + public static void showError( Activity activity,String message, AlertDialogButton btn, IDialogAction action) { + if(mActivity!=null) + mActivity.runOnUiThread(()->{showDialog(activity,message,btn,DialogType.错误,action);}); + else showDialog(activity,message,btn,DialogType.错误,action); + } + +} + diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogType.java b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogType.java new file mode 100644 index 00000000..fc889ef7 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogType.java @@ -0,0 +1,7 @@ +package com.bonait.bnframework.HBL.Dialog; + +public enum DialogType { + 警告, + 提示, + 错误 +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogView.java b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogView.java new file mode 100644 index 00000000..57ebb8a2 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/DialogView.java @@ -0,0 +1,35 @@ +package com.bonait.bnframework.HBL.Dialog; + +import android.app.Activity; +import android.app.Dialog; +import android.content.Context; +import android.view.Window; + +import androidx.annotation.NonNull; + +public class DialogView extends Dialog { + + public DialogView(@NonNull Context context, int layout, int style, int gravity) { + super(context, style); + setContentView(layout); + Window mWindow = getWindow(); +// WindowManager.LayoutParams params = mWindow.getAttributes(); +// params.width = WindowManager.LayoutParams.MATCH_PARENT; +// params.height = WindowManager.LayoutParams.WRAP_CONTENT; +// params.gravity = gravity; +// mWindow.setAttributes(params); + } + + public DialogView(@NonNull Context context, int layout, int style) { + super(context, style); + setContentView(layout); + Window mWindow = getWindow(); + } + + public DialogView(@NonNull Activity activity, int layout, int style) { + super(activity, style); + setContentView(layout); + Window mWindow = getWindow(); + } + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Dialog/IDialogAction.java b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/IDialogAction.java new file mode 100644 index 00000000..48a6cefc --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Dialog/IDialogAction.java @@ -0,0 +1,6 @@ +package com.bonait.bnframework.HBL.Dialog; + +public interface IDialogAction { + void ExitDialog(boolean status); + +} diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/DataFormat.java b/app/src/main/java/com/bonait/bnframework/HBL/Enum/DataFormat.java similarity index 59% rename from app/src/main/java/com/bonait/bnframework/common/helper/DataFormat.java rename to app/src/main/java/com/bonait/bnframework/HBL/Enum/DataFormat.java index 57b97b01..af51f337 100644 --- a/app/src/main/java/com/bonait/bnframework/common/helper/DataFormat.java +++ b/app/src/main/java/com/bonait/bnframework/HBL/Enum/DataFormat.java @@ -1,4 +1,4 @@ -package com.bonait.bnframework.common.helper; +package com.bonait.bnframework.HBL.Enum; public enum DataFormat { ABCD, diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Executor.java b/app/src/main/java/com/bonait/bnframework/HBL/Executor.java new file mode 100644 index 00000000..d2a88a88 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Executor.java @@ -0,0 +1,43 @@ +package com.bonait.bnframework.HBL; + + + +import com.bonait.bnframework.HBL.Interface.IRun; +import com.bonait.bnframework.HBL.Logs.MessageLog; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * 异步方法 + */ +public class Executor { + + private static Executor mInstance; //实例变量设置私有,防止直接通过类名访问 + + private Executor() { //默认构造函数私有,防止类外直接new创建对象 + } + + public static synchronized Executor get() { //静态同步方法作为唯一的实例对象获取方式 + if (mInstance == null) { + mInstance = new Executor(); + } + return mInstance; + } + private ExecutorService executor= Executors.newCachedThreadPool() ; + + public void runThread(IRun run) { + executor.submit(new Runnable(){ + @Override + public void run() { + try { + if(run!=null)run.Run(); + }catch(Exception ex) { + MessageLog.ShowError("runThread 异常:"+ex.getMessage()); + } + } + }); + } + + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Interface/IRun.java b/app/src/main/java/com/bonait/bnframework/HBL/Interface/IRun.java new file mode 100644 index 00000000..2f31cac3 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Interface/IRun.java @@ -0,0 +1,5 @@ +package com.bonait.bnframework.HBL.Interface; + +public interface IRun { + void Run(); +} diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/I/IRunT.java b/app/src/main/java/com/bonait/bnframework/HBL/Interface/IRunT.java similarity index 51% rename from app/src/main/java/com/bonait/bnframework/common/helper/I/IRunT.java rename to app/src/main/java/com/bonait/bnframework/HBL/Interface/IRunT.java index a1670df8..8488b9d1 100644 --- a/app/src/main/java/com/bonait/bnframework/common/helper/I/IRunT.java +++ b/app/src/main/java/com/bonait/bnframework/HBL/Interface/IRunT.java @@ -1,4 +1,4 @@ -package com.bonait.bnframework.common.helper.I; +package com.bonait.bnframework.HBL.Interface; public interface IRunT { void Run(T t); diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Logs/IMessageLogNotify.java b/app/src/main/java/com/bonait/bnframework/HBL/Logs/IMessageLogNotify.java new file mode 100644 index 00000000..5c23a57b --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Logs/IMessageLogNotify.java @@ -0,0 +1,7 @@ +package com.bonait.bnframework.HBL.Logs; + +public interface IMessageLogNotify { + void ErrorMsg(String msg); + void InfoMsg(String msg); + void WarnMsg(String msg); +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Logs/MessageLog.java b/app/src/main/java/com/bonait/bnframework/HBL/Logs/MessageLog.java new file mode 100644 index 00000000..0bc1b775 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Logs/MessageLog.java @@ -0,0 +1,62 @@ +package com.bonait.bnframework.HBL.Logs; + +import android.util.Log; + +import com.bonait.bnframework.HBL.Thread.ThreadManager; +import com.bonait.bnframework.common.db.QueryDB; +import com.bonait.bnframework.common.db.mode.BPA_ALERTLOG; + +import java.util.concurrent.ConcurrentLinkedQueue; + +public class MessageLog { + private static IMessageLogNotify MsgNotify; + private static ConcurrentLinkedQueue msgQueue=new ConcurrentLinkedQueue(); + private static void Init(){ + MsgNotify = new IMessageLogNotify() { + @Override + public void ErrorMsg(String msg) { + Log.e("错误日志",msg); + } + + @Override + public void InfoMsg(String msg) { + Log.i("信息日志",msg); + } + + @Override + public void WarnMsg(String msg) { + Log.w("警告日志",msg); + } + }; + ThreadManager.get().StartLong("日志信息保存",true,()->{ + while(msgQueue.size()>0){ + String msg= msgQueue.poll(); + BPA_ALERTLOG log= new BPA_ALERTLOG(); + log.text=msg; + QueryDB.AddAlertlog(log); + } + Thread.sleep(2000); + }); + } + + public static void ShowInfo(String msg) { + if (MsgNotify == null)Init(); + MsgNotify.InfoMsg(msg); + } + + public static void ShowWarning(String msg) { + if (MsgNotify == null)Init(); + MsgNotify.WarnMsg(msg); + } + + public static void ShowError(String msg) { + if (MsgNotify == null)Init(); + MsgNotify.ErrorMsg(msg); + } + + public static void ShowError(Exception e) { + if (MsgNotify == null)Init(); + MsgNotify.ErrorMsg(e.toString()); + } + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/NetworkUtils.java b/app/src/main/java/com/bonait/bnframework/HBL/NetworkUtils.java new file mode 100644 index 00000000..8493a5de --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/NetworkUtils.java @@ -0,0 +1,230 @@ +package com.bonait.bnframework.HBL; + + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.Network; +import android.net.NetworkCapabilities; +import android.net.NetworkInfo; +import android.net.NetworkRequest; +import android.os.Build; +import android.util.Log; + +import java.io.DataOutputStream; + +/** + * Created by LY on 2019/1/4. + */ +public class NetworkUtils { + //判断网络连接是否可用(返回true表示网络可用,false为不可用) + public static boolean checkNetworkAvailable(Context context) { + //获取手机所有链接管理对象(包括对Wi-Fi,net等连接的管理) + ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (manager == null) { + return false; + } else { + //获取NetworkInfo对象 + NetworkInfo[] info = manager.getAllNetworkInfo(); + if (info != null && info.length > 0) { + for (int i = 0; i < info.length; i++) { + System.out.println(i + "状态" + info[i].getState()); + System.out.println(i + "类型" + info[i].getTypeName()); + // 判断当前网络状态是否为连接状态 + if (info[i].getState() == NetworkInfo.State.CONNECTED) { + return true; + } + } + } + } + return false; + } + /** + * 检测当的网络(WLAN、4G/3G/2G)状态,兼容Android 6.0以下 + * @param context Context + * @return true 表示网络可用 + */ + public static boolean isNetworkConnected(Context context) { + boolean result = false; + try { + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (cm != null) { + NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork()); + if (capabilities != null) { + if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { + result = true; + } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { + result = true; + } + } + } + } else { + if (cm != null) { + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + if (activeNetwork != null) { + // connected to the internet + if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { + result = true; + } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { + result = true; + } + } + } + } + + } catch (Exception e) { + return false; + } + + return result; + } + + /** + * 判断是否是移动网络连接 + * */ + public static boolean isActiveNetworkMobile(Context context) { + ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivityManager != null) { + NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); + return networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE; + } + return false; + } + + /** + * 判断是否是wifi + * */ + public static boolean isActiveNetworkWifi(Context context) { + ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivityManager != null) { + NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); + return networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI; + } + return false; + } + + /** + * @deprecated 请先使用 {@link NetworkUtils#isNetworkConnected(Context)} 方法 + * + * 检测当的网络(WLAN、4G/3G/2G)状态 + * + * @param context Context + * @return true 表示网络可用 + */ + @Deprecated + public static boolean checkNet(Context context) { + + try { + ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivity != null) { + + NetworkInfo info = connectivity.getActiveNetworkInfo(); + if (info != null && info.isConnected()) { + + /*if (info.getState() == NetworkInfo.State.CONNECTED) { + return true; + }*/ + NetworkCapabilities networkCapabilities = connectivity.getNetworkCapabilities(connectivity.getActiveNetwork()); + return networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); + } + } + } catch (Exception e) { + return false; + } + return false; + } + + /** + * 绑定有线网络 + * @param context + */ + public static void connetEnternet(Context context) + { + ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkRequest.Builder builder = new NetworkRequest.Builder(); + builder.addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET); + //builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); + NetworkRequest networkRequest = builder.build(); + connManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback() { + @Override + public void onAvailable(Network network) { + super.onAvailable(network); + connManager.bindProcessToNetwork(network); // 绑定应用程序到有线网络 + } + }); + } + + /** + * 绑定有线网络 + * @param context + */ + public static void connetWifi(Context context) + { + ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkRequest.Builder builder = new NetworkRequest.Builder(); + builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); + NetworkRequest networkRequest = builder.build(); + connManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback() { + @Override + public void onAvailable(Network network) { + super.onAvailable(network); + connManager.bindProcessToNetwork(network); // 绑定应用程序到有线网络 + } + }); + } + + /** + * 同步时间 + */ + public static void SynchronizationTime() + { + new Thread(new Runnable() { + @Override + public void run() { + try { + exec3("settings put global auto_time 0"); + Thread.sleep(500); + exec3("settings put global auto_time 1"); + } catch (InterruptedException e) { + + } + } + }).start(); + } + /** + * 发送 + * @param cmds + */ + public static void exec3(String... cmds) { + StringBuffer command = new StringBuffer(); + if (cmds.length <= 0) { + return; + } + for (String cmd : cmds) { + command.append(cmd).append("\n"); + } + Process process = null; + DataOutputStream os = null; + try { + process = Runtime.getRuntime().exec("su"); + // process = Runtime.getRuntime().exec("system/bin/su"); + os = new DataOutputStream(process.getOutputStream()); + os.write(command.toString().getBytes()); + os.writeBytes("exit\n"); + os.flush(); + process.waitFor(); + } catch (Exception e) { + e.printStackTrace(); + Log.e("eeee",""+e.toString()); + } finally { + try { + os.close(); + } catch (Exception e) { + e.printStackTrace(); + } + if(process!=null){ + process.destroy(); + } + } + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Result/IResult.java b/app/src/main/java/com/bonait/bnframework/HBL/Result/IResult.java new file mode 100644 index 00000000..13655727 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Result/IResult.java @@ -0,0 +1,30 @@ +package com.bonait.bnframework.HBL.Result; + + +public abstract class IResult { + /** + * 是否成功 + */ + public boolean isSuccess ; + + /** + * 返回消息 + */ + public String message; + + /** + * 操作代码 + */ + public ResultCode resultCode = ResultCode.Default ; + + abstract void setErrorMsg(String msg); + + public boolean getIsSuccess(){ + return resultCode==ResultCode.Success; + } + + public void setIsSuccess(boolean tempSuccess){ + isSuccess= tempSuccess; + resultCode = tempSuccess ? ResultCode.Success : ResultCode.Fail; + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Result/OperateResult.java b/app/src/main/java/com/bonait/bnframework/HBL/Result/OperateResult.java new file mode 100644 index 00000000..94300d35 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Result/OperateResult.java @@ -0,0 +1,78 @@ +package com.bonait.bnframework.HBL.Result; + +import com.bonait.bnframework.HBL.Interface.IRun; +import com.bonait.bnframework.HBL.Logs.MessageLog; + +public class OperateResult extends IResult { + + public OperateResult(){ + + } + + public OperateResult(Exception ex){ + message = ex.getMessage()+"\rException:"+ex.toString(); + resultCode = ResultCode.Exception; + isSuccess=false; + } + + public OperateResult(String msg, ResultCode rc) + { + message = msg; + resultCode = rc; + isSuccess=false; + } + + public OperateResult(ResultCode rc) + { + resultCode = rc; + isSuccess=true; + } + + + @Override + public void setErrorMsg(String msg) { + message =message+ msg; + isSuccess=false; + resultCode = ResultCode.Fail; + } + + public OperateResult OnSource(IRun action){ + if(action!=null&&getIsSuccess())action.Run(); + return this; + } + + public OperateResult OnFailed(IRun action){ + try{ + if(action!=null&&!getIsSuccess())action.Run(); + }catch(Exception e){ + MessageLog.ShowError(e); + } + return this; + } + + public OperateResult OnFinally(IRun action){ + try{ + if(action!=null)action.Run(); + }catch(Exception e){ + MessageLog.ShowError(e); + } + return this; + } + + public static OperateResult CreateSuccess() + { + return new OperateResult(ResultCode.Success); + } + + public static OperateResult CreateFailed(String msg) + { + MessageLog.ShowError(msg); + return new OperateResult(msg, ResultCode.Fail); + } + + public static OperateResult CreateFailed(Exception ex) + { + MessageLog.ShowError(ex.toString()); + return new OperateResult(ex); + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Result/OperateResultT.java b/app/src/main/java/com/bonait/bnframework/HBL/Result/OperateResultT.java new file mode 100644 index 00000000..8010b7ac --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Result/OperateResultT.java @@ -0,0 +1,88 @@ +package com.bonait.bnframework.HBL.Result; + + +import com.bonait.bnframework.HBL.Interface.IRunT; +import com.bonait.bnframework.HBL.Logs.MessageLog; + +public class OperateResultT extends IResult +{ + public OperateResultT(){} + public OperateResultT(Exception ex) { + message = ex.getMessage()+"\rException:"+ex.toString(); + resultCode = ResultCode.Exception; + isSuccess=false; + } + + public OperateResultT(String msg, ResultCode rc ){ + message = msg; + resultCode = rc; + isSuccess=false; + } + + public OperateResultT(ResultCode rc){ + resultCode = rc; + isSuccess=true; + } + + @Override + public void setErrorMsg(String msg) { + message =message+ msg; + isSuccess=false; + resultCode = ResultCode.Fail; + } + + public OperateResultT(T content, String msg, ResultCode rc){ + Content = content; + message = msg; + resultCode = rc; + isSuccess=getIsSuccess(); + } + + public T Content ; + + public void setContent(T value){ + Content = value; + resultCode = ResultCode.Success; + isSuccess=true; + } + + public OperateResultT OnSource(IRunT> action){ + try{ + if(action!=null&&getIsSuccess())action.Run(this); + }catch(Exception e){ + MessageLog.ShowError(e); + } + return this; + } + + public OperateResultT OnFailed(IRunT> action){ + try{ + if(action!=null&&!getIsSuccess())action.Run(this); + }catch(Exception e){ + MessageLog.ShowError(e); + } + return this; + } + + public OperateResultT OnFinally(IRunT> action){ + if(action!=null)action.Run(this); + return this; + } + + public static OperateResultT CreateSuccess(T value) + { + return new OperateResultT(value,"", ResultCode.Success); + } + + public static OperateResultT CreateFailedT(String msg) + { + MessageLog.ShowError(msg); + return new OperateResultT( msg, ResultCode.Fail); + } + + public static OperateResultT CreateFailedT(Exception ex) + { + MessageLog.ShowError(ex.toString()); + return new OperateResultT(ex); + } +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Result/ResultCode.java b/app/src/main/java/com/bonait/bnframework/HBL/Result/ResultCode.java new file mode 100644 index 00000000..22aefeff --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Result/ResultCode.java @@ -0,0 +1,38 @@ +package com.bonait.bnframework.HBL.Result; + +public enum ResultCode { + /** + * 默认 + */ + Default, + + /** + * 错误 + */ + Error, + + /** + * 异常 + */ + Exception, + + /** + * 成功 + */ + Success, + + /** + * 失败 + */ + Fail, + + /** + * 操作超时 + */ + Overtime, + + /** + * 操作取消 + */ + Canceled +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Thread/IThread.java b/app/src/main/java/com/bonait/bnframework/HBL/Thread/IThread.java new file mode 100644 index 00000000..74129de7 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Thread/IThread.java @@ -0,0 +1,5 @@ +package com.bonait.bnframework.HBL.Thread; + +public interface IThread { + void Run() throws Exception; +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Thread/IThreadComplete.java b/app/src/main/java/com/bonait/bnframework/HBL/Thread/IThreadComplete.java new file mode 100644 index 00000000..0b58eb9b --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Thread/IThreadComplete.java @@ -0,0 +1,7 @@ +package com.bonait.bnframework.HBL.Thread; + +public interface IThreadComplete { + void Run() throws Exception; + + void RunComplete() throws Exception; +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Thread/ThreadManager.java b/app/src/main/java/com/bonait/bnframework/HBL/Thread/ThreadManager.java new file mode 100644 index 00000000..f46aa6fd --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Thread/ThreadManager.java @@ -0,0 +1,110 @@ +package com.bonait.bnframework.HBL.Thread; + +import com.bonait.bnframework.HBL.Logs.MessageLog; +import java.util.concurrent.ConcurrentHashMap; + +public class ThreadManager { + private static volatile ThreadManager _Instance; + + public static ThreadManager get() { + if (_Instance == null) + _Instance = new ThreadManager(); + return _Instance; + } + + private ThreadManager() { + + } + + public long RestartInterval = 2000; + ConcurrentHashMap tm = new ConcurrentHashMap<>(); + + private void Sleep(long millis) { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + public void StartLong(String Key, boolean IsRestart, IThreadComplete _thread) { + if (!tm.containsKey(Key)) { + tm.put(Key, new ThreadModel()); + tm.get(Key).RunThread = _thread; + tm.get(Key).ThreadObj = new Thread(() -> { + MessageLog.ShowInfo("启动线程:" + Key); + while (!tm.get(Key).IsCancel) { + if (IsRestart) { + try { + tm.get(Key).RunThread.Run(); + } catch (Exception ex) { + MessageLog.ShowError("多线程:" + Key + "运行发生异常,已重启,errorMsg:" + ex.toString()); + Sleep(RestartInterval); + } + } else { + try { + tm.get(Key).RunThread.Run(); + } catch (Exception e) { + MessageLog.ShowError("多线程:" + Key + "运行发生异常,已退出,errorMsg:" + e.toString()); + } + } + } + try { + tm.get(Key).RunThread.RunComplete(); + MessageLog.ShowInfo("线程:[" + Key + "]--执行完成"); + } catch (Exception e) { + MessageLog.ShowError("多线程:" + Key + "执行完成任务发生异常,已退出,errorMsg:" + e.toString()); + } + tm.remove(Key); + }); + tm.get(Key).ThreadObj.setName(Key); + tm.get(Key).ThreadObj.start(); + } else { + MessageLog.ShowWarning("任务-[" + Key + "]-已存在"); + } + } + + public void StartLong(String Key, boolean IsRestart, IThread _thread) { + if (!tm.containsKey(Key)) { + tm.put(Key, new ThreadModel()); + tm.get(Key).Task = _thread; + tm.get(Key).ThreadObj = new Thread(() -> { + MessageLog.ShowInfo("启动线程:" + Key); + while (!tm.get(Key).IsCancel) { + if (IsRestart) { + try { + tm.get(Key).RunThread.Run(); + } catch (Exception ex) { + MessageLog.ShowError("多线程:" + Key + "运行发生异常,已重启,errorMsg:" + ex.toString()); + Sleep(RestartInterval); + } + } else { + try { + tm.get(Key).RunThread.Run(); + } catch (Exception e) { + MessageLog.ShowError("多线程:" + Key + "运行发生异常,已退出,errorMsg:" + e.toString()); + } + } + } + try { + tm.get(Key).RunThread.RunComplete(); + MessageLog.ShowInfo("线程:[" + Key + "]--执行完成"); + } catch (Exception e) { + MessageLog.ShowError("多线程:" + Key + "执行完成任务发生异常,已退出,errorMsg:" + e.toString()); + } + tm.remove(Key); + }); + tm.get(Key).ThreadObj.setName(Key); + tm.get(Key).ThreadObj.start(); + } else { + MessageLog.ShowWarning("任务-[" + Key + "]-已存在"); + } + } + + public void Stop(String Key) { + if (tm.containsKey(Key)) { + tm.get(Key).IsCancel = true; + } + } + +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Thread/ThreadModel.java b/app/src/main/java/com/bonait/bnframework/HBL/Thread/ThreadModel.java new file mode 100644 index 00000000..dc83ef9e --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Thread/ThreadModel.java @@ -0,0 +1,8 @@ +package com.bonait.bnframework.HBL.Thread; + +public class ThreadModel { + public IThreadComplete RunThread; + public IThread Task; + public boolean IsCancel; + public Thread ThreadObj; +} diff --git a/app/src/main/java/com/bonait/bnframework/HBL/Trig/RTrig.java b/app/src/main/java/com/bonait/bnframework/HBL/Trig/RTrig.java new file mode 100644 index 00000000..4cb5caa9 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/HBL/Trig/RTrig.java @@ -0,0 +1,44 @@ +package com.bonait.bnframework.HBL.Trig; + + + +import com.bonait.bnframework.HBL.Interface.IRun; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 上升沿操作 + */ +public class RTrig { + private static volatile ConcurrentHashMap _Instance; + + public static RTrig get(String name) { + if (_Instance == null) + _Instance = new ConcurrentHashMap(); + if (!_Instance.containsKey(name)) + _Instance.put(name, new RTrig()); + return _Instance.get(name); + } + + private RTrig() { + } + + private boolean flag=false; + private boolean Q=false; + + public boolean getQ() { + return Q; + } + + private void setIN(boolean falag) { + Q = falag && !flag; + flag = falag; + } + + public void Start(boolean IN, IRun callback) { + setIN(IN); + if (Q) + callback.Run(); + } + +} diff --git a/app/src/main/java/com/bonait/bnframework/MainActivity.java b/app/src/main/java/com/bonait/bnframework/MainActivity.java index 4abe32a2..cc0fa58f 100644 --- a/app/src/main/java/com/bonait/bnframework/MainActivity.java +++ b/app/src/main/java/com/bonait/bnframework/MainActivity.java @@ -4,26 +4,36 @@ package com.bonait.bnframework; import android.graphics.Color; import android.os.Bundle; +import android.util.Log; +import com.bonait.bnframework.HBL.DataUtil.Convert; +import com.bonait.bnframework.HBL.Interface.IRunT; +import com.bonait.bnframework.HBL.Result.OperateResultT; import com.bonait.bnframework.common.DashboardView; import com.bonait.bnframework.common.base.BaseActivity; +import com.bonait.bnframework.common.helper.ModbusHelper; -public class MainActivity extends BaseActivity { +import java.util.ArrayList; +import java.util.List; -// DashboardView dv; +public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); -// dv=findViewById(R.id.dv); - Init(); + test(); } - public void Init(){ -// dv.setMaxValue(400); -// dv.setHeaderText("锅体压力"); -// dv.setUnity(" pa"); -// dv.setBackgroundColor(Color.TRANSPARENT); + + private void test(){ + String a = "123"; +// Convert.TryToNumber(a,ArrayList.class.getClass()).OnSource(s->{ +// Log.i("test",s.Content.toString()); +// }).OnFailed(s->{ +// +// }); } + + } \ No newline at end of file diff --git a/app/src/main/java/com/bonait/bnframework/MainApplication.java b/app/src/main/java/com/bonait/bnframework/MainApplication.java index 8abbd26a..4a02aff1 100644 --- a/app/src/main/java/com/bonait/bnframework/MainApplication.java +++ b/app/src/main/java/com/bonait/bnframework/MainApplication.java @@ -29,8 +29,6 @@ import com.bonait.bnframework.common.db.mode.BPA_USER; import com.bonait.bnframework.common.db.res.AlertLogEnum; import com.bonait.bnframework.common.db.res.UserLogEnum; import com.bonait.bnframework.common.helper.CrashHandler; -import com.bonait.bnframework.common.helper.I.IMessageLogNotify; -import com.bonait.bnframework.common.helper.MessageLog; import com.bonait.bnframework.common.helper.SdCart; import com.bonait.bnframework.common.utils.NetworkUtils; import com.bonait.bnframework.common.utils.ToastUtils; diff --git a/app/src/main/java/com/bonait/bnframework/business/ConfigData.java b/app/src/main/java/com/bonait/bnframework/business/ConfigData.java index edbc7a47..4c05c54b 100644 --- a/app/src/main/java/com/bonait/bnframework/business/ConfigData.java +++ b/app/src/main/java/com/bonait/bnframework/business/ConfigData.java @@ -8,6 +8,7 @@ import android.os.Message; import androidx.annotation.NonNull; +import com.bonait.bnframework.HBL.Interface.IRunT; import com.bonait.bnframework.R; import com.bonait.bnframework.common.constant.ConfigName; import com.bonait.bnframework.common.constant.DataBus; @@ -25,14 +26,10 @@ import com.bonait.bnframework.common.db.mode.BPA_SILOSANDMATERIAL; import com.bonait.bnframework.common.db.mode.BPA_SYSTEMSET; import com.bonait.bnframework.common.db.mode.Res_PLCADDRESS; import com.bonait.bnframework.common.helper.ConfigUtil; -import com.bonait.bnframework.common.helper.I.IRun; -import com.bonait.bnframework.common.helper.I.IRunT; import com.bonait.bnframework.common.helper.Json; import com.bonait.bnframework.common.http.callback.json.JsonDialogCallback; import com.bonait.bnframework.common.image.utils.LocalCacheUtils; import com.bonait.bnframework.common.message.MessageManager; -import com.bonait.bnframework.common.modbus.ModbusTcpHelper; -import com.bonait.bnframework.common.modbus.ModbusTcpServer; import com.bonait.bnframework.common.model.ResAPI; import com.bonait.bnframework.common.model.mode.ActionJsonMode; import com.bonait.bnframework.common.model.mode.BomTechnologyActionInfo; @@ -974,7 +971,7 @@ public class ConfigData { @Override public void run() { try { - ModbusTcpServer.get().Connect(); +// ModbusTcpServer.get().Connect(); } catch (Exception e) { } @@ -985,7 +982,7 @@ public class ConfigData { * 关闭PLC */ public void ColsePLC() { - ModbusTcpHelper.get().release();//释放modbus +// ModbusTcpHelper.get().release();//释放modbus ConfigName.getInstance().PlcIsConnect=false; } /** diff --git a/app/src/main/java/com/bonait/bnframework/business/ExecuteTheRecipe.java b/app/src/main/java/com/bonait/bnframework/business/ExecuteTheRecipe.java index eadd7a0e..d3e67cc9 100644 --- a/app/src/main/java/com/bonait/bnframework/business/ExecuteTheRecipe.java +++ b/app/src/main/java/com/bonait/bnframework/business/ExecuteTheRecipe.java @@ -10,6 +10,12 @@ import android.util.Log; import androidx.annotation.NonNull; +import com.bonait.bnframework.HBL.DataUtil.ShortLib; +import com.bonait.bnframework.HBL.Interface.IRun; +import com.bonait.bnframework.HBL.Interface.IRunT; +import com.bonait.bnframework.HBL.Logs.MessageLog; +import com.bonait.bnframework.HBL.Thread.IThread; +import com.bonait.bnframework.HBL.Thread.ThreadManager; import com.bonait.bnframework.R; import com.bonait.bnframework.common.constant.ConfigName; import com.bonait.bnframework.common.constant.DataBus; @@ -24,17 +30,11 @@ import com.bonait.bnframework.common.db.res.ResGoodsRecipe; import com.bonait.bnframework.common.db.res.SilosLsjyMode; import com.bonait.bnframework.common.db.res.UserLogEnum; import com.bonait.bnframework.common.helper.ByteHelper; -import com.bonait.bnframework.common.helper.DataFormat; import com.bonait.bnframework.common.helper.I.IReadCallBack; -import com.bonait.bnframework.common.helper.I.IRun; -import com.bonait.bnframework.common.helper.I.IRunT; -import com.bonait.bnframework.common.helper.I.IThread; import com.bonait.bnframework.common.helper.I.IWriteCallBack; import com.bonait.bnframework.common.helper.MediaPlayerHelper; -import com.bonait.bnframework.common.helper.MessageLog; +import com.bonait.bnframework.common.helper.ModbusHelper; import com.bonait.bnframework.common.helper.RTrig; -import com.bonait.bnframework.common.helper.ThreadManager; -import com.bonait.bnframework.common.modbus.ModbusTcpServer; import com.bonait.bnframework.common.utils.AlertDialogUtils; import com.bonait.bnframework.common.utils.ToastUtils; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; @@ -243,7 +243,7 @@ public class ExecuteTheRecipe { } }).start(); - ThreadManager.Get().StartLong("PLC设备数据监听", true, new IThread() { + ThreadManager.get().StartLong("PLC设备数据监听", true, new IThread() { @Override public void Run() throws InterruptedException { try { @@ -271,13 +271,10 @@ public class ExecuteTheRecipe { Thread.sleep(500); } - @Override - public void RunComplete() throws InterruptedException { - } }); - ThreadManager.Get().StartLong("PLC设备-温度重量", true, new IThread() { + ThreadManager.get().StartLong("PLC设备-温度重量", true, new IThread() { @Override public void Run() throws InterruptedException { try { @@ -317,13 +314,9 @@ public class ExecuteTheRecipe { } Thread.sleep(200); } - @Override - public void RunComplete() throws InterruptedException { - - } }); - ThreadManager.Get().StartLong("PLC设备-自动加热补水", true, new IThread() { + ThreadManager.get().StartLong("PLC设备-自动加热补水", true, new IThread() { @Override public void Run() throws InterruptedException { try { @@ -336,14 +329,9 @@ public class ExecuteTheRecipe { } Thread.sleep(5000); } - - @Override - public void RunComplete() throws InterruptedException { - - } }); - ThreadManager.Get().StartLong("PLC设备数据监听-信号检测", true, new IThread() { + ThreadManager.get().StartLong("PLC设备数据监听-信号检测", true, new IThread() { @Override public void Run() throws InterruptedException { try { @@ -353,13 +341,9 @@ public class ExecuteTheRecipe { } Thread.sleep(100); } - @Override - public void RunComplete() throws InterruptedException { - - } }); - ThreadManager.Get().StartLong("商品制作线程", true, new IThread() { + ThreadManager.get().StartLong("商品制作线程", true, new IThread() { @Override public void Run() throws InterruptedException { try { @@ -405,7 +389,7 @@ public class ExecuteTheRecipe { silos = item; } if (silos == null) { - MessageLog.ShowUserMessage(UserLogEnum.订单处理日志, message + "下发失败!物料没有管理料仓!"); + MessageLog.ShowInfo(message + "下发失败!物料没有管理料仓!"); } else { //MessageLog.ShowUserMessage(UserLogEnum.订单处理日志, message + "准备下发【" + silos.num + "】号料仓PLC控制命令,需求量:=" + recipe.value); int _val = (int)Math.round((Double.parseDouble(recipe.value) * 10)); @@ -425,7 +409,7 @@ public class ExecuteTheRecipe { @Override public void Run() { IsComplete[0] = true; - MessageLog.ShowUserMessage(UserLogEnum.订单处理日志, "[" + GoodMake.good.name + "]步骤【" + key + "】配料完成!"); + MessageLog.ShowInfo( "[" + GoodMake.good.name + "]步骤【" + key + "】配料完成!"); } }; @@ -439,7 +423,7 @@ public class ExecuteTheRecipe { @Override public void onFailure(String ErrorMsg) { MessageLog.ShowInfo("[" + GoodMake.good.name + "]步骤【" + key + "】启动配料失败!"); - MessageLog.ShowAlertMessage(AlertLogEnum.异常订单未制作日志, "[" + GoodMake.good.name + "]步骤【" + key + "】启动配料失败!"); +// MessageLog.ShowAlertMessage(AlertLogEnum.异常订单未制作日志, "[" + GoodMake.good.name + "]步骤【" + key + "】启动配料失败!"); } }); @@ -453,11 +437,11 @@ public class ExecuteTheRecipe { //更新缓存商品制作列表状态 count += goodsRecipes.size(); DataBus.getInstance().UpdateGoodsMake(GoodMake.subOrder.id, "步骤【" + key + "】:" + RecipesNames + "-配料完成!", count, key, true); - MessageLog.ShowUserMessage(UserLogEnum.订单处理日志, "[" + GoodMake.good.name + "]步骤【" + key + "】下发" + RecipesNames + "执行完成!"); + MessageLog.ShowInfo( "[" + GoodMake.good.name + "]步骤【" + key + "】下发" + RecipesNames + "执行完成!"); } DataBus.getInstance().DeleteGoodsMake(GoodMake.subOrder.id); - MessageLog.ShowUserMessage(UserLogEnum.订单处理日志, "[" + GoodMake.good.name + "]-订单执行完成,请取餐!"); + MessageLog.ShowInfo( "[" + GoodMake.good.name + "]-订单执行完成,请取餐!"); GoodMake=null; IsMakeGood=false; @@ -468,10 +452,6 @@ public class ExecuteTheRecipe { } Thread.sleep(500); } - @Override - public void RunComplete() throws InterruptedException { - - } }); } //endregion @@ -491,10 +471,10 @@ public class ExecuteTheRecipe { if (!plcaddress.address.isEmpty() && ConfigName.getInstance().PlcIsConnect) { if (plcaddress.address.toUpperCase().startsWith("VD"))//int { - ModbusTcpServer.get().WriteInt(plcaddress.address, (int) value, callback); + ModbusHelper.get().WriteInt(plcaddress.address, (int) value); } else if (plcaddress.address.toUpperCase().startsWith("M"))//bool { - ModbusTcpServer.get().WriteBool(plcaddress.address, (boolean) value, callback); + ModbusHelper.get().WriteBool(plcaddress.address, (boolean) value); } else if (plcaddress.address.toUpperCase().startsWith("VW"))//short { if(plcaddress.address.contains(".")) @@ -502,21 +482,17 @@ public class ExecuteTheRecipe { String[] res = plcaddress.address.split("[.]"); String firstAdd = res[0]; //VW100 int endAdd = Integer.parseInt(res[1]); //1 //第几位 - ModbusTcpServer.get().ReadShort(firstAdd, 1, new IReadCallBack() { - @Override - public void onSuccess(short[] shorts) { - Short val=shorts[0]; - Short valk= ByteHelper.setBit(val,endAdd,(boolean) value); - ModbusTcpServer.get().WriteShort(firstAdd, valk, null); - } + ModbusHelper.get().ReadShort(firstAdd).OnSource(s->{ + Short valk= ShortLib.SetBit(s.Content,endAdd,(boolean)value) ; + ModbusHelper.get().WriteShort(firstAdd, valk); }); }else { - ModbusTcpServer.get().WriteShort(plcaddress.address, Short.parseShort(value.toString()), callback); + ModbusHelper.get().WriteShort(plcaddress.address, Short.parseShort(value.toString())); } }else if (plcaddress.address.toUpperCase().startsWith("VR"))//float { - ModbusTcpServer.get().WriteFloat(plcaddress.address, Float.parseFloat(value.toString()), callback); + ModbusHelper.get().WriteFloat(plcaddress.address, Float.parseFloat(value.toString())); } } } @@ -541,13 +517,13 @@ public class ExecuteTheRecipe { if (!plcaddress.address.isEmpty() && ConfigName.getInstance().PlcIsConnect) { if (plcaddress.address.toUpperCase().startsWith("VD"))//int { - ModbusTcpServer.get().ReadInt(plcaddress.address, 1, ints -> { - ReturnsVariable[0] = ints[0]; + ModbusHelper.get().ReadInt(plcaddress.address).OnSource(s->{ + ReturnsVariable[0] = s.Content; }); } else if (plcaddress.address.toUpperCase().startsWith("M"))//bool { - ModbusTcpServer.get().ReadBool(plcaddress.address, 1, val -> { - ReturnsVariable[0] = val[0]; + ModbusHelper.get().ReadBool(plcaddress.address).OnSource(s->{ + ReturnsVariable[0] = s.Content; }); } else if (plcaddress.address.toUpperCase().startsWith("VW"))//short { @@ -556,21 +532,21 @@ public class ExecuteTheRecipe { String[] res = plcaddress.address.split("[.]"); String firstAdd = res[0].replace("V","VW"); //VW194 int endAdd = Integer.parseInt(res[1]); //1 //第几位 - ModbusTcpServer.get().ReadbcStatus(firstAdd, 1, data -> { - byte status=data[0];//0x92 - ReturnsVariable[0] = ByteHelper.getBit(status,endAdd)==1; - }); +// ModbusHelper.get().ReadbcStatus(firstAdd, 1, data -> { +// byte status=data[0];//0x92 +// ReturnsVariable[0] = ByteHelper.getBit(status,endAdd)==1; +// }); }else { - ModbusTcpServer.get().ReadShort(plcaddress.address, 1, val -> { - ReturnsVariable[0] = val[0]; - }); +// ModbusHelper.get().ReadShort(plcaddress.address, 1, val -> { +// ReturnsVariable[0] = val[0]; +// }); } } else if (plcaddress.address.toUpperCase().startsWith("VR"))//float { - ModbusTcpServer.get().ReadFloat(plcaddress.address, 1, val -> { - ReturnsVariable[0] = val[0]; - }); +// ModbusHelper.get().ReadFloat(plcaddress.address, 1, val -> { +// ReturnsVariable[0] = val[0]; +// }); } } } @@ -595,32 +571,32 @@ public class ExecuteTheRecipe { if (!plcaddress.address.isEmpty() && ConfigName.getInstance().PlcIsConnect) { if (plcaddress.address.toUpperCase().startsWith("VD"))//int { - ModbusTcpServer.get().ReadInt(plcaddress.address, length, val -> { - for (int i = 0; i < length; i++) { - ReturnsVariable[i] = val[i]; - } - }); +// ModbusHelper.get().ReadInt(plcaddress.address, length, val -> { +// for (int i = 0; i < length; i++) { +// ReturnsVariable[i] = val[i]; +// } +// }); } else if (plcaddress.address.toUpperCase().startsWith("M"))//bool { - ModbusTcpServer.get().ReadBool(plcaddress.address, length, val -> { - for (int i = 0; i < length; i++) { - ReturnsVariable[i] = val[i]; - } - }); +// ModbusHelper.get().ReadBool(plcaddress.address, length, val -> { +// for (int i = 0; i < length; i++) { +// ReturnsVariable[i] = val[i]; +// } +// }); } else if (plcaddress.address.toUpperCase().startsWith("VW"))//short { - ModbusTcpServer.get().ReadShort(plcaddress.address, length, val -> { - for (int i = 0; i < length; i++) { - ReturnsVariable[i] = val[i]; - } - }); +// ModbusHelper.get().ReadShort(plcaddress.address, length, val -> { +// for (int i = 0; i < length; i++) { +// ReturnsVariable[i] = val[i]; +// } +// }); } else if (plcaddress.address.toUpperCase().startsWith("VR"))//float { - ModbusTcpServer.get().ReadFloat(plcaddress.address, length, val -> { - for (int i = 0; i < length; i++) { - ReturnsVariable[i] = val[i]; - } - }); +// ModbusHelper.get().ReadFloat(plcaddress.address, length, val -> { +// for (int i = 0; i < length; i++) { +// ReturnsVariable[i] = val[i]; +// } +// }); } } } @@ -639,7 +615,7 @@ public class ExecuteTheRecipe { public static void WritePLCSD(String address ,boolean value, IWriteCallBack callback) { try { if (ConfigName.getInstance().PlcIsConnect) { - ModbusTcpServer.get().WriteBool(address, (boolean) value, callback); +// ModbusHelper.get().WriteBool(address, (boolean) value, callback); } } catch (Exception ex) { ToastUtils.error("异常信息:" + ex.getMessage()); @@ -681,19 +657,19 @@ public class ExecuteTheRecipe { if (ConfigName.getInstance().PLC_Address.containsKey("实时状态")) { BPA_PLCADDRESS plcaddress = ConfigName.getInstance().PLC_Address.get("实时状态"); if (!plcaddress.address.isEmpty() && ConfigName.getInstance().PlcIsConnect) { - ModbusTcpServer.get().ReadStatus(plcaddress.address, 4, (data) -> { - for (int i = 0; i < data.length; i++) { - byte status=data[i];//0x92 - IoStatus.put(i*8+0, ByteHelper.getBit(status,0)==1); - IoStatus.put(i*8+1, ByteHelper.getBit(status,1)==1); - IoStatus.put(i*8+2, ByteHelper.getBit(status,2)==1); - IoStatus.put(i*8+3, ByteHelper.getBit(status,3)==1); - IoStatus.put(i*8+4, ByteHelper.getBit(status,4)==1); - IoStatus.put(i*8+5, ByteHelper.getBit(status,5)==1); - IoStatus.put(i*8+6, ByteHelper.getBit(status,6)==1); - IoStatus.put(i*8+7, ByteHelper.getBit(status,7)==1); - } - }); +// ModbusHelper.get().ReadStatus(plcaddress.address, 4, (data) -> { +// for (int i = 0; i < data.length; i++) { +// byte status=data[i];//0x92 +// IoStatus.put(i*8+0, ByteHelper.getBit(status,0)==1); +// IoStatus.put(i*8+1, ByteHelper.getBit(status,1)==1); +// IoStatus.put(i*8+2, ByteHelper.getBit(status,2)==1); +// IoStatus.put(i*8+3, ByteHelper.getBit(status,3)==1); +// IoStatus.put(i*8+4, ByteHelper.getBit(status,4)==1); +// IoStatus.put(i*8+5, ByteHelper.getBit(status,5)==1); +// IoStatus.put(i*8+6, ByteHelper.getBit(status,6)==1); +// IoStatus.put(i*8+7, ByteHelper.getBit(status,7)==1); +// } +// }); } } } catch (Exception ex) { @@ -710,25 +686,25 @@ public class ExecuteTheRecipe { if (ConfigName.getInstance().PLC_Address.containsKey("扫码数据")) { BPA_PLCADDRESS plcaddress = ConfigName.getInstance().PLC_Address.get("扫码数据"); if (!plcaddress.address.isEmpty() && ConfigName.getInstance().PlcIsConnect) { - ModbusTcpServer.get().ReadString(plcaddress.address, 40, (data) -> { - - if(!data.isEmpty() && !Code.equals(data) && OnScanTheCodeInformationT != null) - { - Log.d("信息", "扫码数据: "+data); - OnScanTheCodeInformationT.Run(data); - ModbusTcpServer.get().WriteString(plcaddress.address, 40, null); - } - - //记录上一次读取PLC 扫码数据 - Code = data; - }); +// ModbusHelper.get().ReadString(plcaddress.address, 40, (data) -> { +// +// if(!data.isEmpty() && !Code.equals(data) && OnScanTheCodeInformationT != null) +// { +// Log.d("信息", "扫码数据: "+data); +// OnScanTheCodeInformationT.Run(data); +// ModbusHelper.get().WriteString(plcaddress.address, 40, null); +// } +// +// //记录上一次读取PLC 扫码数据 +// Code = data; +// }); } } // if (ConfigName.getInstance().PLC_Address.containsKey("配料次数")) { // BPA_PLCADDRESS plcaddress = ConfigName.getInstance().PLC_Address.get("配料次数"); // if (!plcaddress.address.isEmpty() && ConfigName.getInstance().PlcIsConnect) { -// ModbusTcpServer.get().ReadInt(plcaddress.address, 1, (data) -> { +// ModbusHelper.get().ReadInt(plcaddress.address, 1, (data) -> { // MakeGoodCount=data[0] ; // }); // } @@ -851,12 +827,12 @@ public class ExecuteTheRecipe { if (ConfigName.getInstance().PLC_Address.containsKey(name)) { BPA_PLCADDRESS plcaddress = ConfigName.getInstance().PLC_Address.get(name); if (!plcaddress.address.isEmpty() && ConfigName.getInstance().PlcIsConnect) { - ModbusTcpServer.get().ReadBool(plcaddress.address, 1, booleans -> { - RTrig.get(name).Start(booleans[0], () -> { - if (callback != null) - callback.Run(); - }); - }); +// ModbusHelper.get().ReadBool(plcaddress.address, 1, booleans -> { +// RTrig.get(name).Start(booleans[0], () -> { +// if (callback != null) +// callback.Run(); +// }); +// }); } } } diff --git a/app/src/main/java/com/bonait/bnframework/business/MainInit.java b/app/src/main/java/com/bonait/bnframework/business/MainInit.java index 28d48128..15fd94f2 100644 --- a/app/src/main/java/com/bonait/bnframework/business/MainInit.java +++ b/app/src/main/java/com/bonait/bnframework/business/MainInit.java @@ -24,10 +24,7 @@ import com.bonait.bnframework.common.db.res.AlertLogEnum; import com.bonait.bnframework.common.db.res.ResGoodsRecipe; import com.bonait.bnframework.common.db.res.UserLogEnum; import com.bonait.bnframework.common.helper.CrashHandler; -import com.bonait.bnframework.common.helper.I.IMessageLogNotify; -import com.bonait.bnframework.common.helper.MessageLog; import com.bonait.bnframework.common.helper.SdCart; -import com.bonait.bnframework.common.modbus.ModbusTcpHelper; import com.bonait.bnframework.common.notification.MainNotification; import com.bonait.bnframework.common.utils.AppUtils; import com.bonait.bnframework.common.utils.NetworkUtils; @@ -210,72 +207,72 @@ public class MainInit { * 初始化消息日志接收打印 */ public static void InitMsgLog(){ - MessageLog.MsgNotify = new IMessageLogNotify() { - @Override - public void ErrorMsg(String msg) { - if(msg.contains("msg:com.serotonin.modbus4j.exception")) - { - ModbusTcpHelper.get().release();//释放modbus - ConfigName.getInstance().PlcIsConnect=false; - - BPA_ALERTLOG log = new BPA_ALERTLOG(); - log.userID = ConfigName.getInstance().user.userID; - log.type=4; - log.text = msg+"程序断开PLC,准备重连机制..."; - QueryDB.AddAlertlog(log); - } - } - @Override - public void InfoMsg(String msg) { - Log.i("Info", msg); - - } - @Override - public void WarnMsg(String msg) { - Log.w("Warn", msg); - } - @Override - public void UserMsg(UserLogEnum type, String msg) { - BPA_LOG log = new BPA_LOG(); - log.userID = ConfigName.getInstance().user.userID; - ToastUtils.info(msg); - switch (type.toString()) - { - case "登录日志":log.type=1; - break; - case "角色操作日志":log.type=2; - break; - case "数据接收":log.type=3; - break; - case "上传日志":log.type=4; - break; - case "订单处理日志":log.type=5; - break; - } - log.text = msg; - QueryDB.Addlog(log); - } - - @Override - public void AlertMsg(AlertLogEnum type, String msg) { - BPA_ALERTLOG log = new BPA_ALERTLOG(); - log.userID = ConfigName.getInstance().user.userID; - switch (type.toString()) - { - case "异常订单未制作日志":log.type=1; - break; - case "料仓缺料日志":log.type=2; - break; - case "传感器异常日志":log.type=3; - break; - case "其他":log.type=4; - break; - } - log.text = msg; - - QueryDB.AddAlertlog(log); - } - }; +// MessageLog.MsgNotify = new IMessageLogNotify() { +// @Override +// public void ErrorMsg(String msg) { +// if(msg.contains("msg:com.serotonin.modbus4j.exception")) +// { +// ModbusTcpHelper.get().release();//释放modbus +// ConfigName.getInstance().PlcIsConnect=false; +// +// BPA_ALERTLOG log = new BPA_ALERTLOG(); +// log.userID = ConfigName.getInstance().user.userID; +// log.type=4; +// log.text = msg+"程序断开PLC,准备重连机制..."; +// QueryDB.AddAlertlog(log); +// } +// } +// @Override +// public void InfoMsg(String msg) { +// Log.i("Info", msg); +// +// } +// @Override +// public void WarnMsg(String msg) { +// Log.w("Warn", msg); +// } +// @Override +// public void UserMsg(UserLogEnum type, String msg) { +// BPA_LOG log = new BPA_LOG(); +// log.userID = ConfigName.getInstance().user.userID; +// ToastUtils.info(msg); +// switch (type.toString()) +// { +// case "登录日志":log.type=1; +// break; +// case "角色操作日志":log.type=2; +// break; +// case "数据接收":log.type=3; +// break; +// case "上传日志":log.type=4; +// break; +// case "订单处理日志":log.type=5; +// break; +// } +// log.text = msg; +// QueryDB.Addlog(log); +// } +// +// @Override +// public void AlertMsg(AlertLogEnum type, String msg) { +// BPA_ALERTLOG log = new BPA_ALERTLOG(); +// log.userID = ConfigName.getInstance().user.userID; +// switch (type.toString()) +// { +// case "异常订单未制作日志":log.type=1; +// break; +// case "料仓缺料日志":log.type=2; +// break; +// case "传感器异常日志":log.type=3; +// break; +// case "其他":log.type=4; +// break; +// } +// log.text = msg; +// +// QueryDB.AddAlertlog(log); +// } +// }; } /** * 内存泄漏检测,根据flag来判断要不要初始化 diff --git a/app/src/main/java/com/bonait/bnframework/business/OrderServer.java b/app/src/main/java/com/bonait/bnframework/business/OrderServer.java index 3c1dd244..c026804a 100644 --- a/app/src/main/java/com/bonait/bnframework/business/OrderServer.java +++ b/app/src/main/java/com/bonait/bnframework/business/OrderServer.java @@ -2,6 +2,9 @@ package com.bonait.bnframework.business; import android.util.Log; +import com.bonait.bnframework.HBL.Interface.IRun; +import com.bonait.bnframework.HBL.Logs.MessageLog; +import com.bonait.bnframework.HBL.Thread.ThreadManager; import com.bonait.bnframework.common.constant.ConfigName; import com.bonait.bnframework.common.db.QueryDB; import com.bonait.bnframework.common.db.mode.BPA_GOODPROPERTY; @@ -14,12 +17,8 @@ import com.bonait.bnframework.common.db.mode.BPA_MENU; import com.bonait.bnframework.common.db.mode.BPA_SILOSANDMATERIAL; import com.bonait.bnframework.common.helper.AES; import com.bonait.bnframework.common.helper.I.IMessage; -import com.bonait.bnframework.common.helper.I.IRun; -import com.bonait.bnframework.common.helper.I.IThread; import com.bonait.bnframework.common.helper.Json; import com.bonait.bnframework.common.helper.MQTT; -import com.bonait.bnframework.common.helper.MessageLog; -import com.bonait.bnframework.common.helper.ThreadManager; import com.bonait.bnframework.common.helper.mode.BPAPackage; import com.bonait.bnframework.common.helper.mode.BPA_GoodsInfo; import com.bonait.bnframework.common.helper.mode.BPA_HeartPackage; @@ -119,23 +118,11 @@ public class OrderServer { ConfigName.getInstance().mqtt_ip, ConfigName.getInstance().mqtt_post); - ThreadManager.Get().StartLong("心跳服务", true, new IThread() { - @Override - public void Run() throws InterruptedException { - - if(MQTT.get().IsConnect) - { - try { - PushHeart(); - } catch (Exception e) { - - } - } - Thread.sleep(1000); - } - @Override - public void RunComplete() throws InterruptedException { + ThreadManager.get().StartLong("心跳服务",true,()->{ + if(MQTT.get().IsConnect){ + PushHeart(); } + Thread.sleep(1000); }); } diff --git a/app/src/main/java/com/bonait/bnframework/common/constant/DataBus.java b/app/src/main/java/com/bonait/bnframework/common/constant/DataBus.java index ae170b6e..4661ec37 100644 --- a/app/src/main/java/com/bonait/bnframework/common/constant/DataBus.java +++ b/app/src/main/java/com/bonait/bnframework/common/constant/DataBus.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.content.Intent; import android.widget.LinearLayout; +import com.bonait.bnframework.HBL.Logs.MessageLog; import com.bonait.bnframework.R; import com.bonait.bnframework.business.ExecuteTheRecipe; import com.bonait.bnframework.common.db.QueryDB; @@ -26,7 +27,6 @@ import com.bonait.bnframework.common.db.res.UserLogEnum; import com.bonait.bnframework.common.db.res.lcMode; import com.bonait.bnframework.common.db.res.wdszMode; import com.bonait.bnframework.common.helper.I.MyClickListener; -import com.bonait.bnframework.common.helper.MessageLog; import com.bonait.bnframework.common.helper.mode.OrderA; import com.bonait.bnframework.common.helper.mode.ResultA; import com.bonait.bnframework.common.linktab.LinkMode; diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/I/IMessageLogNotify.java b/app/src/main/java/com/bonait/bnframework/common/helper/I/IMessageLogNotify.java deleted file mode 100644 index 34407eb8..00000000 --- a/app/src/main/java/com/bonait/bnframework/common/helper/I/IMessageLogNotify.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.bonait.bnframework.common.helper.I; - -import com.bonait.bnframework.common.db.res.AlertLogEnum; -import com.bonait.bnframework.common.db.res.UserLogEnum; - -public interface IMessageLogNotify { - void ErrorMsg(String msg); - void InfoMsg(String msg); - void WarnMsg(String msg); - void UserMsg(UserLogEnum type, String msg); - void AlertMsg(AlertLogEnum type, String msg); - -} diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/I/IRun.java b/app/src/main/java/com/bonait/bnframework/common/helper/I/IRun.java deleted file mode 100644 index 04925c29..00000000 --- a/app/src/main/java/com/bonait/bnframework/common/helper/I/IRun.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.bonait.bnframework.common.helper.I; - -public interface IRun { - void Run(); -} diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/I/IThread.java b/app/src/main/java/com/bonait/bnframework/common/helper/I/IThread.java deleted file mode 100644 index 84caa447..00000000 --- a/app/src/main/java/com/bonait/bnframework/common/helper/I/IThread.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.bonait.bnframework.common.helper.I; - -public interface IThread { - void Run() throws InterruptedException; - - void RunComplete() throws InterruptedException; -} diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/MQTT.java b/app/src/main/java/com/bonait/bnframework/common/helper/MQTT.java index 2c41d619..1b82339a 100644 --- a/app/src/main/java/com/bonait/bnframework/common/helper/MQTT.java +++ b/app/src/main/java/com/bonait/bnframework/common/helper/MQTT.java @@ -5,9 +5,10 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.util.Log; +import com.bonait.bnframework.HBL.Interface.IRun; +import com.bonait.bnframework.HBL.Logs.MessageLog; import com.bonait.bnframework.common.constant.ConfigName; import com.bonait.bnframework.common.helper.I.IMessage; -import com.bonait.bnframework.common.helper.I.IRun; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallback; diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/MessageLog.java b/app/src/main/java/com/bonait/bnframework/common/helper/MessageLog.java deleted file mode 100644 index 8a11fdbb..00000000 --- a/app/src/main/java/com/bonait/bnframework/common/helper/MessageLog.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.bonait.bnframework.common.helper; - -import com.bonait.bnframework.common.db.res.AlertLogEnum; -import com.bonait.bnframework.common.db.res.UserLogEnum; -import com.bonait.bnframework.common.helper.I.IMessageLogNotify; -import com.bonait.bnframework.common.helper.I.IRun; - -import java.text.SimpleDateFormat; -import java.util.Date; - -public class MessageLog { - public static IMessageLogNotify MsgNotify; - - /** - * 日志触发通知 - */ - public static IRun AddNotify; - - public static String MsgInfo = ""; - - public static void ShowInfo(String msg) { - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String tempMsg = formatter.format(date) + ":" + msg; - if(MsgInfo.length()>=8000)MsgInfo=""; - MsgInfo = tempMsg + "\r\n" + MsgInfo; - if (MsgNotify != null) - MsgNotify.InfoMsg(tempMsg); - if (AddNotify != null) AddNotify.Run(); - } - - public static void ShowWarning(String msg) { - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String tempMsg = formatter.format(date) + ":" + msg; - if(MsgInfo.length()>=8000)MsgInfo=""; - MsgInfo = tempMsg + "\r\n" + MsgInfo; - if (MsgNotify != null) - MsgNotify.WarnMsg(tempMsg); - if (AddNotify != null) AddNotify.Run(); - } - - public static void ShowError(String msg) { - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String tempMsg = formatter.format(date) + ":" + msg; - if(MsgInfo.length()>=8000)MsgInfo=""; - MsgInfo = tempMsg + "\r\n" + MsgInfo; - if (MsgNotify != null) - MsgNotify.ErrorMsg(tempMsg); - if (AddNotify != null) AddNotify.Run(); - } - - /** - * 用户操作日志 - * @param type - * @param msg - */ - public static void ShowUserMessage(UserLogEnum type, String msg) - { - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String tempMsg = formatter.format(date) + ":" + msg; - if(MsgInfo.length()>=8000)MsgInfo=""; - MsgInfo = tempMsg + "\r\n" + MsgInfo; - if (MsgNotify != null) - MsgNotify.UserMsg(type,tempMsg); - if (AddNotify != null) AddNotify.Run(); - } - - /** - * 预警日志 - * @param type - * @param msg - */ - public static void ShowAlertMessage(AlertLogEnum type, String msg) - { - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - String tempMsg = formatter.format(date) + ":" + msg; - if(MsgInfo.length()>=8000)MsgInfo=""; - MsgInfo = tempMsg + "\r\n" + MsgInfo; - if (MsgNotify != null) - MsgNotify.AlertMsg(type,tempMsg); - if (AddNotify != null) AddNotify.Run(); - } - - -} diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/ModbusHelper.java b/app/src/main/java/com/bonait/bnframework/common/helper/ModbusHelper.java new file mode 100644 index 00000000..b5050e0b --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/common/helper/ModbusHelper.java @@ -0,0 +1,20 @@ +package com.bonait.bnframework.common.helper; + +import com.bonait.bnframework.HBL.Communication.Modbus.ModbusMaster; + +public class ModbusHelper extends ModbusMaster { + private static volatile ModbusHelper instance = null; + public synchronized static ModbusHelper get(){ + if(instance==null)instance=new ModbusHelper(); + return instance; + } + private ModbusHelper(){} + + public void RtuInit(String comName,int baudRate){ + new Thread(()->{ RtuConnect(comName,baudRate);}).start(); + } + + public void TcpInit(String ip,int port){ + new Thread(()->{ TcpConnect(ip,port);}).start(); + } +} diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/RTrig.java b/app/src/main/java/com/bonait/bnframework/common/helper/RTrig.java index 72eb8f85..a5347d68 100644 --- a/app/src/main/java/com/bonait/bnframework/common/helper/RTrig.java +++ b/app/src/main/java/com/bonait/bnframework/common/helper/RTrig.java @@ -1,6 +1,6 @@ package com.bonait.bnframework.common.helper; -import com.bonait.bnframework.common.helper.I.IRun; +import com.bonait.bnframework.HBL.Interface.IRun; import java.util.concurrent.ConcurrentHashMap; diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/ThreadManager.java b/app/src/main/java/com/bonait/bnframework/common/helper/ThreadManager.java deleted file mode 100644 index 6cac99af..00000000 --- a/app/src/main/java/com/bonait/bnframework/common/helper/ThreadManager.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.bonait.bnframework.common.helper; - -import com.bonait.bnframework.common.helper.I.IThread; -import com.bonait.bnframework.common.helper.mode.ThreadModel; -import java.util.concurrent.ConcurrentHashMap; - -public class ThreadManager { - private static volatile ThreadManager _Instance; - - public static ThreadManager Get() { - if (_Instance == null) - _Instance = new ThreadManager(); - return _Instance; - } - - private ThreadManager() { - - } - - public long RestartInterval = 2000; - ConcurrentHashMap ts = new ConcurrentHashMap<>(); - - private void Sleep(long millis) { - try { - Thread.sleep(millis); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - public void StartLong(String Key, boolean IsRestart, IThread _thread) { - if (!ts.containsKey(Key)) { - ts.put(Key, new ThreadModel()); - ts.get(Key).RunThread = _thread; - ts.get(Key).ThreadObj = new Thread(() -> { - MessageLog.ShowInfo("启动线程:" + Key); - while (!ts.get(Key).IsCancel) { - if (IsRestart) { - try { - ts.get(Key).RunThread.Run(); - } catch (Exception ex) { - MessageLog.ShowError("多线程:" + Key + "运行发生异常,已重启,errorMsg:" + ex.toString()); - Sleep(RestartInterval); - } - } else { - try { - ts.get(Key).RunThread.Run(); - } catch (InterruptedException e) { - MessageLog.ShowError("多线程:" + Key + "运行发生异常,已退出,errorMsg:" + e.toString()); - } - } - } - try { - ts.get(Key).RunThread.RunComplete(); - MessageLog.ShowInfo("线程:[" + Key + "]--执行完成"); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - ts.remove(Key); - }); - ts.get(Key).ThreadObj.setName(Key); - ts.get(Key).ThreadObj.start(); - } else { - MessageLog.ShowWarning("任务-[" + Key + "]-已存在"); - } - } - - - public void Stop(String Key) { - if (ts.containsKey(Key)) { - ts.get(Key).IsCancel = true; - } - } - -} diff --git a/app/src/main/java/com/bonait/bnframework/common/helper/mode/ThreadModel.java b/app/src/main/java/com/bonait/bnframework/common/helper/mode/ThreadModel.java deleted file mode 100644 index 2f9fcfe7..00000000 --- a/app/src/main/java/com/bonait/bnframework/common/helper/mode/ThreadModel.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.bonait.bnframework.common.helper.mode; - -import com.bonait.bnframework.common.helper.I.IThread; - -public class ThreadModel { - public IThread RunThread; - public boolean IsCancel; - public Thread ThreadObj; -} diff --git a/app/src/main/java/com/bonait/bnframework/common/modbus/ModbusTcpHelper.java b/app/src/main/java/com/bonait/bnframework/common/modbus/ModbusTcpHelper.java deleted file mode 100644 index 47e0bea5..00000000 --- a/app/src/main/java/com/bonait/bnframework/common/modbus/ModbusTcpHelper.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.bonait.bnframework.common.modbus; - -import com.licheedev.modbus4android.ModbusWorker; -import com.serotonin.modbus4j.ModbusMaster; - - -public class ModbusTcpHelper extends ModbusWorker { - private static volatile ModbusTcpHelper instance = null; - - public static ModbusTcpHelper get() { - ModbusTcpHelper manager = instance; - if (manager == null) { - synchronized (ModbusTcpHelper.class) { - manager = instance; - if (manager == null) { - manager = new ModbusTcpHelper(); - instance = manager; - } - } - } - return manager; - } - - private ModbusTcpHelper() { - } - - /** - * 释放整个ModbusManager,单例会被置null - */ - public synchronized void release() { - super.release(); - instance = null; - } - - /** - * 获取 - * @return - */ - public synchronized ModbusMaster getModbusMaster() - { - return super.getModbusMaster(); - } - -} diff --git a/app/src/main/java/com/bonait/bnframework/common/modbus/ModbusTcpServer.java b/app/src/main/java/com/bonait/bnframework/common/modbus/ModbusTcpServer.java deleted file mode 100644 index f4e69e04..00000000 --- a/app/src/main/java/com/bonait/bnframework/common/modbus/ModbusTcpServer.java +++ /dev/null @@ -1,812 +0,0 @@ -package com.bonait.bnframework.common.modbus; - - -import android.os.Looper; - -import com.bonait.bnframework.MainApplication; -import com.bonait.bnframework.business.ConfigData; -import com.bonait.bnframework.common.constant.ConfigName; -import com.bonait.bnframework.common.constant.DataBus; -import com.bonait.bnframework.common.helper.DataFormat; -import com.bonait.bnframework.common.helper.I.IReadCallBack; -import com.bonait.bnframework.common.helper.I.IWriteCallBack; -import com.bonait.bnframework.common.helper.MessageLog; -import com.bonait.bnframework.common.utils.ToastUtils; -import com.licheedev.modbus4android.ModbusCallback; -import com.licheedev.modbus4android.ModbusParam; -import com.licheedev.modbus4android.ModbusRespException; -import com.licheedev.modbus4android.param.TcpParam; -import com.serotonin.modbus4j.ModbusMaster; -import com.serotonin.modbus4j.exception.ModbusInitException; -import com.serotonin.modbus4j.exception.ModbusTransportException; -import com.serotonin.modbus4j.msg.ReadCoilsResponse; -import com.serotonin.modbus4j.msg.ReadHoldingRegistersResponse; - -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.LineNumberReader; -import java.io.UnsupportedEncodingException; -import java.nio.ByteBuffer; -import java.util.Arrays; -import java.util.concurrent.ExecutionException; - - -public class ModbusTcpServer { - private static volatile ModbusTcpServer instance = null; - - public static ModbusTcpServer get() { - ModbusTcpServer manager = instance; - if (manager == null) { - synchronized (ModbusTcpServer.class) { - manager = instance; - if (manager == null) { - manager = new ModbusTcpServer(); - instance = manager; - } - } - } - return manager; - } - - private ModbusTcpServer() { - } - - static ModbusParam param; - - private int GetAddress(String address) { - if (address == null) return -1; - if (address.length() > 0) { - address = address.trim(); - if (address.toUpperCase().contains("M") && address.length() >= 4) { - String[] res = address.substring(1).split("[.]"); - if (res != null && res.length == 2) { - try { - int firstAdd = Integer.parseInt(res[0]); - int endAdd = Integer.parseInt(res[1]); - if (endAdd >= 0 && endAdd <= 7) { - return (firstAdd * 8) + 320 + endAdd; - } - } catch (NumberFormatException e) { - return -1; - } - } - } else if (address.toUpperCase().contains("I") && address.length() >= 4) { - String[] res = address.substring(1).split("[.]"); - if (res != null && res.length == 2) { - try { - int firstAdd = Integer.parseInt(res[0]); - int endAdd = Integer.parseInt(res[1]); - if (endAdd >= 0 && endAdd <= 7) { - return (firstAdd * 8) + endAdd; - } - } catch (NumberFormatException e) { - return -1; - } - } - } else if ((address.toUpperCase().contains("VW") || address.toUpperCase().contains("VD")) && address.length() >= 3) { - String res = address.substring(2); - if (res != null) { - try { - int tempAdd = Integer.parseInt(res); - return (tempAdd / 2) + 100; - } catch (NumberFormatException e) { - return -1; - } - } - } else { - try { - return Integer.parseInt(address); - } catch (NumberFormatException e) { - return -1; - } - } - } - return -1; - } - - /** - * 获取布尔位地址信息 - * 列:M2.5 = getBitSingleAdd("M",2,5); - * - * @param Prefix 地址标头 - * @param startAdd 起始地址编号 - * @param num 要获取的第几位数量 - * @return - */ - public String getBitSingleAdd(String Prefix, int startAdd, int num) { - if (num > 0) { - int FirstAdd = num / 8; - int EndAdd = num % 8; - if (EndAdd == 0) { - FirstAdd--; - EndAdd = 7; - } else { - EndAdd--; - } - return Prefix + FirstAdd + startAdd + "." + EndAdd; - } - return ""; - } - - /** - * Ping PLC地址是否通畅 - * @param address - * @param pingTimes ping的次数 - * @param timeOut 超时时间 10 - * @return - */ - public static boolean ping2(String address, int pingTimes, int timeOut) { - Process process = null; - try { - process = Runtime.getRuntime().exec( "ping " + "-c " + pingTimes + " -w " + timeOut+ " "+address); - InputStreamReader r = new InputStreamReader(process.getInputStream()); - - LineNumberReader returnData = new LineNumberReader(r); - - String returnMsg=""; - - String line = ""; - - while ((line = returnData.readLine()) != null) { - - System.out.println(line); - - returnMsg += line; - - } - - if(returnMsg.indexOf("100% packet loss")!=-1){ - System.out.println("与 " +address +" 连接不畅通."); - //ToastUtils.info("与 " +address +" 连接不畅通."); - return false; - } else{ - System.out.println("与 " +address +" 连接畅通."); - //ToastUtils.info("与 " +address +" 连接不畅通."); - return true; - } - } catch (IOException e) { - // e.printStackTrace(); - } - return false; - - } - - - /** - * 连接 - */ - public void Connect() throws InterruptedException { - boolean status = false; - while (!status) { - try { - //status为0则代表通,为1则代表不通。 - status =ping2(ConfigName.getInstance().Address,1,1); - Thread.sleep(1000); - } catch (InterruptedException e) { - MessageLog.ShowInfo("设备 " + ConfigName.getInstance().Address + " 网络验证失败"); - } catch (Exception e) { - MessageLog.ShowInfo("设备 " + ConfigName.getInstance().Address + " 网络验证失败"); - } - } - MessageLog.ShowInfo("设备 " + ConfigName.getInstance().Address + " PLC通讯正常,准备连接!"); - - while (ConfigName.getInstance().PlcIsConnect==false) - { - ConnectPLC(); - Thread.sleep(5000); - } - } - - /** - * 连接PLC - */ - public static void ConnectPLC() - { - String host=ConfigName.getInstance().Address; - int port=ConfigName.getInstance().Post; - param = TcpParam.create(host, port) - .setTimeout(1000) - .setRetries(0) - .setEncapsulated(false) - .setKeepAlive(true); - ModbusTcpHelper.get().init(param, new ModbusCallback() { - @Override - public void onSuccess(ModbusMaster modbusMaster) { - ToastUtils.info("设备 " + ConfigName.getInstance().Address + " 连接成功"); - - MessageLog.ShowInfo("设备 " + ConfigName.getInstance().Address + " 连接成功"); - ConfigName.getInstance().PlcIsConnect = true; - ConfigData.getInstance().PLC_Init(); - } - - @Override - public void onFailure(Throwable tr) { - ConfigName.getInstance().PlcIsConnect = false; - ToastUtils.info("设备 " + ConfigName.getInstance().Address + " 连接失败:" + tr.getMessage()); - MessageLog.ShowError("设备 " + ConfigName.getInstance().Address + " 连接失败:" + tr.getMessage()); - } - @Override - public void onFinally() { - - } - }); - } - -// /** -// * 重新连接Modbus -// */ -// public void ReconnectModbus() -// { -// try { -// -// ThreadManager.Get().StartLong("PLC断线重连线程", true, new IThread() { -// @Override -// public void Run() throws InterruptedException { -// try { -// boolean status =ping2(ConfigName.getInstance().Address,1,1); -// if(status) -// { -// ModbusMaster master= ModbusTcpHelper.get().getModbusMaster(); -// if (master==null || master.isConnected() == false) { -// ConnectPLC(); -// } -// Thread.sleep(20000); -// } -// } catch (Exception e) { -// Log.i("PLC", "PLC重连接失败!"+e.getMessage()); -// } -// } -// @Override -// public void RunComplete() throws InterruptedException { -// } -// }); -// }catch (Exception e) { -// MessageLog.ShowInfo("重新连接Modbus异常," +e.getMessage()); -// } -// } - - private Float BytesToFloat(byte[] buffers, DataFormat df) { - if (buffers.length == 4) { - byte[] bytes = new byte[4]; - if (df == DataFormat.ABCD) { - bytes[0] = buffers[3]; - bytes[1] = buffers[2]; - bytes[2] = buffers[1]; - bytes[3] = buffers[0]; - } else if (df == DataFormat.CDAB) { - bytes[0] = buffers[1]; - bytes[1] = buffers[0]; - bytes[2] = buffers[3]; - bytes[3] = buffers[2]; - } else if (df == DataFormat.BADC) { - bytes[0] = buffers[2]; - bytes[1] = buffers[3]; - bytes[2] = buffers[0]; - bytes[3] = buffers[1]; - } else if (df == DataFormat.DCBA) { - bytes[0] = buffers[0]; - bytes[1] = buffers[1]; - bytes[2] = buffers[2]; - bytes[3] = buffers[3]; - } - return ByteBuffer.wrap(bytes).getFloat(); - } - return 0.0f; - } - - private Integer BytesToInt(byte[] buffers, DataFormat df) { - if (buffers.length == 4) { - byte[] bytes = new byte[4]; - if (df == DataFormat.ABCD) { - bytes[0] = buffers[3]; - bytes[1] = buffers[2]; - bytes[2] = buffers[1]; - bytes[3] = buffers[0]; - } else if (df == DataFormat.CDAB) { - bytes[0] = buffers[1]; - bytes[1] = buffers[0]; - bytes[2] = buffers[3]; - bytes[3] = buffers[2]; - } else if (df == DataFormat.BADC) { - bytes[0] = buffers[2]; - bytes[1] = buffers[3]; - bytes[2] = buffers[0]; - bytes[3] = buffers[1]; - } else if (df == DataFormat.DCBA) { - bytes[0] = buffers[0]; - bytes[1] = buffers[1]; - bytes[2] = buffers[2]; - bytes[3] = buffers[3]; - } - return ByteBuffer.wrap(bytes).getInt(); - } - return 0; - } - - private byte[] IntToByte(int number) { - int temp = number; - byte[] b = new byte[4]; - for (int i = 0; i < b.length; i++) { - b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位 - temp = temp >> 8; // 向右移8位 - } - return b; - } - - private short[] IntToShorts(int value) { - short[] res = new short[2]; - int temp = value; - byte[] b = new byte[4]; - for (int i = 0; i < b.length; i++) { - b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位 - temp = temp >> 8; // 向右移8位 - } - for (int i = 0; i < res.length; i++) { - short s0 = (short) (b[i * 2] & 0xff);// 最低位 - short s1 = (short) (b[i * 2 + 1] & 0xff); - s1 <<= 8; - res[i] = (short) (s0 | s1); - } - return res; - } - - public static String GetString(short[] src, int start, int len) throws UnsupportedEncodingException { - short[] temp = new short[len]; - for (int i = 0; i < len; i++) { - temp[i] = src[i + start]; - } - byte[] bytesTemp = shorts2Bytes(temp); - for (int i = 0; i < bytesTemp.length; i++) { - byte b = bytesTemp[i]; - } - String str = new String(bytesTemp, "UTF-8"); - return str; - } - - public static byte[] shorts2Bytes(short[] data) { - byte[] byteValue = new byte[data.length * 2]; - for (int i = 0; i < data.length; i++) { - byteValue[i * 2] = (byte) (data[i] & 0xff); - byteValue[i * 2 + 1] = (byte) ((data[i] & 0xff00) >> 8); - } - return byteValue; - } - - /*** - *读取实时状态 - * @param Address the address - * @param length 读取的长度 3 - * @param callback 读取成功的回调 - */ - public void ReadStatus(String Address, int length, IReadCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - try { - ReadHoldingRegistersResponse res = ModbusTcpHelper.get().syncReadHoldingRegisters(1, add, length); - byte[] data = res.getData(); - byte[] tempData = new byte[8]; - tempData[0] = data[1]; - tempData[1] = data[0]; - tempData[2] = data[3]; - tempData[3] = data[2]; - tempData[4] = data[5]; - tempData[5] = data[4]; - tempData[6] = data[7]; - tempData[7] = data[6]; - if (callback != null) callback.onSuccess(tempData); - } catch (InterruptedException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } - } - /** - * 读取补偿算法 - * @param Address - * @param length - * @param callback - */ - public void ReadbcStatus(String Address, int length, IReadCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - try { - ReadHoldingRegistersResponse res = ModbusTcpHelper.get().syncReadHoldingRegisters(1, add, length); - byte[] data = res.getData(); - byte[] tempData = new byte[1]; - tempData[0] = data[1]; - if (callback != null) callback.onSuccess(tempData); - } catch (InterruptedException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } - } - - - /*** - *读取扫码数据 - * @param Address the address - * @param length 读取的长度 - * @param callback 读取成功的回调 - */ - public void ReadString(String Address, int length, IReadCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - try { - ReadHoldingRegistersResponse res = ModbusTcpHelper.get().syncReadHoldingRegisters(1, add, length); - byte[] data = res.getData(); - byte[] data1 = Arrays.copyOfRange(data, 0, data.length); - //36 GUID 18 Number - String id = ""; - try { - byte[] tempdata = new byte[data.length]; - int index=0; - for (int i = 0; i < data1.length; i++) { - if (i % 2 == 0) { - - tempdata[i + 1] = data1[i]; - } else { - tempdata[i - 1] = data1[i]; - } - - if (data1[i]==0 && index==0) - { - index=i; - } - } - - id = new String(tempdata, "UTF-8").trim(); - } catch (UnsupportedEncodingException ex) { - } - if (callback != null) callback.onSuccess(id); - } catch (InterruptedException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } - } - - public void WriteString(String Address, int length, IWriteCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - short[] send = new short[length]; - for (short item : send) { - item = 0; - } - try { - ModbusTcpHelper.get().syncWriteRegisters(1, add, send); - if (callback != null) - callback.onSuccess(); - } catch (InterruptedException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } - } - - public void ReadShort(String Address, int length, IReadCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - try { - ReadHoldingRegistersResponse res = ModbusTcpHelper.get().syncReadHoldingRegisters(1, add, length); - short[] data = res.getShortData(); - if (data.length == length) { - if (callback != null) callback.onSuccess(data); - } - } catch (InterruptedException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } - } - - public void ReadBool(String Address, int length, IReadCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - try { - ReadCoilsResponse res = ModbusTcpHelper.get().syncReadCoil(1, add, length); - boolean[] data = res.getBooleanData(); - boolean[] result = Arrays.copyOfRange(data, 0, length); - if (result.length == length) { - if (callback != null) callback.onSuccess(result); - } - } catch (InterruptedException e) { - MessageLog.ShowError("ReadBool onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("ReadBool onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("ReadBool onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("ReadBool onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("ReadBool onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } - } - - public void ReadFloat(String Address, int length, IReadCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - try { - ReadHoldingRegistersResponse res = ModbusTcpHelper.get().syncReadHoldingRegisters(1, add, length*2); - byte[] data = res.getData(); - float[] tempValues = new float[length]; - for (int i = 0; i < length; i++) { - byte[] tempData = new byte[4]; - for (int m = 0; m < 4; m++) { - tempData[m] = data[i * 4 + m]; - } - tempValues[i] = BytesToFloat(tempData, DataFormat.BADC); - } - if (tempValues.length == length) { - if (callback != null) callback.onSuccess(tempValues); - } - } catch (InterruptedException e) { - MessageLog.ShowError("ReadFloat onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("ReadFloat onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("ReadFloat onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("ReadFloat onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("ReadFloat onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } - } - - public void ReadInt(String Address, int length, IReadCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - try { - ReadHoldingRegistersResponse res = ModbusTcpHelper.get().syncReadHoldingRegisters(1, add, length * 2); - byte[] data = res.getData(); - int[] tempValues = new int[length]; - if(data.length>=4) - { - for (int i = 0; i < length; i++) { - byte[] tempData = new byte[4]; - for (int m = 0; m < 4; m++) { - tempData[m] = data[i * 4 + m]; - } -// Integer a1 = tempValues[i] = BytesToInt(tempData, DataFormat.ABCD); -// Integer a2 = tempValues[i] = BytesToInt(tempData, DataFormat.BADC); -// Integer a3 = tempValues[i] = BytesToInt(tempData, DataFormat.CDAB); -// Integer a4 = tempValues[i] = BytesToInt(tempData, DataFormat.DCBA); - tempValues[i] = BytesToInt(tempData, DataFormat.BADC); - } - }else - { - MessageLog.ShowError("ReadInt onFailure,Address=" ); - - } - if (callback != null) callback.onSuccess(tempValues); - } catch (InterruptedException e) { - MessageLog.ShowError("ReadInt onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("ReadInt onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("ReadInt onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("ReadInt onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("ReadInt onFailure,Address=" + Address + ",length=" + length + ",msg:" + e.toString()); - } - } - - public void WriteShort(String Address, short Value, IWriteCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - short[] send = new short[1]; - send[0] = Value; - try { - ModbusTcpHelper.get().syncWriteRegisters(1, add, send); - if (callback != null) - callback.onSuccess(); - } catch (InterruptedException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } - } - - public void WriteBool(String Address, boolean Value, IWriteCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - try { - ModbusTcpHelper.get().syncWriteCoil(1, add, Value); - if (callback != null) - callback.onSuccess(); - } catch (InterruptedException e) { - MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } - } - - public void WriteFloat(String Address, float Value, IWriteCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - int intBits = Float.floatToRawIntBits(Value); - short[] send = IntToShorts(intBits); - try { - ModbusTcpHelper.get().syncWriteRegisters(1, add, send); - - if (callback != null) callback.onSuccess(); - } catch (InterruptedException e) { - MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } - } - - public void WriteInt(String Address, int Value, IWriteCallBack callback) { - int add = GetAddress(Address); - if (add < 0) return; - short[] send = IntToShorts(Value); - try { - ModbusTcpHelper.get().syncWriteRegisters(1, add, send); - if (callback != null) callback.onSuccess(); - } catch (InterruptedException e) { - MessageLog.ShowError("WriteInt onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("WriteInt onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("WriteInt onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("WriteInt onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("WriteInt onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - if (callback != null) callback.onFailure(e.toString()); - } - } - - public void WriteShort(String Address, short Value) { - int add = GetAddress(Address); - if (add < 0) return; - short[] send = new short[1]; - send[0] = Value; - try { - ModbusTcpHelper.get().syncWriteRegisters(1, add, send); - } catch (InterruptedException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } - } - - public void WriteBool(String Address, boolean Value) { - int add = GetAddress(Address); - if (add < 0) return; - - try { - ModbusTcpHelper.get().syncWriteCoil(1, add, Value); - } catch (InterruptedException e) { - MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } - } - - public void WriteFloat(String Address, float Value) { - int add = GetAddress(Address); - if (add < 0) return; - int intBits = Float.floatToRawIntBits(Value); - short[] send = new short[]{(short) ((intBits >> 16) & 0xffff), (short) (intBits & 0xffff)}; - try { - ModbusTcpHelper.get().syncWriteRegisters(1, add, send); - } catch (InterruptedException e) { - MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } - } - - public void WriteInt(String Address, int Value) { - int add = GetAddress(Address); - if (add < 0) return; - short[] send = IntToShorts(Value); - try { - ModbusTcpHelper.get().syncWriteRegisters(1, add, send); - } catch (InterruptedException e) { - MessageLog.ShowError("WriteInt onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ExecutionException e) { - MessageLog.ShowError("WriteInt onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusTransportException e) { - MessageLog.ShowError("WriteInt onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusInitException e) { - MessageLog.ShowError("WriteInt onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } catch (ModbusRespException e) { - MessageLog.ShowError("WriteInt onFailure,Address=" + Address + ",length=" + Value + ",msg:" + e.toString()); - } - } - -} diff --git a/app/src/main/java/com/bonait/bnframework/common/oss/OssHelper.java b/app/src/main/java/com/bonait/bnframework/common/oss/OssHelper.java index 3f60ef17..2bcc0278 100644 --- a/app/src/main/java/com/bonait/bnframework/common/oss/OssHelper.java +++ b/app/src/main/java/com/bonait/bnframework/common/oss/OssHelper.java @@ -17,10 +17,9 @@ import com.alibaba.sdk.android.oss.common.auth.OSSPlainTextAKSKCredentialProvide import com.alibaba.sdk.android.oss.internal.OSSAsyncTask; import com.alibaba.sdk.android.oss.model.PutObjectRequest; import com.alibaba.sdk.android.oss.model.PutObjectResult; +import com.bonait.bnframework.HBL.Interface.IRunT; import com.bonait.bnframework.business.ConfigData; import com.bonait.bnframework.common.constant.ConfigName; -import com.bonait.bnframework.common.helper.I.IRun; -import com.bonait.bnframework.common.helper.I.IRunT; import com.bonait.bnframework.common.image.utils.LocalCacheUtils; import com.bonait.bnframework.common.model.ResAPI; diff --git a/app/src/main/java/com/bonait/bnframework/modules/home/activity/BottomNavigationMainActivity.java b/app/src/main/java/com/bonait/bnframework/modules/home/activity/BottomNavigationMainActivity.java index 814bda4e..a2128408 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/home/activity/BottomNavigationMainActivity.java +++ b/app/src/main/java/com/bonait/bnframework/modules/home/activity/BottomNavigationMainActivity.java @@ -10,18 +10,18 @@ import android.util.Log; import android.view.MenuItem; import android.widget.RelativeLayout; +import com.bonait.bnframework.HBL.Logs.MessageLog; +import com.bonait.bnframework.HBL.Thread.IThread; +import com.bonait.bnframework.HBL.Thread.ThreadManager; import com.bonait.bnframework.R; import com.bonait.bnframework.business.ConfigData; import com.bonait.bnframework.business.OrderServer; import com.bonait.bnframework.common.base.BaseActivity; import com.bonait.bnframework.common.constant.ConfigName; -import com.bonait.bnframework.common.helper.I.IThread; import com.bonait.bnframework.common.helper.MQTT; import com.bonait.bnframework.common.helper.MediaPlayerHelper; -import com.bonait.bnframework.common.helper.MessageLog; -import com.bonait.bnframework.common.helper.ThreadManager; +import com.bonait.bnframework.common.helper.ModbusHelper; import com.bonait.bnframework.common.image.utils.LocalCacheUtils; -import com.bonait.bnframework.common.modbus.ModbusTcpServer; import com.bonait.bnframework.common.tabbar.MainNavigateTabBar; import com.bonait.bnframework.common.utils.NetworkUtils; import com.bonait.bnframework.modules.home.adapter.FragmentAdapter; @@ -112,52 +112,55 @@ public class BottomNavigationMainActivity extends BaseActivity { //判断连接环境 ConfigData.getInstance().ToggleEnvironment(); //2.初始化PLC - ReconnectModbus(); + ModbusHelper.get().RtuInit("/dev/ttyCOM0",9600); +// ReconnectModbus(); //MQTT数据监听 OrderServer.Get().MqttInit(); } + + /** * 重新连接plc */ public void ReconnectModbus() { try { - ThreadManager.Get().StartLong("PLC断线重连线程", true, new IThread() { - @Override - public void Run() throws InterruptedException { - try { - if (ConfigName.getInstance().PlcIsConnect) { - //ping 不通 - boolean status = ModbusTcpServer.ping2(ConfigName.getInstance().Address, 1, 1); - if (!status) //ping 不通 连接 - { - MessageLog.ShowInfo("PLC状态断开,尝试连接..."); - ConfigName.getInstance().PlcIsConnect = false; - } - } else { - boolean status = ModbusTcpServer.ping2(ConfigName.getInstance().Address, 1, 1); - if (status) { - MessageLog.ShowInfo("设备 " + ConfigName.getInstance().Address + " PLC通讯正常,准备连接!"); - ModbusTcpServer.ConnectPLC(); - } else { - MessageLog.ShowInfo("PLC状态断开,尝试连接..."); - ConfigName.getInstance().PlcIsConnect = false; - } - } - - LocalCacheUtils.Get().RunCPUOrMemory(); - - Thread.sleep(5000); - } catch (Exception e) { - Log.i("PLC", "PLC重连接失败!" + e.getMessage()); - } - } - - @Override - public void RunComplete() throws InterruptedException { - } - }); + + +// ThreadManager.get().StartLong("PLC断线重连线程", true, new IThread() { +// @Override +// public void Run() throws InterruptedException { +// try { +//// if (ConfigName.getInstance().PlcIsConnect) { +//// //ping 不通 +//// boolean status = ModbusTcpServer.ping2(ConfigName.getInstance().Address, 1, 1); +//// if (!status) //ping 不通 连接 +//// { +//// MessageLog.ShowInfo("PLC状态断开,尝试连接..."); +//// ConfigName.getInstance().PlcIsConnect = false; +//// } +//// } else { +//// boolean status = ModbusTcpServer.ping2(ConfigName.getInstance().Address, 1, 1); +//// if (status) { +//// MessageLog.ShowInfo("设备 " + ConfigName.getInstance().Address + " PLC通讯正常,准备连接!"); +//// ModbusTcpServer.ConnectPLC(); +//// } else { +//// MessageLog.ShowInfo("PLC状态断开,尝试连接..."); +//// ConfigName.getInstance().PlcIsConnect = false; +//// } +//// } +// +// LocalCacheUtils.Get().RunCPUOrMemory(); +// +// Thread.sleep(5000); +// } catch (Exception e) { +// Log.i("PLC", "PLC重连接失败!" + e.getMessage()); +// } +// } +// +// +// }); } catch (Exception e) { MessageLog.ShowInfo("重新连接Modbus异常," + e.getMessage()); } diff --git a/app/src/main/java/com/bonait/bnframework/modules/home/adapter/wdsz_adapter.java b/app/src/main/java/com/bonait/bnframework/modules/home/adapter/wdsz_adapter.java index a213a4b5..2a955818 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/home/adapter/wdsz_adapter.java +++ b/app/src/main/java/com/bonait/bnframework/modules/home/adapter/wdsz_adapter.java @@ -25,7 +25,6 @@ import com.bonait.bnframework.common.constant.ConfigName; import com.bonait.bnframework.common.constant.DataBus; import com.bonait.bnframework.common.db.res.SilosLsjyMode; import com.bonait.bnframework.common.db.res.wdszMode; -import com.bonait.bnframework.common.helper.I.IRun; import com.bonait.bnframework.common.helper.I.IWriteCallBack; import com.bonait.bnframework.common.helper.InputFilterMinMax; import com.bonait.bnframework.common.utils.ToastUtils; diff --git a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/MakeGoodFragment.java b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/MakeGoodFragment.java index 8d4bcedf..148443cb 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/MakeGoodFragment.java +++ b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/MakeGoodFragment.java @@ -26,6 +26,8 @@ import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; +import com.bonait.bnframework.HBL.Interface.IRun; +import com.bonait.bnframework.HBL.Interface.IRunT; import com.bonait.bnframework.R; import com.bonait.bnframework.business.ConfigData; import com.bonait.bnframework.business.ExecuteTheRecipe; @@ -51,13 +53,8 @@ import com.bonait.bnframework.common.db.res.ResGoodsRecipe; import com.bonait.bnframework.common.db.res.SilosLsjyMode; import com.bonait.bnframework.common.db.res.UserLogEnum; import com.bonait.bnframework.common.db.res.lcMode; -import com.bonait.bnframework.common.helper.I.IRun; -import com.bonait.bnframework.common.helper.I.IRunT; -import com.bonait.bnframework.common.helper.I.IThread; import com.bonait.bnframework.common.helper.I.IWriteCallBack; import com.bonait.bnframework.common.helper.I.MyClickListener; -import com.bonait.bnframework.common.helper.MessageLog; -import com.bonait.bnframework.common.helper.ThreadManager; import com.bonait.bnframework.common.helper.WrapContentLinearLayoutManager; import com.bonait.bnframework.common.linktab.LinkMode; import com.bonait.bnframework.common.linktab.TopItemDecoration; diff --git a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/GoodPeiFangActivity.java b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/GoodPeiFangActivity.java index e9f1fc6e..e379b5b9 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/GoodPeiFangActivity.java +++ b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/GoodPeiFangActivity.java @@ -33,7 +33,6 @@ import com.bonait.bnframework.common.db.mode.BPA_MATERIAL; import com.bonait.bnframework.common.db.res.ResGoodProperty; import com.bonait.bnframework.common.db.res.ResGoodsRecipe; import com.bonait.bnframework.common.db.res.lcMode; -import com.bonait.bnframework.common.helper.I.IRunT; import com.bonait.bnframework.common.helper.I.MyClickListener; import com.bonait.bnframework.common.http.callback.json.JsonDialogCallback; import com.bonait.bnframework.common.image.MyBitmapUtils; diff --git a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/ZdqxActivity.java b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/ZdqxActivity.java index 581e78bb..e3b85c86 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/ZdqxActivity.java +++ b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/ZdqxActivity.java @@ -11,13 +11,13 @@ import android.os.Bundle; import android.view.View; import android.widget.Button; +import com.bonait.bnframework.HBL.Interface.IRun; import com.bonait.bnframework.R; import com.bonait.bnframework.business.ExecuteTheRecipe; import com.bonait.bnframework.common.base.BaseActivity; import com.bonait.bnframework.common.constant.DataBus; import com.bonait.bnframework.common.db.QueryDB; import com.bonait.bnframework.common.db.mode.BPA_SUGAR; -import com.bonait.bnframework.common.helper.I.IRun; import com.bonait.bnframework.common.helper.I.IWriteCallBack; import com.bonait.bnframework.common.helper.WrapContentLinearLayoutManager; import com.bonait.bnframework.common.utils.AlertDialogUtils; diff --git a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/Silos_item_jiaoyan_fragment.java b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/Silos_item_jiaoyan_fragment.java index 9e65f861..b77fb87a 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/Silos_item_jiaoyan_fragment.java +++ b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/Silos_item_jiaoyan_fragment.java @@ -18,6 +18,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.bonait.bnframework.HBL.Interface.IRun; import com.bonait.bnframework.R; import com.bonait.bnframework.business.ExecuteTheRecipe; import com.bonait.bnframework.common.base.BaseFragment; @@ -26,7 +27,6 @@ import com.bonait.bnframework.common.constant.DataBus; import com.bonait.bnframework.common.db.QueryDB; import com.bonait.bnframework.common.db.res.SilosLsjyMode; import com.bonait.bnframework.common.db.res.lcMode; -import com.bonait.bnframework.common.helper.I.IRun; import com.bonait.bnframework.common.helper.I.IWriteCallBack; import com.bonait.bnframework.common.utils.ToastUtils; import com.bonait.bnframework.modules.home.fragment.from.LogActivity; diff --git a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/silos_jiaoyan.java b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/silos_jiaoyan.java index 53f60b00..646b6132 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/silos_jiaoyan.java +++ b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/silos_jiaoyan.java @@ -26,6 +26,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentManager; +import com.bonait.bnframework.HBL.Interface.IRun; import com.bonait.bnframework.R; import com.bonait.bnframework.business.ExecuteTheRecipe; import com.bonait.bnframework.common.constant.ConfigName; @@ -34,7 +35,6 @@ import com.bonait.bnframework.common.db.mode.BPA_MATERIAL; import com.bonait.bnframework.common.db.mode.BPA_SILOS; import com.bonait.bnframework.common.db.mode.BPA_SILOSANDMATERIAL; import com.bonait.bnframework.common.db.res.lcMode; -import com.bonait.bnframework.common.helper.I.IRun; import com.bonait.bnframework.common.helper.I.IWriteCallBack; import com.bonait.bnframework.common.helper.I.MyClickListener; import com.bonait.bnframework.common.model.mode.ResMenuLeft; diff --git a/app/src/main/java/com/bonait/bnframework/modules/welcome/activity/LoginActivity.java b/app/src/main/java/com/bonait/bnframework/modules/welcome/activity/LoginActivity.java index 639678d8..fe78e091 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/welcome/activity/LoginActivity.java +++ b/app/src/main/java/com/bonait/bnframework/modules/welcome/activity/LoginActivity.java @@ -22,6 +22,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; +import com.bonait.bnframework.HBL.Logs.MessageLog; import com.bonait.bnframework.R; import com.bonait.bnframework.business.ConfigData; import com.bonait.bnframework.common.base.BaseActivity; @@ -32,7 +33,6 @@ import com.bonait.bnframework.common.db.QueryDB; import com.bonait.bnframework.common.db.mode.BPA_USER; import com.bonait.bnframework.common.db.res.UserLogEnum; import com.bonait.bnframework.common.helper.ActiveMax; -import com.bonait.bnframework.common.helper.MessageLog; import com.bonait.bnframework.common.utils.AlertDialogUtils; import com.bonait.bnframework.common.utils.AnimationToolUtils; import com.bonait.bnframework.common.utils.AppUtils; @@ -212,7 +212,7 @@ public class LoginActivity extends BaseActivity implements Validator.ValidationL BPA_USER user= QueryDB.UserLogin(userAccount,password); if(user!=null) { - MessageLog.ShowUserMessage(UserLogEnum.登录日志,user.name+"-登录成功"); + MessageLog.ShowInfo(user.name+"-登录成功"); ConfigName.getInstance().user=user; ConfigData.getInstance().SavePZ(); //跳转到主页 diff --git a/app/src/main/res/drawable/bg_btn_cancel.xml b/app/src/main/res/drawable/bg_btn_cancel.xml new file mode 100644 index 00000000..09e6b2b2 --- /dev/null +++ b/app/src/main/res/drawable/bg_btn_cancel.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_back.xml b/app/src/main/res/drawable/dialog_back.xml new file mode 100644 index 00000000..13592de1 --- /dev/null +++ b/app/src/main/res/drawable/dialog_back.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_error_title_back.xml b/app/src/main/res/drawable/dialog_error_title_back.xml new file mode 100644 index 00000000..ba3f2fb2 --- /dev/null +++ b/app/src/main/res/drawable/dialog_error_title_back.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_info_title_back.xml b/app/src/main/res/drawable/dialog_info_title_back.xml new file mode 100644 index 00000000..26ae15d9 --- /dev/null +++ b/app/src/main/res/drawable/dialog_info_title_back.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_warn_title_back.xml b/app/src/main/res/drawable/dialog_warn_title_back.xml new file mode 100644 index 00000000..2e8fa22c --- /dev/null +++ b/app/src/main/res/drawable/dialog_warn_title_back.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_dialog.xml b/app/src/main/res/layout/activity_dialog.xml new file mode 100644 index 00000000..2481c0d8 --- /dev/null +++ b/app/src/main/res/layout/activity_dialog.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + +