Browse Source

shangchuan

tags/old_version_1
fyf 1 year ago
parent
commit
0e4f1888be
31 changed files with 1194 additions and 1048 deletions
  1. +2
    -2
      app/src/main/AndroidManifest.xml
  2. +0
    -894
      app/src/main/java/com/bonait/bnframework/business/DeviceData.java
  3. +66
    -1
      app/src/main/java/com/bonait/bnframework/business/ExecuteTheRecipe.java
  4. +51
    -0
      app/src/main/java/com/bonait/bnframework/common/constant/ConfigName.java
  5. +0
    -4
      app/src/main/java/com/bonait/bnframework/common/constant/DataBus.java
  6. +5
    -1
      app/src/main/java/com/bonait/bnframework/common/db/res/StatusMode.java
  7. +125
    -0
      app/src/main/java/com/bonait/bnframework/modules/home/adapter/monitor_adapter.java
  8. +6
    -6
      app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/WhActivity.java
  9. +110
    -0
      app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/fragment/SystemCsControlFragment.java
  10. +57
    -1
      app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/fragment/SystemCsFltlFragment.java
  11. +0
    -54
      app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/fragment/SystemCsJrFragment.java
  12. +130
    -0
      app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/fragment/SystemCsMonitorFragment.java
  13. +0
    -54
      app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/fragment/SystemCsTlFragment.java
  14. +176
    -0
      app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/fragment_plc_control.java
  15. +72
    -0
      app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/fragment_silos_cl.java
  16. +19
    -0
      app/src/main/res/drawable/qs_switch.xml
  17. +5
    -0
      app/src/main/res/drawable/qs_textcolor.xml
  18. +13
    -5
      app/src/main/res/layout/fragment_system_cs_control.xml
  19. +12
    -4
      app/src/main/res/layout/fragment_system_cs_fltl.xml
  20. +0
    -19
      app/src/main/res/layout/fragment_system_cs_jr.xml
  21. +140
    -0
      app/src/main/res/layout/fragment_system_cs_monitor.xml
  22. +39
    -0
      app/src/main/res/layout/item/layout/devstatus.xml
  23. +105
    -0
      app/src/main/res/layout/item/layout/fragment_item_plc_control.xml
  24. +58
    -0
      app/src/main/res/layout/item/layout/fragment_item_silos_cl.xml
  25. +3
    -3
      app/src/main/res/menu/maintenance.xml
  26. BIN
     
  27. BIN
     
  28. BIN
     
  29. BIN
     
  30. BIN
     
  31. BIN
     

+ 2
- 2
app/src/main/AndroidManifest.xml View File

@@ -47,10 +47,10 @@
android:name=".modules.home.fragment.from.fragment.SystemCsFltlFragment"
android:exported="false" />
<activity
android:name=".modules.home.fragment.from.fragment.SystemCsTlFragment"
android:name=".modules.home.fragment.from.fragment.SystemCsMonitorFragment"
android:exported="false" />
<activity
android:name=".modules.home.fragment.from.fragment.SystemCsJrFragment"
android:name=".modules.home.fragment.from.fragment.SystemCsControlFragment"
android:exported="false" />
<activity
android:name=".modules.home.fragment.from.fragment.SystemSeasoningsetFragment"


+ 0
- 894
app/src/main/java/com/bonait/bnframework/business/DeviceData.java View File

@@ -1,894 +0,0 @@
package com.bonait.bnframework.business;
import com.bonait.bnframework.common.helper.ByteHelper;
import com.bonait.bnframework.common.helper.I.IRun;
import com.bonait.bnframework.common.helper.I.IRunT;
import com.bonait.bnframework.common.helper.I.IThread;
import com.bonait.bnframework.common.helper.I.IWriteCallBack;
import com.bonait.bnframework.common.helper.MessageLog;
import com.bonait.bnframework.common.helper.RTrig;
import com.bonait.bnframework.common.helper.ThreadManager;
import com.bonait.bnframework.common.modbus.ModbusTcpServer;
import com.bonait.bnframework.common.helper.ByteHelper;
import com.bonait.bnframework.common.helper.MessageLog;
import com.bonait.bnframework.common.helper.RTrig;
import com.bonait.bnframework.common.helper.ThreadManager;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;

