@@ -0,0 +1,5 @@ | |||
package com.example.bpa.Model; | |||
public interface IReadCallBack<T> { | |||
void onSuccess(T t); | |||
} |
@@ -0,0 +1,5 @@ | |||
package com.example.bpa.Model; | |||
public interface IRun { | |||
void Run(); | |||
} |
@@ -0,0 +1,7 @@ | |||
package com.example.bpa.Model; | |||
public interface IWriteCallBack { | |||
void onSuccess(); | |||
void onFailure(String ErrorMsg); | |||
} |
@@ -0,0 +1,53 @@ | |||
package com.example.bpa.app; | |||
import com.example.bpa.Model.IThread; | |||
import com.example.bpa.db.QueryDB; | |||
import com.example.bpa.helper.ThreadManager; | |||
import com.example.bpa.view.mode.ResGoodsRecipe; | |||
import java.util.ArrayList; | |||
import java.util.concurrent.ConcurrentLinkedQueue; | |||
public class BusinessServer { | |||
private static volatile BusinessServer _instance; | |||
public static BusinessServer get() { | |||
if (_instance == null) | |||
_instance = new BusinessServer(); | |||
return _instance; | |||
} | |||
private BusinessServer() { | |||
} | |||
ConcurrentLinkedQueue<String> Commoditys = new ConcurrentLinkedQueue<String>(); | |||
/** | |||
* 添加配方 | |||
* | |||
* @param info 配方信息 | |||
*/ | |||
public void AddCommodity(String info) { | |||
Commoditys.offer(info); | |||
} | |||
public void Start() { | |||
ThreadManager.Get().StartLong("配方执行业务流程", true, new IThread() { | |||
@Override | |||
public void Run() throws InterruptedException { | |||
while (Commoditys.size() > 0) { | |||
Commoditys.poll(); | |||
ArrayList<ResGoodsRecipe> goods = QueryDB.GetGoodsSrecipeList(""); | |||
} | |||
Thread.sleep(1000); | |||
} | |||
@Override | |||
public void RunComplete() throws InterruptedException { | |||
} | |||
}); | |||
} | |||
} |
@@ -1,11 +1,14 @@ | |||
package com.example.bpa.app; | |||
import android.renderscript.Sampler; | |||
import com.example.bpa.Model.IReadCallBack; | |||
import com.example.bpa.Model.IRun; | |||
import com.example.bpa.Model.IThread; | |||
import com.example.bpa.Model.IWriteCallBack; | |||
import com.example.bpa.helper.RTrig; | |||
import com.example.bpa.helper.ThreadManager; | |||
import java.util.concurrent.ConcurrentHashMap; | |||
import java.util.concurrent.ConcurrentLinkedQueue; | |||
public class DeviceData { | |||
private static volatile DeviceData _instance; | |||
@@ -20,7 +23,53 @@ public class DeviceData { | |||
ThreadManager.Get().StartLong("Plc设备数据监听", true, new IThread() { | |||
@Override | |||
public void Run() throws InterruptedException { | |||
//获取校准值 | |||
ModbusTcpServer.get().ReadShort("VW100", 10, new IReadCallBack<short[]>() { | |||
@Override | |||
public void onSuccess(short[] shorts) { | |||
for (int i = 0; i < shorts.length; i++) { | |||
CalibrationValue.put(i + 1, shorts[i]); | |||
} | |||
} | |||
}); | |||
//获取称当前重量 | |||
ModbusTcpServer.get().ReadFloat("VD260", 9, new IReadCallBack<float[]>() { | |||
@Override | |||
public void onSuccess(float[] floats) { | |||
for (int i = 0; i < floats.length; i++) { | |||
CallCurrentWeight.put(i + 1, floats[i]); | |||
} | |||
} | |||
}); | |||
//获取校准基准时间 | |||
ModbusTcpServer.get().ReadFloat("VD124", 1, new IReadCallBack<float[]>() { | |||
@Override | |||
public void onSuccess(float[] floats) { | |||
CalibrationReferenceTime = floats[0]; | |||
} | |||
}); | |||
//获取清洗参数 | |||
ModbusTcpServer.get().ReadShort("VW140", 4, new IReadCallBack<short[]>() { | |||
@Override | |||
public void onSuccess(short[] shorts) { | |||
DrainageTime = shorts[0]; | |||
AddCleaningAgentTime = shorts[1]; | |||
InletTime = shorts[2]; | |||
CyclicCleaningTime = shorts[3]; | |||
} | |||
}); | |||
//配料完成 M0.3 | |||
CompleteListen("M0.3", "配料完成", ChargeMixtureCompleteNotify); | |||
//清洗完成 M0.6 | |||
CompleteListen("M0.6", "清洗完成", CleaningCompleteNotify); | |||
//去皮完成 M1.3 | |||
CompleteListen("M1.3", "去皮完成", PeelingCompleteNotify); | |||
Thread.sleep(10); | |||
} | |||
@@ -32,34 +81,35 @@ public class DeviceData { | |||
}); | |||
} | |||
/** | |||
* 称当前重量 | |||
*/ | |||
ConcurrentHashMap<Integer, Float> CallCurrentWeight = new ConcurrentHashMap<Integer, Float>(); | |||
/** | |||
* 手自动模式 | |||
*/ | |||
boolean HandOrAutoMode; | |||
/** | |||
* 清洗模式 | |||
*/ | |||
boolean CleaningMode; | |||
private void CompleteListen(String add, String name, IRun callback) { | |||
ModbusTcpServer.get().ReadBool(add, 1, new IReadCallBack<boolean[]>() { | |||
@Override | |||
public void onSuccess(boolean[] booleans) { | |||
RTrig.get(name).Start(booleans[0], new IRun() { | |||
@Override | |||
public void Run() { | |||
if (callback != null) | |||
callback.Run(); | |||
} | |||
}); | |||
} | |||
}); | |||
} | |||
/** | |||
* 清洗完成 | |||
* 配料完成通知 | |||
*/ | |||
boolean CleaningComplete; | |||
public IRun ChargeMixtureCompleteNotify; | |||
/** | |||
* 一键去皮完成状态 | |||
* 清洗完成通知 | |||
*/ | |||
boolean OneClickPeelingComplete; | |||
public IRun CleaningCompleteNotify; | |||
/** | |||
* 校准模式 | |||
* 去皮完成 | |||
*/ | |||
boolean CalibrationMode; | |||
public IRun PeelingCompleteNotify; | |||
/** | |||
* 校准值写入 | |||
@@ -68,13 +118,30 @@ public class DeviceData { | |||
* @param value 需要写入的值 | |||
* @param ch 需要写入的通道编号,1--10 | |||
*/ | |||
public void setCalibrationValue(short value, int ch) { | |||
public void setCalibrationValue(short value, int ch, IWriteCallBack callback) { | |||
if (ch >= 1 && ch <= 10) { | |||
String add = "VW" + (98 + ch * 2); | |||
ModbusTcpServer.get().WriteShort(add, value); | |||
ModbusTcpServer.get().WriteShort(add, value, callback); | |||
} | |||
} | |||
/** | |||
* 校准值 | |||
*/ | |||
ConcurrentHashMap<Integer, Short> CalibrationValue = new ConcurrentHashMap<>(); | |||
/** | |||
* 获取校准值 | |||
* | |||
* @param ch 要获取的通道号 | |||
* @return | |||
*/ | |||
public short getCalibrationValue(int ch) { | |||
if (!CalibrationValue.containsKey(ch)) | |||
return 0; | |||
return CalibrationValue.get(ch); | |||
} | |||
/** | |||
* 需求值写入 | |||
* ,PLC 地址 VW200--VW218 | |||
@@ -82,10 +149,10 @@ public class DeviceData { | |||
* @param value 需要写入的值 | |||
* @param ch 需要写入的通道编号,1--10 | |||
*/ | |||
public void setDemandValue(short value, int ch) { | |||
public void setDemandValue(short value, int ch, IWriteCallBack callback) { | |||
if (ch >= 1 && ch <= 10) { | |||
String add = "VW" + (198 + ch * 2); | |||
ModbusTcpServer.get().WriteShort(add, value); | |||
ModbusTcpServer.get().WriteShort(add, value, callback); | |||
} | |||
} | |||
@@ -96,11 +163,11 @@ public class DeviceData { | |||
* @param value 需要写入的值 | |||
* @param ch 需要写入的通道编号,1--10 | |||
*/ | |||
public void setChCalibrationSwitch(boolean value, int ch) { | |||
public void setChCalibrationSwitch(boolean value, int ch, IWriteCallBack callback) { | |||
if (ch >= 1 && ch <= 10) { | |||
String add = ModbusTcpServer.get().getBitSingleAdd("M", 2, ch); | |||
if (add.length() > 0) | |||
ModbusTcpServer.get().WriteBool(add, value); | |||
ModbusTcpServer.get().WriteBool(add, value, callback); | |||
} | |||
} | |||
@@ -110,11 +177,11 @@ public class DeviceData { | |||
* @param value | |||
* @param ch 设置称的通道号,ch1-ch8 | |||
*/ | |||
public void setRemovePeelCalibration(boolean value, int ch) { | |||
public void setRemovePeelCalibration(boolean value, int ch, IWriteCallBack callback) { | |||
if (ch >= 1 && ch <= 8) { | |||
String add = ModbusTcpServer.get().getBitSingleAdd("M", 5, ch); | |||
if (add.length() > 0) | |||
ModbusTcpServer.get().WriteBool(add, value); | |||
ModbusTcpServer.get().WriteBool(add, value, callback); | |||
} | |||
} | |||
@@ -124,68 +191,68 @@ public class DeviceData { | |||
* @param value | |||
* @param ch 设置称的砝码通道号,ch1-ch8 | |||
*/ | |||
public void setWeightValue(boolean value, int ch) { | |||
public void setWeightValue(boolean value, int ch, IWriteCallBack callback) { | |||
if (ch >= 1 && ch <= 8) { | |||
String add = ModbusTcpServer.get().getBitSingleAdd("M", 15, ch); | |||
if (add.length() > 0) | |||
ModbusTcpServer.get().WriteBool(add, value); | |||
ModbusTcpServer.get().WriteBool(add, value, callback); | |||
} | |||
} | |||
/** | |||
* 重量清零 | |||
*/ | |||
public void setWeightClear() { | |||
ModbusTcpServer.get().WriteBool("M6.0", true); | |||
public void setWeightClear(IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M6.0", true, callback); | |||
} | |||
/** | |||
* 关闭写保护 | |||
*/ | |||
public void setCloseWriteProtect() { | |||
ModbusTcpServer.get().WriteBool("M6.1", true); | |||
public void setCloseWriteProtect(IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M6.1", true, callback); | |||
} | |||
/** | |||
* 打开写保护 | |||
*/ | |||
public void setOpenWriteProtect() { | |||
ModbusTcpServer.get().WriteBool("M6.4", true); | |||
public void setOpenWriteProtect(IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M6.4", true, callback); | |||
} | |||
/** | |||
* 零点校准 | |||
*/ | |||
public void setZeroPointCalibration() { | |||
ModbusTcpServer.get().WriteBool("M6.2", true); | |||
public void setZeroPointCalibration(IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M6.2", true, callback); | |||
} | |||
/** | |||
* 砝码值写入 | |||
*/ | |||
public void setWeightValueWrite() { | |||
ModbusTcpServer.get().WriteBool("M6.3", true); | |||
public void setWeightValueWrite(IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M6.3", true, callback); | |||
} | |||
/** | |||
* 砝码校准模式 | |||
*/ | |||
public void setWeightCalibrationMode() { | |||
ModbusTcpServer.get().WriteBool("M6.5", true); | |||
public void setWeightCalibrationMode(IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M6.5", true, callback); | |||
} | |||
/** | |||
* 启动通道校准 | |||
*/ | |||
public void setChStartCalibration() { | |||
ModbusTcpServer.get().WriteBool("M0.0", true); | |||
public void setChStartCalibration(IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M0.0", true, callback); | |||
} | |||
/** | |||
* 启动配料 | |||
*/ | |||
public void setChargeMixtureStart() { | |||
ModbusTcpServer.get().WriteBool("M0.1", true); | |||
public void setChargeMixtureStart(IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M0.1", true, callback); | |||
} | |||
/** | |||
@@ -193,10 +260,15 @@ public class DeviceData { | |||
* | |||
* @param value true:自动模式,flase:手动模式 | |||
*/ | |||
public void setHandOrAutoSwitch(boolean value) { | |||
ModbusTcpServer.get().WriteBool("M0.2", value); | |||
public void setHandOrAutoSwitch(boolean value, IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M0.2", value, callback); | |||
} | |||
/** | |||
* 手自动模式 | |||
*/ | |||
boolean HandOrAutoMode; | |||
/** | |||
* 获取手自动模式的状态 | |||
* | |||
@@ -211,10 +283,15 @@ public class DeviceData { | |||
* | |||
* @param value true:清洗模式,false:配料模式 | |||
*/ | |||
public void setCleaningMode(boolean value) { | |||
ModbusTcpServer.get().WriteBool("M0.4", value); | |||
public void setCleaningMode(boolean value, IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M0.4", value, callback); | |||
} | |||
/** | |||
* 清洗模式 | |||
*/ | |||
boolean CleaningMode; | |||
/** | |||
* 获取清洗模式 | |||
* | |||
@@ -227,17 +304,22 @@ public class DeviceData { | |||
/** | |||
* 设置开始清洗 | |||
*/ | |||
public void setStartCleaning() { | |||
ModbusTcpServer.get().WriteBool("M0.5", true); | |||
public void setStartCleaning(IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M0.5", true, callback); | |||
} | |||
/** | |||
* 设置一键去皮 | |||
*/ | |||
public void setOneClickPeeling() { | |||
ModbusTcpServer.get().WriteBool("M1.2", true); | |||
public void setOneClickPeeling(IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M1.2", true, callback); | |||
} | |||
/** | |||
* 一键去皮完成状态 | |||
*/ | |||
boolean OneClickPeelingComplete; | |||
/** | |||
* 设置一键去皮完成状态 | |||
* | |||
@@ -247,6 +329,11 @@ public class DeviceData { | |||
OneClickPeelingComplete = value; | |||
} | |||
/** | |||
* 清洗完成 | |||
*/ | |||
boolean CleaningComplete; | |||
/** | |||
* 获取清洗完成的状态 | |||
* | |||
@@ -261,10 +348,15 @@ public class DeviceData { | |||
* | |||
* @param value true:零点校准模式,false:清零去皮模式 | |||
*/ | |||
public void setCalibrationMode(boolean value) { | |||
ModbusTcpServer.get().WriteBool("M1.4", value); | |||
public void setCalibrationMode(boolean value, IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteBool("M1.4", value, callback); | |||
} | |||
/** | |||
* 校准模式 | |||
*/ | |||
boolean CalibrationMode; | |||
/** | |||
* 获取校准模式 | |||
* | |||
@@ -274,6 +366,11 @@ public class DeviceData { | |||
return CalibrationMode; | |||
} | |||
/** | |||
* 称当前重量 | |||
*/ | |||
ConcurrentHashMap<Integer, Float> CallCurrentWeight = new ConcurrentHashMap<Integer, Float>(); | |||
/** | |||
* 获取指定称的当前重量 | |||
* | |||
@@ -292,8 +389,22 @@ public class DeviceData { | |||
* | |||
* @param value 需要写入的值 | |||
*/ | |||
public void setCalibrationReferenceTime(float value) { | |||
ModbusTcpServer.get().WriteFloat("VD124", value); | |||
public void setCalibrationReferenceTime(float value, IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteFloat("VD124", value, callback); | |||
} | |||
/** | |||
* 校准基准时间 | |||
*/ | |||
float CalibrationReferenceTime; | |||
/** | |||
* 获取校准基准时间 | |||
* | |||
* @return | |||
*/ | |||
public float getCalibrationReferenceTime() { | |||
return CalibrationReferenceTime; | |||
} | |||
/** | |||
@@ -301,8 +412,22 @@ public class DeviceData { | |||
* | |||
* @param value | |||
*/ | |||
public void setDrainageTime(short value) { | |||
ModbusTcpServer.get().WriteShort("VW140", value); | |||
public void setDrainageTime(short value, IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteShort("VW140", value, callback); | |||
} | |||
/** | |||
* 排水时间 | |||
*/ | |||
short DrainageTime; | |||
/** | |||
* 获取排水时间 | |||
* | |||
* @return | |||
*/ | |||
public short getDrainageTime() { | |||
return DrainageTime; | |||
} | |||
/** | |||
@@ -310,8 +435,22 @@ public class DeviceData { | |||
* | |||
* @param value | |||
*/ | |||
public void setAddCleaningAgentTime(short value) { | |||
ModbusTcpServer.get().WriteShort("VW142", value); | |||
public void setAddCleaningAgentTime(short value, IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteShort("VW142", value, callback); | |||
} | |||
/** | |||
* 清洗剂添加时间 | |||
*/ | |||
short AddCleaningAgentTime; | |||
/** | |||
* 获取清洗剂添加时间 | |||
* | |||
* @return | |||
*/ | |||
public short getAddCleaningAgentTime() { | |||
return AddCleaningAgentTime; | |||
} | |||
/** | |||
@@ -319,8 +458,22 @@ public class DeviceData { | |||
* | |||
* @param value | |||
*/ | |||
public void setInletTime(short value) { | |||
ModbusTcpServer.get().WriteShort("VW144", value); | |||
public void setInletTime(short value, IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteShort("VW144", value, callback); | |||
} | |||
/** | |||
* 进水时间 | |||
*/ | |||
short InletTime; | |||
/** | |||
* 获取进水时间 | |||
* | |||
* @return | |||
*/ | |||
public short getInletTime() { | |||
return InletTime; | |||
} | |||
/** | |||
@@ -328,8 +481,22 @@ public class DeviceData { | |||
* | |||
* @param value | |||
*/ | |||
public void setCyclicCleaningTime(short value) { | |||
ModbusTcpServer.get().WriteShort("VW146", value); | |||
public void setCyclicCleaningTime(short value, IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteShort("VW146", value, callback); | |||
} | |||
/** | |||
* 循环清洗时间 | |||
*/ | |||
short CyclicCleaningTime; | |||
/** | |||
* 获取循环清洗时间 | |||
* | |||
* @return | |||
*/ | |||
public short getCyclicCleaningTime() { | |||
return CyclicCleaningTime; | |||
} | |||
/** | |||
@@ -337,8 +504,8 @@ public class DeviceData { | |||
* | |||
* @param value | |||
*/ | |||
public void setCalibrationWeight(short value) { | |||
ModbusTcpServer.get().WriteShort("250", value); | |||
public void setCalibrationWeight(short value, IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteShort("250", value, callback); | |||
} | |||
/** | |||
@@ -346,8 +513,8 @@ public class DeviceData { | |||
* | |||
* @param value | |||
*/ | |||
public void setCalibrationWeight9(short value) { | |||
ModbusTcpServer.get().WriteShort("254", value); | |||
public void setCalibrationWeight9(short value, IWriteCallBack callback) { | |||
ModbusTcpServer.get().WriteShort("254", value, callback); | |||
} | |||
@@ -1,5 +0,0 @@ | |||
package com.example.bpa.app; | |||
public interface IReadCallBack <T>{ | |||
void onSuccess(T t); | |||
} |
@@ -1,8 +1,8 @@ | |||
package com.example.bpa.app; | |||
import android.util.Log; | |||
import com.example.bpa.Model.IReadCallBack; | |||
import com.example.bpa.Model.IWriteCallBack; | |||
import com.example.bpa.helper.MessageLog; | |||
import com.licheedev.modbus4android.ModbusCallback; | |||
import com.licheedev.modbus4android.ModbusParam; | |||
@@ -13,14 +13,8 @@ import com.serotonin.modbus4j.msg.ReadHoldingRegistersResponse; | |||
import com.serotonin.modbus4j.msg.WriteCoilResponse; | |||
import com.serotonin.modbus4j.msg.WriteRegistersResponse; | |||
import java.lang.reflect.Type; | |||
import java.nio.ByteBuffer; | |||
import java.nio.FloatBuffer; | |||
import java.nio.ShortBuffer; | |||
import java.util.Arrays; | |||
import java.util.LinkedList; | |||
import io.reactivex.SingleConverter; | |||
public class ModbusTcpServer { | |||
@@ -150,12 +144,13 @@ public class ModbusTcpServer { | |||
@Override | |||
public void onSuccess(ReadHoldingRegistersResponse readHoldingRegistersResponse) { | |||
short[] data = readHoldingRegistersResponse.getShortData(); | |||
callback.onSuccess(data); | |||
if (data.length == length) | |||
callback.onSuccess(data); | |||
} | |||
@Override | |||
public void onFailure(Throwable tr) { | |||
MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + tr.getMessage()); | |||
MessageLog.ShowError("ReadShort onFailure,Address=" + Address + ",length=" + length + ",msg:" + tr.toString()); | |||
} | |||
@Override | |||
@@ -172,12 +167,13 @@ public class ModbusTcpServer { | |||
public void onSuccess(ReadCoilsResponse readCoilsResponse) { | |||
boolean[] data = readCoilsResponse.getBooleanData(); | |||
boolean[] result = Arrays.copyOfRange(data, 0, length); | |||
callback.onSuccess(result); | |||
if (result.length == length) | |||
callback.onSuccess(result); | |||
} | |||
@Override | |||
public void onFailure(Throwable tr) { | |||
MessageLog.ShowError("ReadBool onFailure,Address=" + Address + ",length=" + length + ",msg:" + tr.getMessage()); | |||
MessageLog.ShowError("ReadBool onFailure,Address=" + Address + ",length=" + length + ",msg:" + tr.toString()); | |||
} | |||
@Override | |||
@@ -201,12 +197,13 @@ public class ModbusTcpServer { | |||
} | |||
tempValues[i] = ByteBuffer.wrap(tempData).getFloat(); | |||
} | |||
callback.onSuccess(tempValues); | |||
if (tempValues.length == length) | |||
callback.onSuccess(tempValues); | |||
} | |||
@Override | |||
public void onFailure(Throwable tr) { | |||
MessageLog.ShowError("ReadFloat onFailure,Address=" + Address + ",length=" + length + ",msg:" + tr.getMessage()); | |||
MessageLog.ShowError("ReadFloat onFailure,Address=" + Address + ",length=" + length + ",msg:" + tr.toString()); | |||
} | |||
@Override | |||
@@ -217,6 +214,97 @@ public class ModbusTcpServer { | |||
} | |||
public void WriteShort(String Address, short Value, IWriteCallBack callback) { | |||
int add = GetAddress(Address); | |||
if (add < 0) return; | |||
short[] send = new short[1]; | |||
send[0] = Value; | |||
ModbusTcpHelper.get().writeRegisters(1, add, send, new ModbusCallback<WriteRegistersResponse>() { | |||
@Override | |||
public void onSuccess(WriteRegistersResponse writeRegistersResponse) { | |||
MessageLog.ShowInfo("WriteShort onSuccess,Address=" + Address + ",Value=" + Value); | |||
callback.onSuccess(); | |||
} | |||
@Override | |||
public void onFailure(Throwable tr) { | |||
MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",Value=" + Value + ",msg:" + tr.toString()); | |||
callback.onFailure(tr.toString()); | |||
try { | |||
Thread.sleep(3000); | |||
WriteShort(Address, Value, callback); | |||
} catch (InterruptedException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
@Override | |||
public void onFinally() { | |||
} | |||
}); | |||
} | |||
public void WriteBool(String Address, boolean Value, IWriteCallBack callback) { | |||
int add = GetAddress(Address); | |||
if (add < 0) return; | |||
ModbusTcpHelper.get().writeCoil(1, add, Value, new ModbusCallback<WriteCoilResponse>() { | |||
@Override | |||
public void onSuccess(WriteCoilResponse writeCoilResponse) { | |||
MessageLog.ShowInfo("WriteBool onSuccess,Address=" + Address + ",Value=" + Value); | |||
callback.onSuccess(); | |||
} | |||
@Override | |||
public void onFailure(Throwable tr) { | |||
MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",Value=" + Value + ",msg:" + tr.toString()); | |||
callback.onFailure(tr.toString()); | |||
try { | |||
Thread.sleep(3000); | |||
WriteBool(Address, Value, callback); | |||
} catch (InterruptedException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
@Override | |||
public void onFinally() { | |||
} | |||
}); | |||
} | |||
public void WriteFloat(String Address, float Value, IWriteCallBack callback) { | |||
int add = GetAddress(Address); | |||
if (add < 0) return; | |||
int intBits = Float.floatToRawIntBits(Value); | |||
short[] send = new short[]{(short) ((intBits >> 16) & 0xffff), (short) (intBits & 0xffff)}; | |||
ModbusTcpHelper.get().writeRegisters(1, add, send, new ModbusCallback<WriteRegistersResponse>() { | |||
@Override | |||
public void onSuccess(WriteRegistersResponse writeRegistersResponse) { | |||
MessageLog.ShowInfo("WriteFloat onSuccess,Address=" + Address + ",Value=" + Value); | |||
callback.onSuccess(); | |||
} | |||
@Override | |||
public void onFailure(Throwable tr) { | |||
MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",Value=" + Value + ",msg:" + tr.toString()); | |||
callback.onFailure(tr.toString()); | |||
try { | |||
Thread.sleep(3000); | |||
WriteFloat(Address, Value, callback); | |||
} catch (InterruptedException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
@Override | |||
public void onFinally() { | |||
} | |||
}); | |||
} | |||
public void WriteShort(String Address, short Value) { | |||
int add = GetAddress(Address); | |||
if (add < 0) return; | |||
@@ -230,7 +318,13 @@ public class ModbusTcpServer { | |||
@Override | |||
public void onFailure(Throwable tr) { | |||
MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",Value=" + Value + ",msg:" + tr.getMessage()); | |||
MessageLog.ShowError("WriteShort onFailure,Address=" + Address + ",Value=" + Value + ",msg:" + tr.toString()); | |||
try { | |||
Thread.sleep(3000); | |||
WriteShort(Address, Value); | |||
} catch (InterruptedException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
@Override | |||
@@ -251,7 +345,13 @@ public class ModbusTcpServer { | |||
@Override | |||
public void onFailure(Throwable tr) { | |||
MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",Value=" + Value + ",msg:" + tr.getMessage()); | |||
MessageLog.ShowError("WriteBool onFailure,Address=" + Address + ",Value=" + Value + ",msg:" + tr.toString()); | |||
try { | |||
Thread.sleep(3000); | |||
WriteBool(Address, Value); | |||
} catch (InterruptedException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
@Override | |||
@@ -274,7 +374,13 @@ public class ModbusTcpServer { | |||
@Override | |||
public void onFailure(Throwable tr) { | |||
MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",Value=" + Value + ",msg:" + tr.getMessage()); | |||
MessageLog.ShowError("WriteFloat onFailure,Address=" + Address + ",Value=" + Value + ",msg:" + tr.toString()); | |||
try { | |||
Thread.sleep(3000); | |||
WriteFloat(Address, Value); | |||
} catch (InterruptedException e) { | |||
throw new RuntimeException(e); | |||
} | |||
} | |||
@Override | |||
@@ -0,0 +1,43 @@ | |||
package com.example.bpa.helper; | |||
import com.example.bpa.Model.IRun; | |||
import com.example.bpa.Model.IWriteCallBack; | |||
import java.util.concurrent.ConcurrentHashMap; | |||
/** | |||
* 上升沿操作 | |||
*/ | |||
public class RTrig { | |||
private static volatile ConcurrentHashMap<String, RTrig> _Instance; | |||
public static RTrig get(String name) { | |||
if (_Instance == null) | |||
_Instance = new ConcurrentHashMap<String, RTrig>(); | |||
if (!_Instance.containsKey(name)) | |||
_Instance.put(name, new RTrig()); | |||
return _Instance.get(name); | |||
} | |||
private RTrig() { | |||
} | |||
private boolean flag; | |||
private boolean Q; | |||
public boolean getQ() { | |||
return Q; | |||
} | |||
private void setIN(boolean falag) { | |||
Q = falag && !flag; | |||
flag = falag; | |||
} | |||
public void Start(boolean IN, IRun callback) { | |||
setIN(IN); | |||
if (Q) | |||
callback.Run(); | |||
} | |||
} |
@@ -12,10 +12,9 @@ import android.view.ViewGroup; | |||
import android.widget.Button; | |||
import com.example.bpa.Model.IMessageLogNotify; | |||
import com.example.bpa.Model.IReadCallBack; | |||
import com.example.bpa.Model.IThread; | |||
import com.example.bpa.Model.ThreadModel; | |||
import com.example.bpa.R; | |||
import com.example.bpa.app.IReadCallBack; | |||
import com.example.bpa.app.ModbusTcpServer; | |||
import com.example.bpa.helper.MessageLog; | |||
import com.example.bpa.helper.ThreadManager; | |||
@@ -65,7 +64,7 @@ public class SystemSetFragment extends Fragment { | |||
new Thread(new Runnable() { | |||
@Override | |||
public void run() { | |||
ModbusTcpServer.get().Connect("192.168.1.14", 502); | |||
ModbusTcpServer.get().Connect("192.168.1.9", 502); | |||
} | |||
}).start(); | |||
} | |||
@@ -78,41 +77,33 @@ public class SystemSetFragment extends Fragment { | |||
ThreadManager.Get().StartLong("数据读取监听", true, new IThread() { | |||
@Override | |||
public void Run() throws InterruptedException { | |||
// ModbusTcpServer.get().ReadShort(0, 3, new IReadCallBack<short[]>() { | |||
// @Override | |||
// public void onSuccess(short[] shorts) { | |||
// for (int i = 0; i < shorts.length; i++) { | |||
// MessageLog.ShowInfo("Shorts[" + i + "]=" + shorts[i]); | |||
// } | |||
// } | |||
// }); | |||
// | |||
// ModbusTcpServer.get().ReadFloat(10, 3, new IReadCallBack<float[]>() { | |||
// @Override | |||
// public void onSuccess(float[] floats) { | |||
// for (int i = 0; i < floats.length; i++) { | |||
// MessageLog.ShowInfo("Floats[" + i + "]=" + floats[i]); | |||
// } | |||
// } | |||
// }); | |||
// | |||
// ModbusTcpServer.get().ReadBool(0, 3, new IReadCallBack<boolean[]>() { | |||
// @Override | |||
// public void onSuccess(boolean[] booleans) { | |||
// for (int i = 0; i < booleans.length; i++) { | |||
// MessageLog.ShowInfo("Booleans[" + i + "]=" + booleans[i]); | |||
// } | |||
// } | |||
// }); | |||
MessageLog.ShowInfo("开始执行"); | |||
boolean[] bools = new boolean[10]; | |||
for (int i = 0; i < 20; i++) { | |||
bools[i] = true; | |||
} | |||
ModbusTcpServer.get().ReadShort("0", 3, new IReadCallBack<short[]>() { | |||
@Override | |||
public void onSuccess(short[] shorts) { | |||
for (int i = 0; i < shorts.length; i++) { | |||
MessageLog.ShowInfo("Shorts[" + i + "]=" + shorts[i]); | |||
} | |||
} | |||
}); | |||
ModbusTcpServer.get().ReadFloat("10", 3, new IReadCallBack<float[]>() { | |||
@Override | |||
public void onSuccess(float[] floats) { | |||
for (int i = 0; i < floats.length; i++) { | |||
MessageLog.ShowInfo("Floats[" + i + "]=" + floats[i]); | |||
} | |||
} | |||
}); | |||
ModbusTcpServer.get().ReadBool("0", 3, new IReadCallBack<boolean[]>() { | |||
@Override | |||
public void onSuccess(boolean[] booleans) { | |||
for (int i = 0; i < booleans.length; i++) { | |||
MessageLog.ShowInfo("Booleans[" + i + "]=" + booleans[i]); | |||
} | |||
} | |||
}); | |||
Thread.sleep(3000); | |||
} | |||
@Override | |||