@@ -4,16 +4,15 @@ | |||||
<component name="GradleSettings"> | <component name="GradleSettings"> | ||||
<option name="linkedExternalProjectsSettings"> | <option name="linkedExternalProjectsSettings"> | ||||
<GradleProjectSettings> | <GradleProjectSettings> | ||||
<option name="testRunner" value="GRADLE" /> | |||||
<option name="distributionType" value="DEFAULT_WRAPPED" /> | |||||
<option name="externalProjectPath" value="$PROJECT_DIR$" /> | <option name="externalProjectPath" value="$PROJECT_DIR$" /> | ||||
<option name="gradleJvm" value="Android Studio default JDK" /> | |||||
<option name="gradleJvm" value="corretto-11" /> | |||||
<option name="modules"> | <option name="modules"> | ||||
<set> | <set> | ||||
<option value="$PROJECT_DIR$" /> | <option value="$PROJECT_DIR$" /> | ||||
<option value="$PROJECT_DIR$/app" /> | <option value="$PROJECT_DIR$/app" /> | ||||
</set> | </set> | ||||
</option> | </option> | ||||
<option name="resolveExternalAnnotations" value="false" /> | |||||
</GradleProjectSettings> | </GradleProjectSettings> | ||||
</option> | </option> | ||||
</component> | </component> |
@@ -1,5 +1,5 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||
<project version="4"> | <project version="4"> | ||||
<component name="ExternalStorageConfigurationManager" enabled="true" /> | <component name="ExternalStorageConfigurationManager" enabled="true" /> | ||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK" /> | |||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="corretto-11" project-jdk-type="JavaSDK" /> | |||||
</project> | </project> |
@@ -34,6 +34,7 @@ android { | |||||
} | } | ||||
compileOptions { | compileOptions { | ||||
coreLibraryDesugaringEnabled true | |||||
sourceCompatibility JavaVersion.VERSION_1_8 | sourceCompatibility JavaVersion.VERSION_1_8 | ||||
targetCompatibility JavaVersion.VERSION_1_8 | targetCompatibility JavaVersion.VERSION_1_8 | ||||
} | } | ||||
@@ -155,6 +156,9 @@ dependencies { | |||||
implementation 'com.github.SheHuan:NiceImageView:1.0.5' | implementation 'com.github.SheHuan:NiceImageView:1.0.5' | ||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6' | |||||
implementation 'com.github.xingshuangs:iot-communication:1.5.0' | |||||
//MQTT | //MQTT | ||||
// implementation files('libs\\org.eclipse.paho.android.service-1.1.1.jar') | // implementation files('libs\\org.eclipse.paho.android.service-1.1.1.jar') | ||||
// implementation files('libs\\org.eclipse.paho.client.mqttv3-1.2.5.jar') | // implementation files('libs\\org.eclipse.paho.client.mqttv3-1.2.5.jar') | ||||
@@ -34,96 +34,96 @@ | |||||
tools:node="merge" | tools:node="merge" | ||||
tools:replace="android:icon"> | tools:replace="android:icon"> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.DiyUpdate1Activity" | |||||
android:name=".ViewModel.ActivityViewModel.DiyUpdate1Activity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.CookingSimulatedActivity" | |||||
android:name=".ViewModel.ActivityViewModel.CookingSimulatedActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.DishTestActivity" | |||||
android:name=".ViewModel.ActivityViewModel.DishTestActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.BunkerSetupActivity" | |||||
android:name=".ViewModel.ActivityViewModel.BunkerSetupActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.CookingActivity" | |||||
android:name=".ViewModel.ActivityViewModel.CookingActivity" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.Home4Fragment" | |||||
android:name=".ViewModel.FragmentViewModel.Home4Fragment" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.activity.BottomNavigationNewActivity" | |||||
android:name=".ViewModel.ActivityViewModel.BottomNavigationNewActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.mine.fragment.UserActivity" | |||||
android:name=".ViewModel.ActivityViewModel.UserActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.DiyMemoryActivity" | |||||
android:name=".ViewModel.ActivityViewModel.DiyMemoryActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.fragment.SystemCsPLCFragment" | |||||
android:name=".ViewModel.FragmentViewModel.SystemCsPLCFragment" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.FileActivity" | |||||
android:name=".ViewModel.ActivityViewModel.FileActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.ImageChooseActivity" | |||||
android:name=".ViewModel.ActivityViewModel.ImageChooseActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.DiyUpdateActivity" | |||||
android:name=".ViewModel.ActivityViewModel.DiyUpdateActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.mode.fragment_gx" | |||||
android:name=".ViewModel.CustomView.fragment_gx" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.fragment.SystemCsFltlFragment" | |||||
android:name=".ViewModel.FragmentViewModel.SystemCsFltlFragment" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.fragment.SystemCsMonitorFragment" | |||||
android:name=".ViewModel.FragmentViewModel.SystemCsMonitorFragment" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.fragment.SystemCsControlFragment" | |||||
android:name=".ViewModel.FragmentViewModel.SystemCsControlFragment" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.fragment.SystemSeasoningsetFragment" | |||||
android:name=".ViewModel.FragmentViewModel.SystemSeasoningsetFragment" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.fragment.SystemSystemsetFragment" | |||||
android:name=".ViewModel.FragmentViewModel.SystemSystemsetFragment" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.fragment.SystemDeviceinFragment" | |||||
android:name=".ViewModel.FragmentViewModel.SystemDeviceinFragment" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.fragment.systeminternetfragment" | |||||
android:name=".ViewModel.FragmentViewModel.systeminternetfragment" | |||||
android:exported="false" | android:exported="false" | ||||
tools:ignore="Instantiatable" /> | tools:ignore="Instantiatable" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.CpxzActivity" | |||||
android:name=".ViewModel.ActivityViewModel.CpxzActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.SzActivity" | |||||
android:name=".ViewModel.ActivityViewModel.SzActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.WhActivity" | |||||
android:name=".ViewModel.ActivityViewModel.WhActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.CpActivity" | |||||
android:name=".ViewModel.ActivityViewModel.CpActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.home.fragment.from.DiyActivity" | |||||
android:name=".ViewModel.ActivityViewModel.DiyActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<activity | <activity | ||||
android:name=".modules.mine.fragment.from.NoticeActivity" | |||||
android:name=".ViewModel.ActivityViewModel.NoticeActivity" | |||||
android:exported="false" /> | android:exported="false" /> | ||||
<provider | <provider | ||||
@@ -137,7 +137,7 @@ | |||||
</provider> | </provider> | ||||
<activity | <activity | ||||
android:name=".modules.welcome.activity.WelcomeActivity" | |||||
android:name=".ViewModel.ActivityViewModel.WelcomeActivity" | |||||
android:exported="true" | android:exported="true" | ||||
android:theme="@style/AppTheme.Launcher"> | android:theme="@style/AppTheme.Launcher"> | ||||
<intent-filter> | <intent-filter> | ||||
@@ -146,10 +146,10 @@ | |||||
<category android:name="android.intent.category.LAUNCHER" /> | <category android:name="android.intent.category.LAUNCHER" /> | ||||
</intent-filter> | </intent-filter> | ||||
</activity> | </activity> | ||||
<activity android:name=".modules.welcome.activity.LoginActivity"> | |||||
<activity android:name=".ViewModel.ActivityViewModel.LoginActivity"> | |||||
<!-- <intent-filter> --> | <!-- <intent-filter> --> | ||||
<!-- <action android:name="com.bonait.bnframework.modules.welcome.activity.LoginActivity.ACTION_START" /> --> | |||||
<!-- <action android:name="com.bonait.bnframework.ViewModel.ActivityViewModel.LoginActivity.ACTION_START" /> --> | |||||
<!-- <category android:name="android.intent.category.DEFAULT" /> --> | <!-- <category android:name="android.intent.category.DEFAULT" /> --> | ||||
@@ -165,7 +165,7 @@ | |||||
</intent-filter> | </intent-filter> | ||||
--> | --> | ||||
</activity> | </activity> | ||||
<activity android:name=".modules.home.activity.BottomNavigation2Activity" /> | |||||
<activity android:name=".ViewModel.ActivityViewModel.BottomNavigation2Activity" /> | |||||
<receiver | <receiver | ||||
android:name=".common.base.BootReceiver" | android:name=".common.base.BootReceiver" | ||||
@@ -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<String> retstr = new AtomicReference<>(""); | |||||
List<Field> 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<String, String> parameters, Map<String, String> 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<String, String> entry : headers.entrySet()) { | |||||
connection.setRequestProperty(entry.getKey(), entry.getValue()); | |||||
} | |||||
} | |||||
// 设置参数 | |||||
if (parameters != null) { | |||||
StringBuilder stringBuilder = new StringBuilder(); | |||||
for (Map.Entry<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<APIResult> 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<APIResult> 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 <T> void PostT(String url, Object body,String signkey ,IRunT<APIResultT<T>> 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<T> 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<String,String> params,IRunT<String> 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<String,String> 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(); | |||||
} | |||||
} |
@@ -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);//保留为空的属性 | |||||
} | |||||
} |
@@ -0,0 +1,21 @@ | |||||
package com.bonait.bnframework.HBL.API; | |||||
import com.google.gson.GsonBuilder; | |||||
public class APIResultT<T> { | |||||
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);//保留为空的属性 | |||||
} | |||||
} |
@@ -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(); | |||||
} | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} |
@@ -0,0 +1,83 @@ | |||||
package com.bonait.bnframework.HBL.Communication.Modbus; | |||||
import com.bonait.bnframework.HBL.Logs.MessageLog; | |||||
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) { | |||||
if (excpet!=null) excpet.onFailure(e.toString()); | |||||
} catch (ExecutionException e) { | |||||
if (excpet!=null) excpet.onFailure(e.toString()); | |||||
} catch (ModbusTransportException e) { | |||||
if (excpet!=null) excpet.onFailure(e.toString()); | |||||
} catch (ModbusInitException e) { | |||||
if (excpet!=null) excpet.onFailure(e.toString()); | |||||
} catch (ModbusRespException e) { | |||||
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; | |||||
} | |||||
} |
@@ -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); | |||||
} |
@@ -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(); | |||||
} |
@@ -0,0 +1,24 @@ | |||||
package com.bonait.bnframework.HBL.Communication.Modbus; | |||||
import com.bonait.bnframework.HBL.Result.OperateResultT; | |||||
public interface IRead { | |||||
OperateResultT<boolean[]> ReadBool(String address, int length); | |||||
OperateResultT<Boolean> ReadBool(String address); | |||||
OperateResultT<boolean[]> ReadInputCoil(String address, int length); | |||||
OperateResultT<Boolean> ReadInputCoil(String address); | |||||
OperateResultT<short[]> ReadShort(String address, int length); | |||||
OperateResultT<Short> ReadShort(String address); | |||||
OperateResultT<int[]> ReadInt(String address, int length); | |||||
OperateResultT<Integer> ReadInt(String address); | |||||
OperateResultT<byte[]> ReadByte(String address, int length); | |||||
OperateResultT<String> ReadString(String address, int length); | |||||
OperateResultT<float[]> ReadFloat(String address, int length); | |||||
OperateResultT<Float> ReadFloat(String address); | |||||
} |
@@ -0,0 +1,23 @@ | |||||
package com.bonait.bnframework.HBL.Communication.Modbus; | |||||
import com.bonait.bnframework.HBL.Result.OperateResult; | |||||
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); | |||||
} |
@@ -0,0 +1,695 @@ | |||||
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.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.ReadDiscreteInputsResponse; | |||||
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 void DisConnect(){ mw.release(); } | |||||
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<String> errorInfo=new AtomicReference<>(""); | |||||
while (IsConnected==false) | |||||
{ | |||||
errorInfo.set(""); | |||||
mw.init(param, new ModbusCallback<com.serotonin.modbus4j.ModbusMaster>() { | |||||
@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<String> errorInfo=new AtomicReference<>(""); | |||||
while (IsConnected==false) | |||||
{ | |||||
mw.init(param, new ModbusCallback<com.serotonin.modbus4j.ModbusMaster>() { | |||||
@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 <T> OperateResultT<T> Read(String address, int length){ | |||||
// if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<T>>resultValue=new AtomicReference<OperateResultT<T>>(); | |||||
try{ | |||||
String typeName= resultValue.get().Content.getClass().getCanonicalName(); | |||||
switch(typeName){ | |||||
case "java.lang.String": | |||||
resultValue.set((OperateResultT<T>)ReadString(address,length)); | |||||
break; | |||||
case "java.lang.Byte": | |||||
resultValue.set((OperateResultT<T>)ReadByte(address,1)); | |||||
break; | |||||
case "java.lang.Integer": | |||||
resultValue.set((OperateResultT<T>)ReadInt(address)); | |||||
break; | |||||
case "java.lang.Float": | |||||
resultValue.set((OperateResultT<T>)ReadFloat(address)); | |||||
break; | |||||
case "java.lang.Short": | |||||
resultValue.set((OperateResultT<T>)ReadShort(address)); | |||||
break; | |||||
case "java.lang.Boolean": | |||||
resultValue.set((OperateResultT<T>)ReadBool(address)); | |||||
break; | |||||
case "int[]": | |||||
resultValue.set((OperateResultT<T>)ReadInt(address,length)); | |||||
break; | |||||
case "float[]": | |||||
resultValue.set((OperateResultT<T>)ReadFloat(address,length)); | |||||
break; | |||||
case "short[]": | |||||
resultValue.set((OperateResultT<T>)ReadShort(address,length)); | |||||
break; | |||||
case "boolean[]": | |||||
resultValue.set((OperateResultT<T>)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 <T> OperateResultT<T> Read(String address){ | |||||
// if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<T>>resultValue=new AtomicReference<>(); | |||||
resultValue.set(Read(address,1)); | |||||
return resultValue.get(); | |||||
} | |||||
public <T> OperateResult Write(String address,T value) { | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=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<boolean[]> ReadBool(String address, int length) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<boolean[]>>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<Boolean> ReadBool(String address) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<Boolean>>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<boolean[]> ReadInputCoil(String address, int length) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<boolean[]>>resultValue=new AtomicReference<>(); | |||||
new ExceptionServer(address, length, new IExceptionHandling() { | |||||
@Override | |||||
public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { | |||||
ReadDiscreteInputsResponse res = mw.syncReadDiscreteInput(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<Boolean> ReadInputCoil(String address) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<Boolean>>resultValue=new AtomicReference<>(); | |||||
ReadInputCoil(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<short[]> ReadShort(String address, int length) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<short[]>>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<Short> ReadShort(String address) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<Short>>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<int[]> ReadInt(String address, int length) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<int[]>>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<Integer> ReadInt(String address) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<Integer>>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<byte[]> ReadByte(String address, int length) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<byte[]>>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<String> ReadString(String address, int length) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<String>>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<float[]> ReadFloat(String address, int length) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<float[]>>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<Float> ReadFloat(String address) { | |||||
if(address==null||address.isEmpty()){ return OperateResultT.CreateFailedT("无效的地址");} | |||||
if(!getConnected()){ return OperateResultT.CreateFailedT("设备未连接");} | |||||
AtomicReference<OperateResultT<Float>>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(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=new AtomicReference<>(); | |||||
new ExceptionServer(address, 1, new IExceptionHandling() { | |||||
@Override | |||||
public void onSuccess(int add) throws InterruptedException, ExecutionException, ModbusTransportException, ModbusInitException, ModbusRespException { | |||||
mw.syncWriteCoil(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) { | |||||
if(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=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(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=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(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
return WriteShort(address, new short[]{value}); | |||||
} | |||||
@Override | |||||
public OperateResult WriteShort(String address, short[] value) { | |||||
if(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=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(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=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(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
return WriteInt(address, new int[]{value}); | |||||
} | |||||
@Override | |||||
public OperateResult WriteInt(String address, int[] value) { | |||||
if(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=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(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=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(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=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(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
return WriteFloat(address, new float[]{value}); | |||||
} | |||||
@Override | |||||
public OperateResult WriteFloat(String address, float[] value) { | |||||
if(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=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(address==null||address.isEmpty()){ return OperateResult.CreateFailed("无效的地址");} | |||||
if(!getConnected()){ return OperateResult.CreateFailed("设备未连接");} | |||||
AtomicReference<OperateResult>resultValue=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(); | |||||
} | |||||
} |
@@ -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 <T> OperateResultT<T> Read(String add){ | |||||
if(!IsConnected()) return OperateResultT.CreateFailedT(add+":读取数据失败,连接已断开"); | |||||
OperateResultT<T> 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 <T> 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.<Boolean>TryToGenericity(value).OnSource(s->{ siemens.WriteBoolean(add,s.Content);}); | |||||
}else if(typeName.contains("Integer")){ | |||||
if(add.toUpperCase().contains("VD")){ | |||||
Convert.<Integer>TryToGenericity(value).OnSource(s->{ siemens.WriteInt32(add,s.Content);}); | |||||
} | |||||
else if (add.toUpperCase().contains("VW")){ | |||||
Convert.<Integer>TryToGenericity(value).OnSource(s->{ siemens.WriteUInt16(add,s.Content);}); | |||||
} | |||||
}else if(typeName.contains("Short")){ | |||||
Convert.<Short>TryToGenericity(value).OnSource(s->{ siemens.WriteInt16(add,s.Content);}); | |||||
}else if(typeName.contains("Float")){ | |||||
Convert.<Float>TryToGenericity(value).OnSource(s->{ siemens.WriteFloat32(add,s.Content);}); | |||||
}else{ | |||||
return OperateResult.CreateFailed(typeName+" 暂不支持的数据类型"); | |||||
} | |||||
return OperateResult.CreateSuccess(); | |||||
}catch (Exception e){ | |||||
return OperateResult.CreateFailed(e); | |||||
} | |||||
} | |||||
} |
@@ -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<Boolean> ReadBoolean(String... address) { | |||||
List<Boolean> 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<Short> ReadInt16(String... address) { | |||||
List<Short> 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<Integer> ReadUInt16(String... address) { | |||||
List<Integer> 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<Integer> ReadInt32(String... address) { | |||||
List<Integer> 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<Float> ReadFloat32(String... address) { | |||||
List<Float> 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); | |||||
} | |||||
} |
@@ -0,0 +1,213 @@ | |||||
package com.bonait.bnframework.HBL.CustomView; | |||||
import android.content.Context; | |||||
import android.content.res.TypedArray; | |||||
import android.graphics.Canvas; | |||||
import android.graphics.Color; | |||||
import android.graphics.Paint; | |||||
import android.graphics.Path; | |||||
import android.graphics.RectF; | |||||
import android.os.Build; | |||||
import android.util.AttributeSet; | |||||
import android.view.View; | |||||
import android.view.ViewGroup; | |||||
import com.bonait.bnframework.R; | |||||
/** | |||||
* 阴影容器 | |||||
* 需要在 res->values->attrs.xml中添加以下内容 | |||||
* <declare-styleable name="ShadowContainer"> | |||||
* <attr name="containerShadowColor" format="color" /><!--阴影颜色--> | |||||
* <attr name="containerShadowRadius" format="dimension" /><!--阴影半径--> | |||||
* <attr name="containerDeltaLength" format="dimension" /><!--子View到ShadowContainer的距离--> | |||||
* <attr name="containerCornerRadius" format="dimension" /><!--子View背景的圆角大小--> | |||||
* <attr name="deltaX" format="dimension" /> | |||||
* <attr name="deltaY" format="dimension" /> | |||||
* <attr name="enable" format="boolean" /> | |||||
* </declare-styleable> | |||||
* Reference: https://github.com/cjlemon/Shadow | |||||
*/ | |||||
public class ShadowContainer extends ViewGroup { | |||||
private final float deltaLength; | |||||
private final float cornerRadius; | |||||
private final Paint mShadowPaint; | |||||
private boolean drawShadow; | |||||
public ShadowContainer(Context context) { | |||||
this(context, null); | |||||
} | |||||
public ShadowContainer(Context context, AttributeSet attrs) { | |||||
this(context, attrs, 0); | |||||
} | |||||
public ShadowContainer(Context context, AttributeSet attrs, int defStyleAttr) { | |||||
super(context, attrs, defStyleAttr); | |||||
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ShadowContainer); | |||||
int shadowColor = a.getColor(R.styleable.ShadowContainer_containerShadowColor, Color.RED); | |||||
float shadowRadius = a.getDimension(R.styleable.ShadowContainer_containerShadowRadius, 0); | |||||
deltaLength = a.getDimension(R.styleable.ShadowContainer_containerDeltaLength, 0); | |||||
cornerRadius = a.getDimension(R.styleable.ShadowContainer_containerCornerRadius, 0); | |||||
float dx = a.getDimension(R.styleable.ShadowContainer_deltaX, 0); | |||||
float dy = a.getDimension(R.styleable.ShadowContainer_deltaY, 0); | |||||
drawShadow = a.getBoolean(R.styleable.ShadowContainer_enable, true); | |||||
a.recycle(); | |||||
mShadowPaint = new Paint(); | |||||
mShadowPaint.setStyle(Paint.Style.FILL); | |||||
mShadowPaint.setAntiAlias(true); | |||||
mShadowPaint.setColor(shadowColor); | |||||
mShadowPaint.setShadowLayer(shadowRadius, dx, dy, shadowColor); | |||||
} | |||||
@Override | |||||
protected void dispatchDraw(Canvas canvas) { | |||||
if (drawShadow) { | |||||
/* | |||||
setShadowLayer()/setMaskFilter is not support hardware acceleration, so using LAYER_TYPE_SOFTWARE, but software layers isn't always good. | |||||
LAYER_TYPE_SOFTWARE: software layers should be avoided when the affected view tree updates often. | |||||
*/ | |||||
if (getLayerType() != LAYER_TYPE_SOFTWARE) { | |||||
setLayerType(LAYER_TYPE_SOFTWARE, null); | |||||
} | |||||
View child = getChildAt(0); | |||||
int left = child.getLeft(); | |||||
int top = child.getTop(); | |||||
int right = child.getRight(); | |||||
int bottom = child.getBottom(); | |||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | |||||
canvas.drawRoundRect(left, top, right, bottom, cornerRadius, cornerRadius, mShadowPaint); | |||||
} else { | |||||
Path drawablePath = new Path(); | |||||
drawablePath.moveTo(left + cornerRadius, top); | |||||
drawablePath.arcTo(new RectF(left, top, left + 2 * cornerRadius, top + 2 * cornerRadius), -90, -90, false); | |||||
drawablePath.lineTo(left, bottom - cornerRadius); | |||||
drawablePath.arcTo(new RectF(left, bottom - 2 * cornerRadius, left + 2 * cornerRadius, bottom), 180, -90, false); | |||||
drawablePath.lineTo(right - cornerRadius, bottom); | |||||
drawablePath.arcTo(new RectF(right - 2 * cornerRadius, bottom - 2 * cornerRadius, right, bottom), 90, -90, false); | |||||
drawablePath.lineTo(right, top + cornerRadius); | |||||
drawablePath.arcTo(new RectF(right - 2 * cornerRadius, top, right, top + 2 * cornerRadius), 0, -90, false); | |||||
drawablePath.close(); | |||||
canvas.drawPath(drawablePath, mShadowPaint); | |||||
} | |||||
} | |||||
super.dispatchDraw(canvas); | |||||
} | |||||
/** | |||||
* setMeasuredDimension(): store the modified width and modified height. | |||||
* | |||||
* @param widthMeasureSpec the original width | |||||
* @param heightMeasureSpec the original height | |||||
*/ | |||||
@Override | |||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | |||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec); | |||||
if (getChildCount() != 1) { | |||||
throw new IllegalStateException("Child View can have only one!!!"); | |||||
} | |||||
int measuredWidth = getMeasuredWidth(); | |||||
int measuredHeight = getMeasuredHeight(); | |||||
int widthMode = MeasureSpec.getMode(widthMeasureSpec); | |||||
int heightMode = MeasureSpec.getMode(heightMeasureSpec); | |||||
View child = getChildAt(0); | |||||
MarginLayoutParams layoutParams = (MarginLayoutParams) child.getLayoutParams(); | |||||
int childBottomMargin = (int) (Math.max(deltaLength, layoutParams.bottomMargin) + 1); | |||||
int childLeftMargin = (int) (Math.max(deltaLength, layoutParams.leftMargin) + 1); | |||||
int childRightMargin = (int) (Math.max(deltaLength, layoutParams.rightMargin) + 1); | |||||
int childTopMargin = (int) (Math.max(deltaLength, layoutParams.topMargin) + 1); | |||||
int widthMeasureSpecMode; | |||||
int widthMeasureSpecSize; | |||||
int heightMeasureSpecMode; | |||||
int heightMeasureSpecSize; | |||||
if (widthMode == MeasureSpec.UNSPECIFIED) { | |||||
widthMeasureSpecMode = MeasureSpec.UNSPECIFIED; | |||||
widthMeasureSpecSize = MeasureSpec.getSize(widthMeasureSpec); | |||||
} else { | |||||
if (layoutParams.width == MarginLayoutParams.MATCH_PARENT) { | |||||
widthMeasureSpecMode = MeasureSpec.EXACTLY; | |||||
widthMeasureSpecSize = measuredWidth - childLeftMargin - childRightMargin; | |||||
} else if (MarginLayoutParams.WRAP_CONTENT == layoutParams.width) { | |||||
widthMeasureSpecMode = MeasureSpec.AT_MOST; | |||||
widthMeasureSpecSize = measuredWidth - childLeftMargin - childRightMargin; | |||||
} else { | |||||
widthMeasureSpecMode = MeasureSpec.EXACTLY; | |||||
widthMeasureSpecSize = layoutParams.width; | |||||
} | |||||
} | |||||
if (heightMode == MeasureSpec.UNSPECIFIED) { | |||||
heightMeasureSpecMode = MeasureSpec.UNSPECIFIED; | |||||
heightMeasureSpecSize = MeasureSpec.getSize(heightMeasureSpec); | |||||
} else { | |||||
if (layoutParams.height == MarginLayoutParams.MATCH_PARENT) { | |||||
heightMeasureSpecMode = MeasureSpec.EXACTLY; | |||||
heightMeasureSpecSize = measuredHeight - childBottomMargin - childTopMargin; | |||||
} else if (MarginLayoutParams.WRAP_CONTENT == layoutParams.height) { | |||||
heightMeasureSpecMode = MeasureSpec.AT_MOST; | |||||
heightMeasureSpecSize = measuredHeight - childBottomMargin - childTopMargin; | |||||
} else { | |||||
heightMeasureSpecMode = MeasureSpec.EXACTLY; | |||||
heightMeasureSpecSize = layoutParams.height; | |||||
} | |||||
} | |||||
measureChild(child, MeasureSpec.makeMeasureSpec(widthMeasureSpecSize, widthMeasureSpecMode), MeasureSpec.makeMeasureSpec(heightMeasureSpecSize, heightMeasureSpecMode)); | |||||
int parentWidthMeasureSpec = MeasureSpec.getMode(widthMeasureSpec); | |||||
int parentHeightMeasureSpec = MeasureSpec.getMode(heightMeasureSpec); | |||||
int height = measuredHeight; | |||||
int width = measuredWidth; | |||||
int childHeight = child.getMeasuredHeight(); | |||||
int childWidth = child.getMeasuredWidth(); | |||||
if (parentHeightMeasureSpec == MeasureSpec.AT_MOST) { | |||||
height = childHeight + childTopMargin + childBottomMargin; | |||||
} | |||||
if (parentWidthMeasureSpec == MeasureSpec.AT_MOST) { | |||||
width = childWidth + childRightMargin + childLeftMargin; | |||||
} | |||||
if (width < childWidth + 2 * deltaLength) { | |||||
width = (int) (childWidth + 2 * deltaLength); | |||||
} | |||||
if (height < childHeight + 2 * deltaLength) { | |||||
height = (int) (childHeight + 2 * deltaLength); | |||||
} | |||||
if (height != measuredHeight || width != measuredWidth) { | |||||
setMeasuredDimension(width, height); | |||||
} | |||||
} | |||||
@Override | |||||
protected void onLayout(boolean changed, int l, int t, int r, int b) { | |||||
View child = getChildAt(0); | |||||
int measuredWidth = getMeasuredWidth(); | |||||
int measuredHeight = getMeasuredHeight(); | |||||
int childMeasureWidth = child.getMeasuredWidth(); | |||||
int childMeasureHeight = child.getMeasuredHeight(); | |||||
child.layout((measuredWidth - childMeasureWidth) / 2, (measuredHeight - childMeasureHeight) / 2, (measuredWidth + childMeasureWidth) / 2, (measuredHeight + childMeasureHeight) / 2); | |||||
} | |||||
@Override | |||||
protected LayoutParams generateDefaultLayoutParams() { | |||||
return new MarginLayoutParams(MarginLayoutParams.WRAP_CONTENT, MarginLayoutParams.WRAP_CONTENT); | |||||
} | |||||
@Override | |||||
protected LayoutParams generateLayoutParams(LayoutParams p) { | |||||
return new MarginLayoutParams(p); | |||||
} | |||||
@Override | |||||
public LayoutParams generateLayoutParams(AttributeSet attrs) { | |||||
return new MarginLayoutParams(getContext(), attrs); | |||||
} | |||||
public void setDrawShadow(boolean drawShadow) { | |||||
if (this.drawShadow == drawShadow) { | |||||
return; | |||||
} | |||||
this.drawShadow = drawShadow; | |||||
postInvalidate(); | |||||
} | |||||
} | |||||
@@ -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<value.length;i++) | |||||
{ | |||||
int tempValue = Float.floatToRawIntBits(value[i]); | |||||
b[i*4]=(byte)((tempValue>>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<value.length;i++) | |||||
{ | |||||
b[i*4]=(byte)((value[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); | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} | |||||
@@ -0,0 +1,107 @@ | |||||
package com.bonait.bnframework.HBL.DataUtil; | |||||
import com.bonait.bnframework.HBL.Result.OperateResultT; | |||||
import com.google.gson.Gson; | |||||
import com.google.gson.GsonBuilder; | |||||
public class Convert { | |||||
public static OperateResultT<Boolean> 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<Integer> 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<Short> 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<Float> 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 <T> OperateResultT<T> 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 <T extends Number> OperateResultT<T> TryToNumber(Object value,Class<T> 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 <T> OperateResultT<T> fromJson(Object value, Class<T> 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 <T> OperateResultT<T> fromJson(String value, Class<T> 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); | |||||
} | |||||
} | |||||
} |
@@ -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<len;i++){ | |||||
if (i<bytes.length)tempBytes[i]=bytes[i]; | |||||
} | |||||
for(int m=0;m<result.length;m++) { | |||||
result[m] = (short) ((tempBytes[m * 2] & 0xff) | ((tempBytes[m * 2 + 1] & 0xff) << 8)); | |||||
} | |||||
return result; | |||||
} | |||||
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; | |||||
} | |||||
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 ""; | |||||
} | |||||
} |
@@ -0,0 +1,12 @@ | |||||
package com.bonait.bnframework.HBL.DataUtil; | |||||
public class DataType { | |||||
public static final String STRING=""; | |||||
public static final byte BYTE=0; | |||||
public static final short SHORT=0; | |||||
public static final int INT=0; | |||||
public static final long LONG=0; | |||||
public static final float FLOAT=0f; | |||||
public static final double DOUBLE=0d; | |||||
public static final boolean BOOLEAN=false; | |||||
} |
@@ -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<bytes.length;i++){tempBytes[i]=bytes[i];} | |||||
float[] result = new float[tempBytes.length/4]; | |||||
for (int i=0; i<result.length; i++){ | |||||
byte[] res= new ByteTransDataFormat().ByteTransDataFormat4(tempBytes,df,i*4); | |||||
result[i]=ByteBuffer.wrap(res).getFloat(); | |||||
} | |||||
return result; | |||||
} | |||||
} |
@@ -0,0 +1,51 @@ | |||||
package com.bonait.bnframework.HBL.DataUtil; | |||||
import com.bonait.bnframework.HBL.Enum.DataFormat; | |||||
import java.nio.ByteBuffer; | |||||
public class IntLib { | |||||
public static int ToInt(byte[] bytes, DataFormat df) { | |||||
byte[] res= new ByteTransDataFormat().ByteTransDataFormat4(bytes,df,0); | |||||
return ByteBuffer.wrap(res).getInt(); | |||||
} | |||||
public static int ToInt(short[] shorts, DataFormat df) { | |||||
if (shorts.length<2) return 0; | |||||
byte[] bytes= ByteLib.ToBytes(shorts,df); | |||||
if (bytes.length!=4) return 0; | |||||
return ByteBuffer.wrap(bytes).getInt(); | |||||
} | |||||
public static int[] ToInts(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<bytes.length;i++){tempBytes[i]=bytes[i];} | |||||
int[] result = new int[tempBytes.length/4]; | |||||
for (int i=0; i<result.length; i++){ | |||||
byte[] res= new ByteTransDataFormat().ByteTransDataFormat4(tempBytes,df,i*4); | |||||
result[i]=ByteBuffer.wrap(res).getInt(); | |||||
} | |||||
return result; | |||||
} | |||||
public static boolean GetBit(int value,int offset) | |||||
{ | |||||
if (offset > 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; | |||||
} | |||||
} |
@@ -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<T extends Serializable> { | |||||
public NotifyPropVar(T defaultValue){ | |||||
_value=defaultValue; | |||||
} | |||||
public IRunT<T> ChangeNotify; | |||||
private boolean IsFirst=false; | |||||
private LinkedHashMap<String,IRunT<T>> changedNotifys=new LinkedHashMap<>(); | |||||
public void Register(String key,IRunT<T> notify){ | |||||
// if(changedNotifys.containsKey(key))changedNotifys.remove(key); | |||||
changedNotifys.put(key,notify); | |||||
} | |||||
private T _value; | |||||
// public T getValue(){ return _value; } | |||||
public <T> T getValue(){ return (T) _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->{if(item!=null) item.Run(value);}); | |||||
IsFirst = true; | |||||
} | |||||
} | |||||
} | |||||
@@ -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<bytes.length; i++){tempBytes[i]=bytes[i];} | |||||
short[] result = new short[tempBytes.length/2]; | |||||
for (int i=0; i<result.length; i++){ | |||||
byte[] res= new ByteTransDataFormat().ByteTransDataFormat2(tempBytes,df,i*2); | |||||
result[i]=ByteBuffer.wrap(res).getShort(); | |||||
} | |||||
return result; | |||||
} | |||||
public static short[] ToShorts(float[] floats, DataFormat df) { | |||||
byte[] bytes = ByteLib.ToBytes(floats,df); | |||||
return ShortLib.ToShorts(bytes,df); | |||||
} | |||||
public static short[] ToShorts(int[] floats, DataFormat df) { | |||||
byte[] bytes = ByteLib.ToBytes(floats,df); | |||||
return ShortLib.ToShorts(bytes,df); | |||||
} | |||||
public static boolean GetBit(short value,int offset) | |||||
{ | |||||
if (offset > 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); | |||||
} | |||||
} |
@@ -0,0 +1,8 @@ | |||||
package com.bonait.bnframework.HBL.Dialog; | |||||
public enum AlertDialogButton { | |||||
OK , | |||||
OKCancel, | |||||
YesNoCancel, | |||||
YesNo, | |||||
} |
@@ -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); | |||||
} | |||||
} |
@@ -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(activity!=null) | |||||
activity.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(activity!=null) | |||||
activity.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(activity!=null) | |||||
activity.runOnUiThread(()->{showDialog(activity,message,btn,DialogType.错误,action);}); | |||||
else showDialog(activity,message,btn,DialogType.错误,action); | |||||
} | |||||
} | |||||
@@ -0,0 +1,7 @@ | |||||
package com.bonait.bnframework.HBL.Dialog; | |||||
public enum DialogType { | |||||
警告, | |||||
提示, | |||||
错误 | |||||
} |
@@ -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(); | |||||
} | |||||
} |
@@ -0,0 +1,6 @@ | |||||
package com.bonait.bnframework.HBL.Dialog; | |||||
public interface IDialogAction { | |||||
void ExitDialog(boolean status); | |||||
} |
@@ -0,0 +1,8 @@ | |||||
package com.bonait.bnframework.HBL.Enum; | |||||
public enum DataFormat { | |||||
ABCD, | |||||
CDAB, | |||||
BADC, | |||||
DCBA | |||||
} |
@@ -0,0 +1,40 @@ | |||||
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(()->{ | |||||
try { | |||||
if(run!=null)run.Run(); | |||||
}catch(Exception ex) { | |||||
MessageLog.ShowError("runThread 异常:"+ex.getMessage()); | |||||
} | |||||
}); | |||||
} | |||||
} |
@@ -0,0 +1,5 @@ | |||||
package com.bonait.bnframework.HBL.Interface; | |||||
public interface IRun { | |||||
void Run(); | |||||
} |
@@ -1,5 +1,7 @@ | |||||
package com.bonait.bnframework.common.helper.I; | |||||
package com.bonait.bnframework.HBL.Interface; | |||||
public interface IRunT<T> { | public interface IRunT<T> { | ||||
void Run(T t); | void Run(T t); | ||||
} | } | ||||
@@ -0,0 +1,5 @@ | |||||
package com.bonait.bnframework.HBL.Interface; | |||||
public interface IRunT2<T1,T2> { | |||||
void Run(T1 t1, T2 t2);; | |||||
} |
@@ -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); | |||||
} |
@@ -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<String> msgQueue=new ConcurrentLinkedQueue<String>(); | |||||
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()); | |||||
} | |||||
} |
@@ -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(); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,60 @@ | |||||
package com.bonait.bnframework.HBL; | |||||
import com.bonait.bnframework.HBL.Interface.IRun; | |||||
import com.bonait.bnframework.HBL.Interface.IRunT; | |||||
import com.bonait.bnframework.HBL.Result.OperateResult; | |||||
import java.util.concurrent.ConcurrentHashMap; | |||||
public class NotifyEvent { | |||||
private static volatile NotifyEvent _instance; | |||||
public synchronized static NotifyEvent get(){ | |||||
if(_instance == null)_instance = new NotifyEvent(); | |||||
return _instance; | |||||
} | |||||
private NotifyEvent(){} | |||||
private ConcurrentHashMap<String, Object> _runMap = new ConcurrentHashMap<String, Object>(); | |||||
public void Register(String name,IRun run){ | |||||
_runMap.put(name,run); | |||||
} | |||||
public <T> void Register(String name, IRunT<T> run){ | |||||
_runMap.put(name,run); | |||||
} | |||||
public OperateResult Send(String name){ | |||||
try{ | |||||
if(_runMap.containsKey(name)&&_runMap.get(name)!=null){ | |||||
if(_runMap.get(name) instanceof IRun){ | |||||
((IRun)_runMap.get(name)).Run(); | |||||
return OperateResult.CreateSuccess(); | |||||
}else{ | |||||
return OperateResult.CreateFailed("注册类型和发送消息类型不匹配"); | |||||
} | |||||
}else{ | |||||
return OperateResult.CreateFailed(name+"消息未注册"); | |||||
} | |||||
}catch(Exception e){ | |||||
return OperateResult.CreateFailed(e); | |||||
} | |||||
} | |||||
public <T> OperateResult Send(String name, T value){ | |||||
try{ | |||||
if(_runMap.containsKey(name)&&_runMap.get(name)!=null){ | |||||
if(_runMap.get(name) instanceof IRunT){ | |||||
((IRunT)_runMap.get(name)).Run(value); | |||||
return OperateResult.CreateSuccess(); | |||||
}else{ | |||||
return OperateResult.CreateFailed("注册类型和发送消息类型不匹配"); | |||||
} | |||||
}else{ | |||||
return OperateResult.CreateFailed(name+"消息未注册"); | |||||
} | |||||
}catch(Exception e){ | |||||
return OperateResult.CreateFailed(e); | |||||
} | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} |
@@ -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<T> 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<T> OnSource(IRunT<OperateResultT<T>> action){ | |||||
try{ | |||||
if(action!=null&&getIsSuccess())action.Run(this); | |||||
}catch(Exception e){ | |||||
MessageLog.ShowError(e); | |||||
} | |||||
return this; | |||||
} | |||||
public OperateResultT<T> OnFailed(IRunT<OperateResultT<T>> action){ | |||||
try{ | |||||
if(action!=null&&!getIsSuccess())action.Run(this); | |||||
}catch(Exception e){ | |||||
MessageLog.ShowError(e); | |||||
} | |||||
return this; | |||||
} | |||||
public OperateResultT<T> OnFinally(IRunT<OperateResultT<T>> action){ | |||||
if(action!=null)action.Run(this); | |||||
return this; | |||||
} | |||||
public static <T> OperateResultT<T> CreateSuccess(T value) | |||||
{ | |||||
return new OperateResultT<T>(value,"", ResultCode.Success); | |||||
} | |||||
public static <T> OperateResultT<T> CreateFailedT(String msg) | |||||
{ | |||||
MessageLog.ShowError(msg); | |||||
return new OperateResultT<T>( msg, ResultCode.Fail); | |||||
} | |||||
public static <T> OperateResultT<T> CreateFailedT(Exception ex) | |||||
{ | |||||
MessageLog.ShowError(ex.toString()); | |||||
return new OperateResultT<T>(ex); | |||||
} | |||||
} |
@@ -0,0 +1,38 @@ | |||||
package com.bonait.bnframework.HBL.Result; | |||||
public enum ResultCode { | |||||
/** | |||||
* 默认 | |||||
*/ | |||||
Default, | |||||
/** | |||||
* 错误 | |||||
*/ | |||||
Error, | |||||
/** | |||||
* 异常 | |||||
*/ | |||||
Exception, | |||||
/** | |||||
* 成功 | |||||
*/ | |||||
Success, | |||||
/** | |||||
* 失败 | |||||
*/ | |||||
Fail, | |||||
/** | |||||
* 操作超时 | |||||
*/ | |||||
Overtime, | |||||
/** | |||||
* 操作取消 | |||||
*/ | |||||
Canceled | |||||
} |
@@ -0,0 +1,5 @@ | |||||
package com.bonait.bnframework.HBL.Thread; | |||||
public interface IThread { | |||||
void Run() throws Exception; | |||||
} |
@@ -0,0 +1,7 @@ | |||||
package com.bonait.bnframework.HBL.Thread; | |||||
public interface IThreadComplete { | |||||
void Run() throws Exception; | |||||
void RunComplete() throws Exception; | |||||
} |
@@ -0,0 +1,105 @@ | |||||
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 = 3000; | |||||
ConcurrentHashMap<String, ThreadModel> 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 + "] 运行发生异常,已重启,错误信息:" + ex.toString()); | |||||
Sleep(RestartInterval); | |||||
} | |||||
} else { | |||||
try { | |||||
tm.get(Key).RunThread.Run(); | |||||
} catch (Exception e) { | |||||
MessageLog.ShowError("多线程:[" + Key + "] 运行发生异常,已重启,错误信息:" + e.toString()); | |||||
} | |||||
} | |||||
} | |||||
try { | |||||
tm.get(Key).RunThread.RunComplete(); | |||||
MessageLog.ShowInfo("线程:[" + Key + "]--执行完成"); | |||||
} catch (Exception e) { | |||||
MessageLog.ShowError("多线程:[" + Key + "] 执行完成任务发生异常,已退出,错误信息:" + 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).Task.Run(); | |||||
} catch (Exception ex) { | |||||
MessageLog.ShowError("多线程:[" + Key + "] 运行发生异常,已重启,错误信息:" + ex.toString()); | |||||
Sleep(RestartInterval); | |||||
} | |||||
} else { | |||||
try { | |||||
tm.get(Key).Task.Run(); | |||||
} catch (Exception e) { | |||||
MessageLog.ShowError("多线程:[" + Key + "] 运行发生异常,已重启,错误信息:" + 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; | |||||
} | |||||
} | |||||
} |
@@ -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; | |||||
} |
@@ -1,6 +1,8 @@ | |||||
package com.bonait.bnframework.common.helper; | |||||
package com.bonait.bnframework.HBL.Trig; | |||||
import com.bonait.bnframework.common.helper.I.IRun; | |||||
import com.bonait.bnframework.HBL.Interface.IRun; | |||||
import java.util.concurrent.ConcurrentHashMap; | import java.util.concurrent.ConcurrentHashMap; | ||||
@@ -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.AlertLogEnum; | ||||
import com.bonait.bnframework.common.db.res.UserLogEnum; | import com.bonait.bnframework.common.db.res.UserLogEnum; | ||||
import com.bonait.bnframework.common.helper.CrashHandler; | 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.helper.SdCart; | ||||
import com.bonait.bnframework.common.utils.NetworkUtils; | import com.bonait.bnframework.common.utils.NetworkUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.welcome.model; | |||||
package com.bonait.bnframework.Model; | |||||
import java.util.List; | import java.util.List; | ||||
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.mine.model; | |||||
package com.bonait.bnframework.Model; | |||||
import com.google.gson.annotations.SerializedName; | import com.google.gson.annotations.SerializedName; | ||||
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from.fragment; | |||||
package com.bonait.bnframework.Model; | |||||
import com.bin.david.form.annotation.SmartColumn; | import com.bin.david.form.annotation.SmartColumn; | ||||
import com.bin.david.form.annotation.SmartTable; | import com.bin.david.form.annotation.SmartTable; |
@@ -0,0 +1,136 @@ | |||||
package com.bonait.bnframework.Service; | |||||
import android.content.Context; | |||||
import com.bonait.bnframework.common.constant.ConfigName; | |||||
import com.bonait.bnframework.common.helper.ConfigUtil; | |||||
/** | |||||
* 模拟量转换 | |||||
*/ | |||||
public class AnalogConvert { | |||||
/** | |||||
* 模拟量温度上限 | |||||
*/ | |||||
public static short et_Temperature_Analog_Upper_Limit=0; | |||||
/** | |||||
* 模拟量温度下限 | |||||
*/ | |||||
public static short et_Temperature_Analog_Lower_Limit=0; | |||||
/** | |||||
* 实际温度上限 | |||||
*/ | |||||
public static short et_Temperature_Upper_Limit=0; | |||||
/** | |||||
* 实际温度下限 | |||||
*/ | |||||
public static short et_Temperature_Lower_Limit=0; | |||||
/** | |||||
* 模拟量压力上限 | |||||
*/ | |||||
public static short et_Pressure_Analog_Upper_Limit=0; | |||||
/** | |||||
* 模拟量压力下限 | |||||
*/ | |||||
public static short et_Pressure_Analog_Lower_Limit=0; | |||||
/** | |||||
* 实际压力上限 | |||||
*/ | |||||
public static short et_Pressure_Upper_Limit=0; | |||||
/** | |||||
* 实际压力下限 | |||||
*/ | |||||
public static short et_Pressure_Lower_Limit=0; | |||||
public static short Scale(short InputValue, short InputMax, short InputMin, short OutMax, short OutMin){ | |||||
try{ | |||||
float tempValue = (OutMax - OutMin) * (InputValue - InputMin) / (InputMax - InputMin) + OutMin; | |||||
short num =(short)tempValue; | |||||
// if (num > OutMax) return OutMax; | |||||
// if (num < OutMin) return OutMin; | |||||
return num; | |||||
}catch(Exception e){ | |||||
} | |||||
return 0; | |||||
} | |||||
/** | |||||
* 获取当前实际压力值 | |||||
* @param InputValue 当前实际压力的模拟量值 | |||||
* @return 当前实际压力值 | |||||
*/ | |||||
public static short getCurrentPressure(short InputValue){ | |||||
return Scale(InputValue,et_Pressure_Analog_Upper_Limit,et_Pressure_Analog_Lower_Limit,et_Pressure_Upper_Limit,et_Pressure_Lower_Limit); | |||||
} | |||||
/** | |||||
* 获取当前实际压力的模拟量值 | |||||
* @param InputValue 当前实际压力值 | |||||
* @return 对应的模拟量值 | |||||
*/ | |||||
public static short getCurrentPressureAnalog(short InputValue){ | |||||
return Scale(InputValue,et_Pressure_Upper_Limit,et_Pressure_Lower_Limit,et_Pressure_Analog_Upper_Limit,et_Pressure_Analog_Lower_Limit); | |||||
} | |||||
/** | |||||
* 获取当前实际温度值 | |||||
* @param InputValue 当前实际温度的模拟量值 | |||||
* @return 当前实际温度值 | |||||
*/ | |||||
public static short getCurrentTemperature(short InputValue){ | |||||
return Scale(InputValue,et_Temperature_Analog_Upper_Limit,et_Temperature_Analog_Lower_Limit,et_Temperature_Upper_Limit,et_Temperature_Lower_Limit); | |||||
} | |||||
/** | |||||
* 获取当前实际温度的模拟量值 | |||||
* @param InputValue 当前实际压力值 | |||||
* @return 对应的模拟量值 | |||||
*/ | |||||
public static short getCurrentTemperatureAnalog(short InputValue){ | |||||
return Scale(InputValue,et_Temperature_Upper_Limit,et_Temperature_Lower_Limit,et_Temperature_Analog_Upper_Limit,et_Temperature_Analog_Lower_Limit); | |||||
} | |||||
public static void SaveConfig(){ | |||||
Context dishesCon = ConfigName.getInstance().dishesCon; | |||||
ConfigUtil.write(dishesCon, "et_Temperature_Analog_Upper_Limit",et_Temperature_Analog_Upper_Limit ); | |||||
ConfigUtil.write(dishesCon, "et_Temperature_Analog_Lower_Limit",et_Temperature_Analog_Lower_Limit); | |||||
ConfigUtil.write(dishesCon, "et_Temperature_Upper_Limit",et_Temperature_Upper_Limit ); | |||||
ConfigUtil.write(dishesCon, "et_Temperature_Lower_Limit",et_Temperature_Lower_Limit); | |||||
ConfigUtil.write(dishesCon, "et_Pressure_Analog_Upper_Limit",et_Pressure_Analog_Upper_Limit ); | |||||
ConfigUtil.write(dishesCon, "et_Pressure_Analog_Lower_Limit",et_Pressure_Analog_Lower_Limit ); | |||||
ConfigUtil.write(dishesCon, "et_Pressure_Upper_Limit",et_Pressure_Upper_Limit ); | |||||
ConfigUtil.write(dishesCon, "et_Pressure_Lower_Limit",et_Pressure_Lower_Limit ); | |||||
} | |||||
private static short getConfig(String key){ | |||||
try{ | |||||
Context dishesCon = ConfigName.getInstance().dishesCon; | |||||
return (short)ConfigUtil.read(dishesCon, key,0 ); | |||||
}catch(Exception e){ | |||||
} | |||||
return 0; | |||||
} | |||||
public static void ReadConfig(){ | |||||
et_Temperature_Analog_Upper_Limit =getConfig("et_Temperature_Analog_Upper_Limit"); | |||||
et_Temperature_Analog_Lower_Limit=getConfig("et_Temperature_Analog_Lower_Limit"); | |||||
et_Temperature_Upper_Limit =getConfig("et_Temperature_Upper_Limit"); | |||||
et_Temperature_Lower_Limit=getConfig("et_Temperature_Lower_Limit"); | |||||
et_Pressure_Analog_Upper_Limit =getConfig("et_Pressure_Analog_Upper_Limit"); | |||||
et_Pressure_Analog_Lower_Limit =getConfig("et_Pressure_Analog_Lower_Limit"); | |||||
et_Pressure_Upper_Limit =getConfig("et_Pressure_Upper_Limit"); | |||||
et_Pressure_Lower_Limit =getConfig("et_Pressure_Lower_Limit"); | |||||
} | |||||
} |
@@ -0,0 +1,13 @@ | |||||
package com.bonait.bnframework.Service; | |||||
public enum ControlAdress { | |||||
心跳, | |||||
加热档位, | |||||
启动加热, | |||||
停止加热, | |||||
加热模组状态, | |||||
急停按钮状态, | |||||
升降电机上升, | |||||
} |
@@ -0,0 +1,24 @@ | |||||
package com.bonait.bnframework.Service; | |||||
public enum Func { | |||||
/** | |||||
* 加热功能 | |||||
* par:加热温度,加热档位 | |||||
*/ | |||||
加热, | |||||
/** | |||||
* 泄压功能 | |||||
* par:泄压压力 | |||||
*/ | |||||
泄压, | |||||
/** | |||||
* 保温功能 | |||||
* par:保温温度,保温时间 | |||||
*/ | |||||
保温, | |||||
/** | |||||
*烹饪功能 | |||||
* par:烹饪温度,烹饪时间 | |||||
*/ | |||||
烹饪, | |||||
} |
@@ -0,0 +1,206 @@ | |||||
package com.bonait.bnframework.Service; | |||||
import com.bonait.bnframework.HBL.Communication.Modbus.ModbusMaster; | |||||
import com.bonait.bnframework.HBL.DataUtil.DataType; | |||||
import com.bonait.bnframework.HBL.DataUtil.NotifyPropVar; | |||||
import com.bonait.bnframework.HBL.Executor; | |||||
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.bonait.bnframework.HBL.Thread.ThreadManager; | |||||
import com.bonait.bnframework.common.db.mode.BPA_CALIBRATION_PAR; | |||||
import com.bonait.bnframework.common.utils.ToastUtils; | |||||
import java.util.concurrent.ConcurrentHashMap; | |||||
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(){} | |||||
// static ConcurrentHashMap<ControlAdress, PLCModel> controlAddress=new ConcurrentHashMap<ControlAdress,PLCModel>(){{ | |||||
// put(ControlAdress.锅盖上升,new PLCModel("M20", DataType.BOOLEAN, OperationModel.W) ); | |||||
// put(ControlAdress.锅盖下降,new PLCModel("M21",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.锅盖开启,new PLCModel("M22",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.锅盖关闭,new PLCModel("M23",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.锅体正转,new PLCModel("M24",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.锅体反转,new PLCModel("M25",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.泄压阀启停,new PLCModel("M26",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.烹饪完成,new PLCModel("M32",DataType.BOOLEAN,OperationModel.R)); | |||||
// put(ControlAdress.一键上升,new PLCModel("M0",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.一键下降,new PLCModel("M1",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.一键回位,new PLCModel("M5",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.停止,new PLCModel("M6",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.配方启动,new PLCModel("M11",DataType.BOOLEAN,OperationModel.W)); | |||||
// put(ControlAdress.心跳,new PLCModel("D204",DataType.SHORT,OperationModel.W)); | |||||
// put(ControlAdress.当前温度,new PLCModel("D100",DataType.SHORT,OperationModel.R)); | |||||
// put(ControlAdress.当前压力,new PLCModel("D101",DataType.SHORT,OperationModel.R)); | |||||
// put(ControlAdress.允许开盖压力,new PLCModel("D200",DataType.SHORT,OperationModel.RW)); | |||||
// put(ControlAdress.排冷气温度,new PLCModel("D203",DataType.SHORT,OperationModel.RW)); | |||||
// put(ControlAdress.温度下限,new PLCModel("D210",DataType.SHORT,OperationModel.RW)); | |||||
// put(ControlAdress.温度上限,new PLCModel("D211",DataType.SHORT,OperationModel.RW)); | |||||
// put(ControlAdress.压力下限,new PLCModel("D213",DataType.SHORT,OperationModel.RW)); | |||||
// put(ControlAdress.压力上限,new PLCModel("D214",DataType.SHORT,OperationModel.RW)); | |||||
// put(ControlAdress.加热档位,new PLCModel("D300",DataType.SHORT,OperationModel.W)); | |||||
// put(ControlAdress.设定压力,new PLCModel("D301",DataType.SHORT,OperationModel.W)); | |||||
// put(ControlAdress.计时温度,new PLCModel("D303",DataType.SHORT,OperationModel.W)); | |||||
// put(ControlAdress.烹饪时间,new PLCModel("D304",DataType.SHORT,OperationModel.W)); | |||||
// put(ControlAdress.当前时间,new PLCModel("D10",DataType.SHORT,OperationModel.R)); | |||||
// }}; | |||||
private ConcurrentHashMap<String, BPA_CALIBRATION_PAR> calibrationParMap=new ConcurrentHashMap<>(); | |||||
public void Add(BPA_CALIBRATION_PAR item){ | |||||
if(item==null)return ; | |||||
calibrationParMap.put(item.Name,item); | |||||
} | |||||
private OperateResultT<BPA_CALIBRATION_PAR> getCalibrationPar(String name){ | |||||
if(calibrationParMap.containsKey(name)){ | |||||
return OperateResultT.CreateSuccess(calibrationParMap.get(name)); | |||||
}else{ | |||||
return OperateResultT.CreateFailedT("不存在的校准参数:"+name); | |||||
} | |||||
} | |||||
private void Sleep(long millis) { | |||||
try { | |||||
Thread.sleep(millis); | |||||
} catch (InterruptedException e) { | |||||
throw new RuntimeException(e); | |||||
} | |||||
} | |||||
/** | |||||
* 加热控制 | |||||
* @param GearPosition 加热档位 | |||||
* @param command 启动或停止 | |||||
*/ | |||||
public void Heating(short GearPosition,boolean command){ | |||||
//D51:档位设置,M50:启动加热,M51:停止加热 | |||||
WriteBool(command?"M51":"M50",false); | |||||
WriteShort("D51",command?GearPosition:0); | |||||
WriteBool(command?"M50":"M51",true); | |||||
} | |||||
/** | |||||
* 加水控制 | |||||
* @param value | |||||
*/ | |||||
public void AddWater(short value){ | |||||
getCalibrationPar("加水阀1").OnSource(item->{ | |||||
WriteShort("D1000",value); | |||||
WriteBool("M4",true); | |||||
}) ; | |||||
} | |||||
public void AddLiquid(){ | |||||
} | |||||
// private PLCModel getPLC(ControlAdress func){ | |||||
// if(controlAddress.containsKey(func)){ | |||||
// return controlAddress.get(func); | |||||
// }else{ | |||||
// MessageLog.ShowInfo("不存在控制地址:"+func.toString()); | |||||
// return new PLCModel(); | |||||
// } | |||||
// } | |||||
private void GetPlcStatus(){ | |||||
ThreadManager.get().StartLong("PLC变量状态",true,()->{ | |||||
// WriteShort(getPLC(ControlAdress.心跳).PlcAddress, (short) 0); | |||||
// | |||||
// controlAddress.forEach((key,value)->{ | |||||
// if(value.operationModel== OperationModel.R||value.operationModel==OperationModel.RW){ | |||||
// if(value.Value.getValue() instanceof Short){ | |||||
// OperateResultT<Short> res = ReadShort(value.PlcAddress); | |||||
// if(res.isSuccess){ | |||||
// value.Value .setValue(res.Content); | |||||
// } | |||||
// }else if (value.Value.getValue() instanceof Boolean){ | |||||
// OperateResultT<Boolean> res = ReadBool(value.PlcAddress); | |||||
// if(res.isSuccess){ | |||||
// value.Value .setValue(res.Content); | |||||
// } | |||||
// } | |||||
// | |||||
// } | |||||
// }); | |||||
Thread.sleep(1); | |||||
}); | |||||
} | |||||
public NotifyPropVar<Boolean> IsRunning=new NotifyPropVar<Boolean>(false); | |||||
public int CurrentTime=0; | |||||
public void RtuInit(String comName,int baudRate){ | |||||
new Thread(()->{ RtuConnect(comName,baudRate).OnSource(()->{ GetPlcStatus();});}).start(); | |||||
} | |||||
/** | |||||
* 设置变量监听通知 | |||||
* @param func | |||||
* @param action | |||||
* @param <T> | |||||
*/ | |||||
public <T> void setPLCNotify(ControlAdress func,String key, IRunT<T> action){ | |||||
// if(controlAddress.containsKey(func)){ | |||||
// controlAddress.get(func).Value.Register(key,action); | |||||
// } | |||||
} | |||||
/** | |||||
* 写布尔信号 | |||||
* @param func | |||||
* @param value | |||||
*/ | |||||
public void WriteBoolSingle(ControlAdress func, boolean value){ | |||||
// if(controlAddress.containsKey(func)){ | |||||
// Executor.get().runThread(()->{ | |||||
// WriteBool(controlAddress.get(func).PlcAddress,value).OnSource(()->{ | |||||
// MessageLog.ShowInfo("写入 "+controlAddress.get(func).PlcAddress+":"+value); | |||||
// }); | |||||
// }); | |||||
// } | |||||
} | |||||
/** | |||||
* 写脉冲信号 | |||||
* @param func | |||||
*/ | |||||
public void PulseSignal(ControlAdress func){ | |||||
// if(controlAddress.containsKey(func)){ | |||||
// Executor.get().runThread(()->{ | |||||
// WriteBool(controlAddress.get(func).PlcAddress,true); | |||||
// Sleep(1000); | |||||
// WriteBool(controlAddress.get(func).PlcAddress,false); | |||||
// }); | |||||
// } | |||||
} | |||||
public <T> void WriteAsync(String address,T value) { | |||||
Executor.get().runThread(()->{ | |||||
Write(address,value); | |||||
}); | |||||
} | |||||
} | |||||
@@ -0,0 +1,16 @@ | |||||
package com.bonait.bnframework.Service; | |||||
public enum OperationModel { | |||||
/** | |||||
* 只读 | |||||
*/ | |||||
R, | |||||
/** | |||||
* 只写 | |||||
*/ | |||||
W, | |||||
/** | |||||
* 可读可写 | |||||
*/ | |||||
RW | |||||
} |
@@ -0,0 +1,23 @@ | |||||
package com.bonait.bnframework.Service; | |||||
import com.bonait.bnframework.HBL.DataUtil.NotifyPropVar; | |||||
import java.io.Serializable; | |||||
public class PLCModel<T extends Serializable> { | |||||
public String PlcAddress; | |||||
public NotifyPropVar<T> Value; | |||||
public <T> T getValue(){ | |||||
return (T)Value.getValue(); | |||||
} | |||||
public OperationModel operationModel; | |||||
public PLCModel(String add,T defaultValue,OperationModel om){ | |||||
PlcAddress = add; | |||||
Value = new NotifyPropVar<>(defaultValue); | |||||
operationModel = om; | |||||
} | |||||
public PLCModel(){ | |||||
} | |||||
} |
@@ -1,16 +1,14 @@ | |||||
package com.bonait.bnframework.modules.home.activity; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
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.business.ConfigData; | import com.bonait.bnframework.business.ConfigData; | ||||
import com.bonait.bnframework.common.constant.ConfigName; | import com.bonait.bnframework.common.constant.ConfigName; | ||||
import com.bonait.bnframework.common.constant.DataBus; | |||||
import com.bonait.bnframework.common.helper.I.IThread; | |||||
import com.bonait.bnframework.common.helper.MessageLog; | |||||
import com.bonait.bnframework.common.helper.ThreadManager; | |||||
import com.bonait.bnframework.common.modbus.ModbusTcpServer; | |||||
import com.bonait.bnframework.common.utils.NetworkUtils; | import com.bonait.bnframework.common.utils.NetworkUtils; | ||||
import com.google.android.material.bottomnavigation.BottomNavigationView; | import com.google.android.material.bottomnavigation.BottomNavigationView; | ||||
@@ -27,10 +25,10 @@ import com.bonait.bnframework.common.message.MessageManager; | |||||
import com.bonait.bnframework.manager.ActivityLifecycleManager; | import com.bonait.bnframework.manager.ActivityLifecycleManager; | ||||
import com.bonait.bnframework.common.base.BaseActivity; | import com.bonait.bnframework.common.base.BaseActivity; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.fragment.Home1Fragment; | |||||
import com.bonait.bnframework.modules.home.fragment.Home2Fragment; | |||||
import com.bonait.bnframework.modules.home.adapter.FragmentAdapter; | |||||
import com.bonait.bnframework.modules.mine.fragment.MyFragment; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.Home1Fragment; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.Home2Fragment; | |||||
import com.bonait.bnframework.ViewModel.Adapter.FragmentAdapter; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.MyFragment; | |||||
import com.lzy.okgo.OkGo; | import com.lzy.okgo.OkGo; | ||||
import com.qmuiteam.qmui.widget.QMUIViewPager; | import com.qmuiteam.qmui.widget.QMUIViewPager; | ||||
@@ -182,37 +180,35 @@ public class BottomNavigation2Activity extends BaseActivity { | |||||
public void ReconnectModbus() { | public void ReconnectModbus() { | ||||
try { | try { | ||||
ThreadManager.Get().StartLong("PLC断线重连线程", true, new IThread() { | |||||
ThreadManager.get().StartLong("PLC断线重连线程", true, new IThread() { | |||||
@Override | @Override | ||||
public void Run() throws InterruptedException { | public void Run() throws InterruptedException { | ||||
try { | 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; | |||||
} | |||||
} | |||||
// 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; | |||||
// } | |||||
// } | |||||
Thread.sleep(10000); | Thread.sleep(10000); | ||||
} catch (Exception e) { | } catch (Exception e) { | ||||
Log.i("PLC", "PLC重连接失败!" + e.getMessage()); | Log.i("PLC", "PLC重连接失败!" + e.getMessage()); | ||||
} | } | ||||
} | } | ||||
@Override | |||||
public void RunComplete() throws InterruptedException { | |||||
} | |||||
}); | }); | ||||
} catch (Exception e) { | } catch (Exception e) { | ||||
MessageLog.ShowInfo("重新连接Modbus异常," + e.getMessage()); | MessageLog.ShowInfo("重新连接Modbus异常," + e.getMessage()); |
@@ -1,17 +1,18 @@ | |||||
package com.bonait.bnframework.modules.home.activity; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import androidx.viewpager.widget.ViewPager; | import androidx.viewpager.widget.ViewPager; | ||||
import android.app.Activity; | import android.app.Activity; | ||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.util.Log; | import android.util.Log; | ||||
import android.view.KeyEvent; | import android.view.KeyEvent; | ||||
import android.view.MenuItem; | |||||
import android.view.View; | import android.view.View; | ||||
import android.widget.LinearLayout; | import android.widget.LinearLayout; | ||||
import android.widget.TextView; | import android.widget.TextView; | ||||
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.R; | ||||
import com.bonait.bnframework.business.ConfigData; | import com.bonait.bnframework.business.ConfigData; | ||||
import com.bonait.bnframework.business.ExecuteTheRecipe; | import com.bonait.bnframework.business.ExecuteTheRecipe; | ||||
@@ -22,26 +23,17 @@ import com.bonait.bnframework.common.db.QueryDB; | |||||
import com.bonait.bnframework.common.db.mode.BPA_GOODS; | import com.bonait.bnframework.common.db.mode.BPA_GOODS; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | ||||
import com.bonait.bnframework.common.helper.CountDownTimerExt; | import com.bonait.bnframework.common.helper.CountDownTimerExt; | ||||
import com.bonait.bnframework.common.helper.I.IThread; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | 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.message.MessageLooper; | import com.bonait.bnframework.common.message.MessageLooper; | ||||
import com.bonait.bnframework.common.message.MessageManager; | import com.bonait.bnframework.common.message.MessageManager; | ||||
import com.bonait.bnframework.common.modbus.ModbusTcpServer; | |||||
import com.bonait.bnframework.common.utils.NetworkUtils; | import com.bonait.bnframework.common.utils.NetworkUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.common.view.BottomNavigationBar; | import com.bonait.bnframework.common.view.BottomNavigationBar; | ||||
import com.bonait.bnframework.manager.ActivityLifecycleManager; | import com.bonait.bnframework.manager.ActivityLifecycleManager; | ||||
import com.bonait.bnframework.modules.home.adapter.FragmentAdapter; | |||||
import com.bonait.bnframework.modules.home.fragment.Home1Fragment; | |||||
import com.bonait.bnframework.modules.home.fragment.Home2Fragment; | |||||
import com.bonait.bnframework.modules.home.fragment.Home4Fragment; | |||||
import com.bonait.bnframework.modules.home.fragment.HomeFragmentPR; | |||||
import com.bonait.bnframework.modules.home.fragment.HomeFragmentSBKZ; | |||||
import com.bonait.bnframework.modules.home.fragment.from.CookingActivity; | |||||
import com.bonait.bnframework.modules.mine.fragment.MyFragment; | |||||
import com.google.android.material.bottomnavigation.BottomNavigationView; | |||||
import com.bonait.bnframework.ViewModel.Adapter.FragmentAdapter; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.Home4Fragment; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.HomeFragmentPR; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.HomeFragmentSBKZ; | |||||
import com.lzy.okgo.OkGo; | import com.lzy.okgo.OkGo; | ||||
import com.qmuiteam.qmui.widget.QMUIViewPager; | import com.qmuiteam.qmui.widget.QMUIViewPager; | ||||
@@ -247,37 +239,35 @@ public class BottomNavigationNewActivity extends BaseActivity { | |||||
public void ReconnectModbus() { | public void ReconnectModbus() { | ||||
try { | try { | ||||
ThreadManager.Get().StartLong("PLC断线重连线程", true, new IThread() { | |||||
ThreadManager.get().StartLong("PLC断线重连线程", true, new IThread() { | |||||
@Override | @Override | ||||
public void Run() throws InterruptedException { | 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; | |||||
} | |||||
} | |||||
Thread.sleep(10000); | |||||
} catch (Exception e) { | |||||
Log.i("PLC", "PLC重连接失败!" + e.getMessage()); | |||||
} | |||||
// 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; | |||||
// } | |||||
// } | |||||
// Thread.sleep(10000); | |||||
// } catch (Exception e) { | |||||
// Log.i("PLC", "PLC重连接失败!" + e.getMessage()); | |||||
// } | |||||
} | } | ||||
@Override | |||||
public void RunComplete() throws InterruptedException { | |||||
} | |||||
}); | }); | ||||
} catch (Exception e) { | } catch (Exception e) { | ||||
MessageLog.ShowInfo("重新连接Modbus异常," + e.getMessage()); | MessageLog.ShowInfo("重新连接Modbus异常," + e.getMessage()); |
@@ -1,6 +1,5 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import androidx.core.content.ContextCompat; | import androidx.core.content.ContextCompat; | ||||
import android.app.Activity; | import android.app.Activity; | ||||
@@ -13,19 +12,14 @@ import com.bonait.bnframework.business.ExecuteTheRecipe; | |||||
import com.bonait.bnframework.common.base.BaseActivity; | import com.bonait.bnframework.common.base.BaseActivity; | ||||
import com.bonait.bnframework.common.constant.DataBus; | import com.bonait.bnframework.common.constant.DataBus; | ||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.db.mode.BPA_MATERIAL; | |||||
import com.bonait.bnframework.common.db.mode.BPA_SILOS; | |||||
import com.bonait.bnframework.common.db.res.lcMode; | import com.bonait.bnframework.common.db.res.lcMode; | ||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.fragment.mode.add_silos_message; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.imagebuttom; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.jingdutiao1; | |||||
import com.bonait.bnframework.ViewModel.CustomView.add_silos_message; | |||||
import com.bonait.bnframework.ViewModel.CustomView.imagebuttom; | |||||
import com.bonait.bnframework.ViewModel.CustomView.jingdutiao1; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
import butterknife.BindView; | import butterknife.BindView; | ||||
import butterknife.ButterKnife; | import butterknife.ButterKnife; | ||||
import butterknife.OnClick; | import butterknife.OnClick; |
@@ -1,51 +1,33 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
import static com.bonait.bnframework.MainApplication.getContext; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||
import androidx.core.content.ContextCompat; | import androidx.core.content.ContextCompat; | ||||
import android.app.Activity; | import android.app.Activity; | ||||
import android.content.Context; | import android.content.Context; | ||||
import android.content.Intent; | |||||
import android.graphics.Color; | |||||
import android.graphics.Typeface; | |||||
import android.os.Bundle; | |||||
import android.os.CountDownTimer; | |||||
import android.os.SystemClock; | |||||
import android.util.AttributeSet; | import android.util.AttributeSet; | ||||
import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||
import android.view.View; | import android.view.View; | ||||
import android.widget.Chronometer; | |||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
import android.widget.LinearLayout; | import android.widget.LinearLayout; | ||||
import android.widget.TextView; | import android.widget.TextView; | ||||
import com.bonait.bnframework.HBL.Interface.IRunT; | |||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.business.ExecuteTheRecipe; | import com.bonait.bnframework.business.ExecuteTheRecipe; | ||||
import com.bonait.bnframework.common.base.BaseActivity; | |||||
import com.bonait.bnframework.common.constant.ConfigName; | import com.bonait.bnframework.common.constant.ConfigName; | ||||
import com.bonait.bnframework.common.constant.DataBus; | import com.bonait.bnframework.common.constant.DataBus; | ||||
import com.bonait.bnframework.common.constant.MessageName; | import com.bonait.bnframework.common.constant.MessageName; | ||||
import com.bonait.bnframework.common.db.QueryDB; | |||||
import com.bonait.bnframework.common.db.mode.BPA_GOODS; | import com.bonait.bnframework.common.db.mode.BPA_GOODS; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | |||||
import com.bonait.bnframework.common.db.mode.BPA_MATERIAL; | |||||
import com.bonait.bnframework.common.db.mode.BPA_SILOS; | |||||
import com.bonait.bnframework.common.db.res.lcMode; | |||||
import com.bonait.bnframework.common.helper.CountDownTimerExt; | |||||
import com.bonait.bnframework.common.helper.I.IRunT; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import com.bonait.bnframework.common.message.MessageManager; | import com.bonait.bnframework.common.message.MessageManager; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.fragment.mode.imagebuttom; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.imagebuttom3; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.jingdutiao; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.newhuoli_control; | |||||
import com.bonait.bnframework.ViewModel.CustomView.imagebuttom; | |||||
import com.bonait.bnframework.ViewModel.CustomView.imagebuttom3; | |||||
import com.bonait.bnframework.ViewModel.CustomView.jingdutiao; | |||||
import com.bonait.bnframework.ViewModel.CustomView.newhuoli_control; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
import java.util.concurrent.ConcurrentHashMap; | import java.util.concurrent.ConcurrentHashMap; | ||||
import butterknife.BindView; | import butterknife.BindView; |
@@ -1,17 +1,11 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import static com.bonait.bnframework.MainApplication.getContext; | import static com.bonait.bnframework.MainApplication.getContext; | ||||
import androidx.annotation.Nullable; | |||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import androidx.core.content.ContextCompat; | import androidx.core.content.ContextCompat; | ||||
import android.app.Activity; | |||||
import android.content.Context; | |||||
import android.content.Intent; | import android.content.Intent; | ||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.util.AttributeSet; | |||||
import android.view.LayoutInflater; | |||||
import android.view.View; | import android.view.View; | ||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
import android.widget.LinearLayout; | import android.widget.LinearLayout; | ||||
@@ -23,22 +17,15 @@ import com.bonait.bnframework.business.ExecuteTheRecipe; | |||||
import com.bonait.bnframework.common.base.BaseActivity; | import com.bonait.bnframework.common.base.BaseActivity; | ||||
import com.bonait.bnframework.common.constant.ConfigName; | import com.bonait.bnframework.common.constant.ConfigName; | ||||
import com.bonait.bnframework.common.constant.DataBus; | import com.bonait.bnframework.common.constant.DataBus; | ||||
import com.bonait.bnframework.common.constant.MessageName; | |||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODS; | import com.bonait.bnframework.common.db.mode.BPA_GOODS; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | ||||
import com.bonait.bnframework.common.db.mode.BPA_SILOS; | import com.bonait.bnframework.common.db.mode.BPA_SILOS; | ||||
import com.bonait.bnframework.common.helper.CountDownTimerExt; | import com.bonait.bnframework.common.helper.CountDownTimerExt; | ||||
import com.bonait.bnframework.common.helper.I.IRunT; | |||||
import com.bonait.bnframework.common.helper.I.IWriteCallBack; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | |||||
import com.bonait.bnframework.common.image.MyBitmapUtils; | |||||
import com.bonait.bnframework.common.message.MessageManager; | |||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.fragment.mode.imagebuttom; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.imagebuttom3; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.jingdutiao; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.newhuoli_control; | |||||
import com.bonait.bnframework.ViewModel.CustomView.imagebuttom3; | |||||
import com.bonait.bnframework.ViewModel.CustomView.jingdutiao; | |||||
import com.bonait.bnframework.ViewModel.CustomView.newhuoli_control; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import java.util.ArrayList; | import java.util.ArrayList; |
@@ -1,9 +1,7 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import static com.bonait.bnframework.MainApplication.getContext; | import static com.bonait.bnframework.MainApplication.getContext; | ||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import android.annotation.SuppressLint; | import android.annotation.SuppressLint; | ||||
import android.content.Context; | import android.content.Context; | ||||
import android.content.Intent; | import android.content.Intent; | ||||
@@ -24,18 +22,14 @@ import com.bonait.bnframework.common.constant.MessageName; | |||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODS; | import com.bonait.bnframework.common.db.mode.BPA_GOODS; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | ||||
import com.bonait.bnframework.common.db.mode.BPA_PLCADDRESS; | |||||
import com.bonait.bnframework.common.message.MessageLooper; | import com.bonait.bnframework.common.message.MessageLooper; | ||||
import com.bonait.bnframework.common.message.MessageManager; | import com.bonait.bnframework.common.message.MessageManager; | ||||
import com.bonait.bnframework.common.model.mode.CloudGood; | import com.bonait.bnframework.common.model.mode.CloudGood; | ||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.common.utils.ScreenUtils; | |||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.fragment.mode.QDListSectionAdapter; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.SectionHeader; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.SectionItem; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.fragment_plc; | |||||
import com.qmuiteam.qmui.widget.QMUITopBar; | |||||
import com.bonait.bnframework.ViewModel.CustomView.QDListSectionAdapter; | |||||
import com.bonait.bnframework.ViewModel.CustomView.SectionHeader; | |||||
import com.bonait.bnframework.ViewModel.CustomView.SectionItem; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; |
@@ -1,6 +1,5 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||
import androidx.appcompat.widget.SearchView; | import androidx.appcompat.widget.SearchView; | ||||
@@ -13,8 +12,7 @@ import com.bonait.bnframework.common.db.mode.BPA_GOODS; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.common.view.MyLayoutManager; | import com.bonait.bnframework.common.view.MyLayoutManager; | ||||
import com.bonait.bnframework.modules.home.adapter.sp_adapter; | |||||
import com.qmuiteam.qmui.widget.QMUITopBar; | |||||
import com.bonait.bnframework.ViewModel.Adapter.sp_adapter; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import butterknife.BindView; | import butterknife.BindView; |
@@ -1,23 +1,16 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import static com.bonait.bnframework.MainApplication.getContext; | import static com.bonait.bnframework.MainApplication.getContext; | ||||
import androidx.annotation.Nullable; | |||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import androidx.core.content.ContextCompat; | import androidx.core.content.ContextCompat; | ||||
import android.app.Activity; | import android.app.Activity; | ||||
import android.content.Context; | import android.content.Context; | ||||
import android.content.Intent; | import android.content.Intent; | ||||
import android.graphics.Color; | |||||
import android.graphics.Typeface; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.os.SystemClock; | import android.os.SystemClock; | ||||
import android.text.InputType; | import android.text.InputType; | ||||
import android.util.AttributeSet; | |||||
import android.view.LayoutInflater; | |||||
import android.view.View; | import android.view.View; | ||||
import android.widget.AdapterView; | |||||
import android.widget.Chronometer; | import android.widget.Chronometer; | ||||
import android.widget.EditText; | import android.widget.EditText; | ||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
@@ -35,28 +28,22 @@ import com.bonait.bnframework.common.constant.MessageName; | |||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODS; | import com.bonait.bnframework.common.db.mode.BPA_GOODS; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | ||||
import com.bonait.bnframework.common.helper.I.IWriteCallBack; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import com.bonait.bnframework.common.message.MessageManager; | import com.bonait.bnframework.common.message.MessageManager; | ||||
import com.bonait.bnframework.common.model.mode.MouthFacingEnum; | |||||
import com.bonait.bnframework.common.model.mode.SpeedEnum; | import com.bonait.bnframework.common.model.mode.SpeedEnum; | ||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.adapter.gongxubuzhou_adapter; | |||||
import com.bonait.bnframework.modules.home.adapter.gongxubuzhou_adapter1; | |||||
import com.bonait.bnframework.modules.home.adapter.gongxubuzhou_adapter2; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.fragment_gx; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.imagebuttom; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.imagebuttom3; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.jingdutiao; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.newhuoli_control; | |||||
import com.bonait.bnframework.ViewModel.Adapter.gongxubuzhou_adapter1; | |||||
import com.bonait.bnframework.ViewModel.Adapter.gongxubuzhou_adapter2; | |||||
import com.bonait.bnframework.ViewModel.CustomView.imagebuttom; | |||||
import com.bonait.bnframework.ViewModel.CustomView.imagebuttom3; | |||||
import com.bonait.bnframework.ViewModel.CustomView.newhuoli_control; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Collections; | import java.util.Collections; | ||||
import java.util.List; | |||||
import butterknife.BindView; | import butterknife.BindView; | ||||
import butterknife.ButterKnife; | import butterknife.ButterKnife; |
@@ -1,22 +1,15 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import static com.bonait.bnframework.MainApplication.getContext; | import static com.bonait.bnframework.MainApplication.getContext; | ||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import android.annotation.SuppressLint; | |||||
import android.content.Intent; | import android.content.Intent; | ||||
import android.graphics.Color; | |||||
import android.graphics.drawable.Drawable; | import android.graphics.drawable.Drawable; | ||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.util.AttributeSet; | |||||
import android.util.Xml; | |||||
import android.view.MotionEvent; | import android.view.MotionEvent; | ||||
import android.view.View; | import android.view.View; | ||||
import android.view.WindowManager; | import android.view.WindowManager; | ||||
import android.widget.AdapterView; | import android.widget.AdapterView; | ||||
import android.widget.ArrayAdapter; | import android.widget.ArrayAdapter; | ||||
import android.widget.Button; | |||||
import android.widget.CheckBox; | import android.widget.CheckBox; | ||||
import android.widget.EditText; | import android.widget.EditText; | ||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
@@ -34,30 +27,20 @@ import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | |||||
import com.bonait.bnframework.common.db.mode.BPA_MATERIAL; | import com.bonait.bnframework.common.db.mode.BPA_MATERIAL; | ||||
import com.bonait.bnframework.common.db.mode.BPA_PROCESS; | import com.bonait.bnframework.common.db.mode.BPA_PROCESS; | ||||
import com.bonait.bnframework.common.db.mode.BPA_PROCESSModel; | import com.bonait.bnframework.common.db.mode.BPA_PROCESSModel; | ||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | |||||
import com.bonait.bnframework.common.helper.MyImage; | |||||
import com.bonait.bnframework.common.image.MyBitmapUtils; | import com.bonait.bnframework.common.image.MyBitmapUtils; | ||||
import com.bonait.bnframework.common.message.MessageLooper; | import com.bonait.bnframework.common.message.MessageLooper; | ||||
import com.bonait.bnframework.common.message.MessageManager; | import com.bonait.bnframework.common.message.MessageManager; | ||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.adapter.gongxubuzhou_adapter; | |||||
import com.bonait.bnframework.modules.home.adapter.lcsz_adapter; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.fragment_gx; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.item_gx; | |||||
import com.qmuiteam.qmui.widget.QMUITopBar; | |||||
import com.bonait.bnframework.ViewModel.Adapter.gongxubuzhou_adapter; | |||||
import com.bonait.bnframework.ViewModel.CustomView.fragment_gx; | |||||
import com.bonait.bnframework.ViewModel.CustomView.item_gx; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | ||||
import com.youth.banner.Banner; | |||||
import org.xmlpull.v1.XmlPullParser; | |||||
import org.xmlpull.v1.XmlPullParserException; | |||||
import java.io.IOException; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.HashMap; | import java.util.HashMap; | ||||
import java.util.IdentityHashMap; | |||||
import java.util.LinkedHashMap; | import java.util.LinkedHashMap; | ||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; |
@@ -1,21 +1,17 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
import static com.bonait.bnframework.MainApplication.getContext; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.content.Intent; | |||||
import android.graphics.Color; | import android.graphics.Color; | ||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.os.CountDownTimer; | |||||
import android.os.SystemClock; | import android.os.SystemClock; | ||||
import android.view.View; | import android.view.View; | ||||
import android.widget.Chronometer; | import android.widget.Chronometer; | ||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
import android.widget.LinearLayout; | import android.widget.LinearLayout; | ||||
import com.bonait.bnframework.HBL.Interface.IRun; | |||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.business.ExecuteTheRecipe; | import com.bonait.bnframework.business.ExecuteTheRecipe; | ||||
import com.bonait.bnframework.common.base.BaseActivity; | import com.bonait.bnframework.common.base.BaseActivity; | ||||
@@ -23,23 +19,19 @@ import com.bonait.bnframework.common.constant.ConfigName; | |||||
import com.bonait.bnframework.common.constant.DataBus; | import com.bonait.bnframework.common.constant.DataBus; | ||||
import com.bonait.bnframework.common.constant.MessageName; | import com.bonait.bnframework.common.constant.MessageName; | ||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODS; | |||||
import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | ||||
import com.bonait.bnframework.common.db.mode.BPA_MATERIAL; | import com.bonait.bnframework.common.db.mode.BPA_MATERIAL; | ||||
import com.bonait.bnframework.common.db.mode.BPA_PROCESSModel; | |||||
import com.bonait.bnframework.common.helper.I.IWriteCallBack; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import com.bonait.bnframework.common.message.MessageManager; | import com.bonait.bnframework.common.message.MessageManager; | ||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.fragment.mode.fragment_gx; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.huoli_control; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.item_gx; | |||||
import com.bonait.bnframework.ViewModel.CustomView.fragment_gx; | |||||
import com.bonait.bnframework.ViewModel.CustomView.huoli_control; | |||||
import com.bonait.bnframework.ViewModel.CustomView.item_gx; | |||||
import com.litao.slider.NiftySlider; | import com.litao.slider.NiftySlider; | ||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | ||||
import com.qmuiteam.qmui.widget.textview.QMUILinkTextView; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
@@ -229,17 +221,11 @@ public class DiyMemoryActivity extends BaseActivity { | |||||
String sdstr= Get速度(sd); | String sdstr= Get速度(sd); | ||||
BPA_GOODSRECIPE data=Get搅拌(sdstr); | BPA_GOODSRECIPE data=Get搅拌(sdstr); | ||||
DataBus.getInstance().bpa_goodsrecipes.add(data); | DataBus.getInstance().bpa_goodsrecipes.add(data); | ||||
ExecuteTheRecipe.WritePLC("搅拌速度", sd, new IWriteCallBack() { | |||||
@Override | |||||
public void onSuccess() { | |||||
if (sd == 0) { | |||||
ExecuteTheRecipe.WritePLC("搅拌", false, null); | |||||
} else { | |||||
ExecuteTheRecipe.WritePLC("搅拌", true, null); | |||||
} | |||||
} | |||||
@Override | |||||
public void onFailure(String ErrorMsg) { | |||||
ExecuteTheRecipe.WritePLC("搅拌速度", sd, ()->{ | |||||
if (sd == 0) { | |||||
ExecuteTheRecipe.WritePLC("搅拌", false, null); | |||||
} else { | |||||
ExecuteTheRecipe.WritePLC("搅拌", true, null); | |||||
} | } | ||||
}); | }); | ||||
ClikTime=time; | ClikTime=time; |
@@ -1,12 +1,10 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import static com.bonait.bnframework.MainApplication.getContext; | import static com.bonait.bnframework.MainApplication.getContext; | ||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import androidx.core.content.ContextCompat; | import androidx.core.content.ContextCompat; | ||||
import android.content.Intent; | import android.content.Intent; | ||||
import android.graphics.drawable.Drawable; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.view.MotionEvent; | import android.view.MotionEvent; | ||||
import android.view.View; | import android.view.View; | ||||
@@ -15,7 +13,6 @@ import android.widget.AdapterView; | |||||
import android.widget.ArrayAdapter; | import android.widget.ArrayAdapter; | ||||
import android.widget.CheckBox; | import android.widget.CheckBox; | ||||
import android.widget.EditText; | import android.widget.EditText; | ||||
import android.widget.ImageView; | |||||
import android.widget.LinearLayout; | import android.widget.LinearLayout; | ||||
import android.widget.ListView; | import android.widget.ListView; | ||||
import android.widget.Spinner; | import android.widget.Spinner; | ||||
@@ -36,10 +33,9 @@ import com.bonait.bnframework.common.message.MessageManager; | |||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.common.view.CircleImageView; | import com.bonait.bnframework.common.view.CircleImageView; | ||||
import com.bonait.bnframework.modules.home.adapter.gongxubuzhou_adapter; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.fragment_gx; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.item_gx; | |||||
import com.qmuiteam.qmui.widget.QMUIRadiusImageView2; | |||||
import com.bonait.bnframework.ViewModel.Adapter.gongxubuzhou_adapter; | |||||
import com.bonait.bnframework.ViewModel.CustomView.fragment_gx; | |||||
import com.bonait.bnframework.ViewModel.CustomView.item_gx; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; |
@@ -1,9 +1,7 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import static com.bonait.bnframework.MainApplication.getContext; | import static com.bonait.bnframework.MainApplication.getContext; | ||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import android.content.Intent; | import android.content.Intent; | ||||
import android.graphics.drawable.Drawable; | import android.graphics.drawable.Drawable; | ||||
import android.os.Bundle; | import android.os.Bundle; | ||||
@@ -29,23 +27,18 @@ import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | |||||
import com.bonait.bnframework.common.db.mode.BPA_MATERIAL; | import com.bonait.bnframework.common.db.mode.BPA_MATERIAL; | ||||
import com.bonait.bnframework.common.db.mode.BPA_PROCESS; | import com.bonait.bnframework.common.db.mode.BPA_PROCESS; | ||||
import com.bonait.bnframework.common.db.mode.BPA_PROCESSModel; | import com.bonait.bnframework.common.db.mode.BPA_PROCESSModel; | ||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | |||||
import com.bonait.bnframework.common.helper.MyImage; | |||||
import com.bonait.bnframework.common.image.MyBitmapUtils; | import com.bonait.bnframework.common.image.MyBitmapUtils; | ||||
import com.bonait.bnframework.common.message.MessageLooper; | import com.bonait.bnframework.common.message.MessageLooper; | ||||
import com.bonait.bnframework.common.message.MessageManager; | import com.bonait.bnframework.common.message.MessageManager; | ||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.adapter.gongxubuzhou_adapter; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.fragment_gx; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.item_gx; | |||||
import com.qmuiteam.qmui.widget.QMUITopBar; | |||||
import com.bonait.bnframework.ViewModel.Adapter.gongxubuzhou_adapter; | |||||
import com.bonait.bnframework.ViewModel.CustomView.fragment_gx; | |||||
import com.bonait.bnframework.ViewModel.CustomView.item_gx; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | ||||
import com.youth.banner.Banner; | |||||
import java.net.IDN; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.HashMap; | import java.util.HashMap; | ||||
import java.util.LinkedHashMap; | import java.util.LinkedHashMap; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.appcompat.app.AppCompatActivity; | import androidx.appcompat.app.AppCompatActivity; | ||||
import androidx.core.content.ContextCompat; | import androidx.core.content.ContextCompat; |
@@ -1,7 +1,5 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import androidx.appcompat.widget.SearchView; | |||||
import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||
import android.os.Bundle; | import android.os.Bundle; | ||||
@@ -10,18 +8,13 @@ import android.view.View; | |||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.common.base.BaseActivity; | import com.bonait.bnframework.common.base.BaseActivity; | ||||
import com.bonait.bnframework.common.constant.DataBus; | |||||
import com.bonait.bnframework.common.constant.MessageName; | import com.bonait.bnframework.common.constant.MessageName; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODS; | |||||
import com.bonait.bnframework.common.helper.AES; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import com.bonait.bnframework.common.message.MessageManager; | import com.bonait.bnframework.common.message.MessageManager; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.common.view.MyLayoutManager; | import com.bonait.bnframework.common.view.MyLayoutManager; | ||||
import com.bonait.bnframework.modules.home.adapter.image_sp_adapter; | |||||
import com.bonait.bnframework.modules.home.adapter.sp_adapter; | |||||
import com.bonait.bnframework.modules.home.fragment.mode.image_sp; | |||||
import com.qmuiteam.qmui.widget.QMUITopBar; | |||||
import com.bonait.bnframework.ViewModel.Adapter.image_sp_adapter; | |||||
import com.bonait.bnframework.ViewModel.CustomView.image_sp; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import java.io.File; | import java.io.File; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.welcome.activity; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import android.animation.ObjectAnimator; | import android.animation.ObjectAnimator; | ||||
import android.annotation.SuppressLint; | import android.annotation.SuppressLint; | ||||
@@ -20,29 +20,23 @@ import android.widget.CompoundButton; | |||||
import android.widget.EditText; | import android.widget.EditText; | ||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
import android.widget.LinearLayout; | import android.widget.LinearLayout; | ||||
import android.widget.RelativeLayout; | |||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.business.ConfigData; | import com.bonait.bnframework.business.ConfigData; | ||||
import com.bonait.bnframework.common.base.BaseActivity; | import com.bonait.bnframework.common.base.BaseActivity; | ||||
import com.bonait.bnframework.common.bg.SnowView; | |||||
import com.bonait.bnframework.common.constant.ConfigName; | import com.bonait.bnframework.common.constant.ConfigName; | ||||
import com.bonait.bnframework.common.constant.Constants; | import com.bonait.bnframework.common.constant.Constants; | ||||
import com.bonait.bnframework.common.constant.SPConstants; | import com.bonait.bnframework.common.constant.SPConstants; | ||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.db.mode.BPA_USER; | import com.bonait.bnframework.common.db.mode.BPA_USER; | ||||
import com.bonait.bnframework.common.helper.ActiveMax; | |||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.common.utils.AnimationToolUtils; | |||||
import com.bonait.bnframework.common.utils.AppUtils; | import com.bonait.bnframework.common.utils.AppUtils; | ||||
import com.bonait.bnframework.common.utils.Des3Utils; | import com.bonait.bnframework.common.utils.Des3Utils; | ||||
import com.bonait.bnframework.common.utils.KeyboardToolUtils; | import com.bonait.bnframework.common.utils.KeyboardToolUtils; | ||||
import com.bonait.bnframework.common.utils.PreferenceUtils; | import com.bonait.bnframework.common.utils.PreferenceUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.manager.ActivityLifecycleManager; | import com.bonait.bnframework.manager.ActivityLifecycleManager; | ||||
import com.bonait.bnframework.modules.home.activity.BottomNavigation2Activity; | |||||
import com.bonait.bnframework.modules.home.activity.BottomNavigationNewActivity; | |||||
import com.bonait.bnframework.modules.welcome.model.AppLoginPo; | |||||
import com.bonait.bnframework.Model.AppLoginPo; | |||||
import com.bonait.bnframework.test.TestActivity; | import com.bonait.bnframework.test.TestActivity; | ||||
import com.lzy.okgo.OkGo; | import com.lzy.okgo.OkGo; | ||||
import com.lzy.okgo.model.HttpParams; | import com.lzy.okgo.model.HttpParams; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.mine.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.core.content.ContextCompat; | import androidx.core.content.ContextCompat; | ||||
import androidx.appcompat.app.AppCompatActivity; | import androidx.appcompat.app.AppCompatActivity; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
@@ -6,7 +6,7 @@ import com.bonait.bnframework.common.constant.ConfigName; | |||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.google.android.material.bottomnavigation.BottomNavigationView; | import com.google.android.material.bottomnavigation.BottomNavigationView; | ||||
import androidx.viewpager.widget.ViewPager; | import androidx.viewpager.widget.ViewPager; | ||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.view.MenuItem; | import android.view.MenuItem; | ||||
import android.view.View; | import android.view.View; | ||||
@@ -16,12 +16,11 @@ import android.widget.RelativeLayout; | |||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.common.base.BaseActivity; | import com.bonait.bnframework.common.base.BaseActivity; | ||||
import com.bonait.bnframework.modules.home.adapter.FragmentAdapter; | |||||
import com.bonait.bnframework.modules.home.fragment.from.fragment.SystemDeviceinFragment; | |||||
import com.bonait.bnframework.modules.home.fragment.from.fragment.SystemSeasoningsetFragment; | |||||
import com.bonait.bnframework.modules.home.fragment.from.fragment.SystemSystemsetFragment; | |||||
import com.bonait.bnframework.modules.home.fragment.from.fragment.systeminternetfragment; | |||||
import com.qmuiteam.qmui.widget.QMUITopBar; | |||||
import com.bonait.bnframework.ViewModel.Adapter.FragmentAdapter; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.SystemDeviceinFragment; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.SystemSeasoningsetFragment; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.SystemSystemsetFragment; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.systeminternetfragment; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import com.qmuiteam.qmui.widget.QMUIViewPager; | import com.qmuiteam.qmui.widget.QMUIViewPager; | ||||
@@ -1,63 +1,31 @@ | |||||
package com.bonait.bnframework.modules.mine.fragment; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import android.app.AlertDialog; | |||||
import android.content.DialogInterface; | import android.content.DialogInterface; | ||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.text.InputType; | import android.text.InputType; | ||||
import android.text.TextUtils; | |||||
import android.view.View; | import android.view.View; | ||||
import android.widget.Button; | import android.widget.Button; | ||||
import android.widget.EditText; | |||||
import android.widget.ListView; | import android.widget.ListView; | ||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.common.base.BaseActivity; | import com.bonait.bnframework.common.base.BaseActivity; | ||||
import com.bonait.bnframework.common.constant.ConfigName; | import com.bonait.bnframework.common.constant.ConfigName; | ||||
import com.bonait.bnframework.common.constant.MessageName; | |||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODS; | |||||
import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | |||||
import com.bonait.bnframework.common.db.mode.BPA_SILOS; | |||||
import com.bonait.bnframework.common.db.mode.BPA_SILOSANDMATERIAL; | |||||
import com.bonait.bnframework.common.db.mode.BPA_USER; | import com.bonait.bnframework.common.db.mode.BPA_USER; | ||||
import com.bonait.bnframework.common.helper.I.IRunT; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import com.bonait.bnframework.common.http.callback.json.JsonDialogCallback; | |||||
import com.bonait.bnframework.common.message.MessageManager; | |||||
import com.bonait.bnframework.common.model.ResAPI; | |||||
import com.bonait.bnframework.common.model.mode.ActionJsonMode; | |||||
import com.bonait.bnframework.common.model.mode.BatchingInfo; | |||||
import com.bonait.bnframework.common.model.mode.BomTechnologyActionInfo; | |||||
import com.bonait.bnframework.common.model.mode.CloudGood; | |||||
import com.bonait.bnframework.common.model.mode.GoodsTechnology; | |||||
import com.bonait.bnframework.common.model.mode.TechnologyAction; | |||||
import com.bonait.bnframework.common.model.mode.UpdateBomInfo; | |||||
import com.bonait.bnframework.common.model.mode.UpdateCloudGood; | |||||
import com.bonait.bnframework.common.oss.OssHelper; | |||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.common.view.AddUserDialog; | import com.bonait.bnframework.common.view.AddUserDialog; | ||||
import com.bonait.bnframework.common.view.GoodEditDialog; | |||||
import com.bonait.bnframework.modules.home.adapter.user_adapter; | |||||
import com.google.gson.Gson; | |||||
import com.lzy.okgo.OkGo; | |||||
import com.lzy.okgo.model.HttpHeaders; | |||||
import com.lzy.okgo.model.Response; | |||||
import com.bonait.bnframework.ViewModel.Adapter.user_adapter; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.HashMap; | |||||
import java.util.List; | |||||
import butterknife.BindView; | import butterknife.BindView; | ||||
import butterknife.ButterKnife; | import butterknife.ButterKnife; | ||||
import butterknife.OnClick; | import butterknife.OnClick; | ||||
import okhttp3.MediaType; | |||||
import okhttp3.RequestBody; | |||||
public class UserActivity extends BaseActivity implements MyClickListener { | public class UserActivity extends BaseActivity implements MyClickListener { | ||||
@BindView(R.id.topbar) | @BindView(R.id.topbar) |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.welcome.activity; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import android.Manifest; | import android.Manifest; | ||||
import android.content.Intent; | import android.content.Intent; | ||||
@@ -6,8 +6,6 @@ import android.os.Bundle; | |||||
import android.os.Handler; | import android.os.Handler; | ||||
import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
import androidx.appcompat.app.AppCompatActivity; | |||||
import androidx.recyclerview.widget.GridLayoutManager; | |||||
import android.view.KeyEvent; | import android.view.KeyEvent; | ||||
@@ -18,12 +16,10 @@ import com.bonait.bnframework.common.constant.ConfigName; | |||||
import com.bonait.bnframework.common.constant.Constants; | import com.bonait.bnframework.common.constant.Constants; | ||||
import com.bonait.bnframework.common.utils.ScreenUtils; | import com.bonait.bnframework.common.utils.ScreenUtils; | ||||
import com.bonait.bnframework.manager.ActivityLifecycleManager; | import com.bonait.bnframework.manager.ActivityLifecycleManager; | ||||
import com.bonait.bnframework.modules.home.activity.BottomNavigation2Activity; | |||||
import com.bonait.bnframework.test.TestActivity; | import com.bonait.bnframework.test.TestActivity; | ||||
import com.lzy.okgo.OkGo; | import com.lzy.okgo.OkGo; | ||||
import okhttp3.OkHttpClient; | import okhttp3.OkHttpClient; | ||||
import pub.devrel.easypermissions.AfterPermissionGranted; | |||||
import pub.devrel.easypermissions.EasyPermissions; | import pub.devrel.easypermissions.EasyPermissions; | ||||
public class WelcomeActivity extends BaseActivity { | public class WelcomeActivity extends BaseActivity { |
@@ -1,10 +1,10 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.from; | |||||
package com.bonait.bnframework.ViewModel.ActivityViewModel; | |||||
import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
import com.bonait.bnframework.common.constant.ConfigName; | import com.bonait.bnframework.common.constant.ConfigName; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.fragment.from.fragment.SystemCsPLCFragment; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.SystemCsPLCFragment; | |||||
import com.google.android.material.bottomnavigation.BottomNavigationView; | import com.google.android.material.bottomnavigation.BottomNavigationView; | ||||
import androidx.viewpager.widget.ViewPager; | import androidx.viewpager.widget.ViewPager; | ||||
@@ -18,11 +18,10 @@ import android.widget.RelativeLayout; | |||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.common.base.BaseActivity; | import com.bonait.bnframework.common.base.BaseActivity; | ||||
import com.bonait.bnframework.modules.home.adapter.FragmentAdapter; | |||||
import com.bonait.bnframework.modules.home.fragment.from.fragment.SystemCsFltlFragment; | |||||
import com.bonait.bnframework.modules.home.fragment.from.fragment.SystemCsControlFragment; | |||||
import com.bonait.bnframework.modules.home.fragment.from.fragment.SystemCsMonitorFragment; | |||||
import com.qmuiteam.qmui.widget.QMUITopBar; | |||||
import com.bonait.bnframework.ViewModel.Adapter.FragmentAdapter; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.SystemCsFltlFragment; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.SystemCsControlFragment; | |||||
import com.bonait.bnframework.ViewModel.FragmentViewModel.SystemCsMonitorFragment; | |||||
import com.qmuiteam.qmui.widget.QMUITopBarLayout; | import com.qmuiteam.qmui.widget.QMUITopBarLayout; | ||||
import com.qmuiteam.qmui.widget.QMUIViewPager; | import com.qmuiteam.qmui.widget.QMUIViewPager; | ||||
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
import androidx.fragment.app.Fragment; | import androidx.fragment.app.Fragment; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.graphics.Color; | import android.graphics.Color; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.graphics.Color; | import android.graphics.Color; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.view.LayoutInflater; | import android.view.LayoutInflater; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.app.Activity; | import android.app.Activity; | ||||
import android.content.Context; | import android.content.Context; | ||||
@@ -16,21 +16,16 @@ import androidx.recyclerview.widget.RecyclerView; | |||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.business.ConfigData; | import com.bonait.bnframework.business.ConfigData; | ||||
import com.bonait.bnframework.common.constant.ConfigName; | import com.bonait.bnframework.common.constant.ConfigName; | ||||
import com.bonait.bnframework.common.constant.MessageName; | |||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import com.bonait.bnframework.common.image.MyBitmapUtils; | import com.bonait.bnframework.common.image.MyBitmapUtils; | ||||
import com.bonait.bnframework.common.message.MessageManager; | |||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.bonait.bnframework.modules.home.fragment.mode.SectionItem; | |||||
import com.bonait.bnframework.ViewModel.CustomView.SectionItem; | |||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | ||||
import java.math.BigDecimal; | |||||
import java.text.DecimalFormat; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.List; | |||||
public class good_adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | public class good_adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | ||||
//图标 | //图标 |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.app.Activity; | import android.app.Activity; | ||||
import android.content.Context; | import android.content.Context; | ||||
@@ -7,21 +7,17 @@ import android.view.LayoutInflater; | |||||
import android.view.View; | import android.view.View; | ||||
import android.view.ViewGroup; | import android.view.ViewGroup; | ||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
import android.widget.RelativeLayout; | |||||
import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
import androidx.recyclerview.widget.RecyclerView; | import androidx.recyclerview.widget.RecyclerView; | ||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.common.constant.DataBus; | |||||
import com.bonait.bnframework.common.db.mode.BPA_GOODS; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import com.bonait.bnframework.common.image.MyBitmapUtils; | import com.bonait.bnframework.common.image.MyBitmapUtils; | ||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.modules.home.fragment.mode.image_sp; | |||||
import com.bonait.bnframework.ViewModel.CustomView.image_sp; | |||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | ||||
import com.qmuiteam.qmui.widget.textview.QMUILinkTextView; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.List; | import java.util.List; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.annotation.SuppressLint; | import android.annotation.SuppressLint; | ||||
import android.app.Activity; | import android.app.Activity; | ||||
@@ -16,7 +16,6 @@ import com.bonait.bnframework.R; | |||||
import com.bonait.bnframework.business.ExecuteTheRecipe; | import com.bonait.bnframework.business.ExecuteTheRecipe; | ||||
import com.bonait.bnframework.common.constant.DataBus; | import com.bonait.bnframework.common.constant.DataBus; | ||||
import com.bonait.bnframework.common.db.res.lcMode; | import com.bonait.bnframework.common.db.res.lcMode; | ||||
import com.bonait.bnframework.common.helper.I.IWriteCallBack; | |||||
import com.bonait.bnframework.common.utils.AlertDialogUtils; | import com.bonait.bnframework.common.utils.AlertDialogUtils; | ||||
import com.bonait.bnframework.common.utils.ToastUtils; | import com.bonait.bnframework.common.utils.ToastUtils; | ||||
import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | import com.qmuiteam.qmui.widget.dialog.QMUIDialog; | ||||
@@ -87,7 +86,7 @@ public class lc_adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |||||
myViewHolder.imageView.setTag(finalKg); | myViewHolder.imageView.setTag(finalKg); | ||||
myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_g)); | myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_g)); | ||||
ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", true, null); | |||||
// ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", true, null); | |||||
ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ||||
}else | }else | ||||
{ | { | ||||
@@ -95,7 +94,7 @@ public class lc_adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |||||
myViewHolder.imageView.setTag(finalKg); | myViewHolder.imageView.setTag(finalKg); | ||||
myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_k2)); | myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_k2)); | ||||
ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", false, null); | |||||
// ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", false, null); | |||||
ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ||||
} | } | ||||
// AlertDialogUtils.showDialog(context, title, message, new QMUIDialogAction.ActionListener() { | // AlertDialogUtils.showDialog(context, title, message, new QMUIDialogAction.ActionListener() { | ||||
@@ -129,7 +128,7 @@ public class lc_adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |||||
myViewHolder.imageView.setTag(finalKg); | myViewHolder.imageView.setTag(finalKg); | ||||
myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_g)); | myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_g)); | ||||
ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", true, null); | |||||
ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", true,null); | |||||
ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ||||
}else | }else | ||||
{ | { | ||||
@@ -137,7 +136,7 @@ public class lc_adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |||||
myViewHolder.imageView.setTag(finalKg); | myViewHolder.imageView.setTag(finalKg); | ||||
myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_k2)); | myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_k2)); | ||||
ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", false, null); | |||||
ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", false,null); | |||||
ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ||||
} | } | ||||
// AlertDialogUtils.showDialog(context, title, message, new QMUIDialogAction.ActionListener() { | // AlertDialogUtils.showDialog(context, title, message, new QMUIDialogAction.ActionListener() { | ||||
@@ -171,7 +170,7 @@ public class lc_adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |||||
myViewHolder.imageView.setTag(finalKg); | myViewHolder.imageView.setTag(finalKg); | ||||
myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_g)); | myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_g)); | ||||
ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", true, null); | |||||
ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", true,null); | |||||
ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ||||
}else | }else | ||||
{ | { | ||||
@@ -179,7 +178,7 @@ public class lc_adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |||||
myViewHolder.imageView.setTag(finalKg); | myViewHolder.imageView.setTag(finalKg); | ||||
myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_k2)); | myViewHolder.imageView.setImageDrawable(context.getResources().getDrawable(R.mipmap.shuiguan_k2)); | ||||
ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", false, null); | |||||
ExecuteTheRecipe.WritePLC("料仓"+(position+1)+"手动开关", false,null); | |||||
ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ToastUtils.info("料仓"+(position+1)+"开关," + finalKg); | ||||
} | } | ||||
// AlertDialogUtils.showDialog(context, title, message, new QMUIDialogAction.ActionListener() { | // AlertDialogUtils.showDialog(context, title, message, new QMUIDialogAction.ActionListener() { |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.view.LayoutInflater; | import android.view.LayoutInflater; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.app.Activity; | import android.app.Activity; | ||||
import android.content.Context; | import android.content.Context; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||
@@ -15,7 +15,6 @@ import com.bonait.bnframework.R; | |||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.db.mode.BPA_PROCESS; | import com.bonait.bnframework.common.db.mode.BPA_PROCESS; | ||||
import com.bonait.bnframework.common.db.mode.BPA_PROCESSModel; | import com.bonait.bnframework.common.db.mode.BPA_PROCESSModel; | ||||
import com.bonait.bnframework.common.db.res.lcMode; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import java.util.ArrayList; | import java.util.ArrayList; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.view.LayoutInflater; | import android.view.LayoutInflater; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.app.Activity; | import android.app.Activity; | ||||
import android.content.Context; | import android.content.Context; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.view.LayoutInflater; | import android.view.LayoutInflater; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.adapter; | |||||
package com.bonait.bnframework.ViewModel.Adapter; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.view.LayoutInflater; | import android.view.LayoutInflater; |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.mode; | |||||
package com.bonait.bnframework.ViewModel.CustomView; | |||||
public enum LocationStatus { | public enum LocationStatus { |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.mode; | |||||
package com.bonait.bnframework.ViewModel.CustomView; | |||||
/** | /** | ||||
* 状态 | * 状态 |
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.mode; | |||||
package com.bonait.bnframework.ViewModel.CustomView; | |||||
import android.content.Context; | import android.content.Context; | ||||
@@ -7,16 +7,12 @@ import android.view.LayoutInflater; | |||||
import android.view.View; | import android.view.View; | ||||
import android.view.ViewGroup; | import android.view.ViewGroup; | ||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
import android.widget.RelativeLayout; | |||||
import android.widget.TextView; | import android.widget.TextView; | ||||
import com.bonait.bnframework.R; | import com.bonait.bnframework.R; | ||||
import com.bonait.bnframework.business.ConfigData; | import com.bonait.bnframework.business.ConfigData; | ||||
import com.bonait.bnframework.common.constant.ConfigName; | |||||
import com.bonait.bnframework.common.constant.MessageName; | import com.bonait.bnframework.common.constant.MessageName; | ||||
import com.bonait.bnframework.common.db.QueryDB; | import com.bonait.bnframework.common.db.QueryDB; | ||||
import com.bonait.bnframework.common.db.mode.BPA_GOODS; | |||||
import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE; | |||||
import com.bonait.bnframework.common.helper.I.MyClickListener; | import com.bonait.bnframework.common.helper.I.MyClickListener; | ||||
import com.bonait.bnframework.common.image.MyBitmapUtils; | import com.bonait.bnframework.common.image.MyBitmapUtils; | ||||
import com.bonait.bnframework.common.message.MessageManager; | import com.bonait.bnframework.common.message.MessageManager; | ||||
@@ -27,8 +23,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; | |||||
import com.qmuiteam.qmui.widget.section.QMUIDefaultStickySectionAdapter; | import com.qmuiteam.qmui.widget.section.QMUIDefaultStickySectionAdapter; | ||||
import com.qmuiteam.qmui.widget.section.QMUISection; | import com.qmuiteam.qmui.widget.section.QMUISection; | ||||
import java.util.ArrayList; | |||||
public class QDListSectionAdapter extends QMUIDefaultStickySectionAdapter { | public class QDListSectionAdapter extends QMUIDefaultStickySectionAdapter { | ||||
private TextView tvTag ,tvNote,tvAccount,Sc_text,delete_text; | private TextView tvTag ,tvNote,tvAccount,Sc_text,delete_text; | ||||
@@ -1,4 +1,4 @@ | |||||
package com.bonait.bnframework.modules.home.fragment.mode; | |||||
package com.bonait.bnframework.ViewModel.CustomView; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.graphics.Color; | import android.graphics.Color; |
@@ -15,7 +15,7 @@ | |||||
*/ | */ | ||||
package com.bonait.bnframework.modules.home.fragment.mode; | |||||
package com.bonait.bnframework.ViewModel.CustomView; | |||||
import com.qmuiteam.qmui.widget.section.QMUISection; | import com.qmuiteam.qmui.widget.section.QMUISection; | ||||