public class DeviceData {
private static volatile DeviceData _instance;

public static DeviceData Get() {
if (_instance == null)
_instance = new DeviceData();
return _instance;

}


//----------------------------------------------------------------Start 模拟测试 ----------------------------------------------------------------
ConcurrentLinkedQueue<Integer> testComms = new ConcurrentLinkedQueue<>();

public void testAddComm(int value) {
testComms.offer(value);
}

public void TestInit() {
ThreadManager.Get().StartLong("TestInit", true, new IThread() {
@Override
public void Run() throws InterruptedException {
while (testComms.size() > 0) {
Thread.sleep(5000);
if (OnChargeMixtureComNotPar != null) {
OnChargeMixtureComNotPar.Run(testComms.poll());
}
}
Thread.sleep(100);
}

@Override
public void RunComplete() throws InterruptedException {

}
});
;
}
//----------------------------------------------------------------End 模拟测试 ----------------------------------------------------------------

//region 初始化
public void Init() {
ThreadManager.Get().StartLong("Plc设备数据监听", true, new IThread() {
@Override
public void Run() throws InterruptedException {

// //获取校准值-增加两个果糖通道
// ModbusTcpServer.get().ReadShort("VW100", 12, (shorts) -> {
// for (int i = 0; i < shorts.length; i++) {
// CalibrationValue.put(i + 1, shorts[i]);
// }
// });
//
// //获取称当前重量
// ModbusTcpServer.get().ReadInt("VD260", 9, ints -> {
// for (int i = 0; i < ints.length; i++) {
// CallCurrentWeight.put(i + 1, ints[i]);
// }
// });
//
// //获取温度参数
// ModbusTcpServer.get().ReadInt("VD310", 3, ints -> {
// FructoseTemperature1=ints[0];
// FructoseTemperature2=ints[1];
// WashTheTankTemperature=ints[2];
// });
//
//
// //获取清洗参数
// ModbusTcpServer.get().ReadShort("VW140", 5, shorts -> {
// DrainageTime = shorts[0];
// AddCleaningAgentTime = shorts[1];
// InletTime = shorts[2];
// CyclicCleaningTime = shorts[3];
// CleaningAndHeatingTime = shorts[4];
// });
//
// //获取清洗参数
// ModbusTcpServer.get().ReadBool("M6.5", 1, booleans -> {
// WeightCalibrationMode = booleans[0];
// });
//
// ModbusTcpServer.get().ReadBool("M6.5", 1, booleans -> {
// WeightCalibrationMode = booleans[0];
// });
// //IoStatus
//
//
// //读取当前扫码信息
// ModbusTcpServer.get().ReadString("VW342", 20, (data) -> {
//
// if(!Code.equals(data))
// {
// if(!data.isEmpty() && OnScanTheCodeInformationT!=null)
// {
// MessageLog.ShowInfo("当前扫码信息:"+data);
// OnScanTheCodeInformationT.Run(data);
// }
// Code=data;
// }
// //1.查询订单信息
// //2.展示订单界面
// //3.制作订单信息
// //4.回馈订单信息
// });
//
// //读取实时状态
// ModbusTcpServer.get().ReadStatus("VW382", 3, data -> {
// for (int i = 0; i < data.length; i++) {
// byte status=data[i];//0x92
// IoStatus.put(i*8+0, ByteHelper.getBit(status,0)==1);
// IoStatus.put(i*8+1, ByteHelper.getBit(status,1)==1);
// IoStatus.put(i*8+2, ByteHelper.getBit(status,2)==1);
// IoStatus.put(i*8+3, ByteHelper.getBit(status,3)==1);
// IoStatus.put(i*8+4, ByteHelper.getBit(status,4)==1);
// IoStatus.put(i*8+5, ByteHelper.getBit(status,5)==1);
// IoStatus.put(i*8+6, ByteHelper.getBit(status,6)==1);
// IoStatus.put(i*8+7, ByteHelper.getBit(status,7)==1);
// }
// });
//
// //配料完成 M0.3
// CompleteListen("M0.3", "配料完成", OnChargeMixtureCompleteNotify);
//
// //清洗完成 M0.6
// CompleteListen("M0.6", "清洗完成", OnCleaningCompleteNotify);
//
// //去皮完成 M1.3
// CompleteListen("M1.3", "去皮完成", OnPeelingCompleteNotify);

Thread.sleep(10);
}

@Override
public void RunComplete() throws InterruptedException {

}
});
}
//endregion
/**
* 扫码信息
*/
public String Code="";
//region 完成信号监听

/**
* 完成信号监听
*
* @param add 监听地址
* @param name 监听 KEY
* @param callback 执行委托
*/
private void CompleteListen(String add, String name, IRun callback) {
ModbusTcpServer.get().ReadBool(add, 1, booleans -> {
RTrig.get(name).Start(booleans[0], () -> {
if (callback != null)
callback.Run();
});
});
}
//endregion

// region 通知接口
/**
* 配料完成通知
*/
public IRun OnChargeMixtureCompleteNotify;

/**
* 通道配料完成通知
*/
public IRunT OnChargeMixtureComNotPar;

/**
* 清洗完成通知
*/
public IRun OnCleaningCompleteNotify;

/**
* 去皮完成
*/
public IRun OnPeelingCompleteNotify;

/**
* 接收到扫码信息
*/
public IRun OnScanTheCodeInformation;
/**
* 接收到扫码信息,返回
*/
public IRunT<String> OnScanTheCodeInformationT;
//endregion

/**
* 校准值写入
* PLC 地址VW100--VW118
*
* @param value 需要写入的值
* @param ch 需要写入的通道编号,1--10
*/
public void setCalibrationValue(short value, int ch, IWriteCallBack callback) {
if (ch >= 1 && ch <= 12) {
String add = "VW" + (98 + ch * 2);
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
*
* @param value 需要写入的值
* @param ch 需要写入的通道编号,1--10
*/
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, callback);
}else if(ch>=11 && ch<=12)//果糖需求
{
String add = "VW" + (198 +20+ ch * 2);
ModbusTcpServer.get().WriteShort(add, value, callback);
}
}

/**
* 设置通道校准开关
* ,PLC 地址 M2.0--M3.1
*
* @param value 需要写入的值
* @param ch 需要写入的通道编号,1--10
*/
public void setChCalibrationSwitch(boolean value, int ch, IWriteCallBack callback) {
if (ch >= 1 && ch <= 12) {
String add="";
if(ch==9)
{
add="M03.0";
}else if(ch==10)
{
add="M03.1";
}else if(ch==11)//果糖1
{
add="M03.2";
}else if(ch==12)//果糖2
{
add="M03.3";
}else
{
add = ModbusTcpServer.get().getBitSingleAdd("M", 2, ch);
}

if (add.length() > 0)
ModbusTcpServer.get().WriteBool(add, value, callback);
}
}

//region 手动控制
/**
* 手动控制设备
* @param value
* @param ch
* @param callback
*/
public void setSwitch(boolean value, String ch, IWriteCallBack callback) {
if(ch.isEmpty())
{
return;
}
String add=ch;
if (add.length() > 0)
ModbusTcpServer.get().WriteBool(add, value, callback);
}
//endregion


/**
* 称去皮校准
*
* @param value
* @param ch 设置称的通道号,ch1-ch8
*/
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, callback);
}
}

/**
* 砝码值写入
*
* @param value
* @param ch 设置称的砝码通道号,ch1-ch8
*/
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, callback);
}
}

/**
* 重量清零
*/
public void setWeightClear(IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M6.0", true, callback);
}

/**
* 关闭写保护
*/
public void setCloseWriteProtect(IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M6.1", true, callback);
}

/**
* 打开写保护
*/
public void setOpenWriteProtect(IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M6.4", true, callback);
}

/**
* 零点校准
*/
public void setZeroPointCalibration(IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M6.2", true, callback);
}

/**
* 砝码值写入
*/
public void setWeightValueWrite(IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M6.3", true, callback);
}

/**
* 砝码校准模式
*/
boolean WeightCalibrationMode;

/**
* 砝码校准模式
*/
public void setWeightCalibrationMode(Boolean value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M6.5", value, callback);
}

/**
* 获取砝码校准模式
*
* @return
*/
public boolean getWeightCalibrationMode() {
return WeightCalibrationMode;
}

/**
* 启动通道校准
*/
public void setChStartCalibration(IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M0.0", true, callback);
}

/**
* 启动配料
*/
public void setChargeMixtureStart(IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M0.1", true, callback);
}

/**
* 手自动切换
*
* @param value true:自动模式,flase:手动模式
*/
public void setHandOrAutoSwitch(boolean value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M0.2", value, callback);
}

/**
* 手自动模式
*/
boolean HandOrAutoMode;

/**
* 获取手自动模式的状态
*
* @return true:自动模式,flase:手动模式
*/
public boolean getHandOrAutoSwitch() {
return HandOrAutoMode;
}

/**
* 设置清洗模式
*
* @param value true:清洗模式,false:配料模式
*/
public void setCleaningMode(boolean value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M0.4", value, callback);
}

/**
* 清洗模式
*/
boolean CleaningMode;

/**
* 获取清洗模式
*
* @return true:清洗模式,false:配料模式
*/
public boolean getCleaningMode() {
return CleaningMode;
}

/**
* 设置开始清洗
*/
public void setStartCleaning(IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M0.5", true, callback);
}

/**
* 设置一键去皮
*/
public void setOneClickPeeling(IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M1.2", true, callback);
}

/**
* 一键去皮完成状态
*/
boolean OneClickPeelingComplete;

/**
* 设置一键去皮完成状态
*
* @param value
*/
public void setOneClickPeelingComplete(boolean value) {
OneClickPeelingComplete = value;
}

/**
* 清洗完成
*/
boolean CleaningComplete;

/**
* 获取清洗完成的状态
*
* @return
*/
public boolean getCleaningComplete() {
return CleaningComplete;
}

//region 获取或设置-校准模式

/**
* 设置校准模式
*
* @param value true:零点校准模式,false:清零去皮模式
*/
public void setCalibrationMode(boolean value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M1.4", value, callback);
}

/**
* 校准模式
*/
boolean CalibrationMode;

/**
* 获取校准模式
*
* @return true:零点校准模式,false:清零去皮模式
*/
public boolean getCalibrationMode() {
return CalibrationMode;
}

//endregion



/**
* 称当前重量
*/
ConcurrentHashMap<Integer, Integer> CallCurrentWeight = new ConcurrentHashMap<Integer, Integer>();

/**
* 获取指定称的当前重量
*
* @param ch 需要获取的通道号,称1--称9
* @return
*/
public int getCallCurrentWeight(int ch) {
if (!CallCurrentWeight.containsKey(ch)) {
return 0;
}
return CallCurrentWeight.get(ch);
}

//region 获取或设置-校准基准时间

/**
* 设置校准基准时间
*
* @param value 需要写入的值
*/
public void setCalibrationReferenceTime(int value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteInt("VD124", value, callback);
}

/**
* 校准基准时间
*/
int CalibrationReferenceTime=0;

/**
* 获取校准基准时间
*
* @return
*/
public int getCalibrationReferenceTime() {
return CalibrationReferenceTime;
}

//endregion

//region 获取或设置-排水时间

/**
* 设置排水时间
*
* @param value
*/
public void setDrainageTime(short value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteShort("VW140", value, callback);
}

/**
* 排水时间
*/
short DrainageTime;

/**
* 获取排水时间
*
* @return
*/
public short getDrainageTime() {
return DrainageTime;
}

//endregion

//region 获取或设置-清洗剂添加时间

/**
* 设置清洗剂添加时间
*
* @param value
*/
public void setAddCleaningAgentTime(short value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteShort("VW142", value, callback);
}

/**
* 清洗剂添加时间
*/
short AddCleaningAgentTime;

/**
* 获取清洗剂添加时间
*
* @return
*/
public short getAddCleaningAgentTime() {
return AddCleaningAgentTime;
}

//endregion

//region 获取或设置-进水时间

/**
* 设置进水时间
*
* @param value
*/
public void setInletTime(short value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteShort("VW144", value, callback);
}

/**
* 进水时间
*/
short InletTime;

/**
* 获取进水时间
*
* @return
*/
public short getInletTime() {
return InletTime;
}

//endregion

//region 获取或设置-循环清洗时间

/**
* 设置循环清洗时间
*
* @param value
*/
public void setCyclicCleaningTime(short value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteShort("VW146", value, callback);
}

/**
* 循环清洗时间
*/
short CyclicCleaningTime;

/**
* 获取循环清洗时间
*
* @return
*/
public short getCyclicCleaningTime() {
return CyclicCleaningTime;
}
//endregion

//region 获取或设置-清洗加热时间

/**
* 设置清洗加热时间
*
* @param value
*/
public void setCleaningAndHeatingTime(short value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteShort("VW148", value, callback);
}

/**
* 清洗加热时间
*/
short CleaningAndHeatingTime;

/**
* 获取清洗加热时间
*
* @return
*/
public short getCleaningAndHeatingTime() {
return CleaningAndHeatingTime;
}
//endregion

//region 获取温度信息
/**
* 果糖1实际温度
*/
Boolean ReheatSwitch1=false;
int FructoseTemperature1=0;
int FructoseTemperature1_up=0;
int FructoseTemperature1_down=0;
/**
* 设置果糖1号加热启动停止
*
* @param value true:启动,flase:停止
*/
public void setReheatSwitch1(boolean value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M51.7", value, callback);
}
public boolean getReheatSwitch1() {
return ReheatSwitch1;
}
/**
* 设置获取果糖1上下线
* @param value_up 上限
* @param value_down 下限
* @param callback
*/
public void setFructoseTemperature1(int value_up,int value_down, IWriteCallBack callback) {
ModbusTcpServer.get().WriteInt("VD388", value_up, callback);
ModbusTcpServer.get().WriteInt("VD392", value_down, callback);
}
/**
* 获取果糖1实际温度
*
* @return
*/
public int getFructoseTemperature1() {
return FructoseTemperature1;
}
/**
* 获取果糖1上限
*
* @return
*/
public int getFructoseTemperature1_up() {
return FructoseTemperature1_up;
}
/**
* 获取果糖1下限
*
* @return
*/
public int getFructoseTemperature1_down() {
return FructoseTemperature1_down;
}
/**
* 果糖2实际温度
*/
Boolean ReheatSwitch2=false;
int FructoseTemperature2=0;
int FructoseTemperature2_up=0;
int FructoseTemperature2_down=0;
/**
* 设置果糖2号加热启动停止
*
* @param value true:启动,flase:停止
*/
public void setReheatSwitch2(boolean value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteBool("M52.0", value, callback);
}
public boolean getReheatSwitch2() {
return ReheatSwitch2;
}
/**
* 设置获取果糖2上下线
* @param value_up 上限
* @param value_down 下限
* @param callback
*/
public void setFructoseTemperature2(int value_up,int value_down, IWriteCallBack callback) {
ModbusTcpServer.get().WriteInt("VD396", value_up, callback);
ModbusTcpServer.get().WriteInt("VD400", value_down, callback);
}
/**
* 获取果糖2实际温度
*
* @return
*/
public int getFructoseTemperature2() {
return FructoseTemperature2;
}
/**
* 获取果糖2上限
*
* @return
*/
public int getFructoseTemperature2_up() {
return FructoseTemperature2_up;
}
/**
* 获取果糖2下限
*
* @return
*/
public int getFructoseTemperature2_down() {
return FructoseTemperature2_down;
}
/**
* 清洗池实际温度
*/
int WashTheTankTemperature=0;
int WashTheTankTemperature_up=0;
int WashTheTankTemperature_down=0;
/**
* 设置清洗池实际温度上下线
* @param value_up 上限
* @param value_down 下限
* @param callback
*/
public void setWashTheTankTemperature(int value_up,int value_down, IWriteCallBack callback) {
ModbusTcpServer.get().WriteInt("VD404", value_up, callback);
ModbusTcpServer.get().WriteInt("VD408", value_down, callback);
}
/**
* 清洗池实际温度
*
* @return
*/
public int getWashTheTankTemperature() {
return WashTheTankTemperature;
}
/**
* 获取清洗池实际温度上限
*
* @return
*/
public int getWashTheTankTemperature_up() {
return WashTheTankTemperature_up;
}
/**
* 获取清洗池实际温度下限
*
* @return
*/
public int getWashTheTankTemperature_down() {
return WashTheTankTemperature_down;
}
//endregion

//region 实时状态
/**
* 实时状态
*/
public ConcurrentHashMap<Integer, Boolean> IoStatus = new ConcurrentHashMap<Integer, Boolean>();
/**
* 获取实时状态
* @param ch
* @return
*/
public boolean getConcurrentHash(int ch) {
if (!IoStatus.containsKey(ch)) {
return false;
}
return IoStatus.get(ch);
}
//endregion
/**
* 设置8路称校准砝码重量
*
* @param value
*/
public void setCalibrationWeight(short value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteShort("VW250", value, callback);
}

/**
* 设置称重9校准砝码重量
*
* @param value
*/
public void setCalibrationWeight9(short value, IWriteCallBack callback) {
ModbusTcpServer.get().WriteShort("VW254", value, callback);
}

/**
* 扫码清零
*/
public void setCodeClear(IWriteCallBack callback) {
ModbusTcpServer.get().WriteString("VW342", 20, callback);
}
}

+ 66
- 1
app/src/main/java/com/bonait/bnframework/business/ExecuteTheRecipe.java View File

@@ -12,6 +12,7 @@ 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_PLCADDRESS;
import com.bonait.bnframework.common.db.mode.BPA_SILOS;
import com.bonait.bnframework.common.helper.ByteHelper;
import com.bonait.bnframework.common.helper.I.IThread;
import com.bonait.bnframework.common.helper.I.IWriteCallBack;
import com.bonait.bnframework.common.helper.ThreadManager;
@@ -556,10 +557,12 @@ public class ExecuteTheRecipe {
ListeningValue.put(key, val);
}
}

ReadPLCStatus();
} catch (Exception ex) {
ToastUtils.error("异常信息:" + ex.getMessage());
}
Thread.sleep(10);
Thread.sleep(100);
}

@Override
@@ -638,6 +641,68 @@ public class ExecuteTheRecipe {
return ReturnsVariable[0];
}
}

/**
* 实时状态
*/
public static ConcurrentHashMap<Integer, Boolean> IoStatus = new ConcurrentHashMap<Integer, Boolean>();
/**
* 获取实时状态
* @param ch
* @return
*/
public static boolean getConcurrentHash(int ch) {
if (!IoStatus.containsKey(ch)) {
return false;
}
return IoStatus.get(ch);
}

/**
* 获取搅拌电机
* @param
* @return
*/
public static int getConcurrentHash_dj(String name) {
if (!ListeningValue.containsKey(name)) {
return 0;
}
Object obj= ListeningValue.get(name);
if(obj==null)
{
return 0;
}else
{
return (int)obj;
}
}

/**
* 读取状态
*/
public static void ReadPLCStatus()
{
try {
if (ConfigName.getInstance().PlcIsConnect) {
ModbusTcpServer.get().ReadStatus("VW354", 1, data -> {
for (int i = 0; i < data.length; i++) {
byte status=data[i];//0x92
IoStatus.put(i*8+0, ByteHelper.getBit(status,0)==1);
IoStatus.put(i*8+1, ByteHelper.getBit(status,1)==1);
IoStatus.put(i*8+2, ByteHelper.getBit(status,2)==1);
IoStatus.put(i*8+3, ByteHelper.getBit(status,3)==1);
IoStatus.put(i*8+4, ByteHelper.getBit(status,4)==1);
IoStatus.put(i*8+5, ByteHelper.getBit(status,5)==1);
IoStatus.put(i*8+6, ByteHelper.getBit(status,6)==1);
IoStatus.put(i*8+7, ByteHelper.getBit(status,7)==1);
}
});
}
} catch (Exception ex) {
ToastUtils.error("异常信息:" + ex.getMessage());
} finally {
}
}
//endregion

//region 获取基础挡位变量


+ 51
- 0
app/src/main/java/com/bonait/bnframework/common/constant/ConfigName.java View File

@@ -2,9 +2,11 @@ package com.bonait.bnframework.common.constant;

import android.content.Context;

import com.bonait.bnframework.R;
import com.bonait.bnframework.common.db.mode.BPA_PLCADDRESS;
import com.bonait.bnframework.common.db.mode.BPA_USER;
import com.bonait.bnframework.common.db.mode.Res_PLCADDRESS;
import com.bonait.bnframework.common.db.res.StatusMode;
import com.bonait.bnframework.common.model.AddrType;
import com.bonait.bnframework.common.model.mode.DeviceInformation;
import com.bonait.bnframework.common.model.mode.OrganizeMode;
@@ -372,6 +374,55 @@ public class ConfigName {
put("四档",8);
put("五档",10);
}};
/**
* 状态上报信息
*/
public List<StatusMode> statusModes=new ArrayList<StatusMode>(){{

//硬件设备 初始化
add(new StatusMode("急停",false,R.mipmap.jiting,R.mipmap.jiting,0));
add(new StatusMode("炒锅正限位报警",false,R.mipmap.cg_sxw,R.mipmap.cg_sxw,2));
add(new StatusMode("炒锅负限位报警",false,R.mipmap.cgxxw,R.mipmap.cgxxw,3));
add(new StatusMode("编码器通讯异常",false,R.mipmap.bmq,R.mipmap.bmq,4));
add(new StatusMode("搅拌电机变频器通讯异常",false,R.mipmap.bpq,R.mipmap.bpq,6));
add(new StatusMode("翻转电机变频器通讯异常",false,R.mipmap.bpq,R.mipmap.bpq,7));
}};

/**
* 状态上报信息
*/
public ConcurrentHashMap<Integer,String> statusModes_电机=new ConcurrentHashMap<Integer,String>()
{{
put(0 ,"无故障");
put(1 ,"过电流");
put(2 ,"过电压");
put(3 ,"IGBT过热");
put(4 ,"");
put(5 ,"变频器过负载");
put(6 ,"电机过负载");
put(7 ,"过转矩");
put(8 ,"外部异常");
put(9 ,"加速中过电流");
put(10,"减速中过电流");
put(11,"恒速中过电流");
put(12,"");
put(13,"电压不足");
put(14,"输入电压缺相");
put(15,"");
put(16,"不适用自动加减速设定");
put(17,"软件参数密码保护");
put(18,"CPU写入异常");
put(19,"CPU读取异常");
put(20,"端子保护线路异常");
put(21,"0V保护线路异常");
put(22,"");
put(23,"");
put(24,"U相硬件异常");
put(25,"V相硬件异常");
put(26,"W相硬件异常");
put(27,"DC,bus 硬件异常");

}};
//endregion
}



+ 0
- 4
app/src/main/java/com/bonait/bnframework/common/constant/DataBus.java View File

@@ -268,10 +268,6 @@ public class DataBus {
* 订单操作日志
*/
public List<BPA_ALERTLOG> bpa_alertlogs = new ArrayList<BPA_ALERTLOG>();
/**
* 设备状态列表
*/
public List<StatusMode> statusModes = new ArrayList<StatusMode>();
/**
* 扫码订单
*/


+ 5
- 1
app/src/main/java/com/bonait/bnframework/common/db/res/StatusMode.java View File

@@ -9,11 +9,15 @@ public class StatusMode {
public int Url_open;
public int Url_close;

public StatusMode(String name,int Url_open,int Url_close,Boolean Status)
public int sort;

public StatusMode(String name,Boolean Status,int Url_open,int
Url_close,int sort)
{
this.Name=name;
this.Status=Status;
this.Url_open=Url_open;
this.Url_close=Url_close;
this.sort=sort;
}
}

+ 125
- 0
app/src/main/java/com/bonait/bnframework/modules/home/adapter/monitor_adapter.java View File

@@ -0,0 +1,125 @@
package com.bonait.bnframework.modules.home.adapter;

import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bonait.bnframework.R;
import com.bonait.bnframework.common.constant.ConfigName;
import com.bonait.bnframework.common.constant.DataBus;
import com.bonait.bnframework.common.db.res.StatusMode;
import com.bonait.bnframework.common.db.res.lcMode;
import com.bonait.bnframework.common.utils.AlertDialogUtils;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
import com.qmuiteam.qmui.widget.textview.QMUILinkTextView;

import java.util.List;

public class monitor_adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private final LayoutInflater mLayoutInflater;

private Context context;

List<StatusMode> statusModes = ConfigName.getInstance().statusModes;

public monitor_adapter(Context context) {
this.context = context;
mLayoutInflater = LayoutInflater.from(context);
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = mLayoutInflater.inflate(R.layout.devstatus, parent, false);
return new MyLCViewHolder(inflate);

}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
try {
if (holder instanceof MyLCViewHolder) {
MyLCViewHolder myViewHolder = (MyLCViewHolder) holder;
StatusMode statusMode= statusModes.get(position);
myViewHolder.title.setText(statusMode.Name);
if(statusMode.Status)
{
myViewHolder.image.setImageResource(statusMode.Url_open);
myViewHolder.text.setText("打开");
myViewHolder.text.setTextColor(context.getResources().getColor(R.color.black));
}else
{
myViewHolder.image.setImageResource(statusMode.Url_close);
myViewHolder.text.setText("关闭");
myViewHolder.text.setTextColor(context.getResources().getColor(R.color.red_primary));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

private Activity findActivity(@NonNull Context context) {
if (context instanceof Activity) {
return (Activity) context;
} else if (context instanceof ContextWrapper) {
return findActivity(((ContextWrapper) context).getBaseContext());
} else {
return null;
}
}

/**
* 刷新
*
* @param
*/
public void refresh() {
Activity activity = findActivity(context);
if (activity != null) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
notifyDataSetChanged();
} catch (Exception e) {

}
}
});
}
}

@Override
public int getItemCount() {
return statusModes.size();
}

public static class MyLCViewHolder extends RecyclerView.ViewHolder {
/**
* 标题
*/
TextView title;
ImageView image;
/**
* 描述
*/
TextView text;
public MyLCViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
text=(TextView) view.findViewById(R.id.text);
image= view.findViewById(R.id.image);
}
}
}

+ 6
- 6
app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/WhActivity.java View File

@@ -4,9 +4,9 @@ import androidx.annotation.NonNull;

import com.bonait.bnframework.modules.home.fragment.from.fragment.SystemCsPLCFragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import androidx.core.content.ContextCompat;
import androidx.viewpager.widget.ViewPager;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
@@ -15,8 +15,8 @@ import com.bonait.bnframework.R;
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.SystemCsJrFragment;
import com.bonait.bnframework.modules.home.fragment.from.fragment.SystemCsTlFragment;
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.qmuiteam.qmui.widget.QMUIViewPager;

@@ -67,8 +67,8 @@ public class WhActivity extends BaseActivity {
fragmentAdapter = new FragmentAdapter(getSupportFragmentManager());

fragmentAdapter.addFragment(new SystemCsPLCFragment());
fragmentAdapter.addFragment(new SystemCsJrFragment());
fragmentAdapter.addFragment(new SystemCsTlFragment());
fragmentAdapter.addFragment(new SystemCsControlFragment());
fragmentAdapter.addFragment(new SystemCsMonitorFragment());
fragmentAdapter.addFragment(new SystemCsFltlFragment());
viewPager.setAdapter(fragmentAdapter);
}


+ 110
- 0
app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/fragment/SystemCsControlFragment.java View File

@@ -0,0 +1,110 @@
package com.bonait.bnframework.modules.home.fragment.from.fragment;

import android.app.Activity;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import android.content.ContextWrapper;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;

import com.bonait.bnframework.R;
import com.bonait.bnframework.common.base.BaseFragment;
import com.bonait.bnframework.common.db.QueryDB;
import com.bonait.bnframework.common.db.mode.BPA_PLCADDRESS;
import com.bonait.bnframework.modules.home.fragment.mode.fragment_plc;
import com.bonait.bnframework.modules.home.fragment.mode.fragment_plc_control;
import com.orhanobut.logger.Logger;

import java.util.ArrayList;

import butterknife.BindView;
import butterknife.ButterKnife;

/**
* PLC控制
*/
public class SystemCsControlFragment extends BaseFragment {
private Context context;
@BindView(R.id.plcview)
LinearLayout plcview;//工序子集
@Override
protected View onCreateView() {
View root = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_system_cs_control, null);
ButterKnife.bind(this, root);
return root;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Logger.d("我的fragment创建");
context = getContext();
Init();
}
/**
* 初始化
*/
public void Init() {
plcview.removeAllViews();
ArrayList<BPA_PLCADDRESS> arrayList = QueryDB.GetPlcaddressALL();
new Thread(new Runnable() {
@Override
public void run() {
try {
Activity activity = findActivity(context);
if (activity != null) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
for (BPA_PLCADDRESS item : arrayList) {
fragment_plc_control gongxu = new fragment_plc_control(context, null, item);
plcview.addView(gongxu);
}
} catch (Exception e) {

}
}
});
}
} catch (Exception e) {

}
}
}).start();

}

private Activity findActivity(@NonNull Context context) {
if (context instanceof Activity) {
return (Activity) context;
} else if (context instanceof ContextWrapper) {
return findActivity(((ContextWrapper) context).getBaseContext());
} else {
return null;
}
}
@Override
public void onDestroy() {
super.onDestroy();
Logger.d("我的fragment销毁");
}

/**
* 当在activity设置viewPager + BottomNavigation + fragment时,
* 为防止viewPager左滑动切换界面,与fragment左滑返回上一界面冲突引起闪退问题,
* 必须加上此方法,禁止fragment左滑返回上一界面。
*
* 切记!切记!切记!否则会闪退!
*
* 当在fragment设置viewPager + BottomNavigation + fragment时,则不会出现这个问题。
*/
@Override
protected boolean canDragBack() {
return false;
}
}

+ 57
- 1
app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/fragment/SystemCsFltlFragment.java View File

@@ -1,22 +1,35 @@
package com.bonait.bnframework.modules.home.fragment.from.fragment;

import android.app.Activity;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.ContextWrapper;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;

import com.bonait.bnframework.R;
import com.bonait.bnframework.common.base.BaseFragment;
import com.bonait.bnframework.common.db.QueryDB;
import com.bonait.bnframework.common.db.mode.BPA_PLCADDRESS;
import com.bonait.bnframework.common.db.mode.BPA_SILOS;
import com.bonait.bnframework.modules.home.fragment.mode.fragment_plc_control;
import com.bonait.bnframework.modules.home.fragment.mode.fragment_silos_cl;
import com.orhanobut.logger.Logger;

import java.util.ArrayList;

import butterknife.BindView;
import butterknife.ButterKnife;

public class SystemCsFltlFragment extends BaseFragment {


@BindView(R.id.plcview)
LinearLayout plcview;//工序子集
private Context context;
@Override
protected View onCreateView() {
@@ -30,8 +43,51 @@ public class SystemCsFltlFragment extends BaseFragment {
super.onViewCreated(view, savedInstanceState);
Logger.d("我的fragment创建");
context = getContext();
Init();
}
/**
* 初始化
*/
public void Init() {
plcview.removeAllViews();
ArrayList<BPA_SILOS> arrayList = QueryDB.GetSilosALL();
new Thread(new Runnable() {
@Override
public void run() {
try {
Activity activity = findActivity(context);
if (activity != null) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
for (BPA_SILOS item : arrayList) {
fragment_silos_cl gongxu = new fragment_silos_cl(context, null, item);
plcview.addView(gongxu);
}
} catch (Exception e) {

}
}
});
}
} catch (Exception e) {

}
}
}).start();

}

private Activity findActivity(@NonNull Context context) {
if (context instanceof Activity) {
return (Activity) context;
} else if (context instanceof ContextWrapper) {
return findActivity(((ContextWrapper) context).getBaseContext());
} else {
return null;
}
}
@Override
public void onDestroy() {
super.onDestroy();


+ 0
- 54
app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/fragment/SystemCsJrFragment.java View File

@@ -1,54 +0,0 @@
package com.bonait.bnframework.modules.home.fragment.from.fragment;

import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;

import com.bonait.bnframework.R;
import com.bonait.bnframework.common.base.BaseFragment;
import com.orhanobut.logger.Logger;

import butterknife.ButterKnife;

public class SystemCsJrFragment extends BaseFragment {


private Context context;
@Override
protected View onCreateView() {
View root = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_system_cs_jr, null);
ButterKnife.bind(this, root);
return root;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Logger.d("我的fragment创建");
context = getContext();
}

@Override
public void onDestroy() {
super.onDestroy();
Logger.d("我的fragment销毁");
}

/**
* 当在activity设置viewPager + BottomNavigation + fragment时,
* 为防止viewPager左滑动切换界面,与fragment左滑返回上一界面冲突引起闪退问题,
* 必须加上此方法,禁止fragment左滑返回上一界面。
*
* 切记!切记!切记!否则会闪退!
*
* 当在fragment设置viewPager + BottomNavigation + fragment时,则不会出现这个问题。
*/
@Override
protected boolean canDragBack() {
return false;
}
}

+ 130
- 0
app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/fragment/SystemCsMonitorFragment.java View File

@@ -0,0 +1,130 @@
package com.bonait.bnframework.modules.home.fragment.from.fragment;

import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.bonait.bnframework.R;
import com.bonait.bnframework.business.ExecuteTheRecipe;
import com.bonait.bnframework.common.base.BaseFragment;
import com.bonait.bnframework.common.constant.ConfigName;
import com.bonait.bnframework.common.constant.DataBus;
import com.bonait.bnframework.common.db.res.StatusMode;
import com.bonait.bnframework.common.utils.ToastUtils;
import com.bonait.bnframework.common.view.MyLayoutManager;
import com.bonait.bnframework.modules.home.adapter.lc_adapter;
import com.bonait.bnframework.modules.home.adapter.monitor_adapter;
import com.orhanobut.logger.Logger;

import butterknife.BindView;
import butterknife.ButterKnife;

/**
* plc 监控
*/
public class SystemCsMonitorFragment extends BaseFragment {

@BindView(R.id.recycler_view)
RecyclerView recyclerView;//工序子集

@BindView(R.id.jiaobandianji)
TextView jiaobandianji;//工序子集

@BindView(R.id.fanzhuandianji)
TextView fanzhuandianji;//工序子集
private Context context;

monitor_adapter adapter;
@Override
protected View onCreateView() {
View root = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_system_cs_monitor, null);
ButterKnife.bind(this, root);
return root;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Logger.d("我的fragment创建");
context = getContext();
initData();
}

/**
* 初始化显示数据
*/
private void initData() {
try {
MyLayoutManager layout = new MyLayoutManager();
layout.setAutoMeasureEnabled(true);
recyclerView.setLayoutManager(layout);

adapter = new monitor_adapter(getContext());
recyclerView.setAdapter(adapter);

Run();
} catch (Exception e) {
ToastUtils.info("异常信息:" + e.getMessage());
}
}
/**
* 实时显示线程
*/
public void Run() {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
try {
for (StatusMode item:ConfigName.getInstance().statusModes)
{
item.Status= ExecuteTheRecipe.getConcurrentHash(item.sort);
}

jiaobandianji.setText( ConfigName.getInstance().statusModes_电机.get(ExecuteTheRecipe.getConcurrentHash_dj("搅拌电机")));
fanzhuandianji.setText( ConfigName.getInstance().statusModes_电机.get(ExecuteTheRecipe.getConcurrentHash_dj("翻转电机")));
adapter.refresh();
} catch (Exception e) {

}
}
});
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}).start();
}
@Override
public void onDestroy() {
super.onDestroy();
Logger.d("我的fragment销毁");
}

/**
* 当在activity设置viewPager + BottomNavigation + fragment时,
* 为防止viewPager左滑动切换界面,与fragment左滑返回上一界面冲突引起闪退问题,
* 必须加上此方法,禁止fragment左滑返回上一界面。
*
* 切记!切记!切记!否则会闪退!
*
* 当在fragment设置viewPager + BottomNavigation + fragment时,则不会出现这个问题。
*/
@Override
protected boolean canDragBack() {
return false;
}
}

+ 0
- 54
app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/fragment/SystemCsTlFragment.java View File

@@ -1,54 +0,0 @@
package com.bonait.bnframework.modules.home.fragment.from.fragment;

import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;

import com.bonait.bnframework.R;
import com.bonait.bnframework.common.base.BaseFragment;
import com.orhanobut.logger.Logger;

import butterknife.ButterKnife;

public class SystemCsTlFragment extends BaseFragment {


private Context context;
@Override
protected View onCreateView() {
View root = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_system_cs_tl, null);
ButterKnife.bind(this, root);
return root;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Logger.d("我的fragment创建");
context = getContext();
}

@Override
public void onDestroy() {
super.onDestroy();
Logger.d("我的fragment销毁");
}

/**
* 当在activity设置viewPager + BottomNavigation + fragment时,
* 为防止viewPager左滑动切换界面,与fragment左滑返回上一界面冲突引起闪退问题,
* 必须加上此方法,禁止fragment左滑返回上一界面。
*
* 切记!切记!切记!否则会闪退!
*
* 当在fragment设置viewPager + BottomNavigation + fragment时,则不会出现这个问题。
*/
@Override
protected boolean canDragBack() {
return false;
}
}

+ 176
- 0
app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/fragment_plc_control.java View File

@@ -0,0 +1,176 @@
package com.bonait.bnframework.modules.home.fragment.mode;

import android.content.Context;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Switch;
import android.widget.TextView;

import androidx.annotation.Nullable;

import com.bonait.bnframework.R;
import com.bonait.bnframework.business.ExecuteTheRecipe;
import com.bonait.bnframework.common.db.QueryDB;
import com.bonait.bnframework.common.db.mode.BPA_PLCADDRESS;
import com.bonait.bnframework.common.utils.AlertDialogUtils;
import com.bonait.bnframework.common.utils.ToastUtils;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

/**
* PLC控制
*/
public class fragment_plc_control extends LinearLayout {
@BindView(R.id.name)
TextView name;
@BindView(R.id.name_PLC)
TextView name_PLC;//分组

@BindView(R.id.edittext_plc)
EditText edittext_plc;//输入文本
@BindView(R.id.wenben)
LinearLayout wenben;
@BindView(R.id.kaiguan)
RelativeLayout kaiguan;

@BindView(R.id.zhidu)
RelativeLayout zhidu;

@BindView(R.id.update_plc)
Button update_plc;//下发按钮

@BindView(R.id.control_switch)
Switch control_switch;//下发按钮

@BindView(R.id.text_wb)
TextView text_wb;//分组
private View root;
public fragment_plc_control(Context context, @Nullable AttributeSet attrs, BPA_PLCADDRESS _model) {
super(context, attrs);
root= LayoutInflater.from(context).inflate(R.layout.fragment_item_plc_control, this);
ButterKnife.bind(this, root);
model=_model;
Init();
}
public void Init()
{
if (model.address.equals("-------------"))
{
name.setText("\n"+model.name+":");
wenben.setVisibility(View.GONE);
kaiguan.setVisibility(View.GONE);
zhidu.setVisibility(View.GONE);
}else
{
name_PLC.setText(model.name);
if(model.iswrite==1)
{
zhidu.setVisibility(View.GONE);
if(model.address.startsWith("M"))//开关
{
wenben.setVisibility(View.GONE);
kaiguan.setVisibility(View.VISIBLE);
if(model.isread==1)
{
Object val= ExecuteTheRecipe.ListeningValue.get(model.name);
if(val!=null)
{
control_switch.setChecked((boolean)val);
if ((boolean)val)
{
control_switch.setText("打开");
}else
{
control_switch.setText("关闭");
}
}
}
} else //文本
{
wenben.setVisibility(View.VISIBLE);
kaiguan.setVisibility(View.GONE);
if(model.isread==1)
{
Object val= ExecuteTheRecipe.ListeningValue.get(model.name);
if(val!=null)
{
String str=String.valueOf(val);
edittext_plc.setText(str.toCharArray(), 0, str.length());
}
}
}
}else //只读
{
zhidu.setVisibility(View.VISIBLE);
wenben.setVisibility(View.GONE);
kaiguan.setVisibility(View.GONE);
Object val= ExecuteTheRecipe.ListeningValue.get(model.name);
if(val!=null)
{
text_wb.setText(val+"");
}
}
}


control_switch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
boolean ischick= control_switch.isChecked();
if (ischick)
{
control_switch.setText("打开");
}else
{
control_switch.setText("关闭");
}

ExecuteTheRecipe.WritePLC(model.name,ischick,null);
ToastUtils.info("写入地址:"+model.address+"成功!状态:"+(ischick?"打开":"关闭"));

}
});
}
public BPA_PLCADDRESS model=null;

@OnClick({R.id.update_plc})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.update_plc:
String text=edittext_plc.getText().toString();
if(text.isEmpty())
{
ToastUtils.warning("输入信息不能为空!");
return;
}

if(model.address.startsWith("VW"))
{
Short val=Short.parseShort(text);
ExecuteTheRecipe.WritePLC(model.name,val,null);
}else if(model.address.startsWith("VD"))
{
int val=Integer.parseInt(text);
ExecuteTheRecipe.WritePLC(model.name,val,null);
}else
{
Short val=Short.parseShort(text);
ExecuteTheRecipe.WritePLC(model.name,val,null);
}
ToastUtils.info("写入地址:"+model.address+"成功!");
break;

}
}
}

+ 72
- 0
app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/fragment_silos_cl.java View File

@@ -0,0 +1,72 @@
package com.bonait.bnframework.modules.home.fragment.mode;

import android.content.Context;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.annotation.Nullable;

import com.bonait.bnframework.R;
import com.bonait.bnframework.business.ExecuteTheRecipe;
import com.bonait.bnframework.common.db.QueryDB;
import com.bonait.bnframework.common.db.mode.BPA_PLCADDRESS;
import com.bonait.bnframework.common.db.mode.BPA_SILOS;
import com.bonait.bnframework.common.helper.I.IWriteCallBack;
import com.bonait.bnframework.common.utils.AlertDialogUtils;
import com.bonait.bnframework.common.utils.ToastUtils;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class fragment_silos_cl extends LinearLayout {
@BindView(R.id.name)
TextView name;
@BindView(R.id.update_lc)
Button update_lc;
@BindView(R.id.edittext_lc)
EditText edittext_lc;
private View root;
public fragment_silos_cl(Context context, @Nullable AttributeSet attrs, BPA_SILOS _model) {
super(context, attrs);
root= LayoutInflater.from(context).inflate(R.layout.fragment_item_silos_cl, this);
ButterKnife.bind(this, root);
model=_model;
name.setText("料仓" + model.num+"号");
}
public BPA_SILOS model=null;

@OnClick({R.id.update_lc})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.update_lc:
String text=edittext_lc.getText().toString();
if(text.isEmpty())
{
ToastUtils.warning("需求值为空!");
return;
}
Short val=Short.parseShort(text);
ExecuteTheRecipe.WritePLC("料仓" + model.num + "需求值", val, new IWriteCallBack() {
@Override
public void onSuccess() {
ExecuteTheRecipe.WritePLC("料仓" + model.num + "下料",true,null);
}
@Override
public void onFailure(String ErrorMsg) {
}
});
ToastUtils.info("料仓" + model.num+"出料:"+text+"g");
break;
}
}
}

+ 19
- 0
app/src/main/res/drawable/qs_switch.xml View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<shape android:shape="rectangle">
<corners android:radius="30dp" />
<solid android:color="#2ecc71" />
<padding android:left="10dp" />
</shape>

</item>
<item android:state_checked="false">
<shape android:shape="rectangle">
<corners android:radius="30dp" />
<solid android:color="#d1f2eb" />
<padding android:left="10dp" />
</shape>

</item>
</selector>

+ 5
- 0
app/src/main/res/drawable/qs_textcolor.xml View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@android:color/white" />
<item android:state_checked="false" android:color="#8A8A8A" />
</selector>

app/src/main/res/layout/fragment_system_cs_tl.xml → app/src/main/res/layout/fragment_system_cs_control.xml View File

@@ -4,16 +4,24 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".modules.home.fragment.from.fragment.SystemCsTlFragment">
tools:context=".modules.home.fragment.from.fragment.SystemCsControlFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/main_background">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这里是参数设置的主投料与电机"/>
<ScrollView
android:layout_marginTop="20dp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/plcview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</ScrollView>

</LinearLayout>
</com.qmuiteam.qmui.widget.QMUIWindowInsetLayout>

+ 12
- 4
app/src/main/res/layout/fragment_system_cs_fltl.xml View File

@@ -10,10 +10,18 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/main_background">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这里是参数设置的辅料投料"/>
<ScrollView
android:layout_marginTop="20dp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/plcview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</ScrollView>

</LinearLayout>
</com.qmuiteam.qmui.widget.QMUIWindowInsetLayout>

+ 0
- 19
app/src/main/res/layout/fragment_system_cs_jr.xml View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<com.qmuiteam.qmui.widget.QMUIWindowInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".modules.home.fragment.from.fragment.SystemCsJrFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/main_background">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这里是参数设置的主控与加热"/>

</LinearLayout>
</com.qmuiteam.qmui.widget.QMUIWindowInsetLayout>

+ 140
- 0
app/src/main/res/layout/fragment_system_cs_monitor.xml View File

@@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8"?>
<com.qmuiteam.qmui.widget.QMUIWindowInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".modules.home.fragment.from.fragment.SystemCsMonitorFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/activity_background">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="@dimen/dp_10"
android:layout_centerHorizontal="true"
android:layout_marginBottom="5dp"
android:text="搅拌电机:"
android:textSize="16sp"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="@dimen/dp_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/jbdj"/>
</LinearLayout>

<LinearLayout
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="100dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="故障信息:"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/jiaobandianji"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textColor="@color/color4"
android:text="搅拌电机"
android:textSize="12dp"/>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="@dimen/dp_10"
android:layout_centerHorizontal="true"
android:layout_marginBottom="5dp"
android:text="翻转电机:"
android:textSize="16sp"/>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="@dimen/dp_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/fzdj"/>
</LinearLayout>

<LinearLayout
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="100dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="故障信息:"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/fanzhuandianji"

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textColor="@color/color4"
android:text="搅拌电机"
android:textSize="12dp"/>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="@dimen/dp_10"
android:layout_centerHorizontal="true"
android:layout_marginBottom="5dp"
android:text="炒锅状态:"
android:textSize="16sp"/>
<ScrollView
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fadingEdge="vertical"
tools:ignore="Suspicious0dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</ScrollView>
</LinearLayout>
</com.qmuiteam.qmui.widget.QMUIWindowInsetLayout>

+ 39
- 0
app/src/main/res/layout/item/layout/devstatus.xml View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp">
<RelativeLayout
android:layout_height="160dp"
android:layout_width="130dp"
android:background="@drawable/shadow_bottom">
<TextView
android:id="@+id/title"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:gravity="center_horizontal"
android:layout_centerHorizontal="true"
android:rotationX="18"
android:text="杯子检测"
android:textSize="16dp" />
<ImageView
android:id="@+id/image"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:layout_marginTop="45dp">
</ImageView>
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10dp"
android:gravity="center"
android:text="未设置" />
</RelativeLayout>
</LinearLayout>

+ 105
- 0
app/src/main/res/layout/item/layout/fragment_item_plc_control.xml View File

@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:layout_marginBottom="@dimen/dp_10"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="130dp"
android:layout_height="match_parent">
<TextView
android:id="@+id/name_PLC"
android:layout_marginLeft="@dimen/dp_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text=""/>
<TextView
android:id="@+id/name"
android:layout_marginLeft="@dimen/dp_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="false"
android:layout_centerVertical="true"
android:text=""
android:textSize="19dp"/>
</RelativeLayout>

<LinearLayout
android:visibility="gone"
android:layout_marginLeft="@dimen/dp_10"
android:id="@+id/wenben"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edittext_plc"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:background="@drawable/input_bj"
android:hint="请输入变量"
android:layout_weight="1"
android:inputType="number"
android:maxLines="1"
android:padding="3dp"
android:textSize="12dp"
android:text="0"/>

<RelativeLayout
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<Button
android:id="@+id/update_plc"
android:layout_width="80dp"
android:layout_height="26dp"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/button1"
android:layout_centerInParent="true"

android:text="写"
android:textSize="14dp" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>

<RelativeLayout
android:visibility="gone"
android:layout_marginLeft="@dimen/dp_10"
android:id="@+id/kaiguan"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Switch
android:id="@+id/control_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/qs_switch"
android:text="关闭"
android:layout_margin="5dp"
android:focusable="true"
/>
</RelativeLayout>

<RelativeLayout
android:layout_marginLeft="@dimen/dp_10"
android:id="@+id/zhidu"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_wb"
android:layout_marginLeft="@dimen/dp_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="未知"/>
</RelativeLayout>
</LinearLayout>

+ 58
- 0
app/src/main/res/layout/item/layout/fragment_item_silos_cl.xml View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:layout_marginBottom="@dimen/dp_10"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="130dp"
android:layout_height="match_parent">
<TextView
android:id="@+id/name"
android:layout_marginLeft="@dimen/dp_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text=""/>
</RelativeLayout>

<EditText
android:id="@+id/edittext_lc"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:background="@drawable/input_bj"
android:hint="请写入需求值"
android:layout_weight="1"
android:inputType="number"
android:maxLines="1"
android:padding="3dp"
android:textSize="12dp"
android:text="0"/>

<RelativeLayout
android:layout_marginLeft="@dimen/dp_10"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent">
<Button
android:id="@+id/update_lc"
android:layout_width="80dp"
android:layout_height="26dp"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/button1"
android:layout_centerInParent="true"

android:text="出料"
android:textSize="14dp" />
</LinearLayout>
</RelativeLayout>

</LinearLayout>

+ 3
- 3
app/src/main/res/menu/maintenance.xml View File

@@ -6,13 +6,13 @@

<item
android:id="@+id/bottom_navigation_1"
android:title="主机#加热" />
android:title="控制#监控" />

<item
android:id="@+id/bottom_navigation_2"
android:title="主投料#电机" />
android:title="状态#故障" />

<item
android:id="@+id/bottom_navigation_3"
android:title="辅料投料" />
android:title="辅料#投料" />
</menu>

BIN
View File


BIN
View File


BIN
View File


BIN
View File


BIN
View File


BIN
View File


Loading…
Cancel
Save