Commit c7bb3e30 authored by shaxuezheng's avatar shaxuezheng

merge origin

parents 273a0479 918658a8
...@@ -27,7 +27,6 @@ namespace ModbusDemo.Common ...@@ -27,7 +27,6 @@ namespace ModbusDemo.Common
ChannelLevelError = 16, ChannelLevelError = 16,
ChannelControlError = 32, ChannelControlError = 32,
ChannelRunOverTimeError = 64, ChannelRunOverTimeError = 64,
} }
public static void vSetAlarmList(ushort usAddress, ushort[] usChannel, ushort[] usChannelAlarmcode) public static void vSetAlarmList(ushort usAddress, ushort[] usChannel, ushort[] usChannelAlarmcode)
{ {
...@@ -58,7 +57,6 @@ namespace ModbusDemo.Common ...@@ -58,7 +57,6 @@ namespace ModbusDemo.Common
.Build(); .Build();
await mqttClient.PublishAsync(message); await mqttClient.PublishAsync(message);
} }
public static void vSet_Modual_Alarm(byte byModbusID,ushort usAlarmCodde,bool bSetAlarm,byte byCommFailTimes,params string[] strChannalList) public static void vSet_Modual_Alarm(byte byModbusID,ushort usAlarmCodde,bool bSetAlarm,byte byCommFailTimes,params string[] strChannalList)
{ {
for (int i = 0; i < ModualPoll.byX14pNumber;i++) for (int i = 0; i < ModualPoll.byX14pNumber;i++)
......
...@@ -28,6 +28,7 @@ namespace ModbusDemo.MessageFormat ...@@ -28,6 +28,7 @@ namespace ModbusDemo.MessageFormat
MB_EMASTERSENT, MB_EMASTERSENT,
MB_RTUERNOERR MB_RTUERNOERR
} }
public static ModbusMaster Modbus; public static ModbusMaster Modbus;
public static ushort usCommunFailTimes = 0; public static ushort usCommunFailTimes = 0;
private static object oLock = new object(); private static object oLock = new object();
...@@ -53,6 +54,7 @@ namespace ModbusDemo.MessageFormat ...@@ -53,6 +54,7 @@ namespace ModbusDemo.MessageFormat
OutputValue = new ushort[numberOfPoints]; OutputValue = new ushort[numberOfPoints];
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT; ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
usCommunFailTimes++; usCommunFailTimes++;
Console.WriteLine(slaveAddress.ToString());
} }
//The server return error code. //The server return error code.
//You can get the function code and exception code. //You can get the function code and exception code.
...@@ -137,6 +139,7 @@ namespace ModbusDemo.MessageFormat ...@@ -137,6 +139,7 @@ namespace ModbusDemo.MessageFormat
OutputValue = new bool[numberOfPoints]; OutputValue = new bool[numberOfPoints];
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT; ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
usCommunFailTimes++; usCommunFailTimes++;
Console.WriteLine(slaveAddress.ToString());
} }
//The server return error code. //The server return error code.
//You can get the function code and exception code. //You can get the function code and exception code.
...@@ -220,6 +223,7 @@ namespace ModbusDemo.MessageFormat ...@@ -220,6 +223,7 @@ namespace ModbusDemo.MessageFormat
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message + "Modbus_WriteSingleCoil"); Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message + "Modbus_WriteSingleCoil");
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT; ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
usCommunFailTimes++; usCommunFailTimes++;
Console.WriteLine(slaveAddress.ToString());
} }
//The server return error code. //The server return error code.
//You can get the function code and exception code. //You can get the function code and exception code.
...@@ -302,6 +306,7 @@ namespace ModbusDemo.MessageFormat ...@@ -302,6 +306,7 @@ namespace ModbusDemo.MessageFormat
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message + "Modbus_WriteMultipleCoils"); Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message + "Modbus_WriteMultipleCoils");
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT; ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
usCommunFailTimes++; usCommunFailTimes++;
Console.WriteLine(slaveAddress.ToString());
} }
//The server return error code. //The server return error code.
//You can get the function code and exception code. //You can get the function code and exception code.
......
...@@ -13,6 +13,7 @@ using ModbusDemo.Modular; ...@@ -13,6 +13,7 @@ using ModbusDemo.Modular;
using ModbusDemo.Common; using ModbusDemo.Common;
using System.Threading; using System.Threading;
using ModbusDemo.application; using ModbusDemo.application;
using System.Windows.Forms;
namespace ModbusDemo.MessageFormat namespace ModbusDemo.MessageFormat
{ {
public class ModualControl public class ModualControl
...@@ -32,7 +33,6 @@ namespace ModbusDemo.MessageFormat ...@@ -32,7 +33,6 @@ namespace ModbusDemo.MessageFormat
public UInt64 ts { get; set; } public UInt64 ts { get; set; }
} }
public class SsItem public class SsItem
{ {
public string addr { get; set; } public string addr { get; set; }
...@@ -59,7 +59,6 @@ namespace ModbusDemo.MessageFormat ...@@ -59,7 +59,6 @@ namespace ModbusDemo.MessageFormat
public string upper { get; set; } public string upper { get; set; }
public UInt64 ts { get; set; } public UInt64 ts { get; set; }
} }
public class pcCfgSsItem public class pcCfgSsItem
{ {
public string addr { get; set; } public string addr { get; set; }
...@@ -88,12 +87,6 @@ namespace ModbusDemo.MessageFormat ...@@ -88,12 +87,6 @@ namespace ModbusDemo.MessageFormat
{ {
public List<pcModualControlIndex> chMap { get; set; } public List<pcModualControlIndex> chMap { get; set; }
} }
public struct ModualRespControl
{
public byte byResModualID;
public string stResChannel;
public modual.eModualType eModualType;
}
public class ModualCntrol public class ModualCntrol
{ {
public bool bStartControl; public bool bStartControl;
...@@ -106,12 +99,11 @@ namespace ModbusDemo.MessageFormat ...@@ -106,12 +99,11 @@ namespace ModbusDemo.MessageFormat
public bool[] bControlBit = new bool[8]; public bool[] bControlBit = new bool[8];
public modual.eModualType eModualType; public modual.eModualType eModualType;
public bool bOpenMachine; public bool bOpenMachine;
public ModualRespControl xModualRespControl;
public string[] strOperationChannelName; public string[] strOperationChannelName;
} }
private const double OPENCURRENT = 2; private const double OPENCURRENT = 4.1;
private const double CLOSECURRENT = 0; private const double CLOSECURRENT = 4;
public class pcLiquidLevelConfig public class pcLiquidLevelConfig
{ {
public byte byModbusID; public byte byModbusID;
...@@ -122,7 +114,6 @@ namespace ModbusDemo.MessageFormat ...@@ -122,7 +114,6 @@ namespace ModbusDemo.MessageFormat
public static List<pcLiquidLevelConfig> cPoolLevelConfig = new List<pcLiquidLevelConfig>(); public static List<pcLiquidLevelConfig> cPoolLevelConfig = new List<pcLiquidLevelConfig>();
public static List<ModualCntrol> liModuualControl = new List<ModualCntrol>(); public static List<ModualCntrol> liModuualControl = new List<ModualCntrol>();
public const ushort usDefineControlTimes = 1; public const ushort usDefineControlTimes = 1;
private static pcControlMap cControlMap = new pcControlMap();
private static object obLock = new object(); private static object obLock = new object();
#if DEBUG_TEST #if DEBUG_TEST
public const string strMapCfg = "{chMap:[" + public const string strMapCfg = "{chMap:[" +
...@@ -152,7 +143,7 @@ namespace ModbusDemo.MessageFormat ...@@ -152,7 +143,7 @@ namespace ModbusDemo.MessageFormat
try try
{ {
cControl = JsonConvert.DeserializeObject<MqttRoot>(sDataString); cControl = JsonConvert.DeserializeObject<MqttRoot>(sDataString);
jsonObj = JObject.Parse(sDataString); jsonObj = JObject.Parse(sDataString);
} }
catch (Exception exception) catch (Exception exception)
{ {
...@@ -160,12 +151,12 @@ namespace ModbusDemo.MessageFormat ...@@ -160,12 +151,12 @@ namespace ModbusDemo.MessageFormat
} }
for (int i = 0; i < cControl.ss.Count; i++) for (int i = 0; i < cControl.ss.Count; i++)
{ {
bool[] btReadTempData = new bool[6]; bool[] bOperationStatus = new bool[8] {false,false,false,false,false,false,false,false};
ModualCntrol cModualCntrol = new ModualCntrol ModualCntrol cModualCntrol = new ModualCntrol
{ {
sbModbusID = byte.Parse(cControl.ss[i].addr), sbModbusID = byte.Parse(cControl.ss[i].addr),
usDurationTime = (ushort)(cControl.ss[i].op.duration * 60), usDurationTime = (ushort)(cControl.ss[i].op.duration * 60),
ulStartTime = cControl.ss[i].op.startTime ulStartTime = cControl.ss[i].op.startTime
}; };
cModualCntrol.bControlStatus = ModualPoll.bGet_channel_Value<bool>(cModualCntrol.sbModbusID, out cModualCntrol.bControlData, "d0", "d1", "d1", "d2", "d3", "d4", "d5"); cModualCntrol.bControlStatus = ModualPoll.bGet_channel_Value<bool>(cModualCntrol.sbModbusID, out cModualCntrol.bControlData, "d0", "d1", "d1", "d2", "d3", "d4", "d5");
if (jsonObj["ss"][i]["op"] != null) if (jsonObj["ss"][i]["op"] != null)
...@@ -178,10 +169,12 @@ namespace ModbusDemo.MessageFormat ...@@ -178,10 +169,12 @@ namespace ModbusDemo.MessageFormat
{ {
if (Convert.ToBoolean(jsonObj["ss"][i]["op"].Value<int>(str)) == true) if (Convert.ToBoolean(jsonObj["ss"][i]["op"].Value<int>(str)) == true)
{ {
cModualCntrol.bControlData[j] = true;
cModualCntrol.bOpenMachine = true; cModualCntrol.bOpenMachine = true;
} }
else else
{ {
cModualCntrol.bControlData[j] = false;
cModualCntrol.bOpenMachine = false; cModualCntrol.bOpenMachine = false;
} }
cModualCntrol.bControlBit[j] = true; cModualCntrol.bControlBit[j] = true;
...@@ -193,20 +186,27 @@ namespace ModbusDemo.MessageFormat ...@@ -193,20 +186,27 @@ namespace ModbusDemo.MessageFormat
{ {
jsonObj["ss"][i]["op"]["ts"] = Form1.GetTimeStamp(); jsonObj["ss"][i]["op"]["ts"] = Form1.GetTimeStamp();
} }
cModualCntrol.strOperationChannelName = strOperation.ToArray();
if (cModualCntrol.bControlStatus == true && cModualCntrol.ulStartTime <= Form1.GetTimeStamp()) if (cModualCntrol.bControlStatus == true && cModualCntrol.ulStartTime <= Form1.GetTimeStamp())
{ {
//Form1.vSuspend_Poll_Control(true);
cModualCntrol.bStartControl = true; cModualCntrol.bStartControl = true;
cModualCntrol.strOperationChannelName = strOperation.ToArray(); for (int j = 0; j < cModualCntrol.strOperationChannelName.Count(); j++)
if (ControlMap.bControl_Map(cModualCntrol.bOpenMachine, cModualCntrol.sbModbusID, cModualCntrol.strOperationChannelName[0]))
{
cModualCntrol.bControlStatus = ControlMap.bDelege_Operation(cModualCntrol.bControlData);
}
else
{ {
cModualCntrol.bControlStatus = false; if (ControlMap.bControl_Map(cModualCntrol.bOpenMachine, cModualCntrol.sbModbusID, cModualCntrol.bControlData, cModualCntrol.strOperationChannelName[j]))
{
bOperationStatus[j] = ControlMap.bDelege_Operation(cModualCntrol.bControlData);
cModualCntrol.bControlStatus = bOperationStatus[j];
}
else
{
cModualCntrol.bControlStatus = false;
bOperationStatus[j] = false;
}
} }
//Form1.vSuspend_Poll_Control(false);
} }
if (cModualCntrol.bControlStatus == true) if (cModualCntrol.bControlStatus == true && cModualCntrol.strOperationChannelName.Count() <= 1)
{ {
lock (obLock) lock (obLock)
{ {
...@@ -217,13 +217,13 @@ namespace ModbusDemo.MessageFormat ...@@ -217,13 +217,13 @@ namespace ModbusDemo.MessageFormat
} }
else if (cModualCntrol.bStartControl == false && cModualCntrol.ulStartTime != 0) else if (cModualCntrol.bStartControl == false && cModualCntrol.ulStartTime != 0)
{ {
liModuualControl.Add(cModualCntrol); liModuualControl.Add(cModualCntrol);
} }
} }
} }
for (int k = 0; k < 8; k++) for (int k = 0; k < 8; k++)
{ {
if (cModualCntrol.bControlBit[k] == true && cModualCntrol.bStartControl == true) if (cModualCntrol.bControlBit[k] == true && (cModualCntrol.bControlStatus == true || bOperationStatus[k] == true))
{ {
string str = "d" + k.ToString(); string str = "d" + k.ToString();
jsonObj["ss"][i]["op"][str] = 1; jsonObj["ss"][i]["op"][str] = 1;
...@@ -238,9 +238,8 @@ namespace ModbusDemo.MessageFormat ...@@ -238,9 +238,8 @@ namespace ModbusDemo.MessageFormat
stResponseData = jsonObj.ToString(); stResponseData = jsonObj.ToString();
} }
public static void vControl_Poll() public static void vControl_Poll()//async Task
{ {
cControlMap = JsonConvert.DeserializeObject<pcControlMap>(strMapCfg);
while (true) while (true)
{ {
lock (obLock) lock (obLock)
...@@ -253,8 +252,8 @@ namespace ModbusDemo.MessageFormat ...@@ -253,8 +252,8 @@ namespace ModbusDemo.MessageFormat
{ {
liModuualControl[i].bStartControl = true; liModuualControl[i].bStartControl = true;
bool[] bControlData; bool[] bControlData;
liModuualControl[i].bControlStatus = ModualPoll.bGet_channel_Value<bool>(liModuualControl[i].sbModbusID, out bControlData,"d0","d1","d1","d2","d3","d4","d5","d6","d7"); liModuualControl[i].bControlStatus = ModualPoll.bGet_channel_Value<bool>(liModuualControl[i].sbModbusID, out bControlData, "d0", "d1", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
if (ControlMap.bControl_Map(liModuualControl[i].bOpenMachine, liModuualControl[i].sbModbusID,liModuualControl[i].strOperationChannelName[0])) if (ControlMap.bControl_Map(liModuualControl[i].bOpenMachine, liModuualControl[i].sbModbusID, liModuualControl[i].bControlData, liModuualControl[i].strOperationChannelName[0]))
{ {
liModuualControl[i].bControlStatus = ControlMap.bDelege_Operation(bControlData); liModuualControl[i].bControlStatus = ControlMap.bDelege_Operation(bControlData);
} }
...@@ -265,8 +264,17 @@ namespace ModbusDemo.MessageFormat ...@@ -265,8 +264,17 @@ namespace ModbusDemo.MessageFormat
if ((liModuualControl[i].usDurationTime + liModuualControl[i].ulStartTime) <= Form1.GetTimeStamp()) if ((liModuualControl[i].usDurationTime + liModuualControl[i].ulStartTime) <= Form1.GetTimeStamp())
{ {
bool[] bControlData; bool[] bControlData;
liModuualControl[i].bControlStatus = ModualPoll.bGet_channel_Value<bool>(liModuualControl[i].sbModbusID, out bControlData,"d0","d1","d1","d2","d3","d4","d5","d6","d7"); string str;
if (ControlMap.bControl_Map(liModuualControl[i].bOpenMachine, liModuualControl[i].sbModbusID, liModuualControl[i].strOperationChannelName[0])) liModuualControl[i].bControlStatus = ModualPoll.bGet_channel_Value<bool>(liModuualControl[i].sbModbusID, out bControlData, "d0", "d1", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
for (int j = 0; j < 8; j++)
{
str = "d"+j.ToString();
if (str == liModuualControl[i].strOperationChannelName[0])
{
liModuualControl[i].bControlData[j] = !liModuualControl[i].bControlData[j];
}
}
if (ControlMap.bControl_Map(!liModuualControl[i].bOpenMachine, liModuualControl[i].sbModbusID, liModuualControl[i].bControlData, liModuualControl[i].strOperationChannelName[0]))
{ {
liModuualControl[i].bControlStatus = ControlMap.bDelege_Operation(bControlData); liModuualControl[i].bControlStatus = ControlMap.bDelege_Operation(bControlData);
} }
...@@ -278,6 +286,190 @@ namespace ModbusDemo.MessageFormat ...@@ -278,6 +286,190 @@ namespace ModbusDemo.MessageFormat
} }
Thread.Sleep(100); Thread.Sleep(100);
} }
}
public static Task vControl_Res_Poll()
{
while (true)
{
for (sbyte sbEastTransitPoolIndex = 0; sbEastTransitPoolIndex < AllPond.EastTransitPoolList.Count(); sbEastTransitPoolIndex++)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent < OPENCURRENT)
{
bool[] bControlData;
if (ModualPoll.bGet_channel_Value<bool>(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, out bControlData, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7") == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bClose_Machine(bControlData) == true)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
}
}
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == false)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent > CLOSECURRENT)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
Thread.Sleep(200);
}
for (sbyte sbEastTransitPoolIndex = 0; sbEastTransitPoolIndex < AllPond.EastTransitPoolList.Count(); sbEastTransitPoolIndex++)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent < OPENCURRENT)
{
bool[] bControlData;
if (ModualPoll.bGet_channel_Value<bool>(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, out bControlData, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7") == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bClose_Machine(bControlData) == true)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
}
}
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == false)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent > CLOSECURRENT)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
Thread.Sleep(200);
}
for (sbyte sbEastTransitPoolIndex = 0; sbEastTransitPoolIndex < AllPond.EastTransitPoolList.Count(); sbEastTransitPoolIndex++)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent < OPENCURRENT)
{
bool[] bControlData;
if (ModualPoll.bGet_channel_Value<bool>(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, out bControlData, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7") == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bClose_Machine(bControlData) == true)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
}
}
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == false)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent > CLOSECURRENT)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
Thread.Sleep(200);
}
for (sbyte sbEastTransitPoolIndex = 0; sbEastTransitPoolIndex < AllPond.EastTransitPoolList.Count(); sbEastTransitPoolIndex++)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent < OPENCURRENT)
{
bool[] bControlData;
if (ModualPoll.bGet_channel_Value<bool>(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, out bControlData, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7") == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bClose_Machine(bControlData) == true)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
}
}
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == false)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent > CLOSECURRENT)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
Thread.Sleep(200);
}
for (sbyte sbEastTransitPoolIndex = 0; sbEastTransitPoolIndex < AllPond.EastTransitPoolList.Count(); sbEastTransitPoolIndex++)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent < OPENCURRENT)
{
bool[] bControlData;
if (ModualPoll.bGet_channel_Value<bool>(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, out bControlData, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7") == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bClose_Machine(bControlData) == true)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
}
}
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == false)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent > CLOSECURRENT)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
Thread.Sleep(200);
}
for (sbyte sbEastTransitPoolIndex = 0; sbEastTransitPoolIndex < AllPond.EastTransitPoolList.Count(); sbEastTransitPoolIndex++)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent < OPENCURRENT)
{
bool[] bControlData;
if (ModualPoll.bGet_channel_Value<bool>(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, out bControlData, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7") == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bClose_Machine(bControlData) == true)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
}
}
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == false)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent > CLOSECURRENT)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
}
for (sbyte sbEastTransitPoolIndex = 0; sbEastTransitPoolIndex < AllPond.EastTransitPoolList.Count(); sbEastTransitPoolIndex++)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent < OPENCURRENT)
{
bool[] bControlData;
if (ModualPoll.bGet_channel_Value<bool>(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, out bControlData, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7") == true)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bClose_Machine(bControlData) == true)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
}
}
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadRefControl == true && AllPond.EastTransitPoolList[sbEastTransitPoolIndex].bHadOpenPumb == false)
{
if (AllPond.EastTransitPoolList[sbEastTransitPoolIndex].dChannelCurrent > CLOSECURRENT)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.EastTransitPoolList[sbEastTransitPoolIndex].byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, AllPond.EastTransitPoolList[sbEastTransitPoolIndex].strChannelNumber);
}
}
}
Thread.Sleep(1000);
}
} }
public static modual.eModualType eModdusId_Find_ModualType(string sModbusID) public static modual.eModualType eModdusId_Find_ModualType(string sModbusID)
{ {
...@@ -307,98 +499,17 @@ namespace ModbusDemo.MessageFormat ...@@ -307,98 +499,17 @@ namespace ModbusDemo.MessageFormat
return modual.eModualType.IDLE; return modual.eModualType.IDLE;
} }
//private static void vFindChannelMap(string stContrID, string stChannelName, bool bControlValue,ref ModualCntrol cModualCntrol) public static bool bOperation_Machine(bool bOpenMachine, byte sbModbusID,bool[] bControlData,bool[] bControlBit,out bool bHadOpenMachine, byte byResModualID,string stResChannel)
//{
// bool bHadRef = false;
// if (bControlValue == true)
// {
// cModualCntrol.bOpenMachine = true;
// }
// for (int i = 0; i < cControlMap.chMap.Count; i++)
// {
// if (cControlMap.chMap[i].srcId == stContrID)
// {
// bHadRef = true;
// if (cControlMap.chMap[i].srcCh == stChannelName && cControlMap.chMap[i].dstCh.Count != 0)
// {
// if (cControlMap.chMap[i].opType == "durOp")
// {
// cModualCntrol.usDurationTime = 1;
// cModualCntrol.ulStartTime = 0xFF;
// }
// for (int j = 0; j < cControlMap.chMap[i].dstCh.Count; j++)
// {
// for (int k = 0; k < 8; k++)
// {
// string str = "d" + k.ToString();
// if (cControlMap.chMap[i].dstCh[j] == str)
// {
// if (cControlMap.chMap[i].dstCh.Count == 3)
// {
// if (j == 0)
// {
// cModualCntrol.bControlData[k] = bControlValue;
// }
// else if (j == 1)
// {
// cModualCntrol.bControlData[k] = true;
// }
// else if (j == 2)
// {
// cModualCntrol.bControlData[k] = !bControlValue;
// }
// else
// {
// cModualCntrol.bControlData[k] = bControlValue;
// }
// }
// else if (cControlMap.chMap[i].dstCh.Count == 2)
// {
// cModualCntrol.bControlData[k] = bControlValue;
// }
// cModualCntrol.bControlBit[k] = true;
// }
// }
// }
// cModualCntrol.xModualRespControl.byResModualID = byte.Parse(cControlMap.chMap[i].resId);
// cModualCntrol.xModualRespControl.eModualType = eModdusId_Find_ModualType(cControlMap.chMap[i].resId);
// cModualCntrol.xModualRespControl.stResChannel = cControlMap.chMap[i].resCh;
// }
// else
// {
// for (int k = 0; k < 8; k++)
// {
// string str = "d" + k.ToString();
// if (stChannelName == str)
// {
// cModualCntrol.bControlData[k] = bControlValue;
// cModualCntrol.bControlBit[k] = true;
// }
// }
// }
// }
// }
// if (bHadRef == false)
// {
// for (int k = 0; k < 8; k++)
// {
// string str = "d" + k.ToString();
// if (stChannelName == str)
// {
// cModualCntrol.bControlData[k] = bControlValue;
// cModualCntrol.bControlBit[k] = true;
// }
// }
// }
//}
public static bool bOperation_Machine(bool bOpenMachine, byte sbModbusID,bool[] bControlData,bool[] bControlBit, byte byResModualID,string stResChannel)
{ {
bHadOpenMachine = true;
bool bControlStatus = true; bool bControlStatus = true;
if (ModualPoll.bSet_All_Channel_Value(sbModbusID, bControlData) == true) if (ModualPoll.bSet_All_Channel_Value(sbModbusID, bControlData) == true)
{ {
if (bOpenMachine == true && stResChannel != null) if (bOpenMachine == true && stResChannel != null)
{ {
double[] dConvertData; double[] dConvertData;
bHadOpenMachine = true;
Thread.Sleep(1000);
bControlStatus = ModualPoll.bGet_channel_Value<double>(byResModualID, out dConvertData, stResChannel); bControlStatus = ModualPoll.bGet_channel_Value<double>(byResModualID, out dConvertData, stResChannel);
if (dConvertData[0] > OPENCURRENT && bControlStatus == true) if (dConvertData[0] > OPENCURRENT && bControlStatus == true)
{ {
...@@ -412,6 +523,8 @@ namespace ModbusDemo.MessageFormat ...@@ -412,6 +523,8 @@ namespace ModbusDemo.MessageFormat
else if (bOpenMachine == false && stResChannel != null) else if (bOpenMachine == false && stResChannel != null)
{ {
double[] dConvertData; double[] dConvertData;
bHadOpenMachine = false;
Thread.Sleep(1000);
bControlStatus = ModualPoll.bGet_channel_Value<double>(byResModualID, out dConvertData, stResChannel); bControlStatus = ModualPoll.bGet_channel_Value<double>(byResModualID, out dConvertData, stResChannel);
if (dConvertData[0] < CLOSECURRENT && bControlStatus == true) if (dConvertData[0] < CLOSECURRENT && bControlStatus == true)
{ {
......
...@@ -91,10 +91,8 @@ ...@@ -91,10 +91,8 @@
<Compile Include="application\AutoControl.cs" /> <Compile Include="application\AutoControl.cs" />
<Compile Include="application\ControlMap.cs" /> <Compile Include="application\ControlMap.cs" />
<Compile Include="application\InIHelper.cs" /> <Compile Include="application\InIHelper.cs" />
<Compile Include="application\PoolModbusSet.cs" />
<Compile Include="application\ModualPool.cs" /> <Compile Include="application\ModualPool.cs" />
<Compile Include="application\AllPond.cs" /> <Compile Include="application\AllPond.cs" />
<Compile Include="application\UsThread.cs" />
<Compile Include="Common\ModualAlarm.cs" /> <Compile Include="Common\ModualAlarm.cs" />
<Compile Include="Common\OperIni.cs" /> <Compile Include="Common\OperIni.cs" />
<Compile Include="MessageFormat\ModualControl.cs" /> <Compile Include="MessageFormat\ModualControl.cs" />
...@@ -180,6 +178,9 @@ ...@@ -180,6 +178,9 @@
</PropertyGroup> </PropertyGroup>
<Import Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' != ''" /> <Import Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' == ''" /> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' == ''" />
<PropertyGroup>
<SsdtUnitTestVersion>3.1</SsdtUnitTestVersion>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using ModbusDemo.MessageFormat; using ModbusDemo.MessageFormat;
using ModbusDemo.Common; using ModbusDemo.Common;
...@@ -35,7 +36,7 @@ namespace ModbusDemo.Modular ...@@ -35,7 +36,7 @@ namespace ModbusDemo.Modular
public static _414P c14formulasormual = new _414P(); public static _414P c14formulasormual = new _414P();
#if DEBUG_TEST #if DEBUG_TEST
public const byte byX18xNumber = 1; public const byte byX18xNumber = 1;
public static byte[] byX18xIdlist = {13,14}; public static byte[] byX18xIdlist = { 13,};
private static modual.eX18xSensorChannelType[,] sX18xChannelType = new modual.eX18xSensorChannelType[byX18xNumber, byX18xReadDataNumber] { { modual.eX18xSensorChannelType.NormalCurrent, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.NormalCurrent, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null } }; private static modual.eX18xSensorChannelType[,] sX18xChannelType = new modual.eX18xSensorChannelType[byX18xNumber, byX18xReadDataNumber] { { modual.eX18xSensorChannelType.NormalCurrent, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.NormalCurrent, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null } };
#else #else
public const byte byX18xNumber = 6; public const byte byX18xNumber = 6;
...@@ -58,8 +59,8 @@ namespace ModbusDemo.Modular ...@@ -58,8 +59,8 @@ namespace ModbusDemo.Modular
private static _418X c18xformulasormual = new _418X(); private static _418X c18xformulasormual = new _418X();
#if DEBUG_TEST #if DEBUG_TEST
public const byte byX78cNumber = 1; public const byte byX78cNumber = 1;
public static byte[] byX78cIdlist = { 20 }; public static byte[] byX78cIdlist = { 20};
#else #else
public const byte byX78cNumber = 0; public const byte byX78cNumber = 0;
public static byte[] byX78cIdlist = {11,20,33,34,55,56}; public static byte[] byX78cIdlist = {11,20,33,34,55,56};
...@@ -148,6 +149,7 @@ namespace ModbusDemo.Modular ...@@ -148,6 +149,7 @@ namespace ModbusDemo.Modular
cx14P.sX14pDataStruct[i].dBeforeConvertData[j] = cx14P.sX14pDataStruct[i].dNowConvertData[j]; cx14P.sX14pDataStruct[i].dBeforeConvertData[j] = cx14P.sX14pDataStruct[i].dNowConvertData[j];
} }
cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease = true; cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease = true;
Thread.Sleep(100);
} }
for (byte i = 0; i < byX18xNumber; i++) for (byte i = 0; i < byX18xNumber; i++)
...@@ -227,6 +229,7 @@ namespace ModbusDemo.Modular ...@@ -227,6 +229,7 @@ namespace ModbusDemo.Modular
cx18x.sX18xDataStruct[i].dBeforeConvertData[j] = cx18x.sX18xDataStruct[i].dNowConvertData[j]; cx18x.sX18xDataStruct[i].dBeforeConvertData[j] = cx18x.sX18xDataStruct[i].dNowConvertData[j];
} }
cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease = true; cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease = true;
Thread.Sleep(100);
} }
for (byte i = 0; i < byX78cNumber; i++) for (byte i = 0; i < byX78cNumber; i++)
{ {
...@@ -249,6 +252,7 @@ namespace ModbusDemo.Modular ...@@ -249,6 +252,7 @@ namespace ModbusDemo.Modular
cx78c.sX78cAlarmStruct[i].usCommFailTimes[j] = 0; cx78c.sX78cAlarmStruct[i].usCommFailTimes[j] = 0;
} }
} }
Thread.Sleep(100);
} }
for (byte i = 0; i < byX66cNumber; i++) for (byte i = 0; i < byX66cNumber; i++)
...@@ -271,6 +275,7 @@ namespace ModbusDemo.Modular ...@@ -271,6 +275,7 @@ namespace ModbusDemo.Modular
cx66c.sX66cAlarmStruct[i].usCommFailTimes[j] = 0; cx66c.sX66cAlarmStruct[i].usCommFailTimes[j] = 0;
} }
} }
Thread.Sleep(100);
} }
} }
public static string stAll_Poll_Package() public static string stAll_Poll_Package()
......
...@@ -89,8 +89,6 @@ namespace ModbusDemo.Modular ...@@ -89,8 +89,6 @@ namespace ModbusDemo.Modular
{ {
this.sX18xDataStruct[i].dBeforeConvertData = new double[ModualPoll.byX18xReadDataNumber]; this.sX18xDataStruct[i].dBeforeConvertData = new double[ModualPoll.byX18xReadDataNumber];
this.sX18xDataStruct[i].dNowConvertData = new double[ModualPoll.byX18xReadDataNumber]; this.sX18xDataStruct[i].dNowConvertData = new double[ModualPoll.byX18xReadDataNumber];
//this.sX18xDataStruct[i].usRegData = new ushort[ModualPoll.byX18xReadDataNumber];
//this.sX18xDataStruct[i].usTypeData = new ushort[ModualPoll.byX18xReadDataNumber];
this.sX18xAlarmstruct[i].usBeforeAlarmCode = new ushort[ModualPoll.byX18xReadDataNumber]; this.sX18xAlarmstruct[i].usBeforeAlarmCode = new ushort[ModualPoll.byX18xReadDataNumber];
this.sX18xAlarmstruct[i].usNowAlarmCode = new ushort[ModualPoll.byX18xReadDataNumber]; this.sX18xAlarmstruct[i].usNowAlarmCode = new ushort[ModualPoll.byX18xReadDataNumber];
this.sX18xAlarmstruct[i].usCommFailTimes = new ushort[ModualPoll.byX18xReadDataNumber]; this.sX18xAlarmstruct[i].usCommFailTimes = new ushort[ModualPoll.byX18xReadDataNumber];
......
...@@ -8,114 +8,126 @@ using ModbusDemo; ...@@ -8,114 +8,126 @@ using ModbusDemo;
using ModbusDemo.application; using ModbusDemo.application;
namespace ModbusDemo.application namespace ModbusDemo.application
{ {
public static class AllPond public static class AllPond
{ {
private static ModualPool.pcTemperature cEastTransitPoolTemper = new ModualPool.pcTemperature("EastTransitPoolTemper", 27, "d0"); private static ModualPool.pcTemperature cEastTransitPoolTemper = new ModualPool.pcTemperature("EastTransitPoolTemper", 27, "d0");
private static ModualPool.pcLiquidlevel cEastTransitPoolLevel = new ModualPool.pcLiquidlevel("EastTransitPoolLevel", 13, "d0"); private static ModualPool.pcLiquidlevel cEastTransitPoolLevel = new ModualPool.pcLiquidlevel("EastTransitPoolLevel", 13, "d0");
private static ModualPool.pcOperation cEastTransitPoolSouthWaterBase = new ModualPool.pcOperation private static ModualPool.pcOperation cEastTransitPoolSouthWaterBase = new ModualPool.pcOperation
{ {
byModbusID = 16, byModbusID = 31,
strOperationNumber = "d0", strOperationNumber = "d1",
strChannelNumber = new string[] { "d0", "d1" }, strChannelNumber = new string[] { "d1","d2" },
bOpenOperation = new bool[] { true, true }, bOpenOperation = new bool[] { true,true },
bCloseOperation = new bool[] { false, false }, bCloseOperation = new bool[] { false,false },
bHadRefControl = false, bHadRefControl = true,
byResModbusID = 0xFF, byResModbusID = 13,
strResChannelNumber = null strResChannelNumber = "d0"
}; };
private static ModualPool.pcMachine cEastTransitPoolSouthWater = new ModualPool.pcMachine("EastTransitPoolSouthWater", cEastTransitPoolSouthWaterBase); private static ModualPool.pcMachine cEastTransitPoolSouthWater = new ModualPool.pcMachine("EastTransitPoolSouthWater", cEastTransitPoolSouthWaterBase);
private static ModualPool.pcOperation cEastTransitPoolNorthWaterBase = new ModualPool.pcOperation private static ModualPool.pcOperation cEastTransitPoolNorthWaterBase = new ModualPool.pcOperation
{ {
byModbusID = 16, byModbusID = 16,
strOperationNumber = "d2", strOperationNumber = "d0",
strChannelNumber = new string[] { "d2", "d3" }, strChannelNumber = new string[] { "d0", "d1" },
bOpenOperation = new bool[] { true, true }, bOpenOperation = new bool[] { true, true },
bCloseOperation = new bool[] { false, false }, bCloseOperation = new bool[] { false, false },
bHadRefControl = false, bHadRefControl = false,
byResModbusID = 0xFF, byResModbusID = 0xFF,
strResChannelNumber = null strResChannelNumber = null
}; };
private static ModualPool.pcMachine cEastTransitPoolNorthWater = new ModualPool.pcMachine("EastTransitPoolNorthWater", cEastTransitPoolNorthWaterBase); private static ModualPool.pcMachine cEastTransitPoolNorthWater = new ModualPool.pcMachine("EastTransitPoolNorthWater", cEastTransitPoolNorthWaterBase);
private static ModualPool.pcOperation cEastTransitPoolPumb1Base = new ModualPool.pcOperation private static ModualPool.pcOperation cEastTransitPoolPumb1Base = new ModualPool.pcOperation
{ {
byModbusID = 16, byModbusID = 16,
strOperationNumber = "d0", strOperationNumber = "d2",
strChannelNumber = new string[] { "d0", "d1" }, strChannelNumber = new string[] { "d2","d3"},
bOpenOperation = new bool[] { true, true }, bOpenOperation = new bool[] { true ,true},
bCloseOperation = new bool[] { false, false }, bCloseOperation = new bool[] { false,false},
bHadRefControl = false, bHadRefControl = false,
byResModbusID = 0xFF, byResModbusID = 0,
strResChannelNumber = null strResChannelNumber = null
}; };
private static ModualPool.pcMachine cEastTransitPoolPumb1 = new ModualPool.pcMachine("EastTransitPoolPumb_1", cEastTransitPoolPumb1Base); private static ModualPool.pcMachine cEastTransitPoolPumb1 = new ModualPool.pcMachine("EastTransitPoolPumb_1", cEastTransitPoolPumb1Base);
private static ModualPool.pcOperation cEastTransitPoolPumb2Base = new ModualPool.pcOperation private static ModualPool.pcOperation cEastTransitPoolPumb2Base = new ModualPool.pcOperation
{ {
byModbusID = 16, byModbusID = 35,
strOperationNumber = "d0", strOperationNumber = "d0",
strChannelNumber = new string[] { "d0", "d1" }, strChannelNumber = new string[] {"d0","d1"},
bOpenOperation = new bool[] { true, true }, bOpenOperation = new bool[] { true,true},
bCloseOperation = new bool[] { false, false }, bCloseOperation = new bool[] { false,true},
bHadRefControl = false, bHadRefControl = false,
byResModbusID = 0xFF, byResModbusID = 0,
strResChannelNumber = null strResChannelNumber = null
}; };
private static ModualPool.pcMachine cEastTransitPoolPumb2 = new ModualPool.pcMachine("EastTransitPoolPumb_2", cEastTransitPoolPumb2Base); private static ModualPool.pcMachine cEastTransitPoolPumb2 = new ModualPool.pcMachine("EastTransitPoolPumb_2", cEastTransitPoolPumb2Base);
private static ModualPool.pcOperation cEastTransitPoolStirrer1Base = new ModualPool.pcOperation private static ModualPool.pcOperation cEastTransitPoolStirrer1Base = new ModualPool.pcOperation
{ {
byModbusID = 16, byModbusID = 35,
strOperationNumber = "d0", strOperationNumber = "d2",
strChannelNumber = new string[] { "d0", "d1" }, strChannelNumber = new string[] { "d2","d3" },
bOpenOperation = new bool[] { true, true }, bOpenOperation = new bool[] { true,true},
bCloseOperation = new bool[] { false, false }, bCloseOperation = new bool[] { false,false},
bHadRefControl = false, bHadRefControl = false,
byResModbusID = 0xFF, byResModbusID = 0,
strResChannelNumber = null strResChannelNumber = null
}; };
private static ModualPool.pcMachine cEastTransitPoolStirrer1 = new ModualPool.pcMachine("EastTransitPoolStirrer_1", cEastTransitPoolStirrer1Base); private static ModualPool.pcMachine cEastTransitPoolStirrer1 = new ModualPool.pcMachine("EastTransitPoolStirrer_1", cEastTransitPoolStirrer1Base);
private static ModualPool.pcOperation cEastTransitPoolStirrer2Base = new ModualPool.pcOperation private static ModualPool.pcOperation cEastTransitPoolStirrer2Base = new ModualPool.pcOperation
{ {
byModbusID = 16, byModbusID = 39,
strOperationNumber = "d0", strOperationNumber = "d0",
strChannelNumber = new string[] { "d0", "d1" }, strChannelNumber = new string[] { "d0", "d1" },
bOpenOperation = new bool[] { true, true }, bOpenOperation = new bool[] { true, true },
bCloseOperation = new bool[] { false, false }, bCloseOperation = new bool[] { false, false },
bHadRefControl = false, bHadRefControl = true,
byResModbusID = 0xFF, byResModbusID = 13,
strResChannelNumber = "d0"
};
private static ModualPool.pcMachine cEastTransitPoolStirrer2 = new ModualPool.pcMachine("EastTransitPoolStirrer_2", cEastTransitPoolStirrer2Base);
private static ModualPool.pcOperation cEastTransitPoolStirrer3Base = new ModualPool.pcOperation
{
byModbusID = 39,
strOperationNumber = "d2",
strChannelNumber = new string[] { "d2", "d3" },
bOpenOperation = new bool[] { true, true },
bCloseOperation = new bool[] { false, false },
bHadRefControl = false,
byResModbusID = 0xFF,
strResChannelNumber = null strResChannelNumber = null
}; };
private static ModualPool.pcMachine cEastTransitPoolStirrer2 = new ModualPool.pcMachine("EastTransitPoolStirrer_2", cEastTransitPoolStirrer2Base); private static ModualPool.pcMachine cEastTransitPoolStirrer3 = new ModualPool.pcMachine("EastTransitPoolStirrer_3", cEastTransitPoolStirrer3Base);
private static ModualPool.pcOperation cEastTransitPoolStirrer3Base = new ModualPool.pcOperation private static ModualPool.pcOperation cEastTransitPoolStirrer4Base = new ModualPool.pcOperation
{ {
byModbusID = 16, byModbusID = 16,
strOperationNumber = "d0", strOperationNumber = "d4",
strChannelNumber = new string[] { "d0", "d1" }, strChannelNumber = new string[] { "d4" },
bOpenOperation = new bool[] { true, true }, bOpenOperation = new bool[] { true },
bCloseOperation = new bool[] { false, false }, bCloseOperation = new bool[] { false },
bHadRefControl = false, bHadRefControl = false,
byResModbusID = 0xFF, byResModbusID = 0xFF,
strResChannelNumber = null strResChannelNumber = null
}; };
private static ModualPool.pcMachine cEastTransitPoolStirrer3 = new ModualPool.pcMachine("EastTransitPoolStirrer_3", cEastTransitPoolStirrer3Base); private static ModualPool.pcMachine cEastTransitPoolStirrer4 = new ModualPool.pcMachine("EastTransitPoolStirrer_4", cEastTransitPoolStirrer4Base);
private static ModualPool.pcOperation cEastTransitPoolStirrer4Base = new ModualPool.pcOperation private static ModualPool.pcButtonOperation cEastTransitPoolButton1Base = new ModualPool.pcButtonOperation
{ {
byModbusID = 16, byModbusID = 16,
strOperationNumber = "d0", strOperationNumber = "d0",
strChannelNumber = new string[] { "d0", "d1" }, strChannelNumber = new string[]{ "d0","d1"},
bOpenOperation = new bool[] { true, true }, bOpenOperation = new bool[] { true,true},
bCloseOperation = new bool[] { false, false }, bCloseOperation = new bool[] { false,false}
bHadRefControl = false,
byResModbusID = 0xFF,
strResChannelNumber = null
}; };
private static ModualPool.pcMachine cEastTransitPoolStirrer4 = new ModualPool.pcMachine("EastTransitPoolStirrer_4", cEastTransitPoolStirrer4Base); private static ModualPool.pcButton cEastTransitPoolButton1 = new ModualPool.pcButton("EastTransitPoolButton1",cEastTransitPoolButton1Base);
public static List<ModualPool.pcMachine> EastTransitPoolList = new List<ModualPool.pcMachine>(new ModualPool.pcMachine[] {cEastTransitPoolSouthWater,cEastTransitPoolNorthWater,cEastTransitPoolPumb1,cEastTransitPoolPumb2,cEastTransitPoolStirrer1,cEastTransitPoolStirrer2,cEastTransitPoolStirrer3,cEastTransitPoolStirrer4});
public static class cEastTransitPool public static class cEastTransitPool
{ {
...@@ -131,7 +143,7 @@ namespace ModbusDemo.application ...@@ -131,7 +143,7 @@ namespace ModbusDemo.application
public static ModualPool.pcMachine cStirrer2 {get => cEastTransitPoolStirrer2; set => cEastTransitPoolStirrer2 = value; } public static ModualPool.pcMachine cStirrer2 {get => cEastTransitPoolStirrer2; set => cEastTransitPoolStirrer2 = value; }
public static ModualPool.pcMachine cStirrer3 {get => cEastTransitPoolStirrer3; set => cEastTransitPoolStirrer3 = value; } public static ModualPool.pcMachine cStirrer3 {get => cEastTransitPoolStirrer3; set => cEastTransitPoolStirrer3 = value; }
public static ModualPool.pcMachine cStirrer4 {get => cEastTransitPoolStirrer4; set => cEastTransitPoolStirrer4 = value; } public static ModualPool.pcMachine cStirrer4 {get => cEastTransitPoolStirrer4; set => cEastTransitPoolStirrer4 = value; }
public static ModualPool.pcButton cButton1 {get => cEastTransitPoolButton1; set => cEastTransitPoolButton1 = value; }
private static void vSet_Poll_Max_Level(double dData) private static void vSet_Poll_Max_Level(double dData)
{ {
vSetMaxLevel = dData; vSetMaxLevel = dData;
......
...@@ -4,39 +4,134 @@ using System.Linq; ...@@ -4,39 +4,134 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using ModbusDemo.application; using ModbusDemo.application;
using ModbusDemo.MessageFormat;
namespace ModbusDemo.application namespace ModbusDemo.application
{ {
public class ControlMap public class ControlMap
{ {
public delegate bool bDelege_Handle(bool[] bControlData); public delegate bool bDelege_Handle(bool[] bControlData);
public static bDelege_Handle bDelege_Operation; public static bDelege_Handle bDelege_Operation;
public static byte byMapIdleID;
public static bool bControl_Map(bool bOpen, byte byControlID, params string[] strOperationChannelName) public static bool[] byMapIdleControlData;
public static string[] strMapIdleChannelName;
public static bool bMap_Idle_Open_Control(bool[] bControldata)
{
bool[] bControlBit = new bool[bControldata.Count()];
bool bStatus;
bool bHadOperation;
for (int i = 0; i < bControldata.Count(); i++)
{
string str = "d" + i.ToString();
for (int j = 0; j < strMapIdleChannelName.Count(); j++)
{
if (str == strMapIdleChannelName[j])
{
bControlBit[i] = true;
bControldata[i] = byMapIdleControlData[i];
}
}
}
bStatus = ModualControl.bOperation_Machine(true, byMapIdleID, bControldata, bControlBit,out bHadOperation, 0, null);
return bStatus;
}
public static bool bMap_Idle_Close_Control(bool[] bControldata)
{
bool[] bControlBit = new bool[bControldata.Count()];
bool bStatus;
bool bHadOperation;
for (int i = 0; i < bControldata.Count(); i++)
{
string str = "d" + i.ToString();
for (int j = 0; j < strMapIdleChannelName.Count(); j++)
{
if (str == strMapIdleChannelName[j])
{
bControlBit[i] = true;
bControldata[i] = byMapIdleControlData[i];
}
}
}
bStatus = ModualControl.bOperation_Machine(true, byMapIdleID, bControldata, bControlBit,out bHadOperation, 0, null);
return bStatus;
}
public static bool bControl_Map(bool bOpen, byte byControlID,bool[] bControlData, params string[] strOperationChannelName)
{ {
bool bMapStatus = true; bool bMapStatus = true;
if (bOpen == true) if (bOpen == true)
{ {
if (byControlID == 16 && strOperationChannelName[0] == "d0") if (byControlID == 31 && strOperationChannelName[0] == "d1")
{ {
bDelege_Operation = AllPond.cEastTransitPool.cPumb1.bOpen_Machine; bDelege_Operation = AllPond.cEastTransitPool.cSouthWater.bOpen_Machine;
}
else if (byControlID == 16 && strOperationChannelName[0] == "d0")
{
bDelege_Operation = AllPond.cEastTransitPool.cNorthWater.bOpen_Machine;
} }
else if (byControlID == 16 && strOperationChannelName[0] == "d2") else if (byControlID == 16 && strOperationChannelName[0] == "d2")
{
bDelege_Operation = AllPond.cEastTransitPool.cPumb1.bOpen_Machine;
}
else if (byControlID == 35 && strOperationChannelName[0] == "d0")
{ {
bDelege_Operation = AllPond.cEastTransitPool.cPumb2.bOpen_Machine; bDelege_Operation = AllPond.cEastTransitPool.cPumb2.bOpen_Machine;
} }
else if (byControlID == 35 && strOperationChannelName[0] == "d2")
{
bDelege_Operation = AllPond.cEastTransitPool.cStirrer1.bOpen_Machine;
}
else if (byControlID == 39 && strOperationChannelName[0] == "d0")
{
bDelege_Operation = AllPond.cEastTransitPool.cStirrer2.bOpen_Machine;
}
else if (byControlID == 39 && strOperationChannelName[0] == "d2")
{
bDelege_Operation = AllPond.cEastTransitPool.cStirrer3.bOpen_Machine;
}
else
{
byMapIdleID = byControlID;
strMapIdleChannelName = strOperationChannelName;
byMapIdleControlData = bControlData;
bDelege_Operation = bMap_Idle_Open_Control;
}
} }
else else
{ {
if (byControlID == 16 && strOperationChannelName[0] == "d0") if (byControlID == 31 && strOperationChannelName[0] == "d1")
{ {
bDelege_Operation = AllPond.cEastTransitPool.cPumb1.bClose_Machine; bDelege_Operation = AllPond.cEastTransitPool.cSouthWater.bClose_Machine;
}
else if (byControlID == 16 && strOperationChannelName[0] == "d0")
{
bDelege_Operation = AllPond.cEastTransitPool.cNorthWater.bClose_Machine;
} }
else if (byControlID == 16 && strOperationChannelName[0] == "d2") else if (byControlID == 16 && strOperationChannelName[0] == "d2")
{
bDelege_Operation = AllPond.cEastTransitPool.cPumb1.bClose_Machine;
}
else if (byControlID == 35 && strOperationChannelName[0] == "d0")
{ {
bDelege_Operation = AllPond.cEastTransitPool.cPumb2.bClose_Machine; bDelege_Operation = AllPond.cEastTransitPool.cPumb2.bClose_Machine;
} }
else if (byControlID == 35 && strOperationChannelName[0] == "d2")
{
bDelege_Operation = AllPond.cEastTransitPool.cStirrer1.bClose_Machine;
}
else if (byControlID == 39 && strOperationChannelName[0] == "d0")
{
bDelege_Operation = AllPond.cEastTransitPool.cStirrer2.bClose_Machine;
}
else if (byControlID == 39 && strOperationChannelName[0] == "d2")
{
bDelege_Operation = AllPond.cEastTransitPool.cStirrer3.bClose_Machine;
}
else
{
byMapIdleID = byControlID;
strMapIdleChannelName = strOperationChannelName;
byMapIdleControlData = bControlData;
bDelege_Operation = bMap_Idle_Close_Control;
}
} }
return bMapStatus; return bMapStatus;
} }
......
...@@ -48,15 +48,15 @@ namespace ModbusDemo.application ...@@ -48,15 +48,15 @@ namespace ModbusDemo.application
} }
public class pcLiquidlevel public class pcLiquidlevel
{ {
private string strLevel; private string strLevel;
public double dCurrentlevel { get => vGet_ResCurrent();} public double dCurrentlevel { get => vGet_ResCurrent();}
private byte byModbusID; private byte byModbusID;
private string[] strChannelNumber; private string[] strChannelNumber;
public pcLiquidlevel(string strName, byte byModbusID,params string[] strChannelNumber) public pcLiquidlevel(string strName, byte byModbusID,params string[] strChannelNumber)
{ {
this.strLevel = strName; this.strLevel = strName;
this.byModbusID = byModbusID; this.byModbusID = byModbusID;
this.strChannelNumber = strChannelNumber; this.strChannelNumber = strChannelNumber;
} }
private double vGet_ResCurrent() private double vGet_ResCurrent()
{ {
...@@ -83,34 +83,22 @@ namespace ModbusDemo.application ...@@ -83,34 +83,22 @@ namespace ModbusDemo.application
} }
public class pcOperation public class pcOperation
{ {
public byte byModbusID; public byte byModbusID;
public string[] strChannelNumber; public string[] strChannelNumber;
public string strOperationNumber; public string strOperationNumber;
public bool[] bOpenOperation; public bool[] bOpenOperation;
public bool[] bCloseOperation; public bool[] bCloseOperation;
public bool bHadRefControl;
public byte byResModbusID;
public string strResChannelNumber;
//public pcOperation(byte byControlID, string[] strChannelNumber,string strOperationNumber,bool bHadRefControl,byte byResID,string strResChannelName,bool[] bOpenData,bool[] bCloseData) public bool bHadRefControl;
//{ public byte byResModbusID;
// this.byModbusID = byControlID; public string strResChannelNumber;
// this.strChannelNumber = strChannelNumber;
// this.strOperationNumber = strOperationNumber;
// this.bHadRefControl = bHadRefControl;
// this.byResModbusID = byResID;
// this.strResChannelNumber = strResChannelName;
// this.bOpenOperation = bOpenData;
// this.bCloseOperation = bCloseData;
//}
} }
public class pcMachine:pcOperation public class pcMachine : pcOperation
{ {
public string strMachinebName; public string strMachinebName;
public double dChannelCurrent { get => vGet_ResCurrent();} public double dChannelCurrent { get => vGet_ResCurrent();}
public bool bHadOpenPumb; public bool bHadOpenPumb;
public bool[] bCurrentRelay; public bool[] bCurrentRelay { get => bGet_Current_Relay();}
public pcMachine(string strMachineName,pcOperation pcOperation) // base(pcOperation.byModbusID,pcOperation.strChannelNumber,pcOperation.strOperationNumber,pcOperation.bHadRefControl,pcOperation.byResModbusID,pcOperation.strResChannelNumber,pcOperation.bOpenOperation,pcOperation.bCloseOperation) public pcMachine(string strMachineName,pcOperation pcOperation) // base(pcOperation.byModbusID,pcOperation.strChannelNumber,pcOperation.strOperationNumber,pcOperation.bHadRefControl,pcOperation.byResModbusID,pcOperation.strResChannelNumber,pcOperation.bOpenOperation,pcOperation.bCloseOperation)
{ {
this.strMachinebName = strMachineName; this.strMachinebName = strMachineName;
...@@ -123,7 +111,6 @@ namespace ModbusDemo.application ...@@ -123,7 +111,6 @@ namespace ModbusDemo.application
this.bOpenOperation = pcOperation.bOpenOperation; this.bOpenOperation = pcOperation.bOpenOperation;
this.bCloseOperation = pcOperation.bCloseOperation; this.bCloseOperation = pcOperation.bCloseOperation;
} }
public bool bOpen_Machine(bool[] bControldata) public bool bOpen_Machine(bool[] bControldata)
{ {
bool[] bControlBit = new bool[bControldata.Count()]; bool[] bControlBit = new bool[bControldata.Count()];
...@@ -140,13 +127,12 @@ namespace ModbusDemo.application ...@@ -140,13 +127,12 @@ namespace ModbusDemo.application
} }
} }
} }
if ((bStatus = ModualControl.bOperation_Machine(true, byModbusID, bControldata, bControlBit, byResModbusID, strResChannelNumber)) == true) if ((bStatus = ModualControl.bOperation_Machine(true, byModbusID, bControldata, bControlBit,out bHadOpenPumb, byResModbusID, strResChannelNumber)) == true)
{ {
bHadOpenPumb = true; bHadOpenPumb = true;
} }
return bStatus; return bStatus;
} }
public bool bClose_Machine(bool[] bControldata) public bool bClose_Machine(bool[] bControldata)
{ {
bool[] bControlBit = new bool[bControldata.Count()]; bool[] bControlBit = new bool[bControldata.Count()];
...@@ -163,22 +149,103 @@ namespace ModbusDemo.application ...@@ -163,22 +149,103 @@ namespace ModbusDemo.application
} }
} }
} }
if ((bStatus = ModualControl.bOperation_Machine(false, byModbusID, bControldata, bControlBit, byResModbusID, strResChannelNumber)) == true) if ((bStatus = ModualControl.bOperation_Machine(false, byModbusID, bControldata, bControlBit,out bHadOpenPumb, byResModbusID, strResChannelNumber)) == true)
{ {
bHadOpenPumb = false; bHadOpenPumb = false;
} }
return bStatus; return bStatus;
} }
private double vGet_ResCurrent() private double vGet_ResCurrent()
{ {
double[] dConvertData; double[] dConvertData;
if (ModualPoll.bGet_channel_Value<double>(byResModbusID, out dConvertData, strResChannelNumber) == true) if (bHadRefControl == true && ModualPoll.bGet_channel_Value<double>(byResModbusID, out dConvertData, strResChannelNumber) == true)
{ {
return dConvertData[0]; return dConvertData[0];
} }
return 0; return 0;
} }
private bool[] bGet_Current_Relay()
{
bool[] bRelaydata;
if (ModualPoll.bGet_channel_Value<bool>(byModbusID, out bRelaydata, strChannelNumber) == true)
{
return bRelaydata;
}
else
{
return bRelaydata;
}
}
}
public class pcButtonOperation
{
public byte byModbusID;
public string[] strChannelNumber;
public string strOperationNumber;
public bool[] bOpenOperation;
public bool[] bCloseOperation;
}
public class pcButton :pcButtonOperation
{
public string strButtonName;
public bool[] bCurrentRelay { get => bGet_Current_Relay();}
public pcButton(string strButtonName,pcButtonOperation cButtonOperation)
{
this.strButtonName = strButtonName;
this.byModbusID = cButtonOperation.byModbusID;
this.strOperationNumber = cButtonOperation.strOperationNumber;
this.strChannelNumber = cButtonOperation.strChannelNumber;
this.bOpenOperation = cButtonOperation.bOpenOperation;
this.bCloseOperation = cButtonOperation.bCloseOperation;
}
public bool bOpreation_Button(bool[] bControldata)
{
bool bStatus;
bool bHadOpenButton;
bool[] bControlBit = new bool[bControldata.Count()];
for (int i = 0; i < bControldata.Count(); i++)
{
string str = "d" + i.ToString();
for (int j = 0; j < strChannelNumber.Count(); j++)
{
if (str == strChannelNumber[j])
{
bControlBit[i] = true;
bControldata[i] = bOpenOperation[j];
}
}
}
if ((bStatus = ModualControl.bOperation_Machine(true, byModbusID, bControldata, bControlBit,out bHadOpenButton, 0, null)) == true)
{
for (int i = 0; i < bControldata.Count(); i++)
{
string str = "d" + i.ToString();
for (int j = 0; j < strChannelNumber.Count(); j++)
{
if (str == strChannelNumber[j])
{
bControlBit[i] = true;
bControldata[i] = bCloseOperation[j];
}
}
}
bStatus = ModualControl.bOperation_Machine(true, byModbusID, bControldata, bControlBit, out bHadOpenButton,0, null);
}
return bStatus;
}
private bool[] bGet_Current_Relay()
{
bool[] bRelaydata;
if (ModualPoll.bGet_channel_Value<bool>(byModbusID, out bRelaydata, strChannelNumber) == true)
{
return bRelaydata;
}
else
{
return bRelaydata;
}
}
} }
} }
} }
////using System;
////using System.Collections.Generic;
////using System.Linq;
////using System.Text;
////using System.Threading.Tasks;
////namespace ModbusDemo.application
////{
//// public struct psTemperData
//// {
//// public byte byModbusID;
//// public ushort usTemperRegAddress;
//// public ushort usTypeRegAddress;
//// public psTemperData(byte bySetModbusID, ushort usSetTempRegAddress, ushort usSetRegAddress)
//// {
//// this.byModbusID = bySetModbusID;
//// this.usTemperRegAddress = usSetTempRegAddress;
//// this.usTypeRegAddress = usSetRegAddress;
//// }
//// }
//// public struct psLevelData
//// {
//// public byte byModbusID;
//// public ushort[] usDataAddressList;
//// public ushort[] usTypeAddressList;
//// public psLevelData(byte byInitModbusID, ushort[] usDataRegAddress, ushort[] usDataTypeRegAddress)
//// {
//// this.byModbusID = byInitModbusID;
//// this.usDataAddressList = usDataRegAddress;
//// this.usTypeAddressList = usDataTypeRegAddress;
//// }
//// }
//// public struct psBumpOperation
//// {
//// public byte byModbusID;
//// public ushort[] usRegAddList;
//// public bool[] bOpenStatus;
//// public psBumpOperation(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
//// {
//// this.byModbusID = byInitModbusID;
//// this.usRegAddList = usInitRegAddressInit;
//// this.bOpenStatus = bInitOPen;
//// }
//// }
//// public struct psPumbData
//// {
//// public byte byModbusID;
//// public ushort[] usRegAddList;
//// public psPumbData(byte byInitModbusID, ushort[] usInitRegAddressInit)
//// {
//// this.byModbusID = byInitModbusID;
//// this.usRegAddList = usInitRegAddressInit;
//// }
//// }
//// public struct psAgitatorOperation
//// {
//// public byte byModbusID;
//// public ushort[] usRegAddList;
//// public bool[] bOpenStatus;
//// public psAgitatorOperation(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
//// {
//// this.byModbusID = byInitModbusID;
//// this.usRegAddList = usInitRegAddressInit;
//// this.bOpenStatus = bInitOPen;
//// }
//// }
//// public struct psAgitatorData
//// {
//// public byte byModbusID;
//// public ushort[] usRegAddList;
//// public psAgitatorData(byte byInitModbusID, ushort[] usInitRegAddressInit)
//// {
//// this.byModbusID = byInitModbusID;
//// this.usRegAddList = usInitRegAddressInit;
//// }
//// }
//// static class pcPoolInit
//// {
//// private static psTemperData sTemper = new psTemperData(1, 1, 10);
//// private static ModbusToPool.pcPoolTemperature cPoolTemperature = new ModbusToPool.pcPoolTemperature(sTemper.byModbusID, sTemper.usTemperRegAddress, sTemper.usTypeRegAddress);
//// public static double Get_Current_temper()
//// {
//// cPoolTemperature.vRead_Pumb_Data();
//// cPoolTemperature.vRead_Pumb_Type();
//// return cPoolTemperature.usReadData[0];
//// }
//// public const sbyte PoolLevelNumber = 1;
//// static ushort[] usLevelDataReg = { 1};
//// static ushort[] usLevelTypeReg = { 16 };
//// private static psLevelData sLevelData = new psLevelData(1, usLevelDataReg, usLevelTypeReg);
//// private static ModbusToPool.pcPoolLevel[] cPoolLevel= new ModbusToPool.pcPoolLevel[] { new ModbusToPool.pcPoolLevel(sLevelData.byModbusID, sLevelData.usDataAddressList, sLevelData.usTypeAddressList) };
//// public static double Get_Current_Level()
//// {
//// ushort usPoolLevel = 0;
//// sbyte NormalDataNumber = 0;
//// for (short i = 0; i < cPoolLevel.Length; i++)
//// {
//// cPoolLevel[i].vRead_Level_Data();
//// cPoolLevel[i].vRead_Level_Type();
//// if (cPoolLevel[i].bCommunicationStatus = true && (cPoolLevel[i].usReadData[0] >= 1 && cPoolLevel[i].usReadData[0] >= 7) && cPoolLevel[i].usReadType[0] == 1)
//// {
//// usPoolLevel += cPoolLevel[i].usReadData[0];
//// NormalDataNumber++;
//// }
//// }
//// return usPoolLevel/ NormalDataNumber;
//// }
//// public const sbyte PoolBumpOperatNumber = 1;
//// static ushort[] usBumpOperatReg = { 16, 17 };
//// static bool[] usBumpOpenStatus = { true, false };
//// private static psBumpOperation psBumpData = new psBumpOperation(2, usBumpOperatReg, usBumpOpenStatus);
//// public static ModbusToPool.pcModbusOperationPumb[] cPumbOperat = new ModbusToPool.pcModbusOperationPumb[PoolBumpOperatNumber] { new ModbusToPool.pcModbusOperationPumb(psBumpData.byModbusID, psBumpData.usRegAddList, psBumpData.bOpenStatus) };
//// public const sbyte PoolBumpCurrentNumber = 1;
//// static ushort[] usBumpCurrentDataReg = { 1 };
//// private static psPumbData psBumpReadCurrentData = new psPumbData(3, usBumpCurrentDataReg);
//// public static ModbusToPool.pcReadPumbOtherData[] cPumbCurrent = new ModbusToPool.pcReadPumbOtherData[PoolBumpCurrentNumber] { new ModbusToPool.pcReadPumbOtherData(psBumpReadCurrentData.byModbusID, psBumpReadCurrentData.usRegAddList) };
//// public const sbyte PoolBumpVoltageNumber = 1;
//// static ushort[] usBumpVoltageReg = { 1 };
//// private static psPumbData psBumpReadVoltageData = new psPumbData(4, usBumpVoltageReg);
//// public static ModbusToPool.pcReadPumbOtherData[] cPumbVoltage = new ModbusToPool.pcReadPumbOtherData[PoolBumpCurrentNumber] { new ModbusToPool.pcReadPumbOtherData(psBumpReadVoltageData.byModbusID, psBumpReadVoltageData.usRegAddList) };
//// public const sbyte PoolAgitatorOperatNumber = 1;
//// static ushort[] usAgitatorOperatReg = { 16,17 };
//// static bool[] usAgitatorOpenStatus = { true, true };
//// private static psAgitatorOperation psAgitatorData = new psAgitatorOperation(5, usAgitatorOperatReg, usAgitatorOpenStatus);
//// public static ModbusToPool.pcModbusOperationAgitator[] cAgitatorOperat = new ModbusToPool.pcModbusOperationAgitator[PoolBumpOperatNumber] { new ModbusToPool.pcModbusOperationAgitator(psBumpData.byModbusID, psAgitatorData.usRegAddList, psAgitatorData.bOpenStatus) };
//// public const sbyte PoolAgitatorCurrentNumber = 1;
//// static ushort[] usAgitatorCurrentDataReg = {1};
//// private static psAgitatorData psAgitatorReadCurrentData = new psAgitatorData(6, usAgitatorCurrentDataReg);
//// public static ModbusToPool.pcReadAgitatorOtherData[] cAgitatorCurrent = new ModbusToPool.pcReadAgitatorOtherData[PoolAgitatorCurrentNumber] { new ModbusToPool.pcReadAgitatorOtherData(psAgitatorReadCurrentData.byModbusID, psAgitatorReadCurrentData.usRegAddList) };
//// public const sbyte PoolAgitatorVoltageNumber = 1;
//// static ushort[] usAgitatorVoltageReg = { 1 };
//// private static psAgitatorData psAgitatorReadVoltageData = new psAgitatorData(7, usAgitatorVoltageReg);
//// public static ModbusToPool.pcReadAgitatorOtherData[] cAgitatorVoltage = new ModbusToPool.pcReadAgitatorOtherData[PoolBumpCurrentNumber] { new ModbusToPool.pcReadAgitatorOtherData(psAgitatorReadVoltageData.byModbusID, psAgitatorReadVoltageData.usRegAddList) };
//// }
//// public class pcBump
//// {
//// private double[] dBumpCurrent = new double[pcPoolInit.PoolBumpCurrentNumber] { pcPoolInit.cPumbCurrent[0].vRead_Pumb_Data()};
//// public double[] dBumpVoltage = new double[pcPoolInit.PoolBumpVoltageNumber] { pcPoolInit.cPumbVoltage[0].vRead_Pumb_Data()} ;
//// public bool[] bBumpStatus = new bool[pcPoolInit.PoolBumpOperatNumber];
//// public bool[] bpcBumpHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber];
//// public void vOpen_Bump(ushort usPumbNumber)
//// {
//// try
//// {
//// pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus = pcPoolInit.cPumbOperat[usPumbNumber].bOpenStatus;
//// pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
//// this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
//// this.bpcBumpHasOpen[usPumbNumber] = true;
//// }
//// catch (Exception exception)
//// {
//// Form1.totxt.Log(exception + "Bump Open Operation Error");
//// throw;
//// }
//// }
//// public void vClose_Bump(ushort usPumbNumber)
//// {
//// try
//// {
//// for (short i = 0; i < pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus.Length; i++)
//// {
//// pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i] = !pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i];
//// this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
//// this.bpcBumpHasOpen[usPumbNumber] = false;
//// }
//// pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
//// }
//// catch (Exception exception)
//// {
//// Form1.totxt.Log(exception + "Bump Close Operation Error");
//// throw;
//// }
//// }
//// public bool[] vGet_Pumb_Status(ushort usPumbNumber)
//// {
//// try
//// {
//// return pcPoolInit.cPumbOperat[usPumbNumber].vGet_Module_Channel_Status();
//// }
//// catch (Exception exception)
//// {
//// Form1.totxt.Log(exception + "Bump Read Status Error");
//// throw;
//// }
//// }
//// }
//// public class pcAgitator
//// {
//// private double[] dAgitatorCurrent = new double[pcPoolInit.PoolAgitatorCurrentNumber] { pcPoolInit.cAgitatorCurrent[0].vRead_Agitator_Data() };
//// public double[] dAgitatorVoltage = new double[pcPoolInit.PoolAgitatorVoltageNumber] { pcPoolInit.cAgitatorVoltage[0].vRead_Agitator_Data() };
//// public bool[] bAgitatorStatus = new bool[pcPoolInit.PoolBumpOperatNumber];
//// public bool[] bAgitatorHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber];
//// public void vOpen_Agitator(ushort usAgitatorNumber)
//// {
//// try
//// {
//// pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bOpenStatus;
//// pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
//// this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
//// this.bAgitatorHasOpen[usAgitatorNumber] = true;
//// }
//// catch (Exception exception)
//// {
//// Form1.totxt.Log(exception + "Agitator Open Operation Error");
//// throw;
//// }
//// }
//// public void vClose_Agitator(ushort usAgitatorNumber)
//// {
//// try
//// {
//// for (short i = 0; i < pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus.Length; i++)
//// {
//// pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i] = !pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i];
//// this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
//// this.bAgitatorHasOpen[usAgitatorNumber] = false;
//// }
//// pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
//// }
//// catch(Exception exception)
//// {
//// Form1.totxt.Log(exception + "Agitator Close Operation Error");
//// throw;
//// }
//// }
//// public bool[] vGet_Agitator_Status(ushort usAgitatorNumber)
//// {
//// try
//// {
//// return pcPoolInit.cAgitatorOperat[usAgitatorNumber].vGet_Module_Channel_Status();
//// }
//// catch (Exception exception)
//// {
//// Form1.totxt.Log(exception + "Agitator Read Status Error");
//// throw;
//// }
//// }
//// }
//// public class pcPool
//// {
//// public string ePondName;
//// public double dMaxlevel;//液位最低水位
//// public double dMinlevel;//液位最高水位
//<<<<<<< HEAD
// public void vOpen_Bump(ushort usPumbNumber)
// {
// try
// {
// pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus = pcPoolInit.cPumbOperat[usPumbNumber].bOpenStatus;
// pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
// this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
// this.bpcBumpHasOpen[usPumbNumber] = true;
// }
// catch (Exception exception)
// {
// Form1.totxt.Log(exception+"Bump Open Operation Error");
// throw;
// }
// }
// public void vClose_Bump(ushort usPumbNumber)
// {
// try
// {
// for (short i = 0; i < pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus.Length; i++)
// {
// pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i] = !pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i];
// this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
// this.bpcBumpHasOpen[usPumbNumber] = false;
// }
// pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
// }
// catch (Exception exception)
// {
// Form1.totxt.Log(exception+"Bump Close Operation Error");
// throw;
// }
// }
// public bool[] vGet_Pumb_Status(ushort usPumbNumber)
// {
// try
// {
// return pcPoolInit.cPumbOperat[usPumbNumber].vGet_Module_Channel_Status();
// }
// catch (Exception exception)
// {
// Form1.totxt.Log(exception+"Bump Read Status Error");
// throw;
// }
// }
// }
// public class pcAgitator
// {
// private double[] dAgitatorCurrent = new double[pcPoolInit.PoolAgitatorCurrentNumber] { pcPoolInit.cAgitatorCurrent[0].vRead_Agitator_Data() };
// public double[] dAgitatorVoltage = new double[pcPoolInit.PoolAgitatorVoltageNumber] { pcPoolInit.cAgitatorVoltage[0].vRead_Agitator_Data() };
// public bool[] bAgitatorStatus = new bool[pcPoolInit.PoolBumpOperatNumber];
// public bool[] bAgitatorHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber];
// public void vOpen_Bump(ushort usAgitatorNumber)
// {
// try
// {
// pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bOpenStatus;
// pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
// this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
// this.bAgitatorHasOpen[usAgitatorNumber] = true;
// }
// catch (Exception exception)
// {
// Form1.totxt.Log(exception +"Agitator Open Operation Error");
// throw;
// }
// }
// public void vClose_Bump(ushort usAgitatorNumber)
// {
// try
// {
// for (short i = 0; i < pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus.Length; i++)
// {
// pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i] = !pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i];
// this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
// this.bAgitatorHasOpen[usAgitatorNumber] = false;
// }
// pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
// }
// catch(Exception exception)
// {
// Form1.totxt.Log(exception+"Agitator Close Operation Error");
// throw;
// }
// }
// public bool[] vGet_Pumb_Status(ushort usAgitatorNumber)
// {
// try
// {
// return pcPoolInit.cAgitatorOperat[usAgitatorNumber].vGet_Module_Channel_Status();
// }
// catch (Exception exception)
// {
// Form1.totxt.Log(exception+"Agitator Read Status Error");
// throw;
// }
// }
// }
// public class pcPool
// {
// public string ePondName;
// public double dMaxlevel;//液位最低水位
// public double dMinlevel;//液位最高水位
// public double dMaxTemper;
// public double dMinTemper;
// public pcPump cPump;
// public pcAgitator cAgitator;
// public double dPondCurrentLevel { get => pcPoolInit.Get_Current_Level(); }
// public double dPondCurentTemper { get => pcPoolInit.Get_Current_temper(); }
// public pcPool(string eInitPondName)
// {
// this.ePondName = eInitPondName;
// }
// }
//}
//=======
//// public double dMaxTemper;
//// public double dMinTemper;
//// public pcBump cBump;
//// public pcAgitator cAgitator;
//// public double dPondCurrentLevel { get => pcPoolInit.Get_Current_Level(); }
//// public double dPondCurentTemper { get => pcPoolInit.Get_Current_temper(); }
//// public pcPool(string eInitPondName)
//// {
//// this.ePondName = eInitPondName;
//// }
//// }
////}
//>>>>>>> origin/master
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ModbusDemo.application
{
}
...@@ -140,6 +140,8 @@ namespace ModbusDemo ...@@ -140,6 +140,8 @@ namespace ModbusDemo
//定义一个委托变量 //定义一个委托变量
public UpdateTxt updateTxt; public UpdateTxt updateTxt;
private Thread ModbusControlThread; private Thread ModbusControlThread;
private Thread MqttReceiveThread;
public List<string> ListHandle = new List<string>();
private async Task Publish() private async Task Publish()
{ {
var message = new MqttApplicationMessageBuilder() var message = new MqttApplicationMessageBuilder()
...@@ -153,7 +155,7 @@ namespace ModbusDemo ...@@ -153,7 +155,7 @@ namespace ModbusDemo
await mqttClient.PublishAsync(message); await mqttClient.PublishAsync(message);
} }
} }
private async Task vControlResponseBack() private void vControlResponseBack()
{ {
var message = new MqttApplicationMessageBuilder() var message = new MqttApplicationMessageBuilder()
.WithTopic(mqttBackTopic) .WithTopic(mqttBackTopic)
...@@ -161,7 +163,12 @@ namespace ModbusDemo ...@@ -161,7 +163,12 @@ namespace ModbusDemo
.WithAtLeastOnceQoS() .WithAtLeastOnceQoS()
.WithRetainFlag(false) .WithRetainFlag(false)
.Build(); .Build();
<<<<<<< HEAD
mqttClient.PublishAsync(message);
totxt.Log("我在247,执行了Back");
=======
await mqttClient.PublishAsync(message); await mqttClient.PublishAsync(message);
>>>>>>> refs/remotes/origin/master
} }
private async Task vCfgResponseBack(string data) private async Task vCfgResponseBack(string data)
...@@ -202,6 +209,7 @@ namespace ModbusDemo ...@@ -202,6 +209,7 @@ namespace ModbusDemo
txtReceiveMessage.AppendText($"已订阅[{mqttCfgTopic}]主题{Environment.NewLine}"); txtReceiveMessage.AppendText($"已订阅[{mqttCfgTopic}]主题{Environment.NewLine}");
}))); })));
} }
//private async Task ConnectMqttServerAsync()
private async Task ConnectMqttServerAsync() private async Task ConnectMqttServerAsync()
{ {
// Create a new MQTT client. // Create a new MQTT client.
...@@ -326,12 +334,11 @@ namespace ModbusDemo ...@@ -326,12 +334,11 @@ namespace ModbusDemo
//收到的消息啦 //收到的消息啦
txtReceiveMessage.AppendText($">> {"### RECEIVED APPLICATION MESSAGE ###"}{Environment.NewLine}"); txtReceiveMessage.AppendText($">> {"### RECEIVED APPLICATION MESSAGE ###"}{Environment.NewLine}");
totxt.Log($">> {"### RECEIVED APPLICATION MESSAGE ###"}{Environment.NewLine}"); totxt.Log($">> {"### RECEIVED APPLICATION MESSAGE ###"}{Environment.NewLine}");
})));
Invoke((new Action(() =>
{
//我的订阅主题是。。。。。
txtReceiveMessage.AppendText($">> Topic = {e.ApplicationMessage.Topic}{Environment.NewLine}"); txtReceiveMessage.AppendText($">> Topic = {e.ApplicationMessage.Topic}{Environment.NewLine}");
totxt.Log($">> Topic = {e.ApplicationMessage.Topic}{Environment.NewLine}"); totxt.Log($">> Topic = {e.ApplicationMessage.Topic}{Environment.NewLine}");
txtReceiveMessage.AppendText($">> QoS = {e.ApplicationMessage.QualityOfServiceLevel}{Environment.NewLine}");
txtReceiveMessage.AppendText($">> Retain = {e.ApplicationMessage.Retain}{Environment.NewLine}");
}))); })));
Invoke((new Action(async () => Invoke((new Action(async () =>
{ {
...@@ -343,8 +350,7 @@ namespace ModbusDemo ...@@ -343,8 +350,7 @@ namespace ModbusDemo
Console.WriteLine(stConvertString); Console.WriteLine(stConvertString);
if (e.ApplicationMessage.Topic == mqttSubscribeControlTopic) if (e.ApplicationMessage.Topic == mqttSubscribeControlTopic)
{ {
ModualControl.vGetaWay_Receive_Control(stConvertString, out mqttData_Back); ListHandle.Add(stConvertString);
await vControlResponseBack();
} }
else if (e.ApplicationMessage.Topic == mqttCfgTopic) else if (e.ApplicationMessage.Topic == mqttCfgTopic)
{ {
...@@ -352,24 +358,129 @@ namespace ModbusDemo ...@@ -352,24 +358,129 @@ namespace ModbusDemo
await vCfgResponseBack(mqttData_Back); await vCfgResponseBack(mqttData_Back);
} }
}))); })));
Invoke((new Action(() => }
{
txtReceiveMessage.AppendText($">> QoS = {e.ApplicationMessage.QualityOfServiceLevel}{Environment.NewLine}"); private void vMqtt_Receive_Handle()
//totxt.Log($">> QoS = {e.ApplicationMessage.QualityOfServiceLevel}{Environment.NewLine}"); {
}))); while (true)
Invoke((new Action(() =>
{ {
txtReceiveMessage.AppendText($">> Retain = {e.ApplicationMessage.Retain}{Environment.NewLine}"); for (int i = 0; i < ListHandle.Count; i++)
//totxt.Log($">> Retain = {e.ApplicationMessage.Retain}{Environment.NewLine}"); {
}))); ModualControl.vGetaWay_Receive_Control(ListHandle[i], out mqttData_Back);
mqttData = null; vControlResponseBack();
ListHandle.Remove(ListHandle[i]);
}
Thread.Sleep(100);
}
} }
#endregion #endregion
#region modbus线程 #region modbus线程
private static bool bSetDataIsRunning = false; private static bool bSetDataIsRunning = false;
<<<<<<< HEAD
private Thread ModbusPollThread;
private void T_AutoControl()
{
AutoControl.Control usEcontrol = new AutoControl.Control();
AutoControl.Control usEcontrolB = new AutoControl.Control();
AutoControl.Control usWcontrol = new AutoControl.Control();
AutoControl.Control usWcontrolB = new AutoControl.Control();
while (true)
{
FileInfo file = new FileInfo(InIHelper.FileName);
if (ModualControl.cPoolLevelConfig.Count != 0)
{
for (int i = 0; i < ModualControl.cPoolLevelConfig.Count; i++)
{
for (int j = 0; j < ModualPoll.byX18xNumber; j++)
{
if (ModualPoll.cx18x.byModbusID[j] == LevelmodbusID[0])
{
usWcontrol.realTimeLevel =
ModualPoll.cx18x.sX18xDataStruct[j].dNowConvertData[0];
usWcontrol.modularx = j;
usWcontrol.modbusID = LevelmodbusID[0];
}
if (ModualPoll.cx18x.byModbusID[j] == LevelmodbusID[1])
{
usEcontrol.realTimeLevel =
ModualPoll.cx18x.sX18xDataStruct[j].dNowConvertData[0];
usEcontrol.modularx = j;
usEcontrol.modbusID = LevelmodbusID[1];
}
}
if (ModualControl.cPoolLevelConfig[i].byModbusID == LevelmodbusID[0])
{
usWcontrol.maxLevel = ModualControl.cPoolLevelConfig[i].dUpLevel;
usWcontrol.minLevel = ModualControl.cPoolLevelConfig[i].dDownLevel;
usWcontrol.Name = "西·中转池";
usWcontrol.Enablation = true;
InIHelper.WriteConfig("Channel number", "西液位通道", usWcontrol.modularx.ToString());
AutoControl.CriticalValueMonitoring(ref usWcontrol,
true,
"西·中转池",
out usWcontrolB
);
ModualControl.cPoolLevelConfig.Remove(ModualControl.cPoolLevelConfig[i]);
}
if (ModualControl.cPoolLevelConfig[i].byModbusID == LevelmodbusID[1])
{
usEcontrol.maxLevel = ModualControl.cPoolLevelConfig[i].dUpLevel;
usEcontrol.minLevel = ModualControl.cPoolLevelConfig[i].dDownLevel;
usEcontrol.Name = "东·中转池";
usEcontrol.Enablation = true;
InIHelper.WriteConfig("Channel number", "东液位通道", usEcontrol.modularx.ToString());
AutoControl.CriticalValueMonitoring(
ref usEcontrol,
true,
"东·中转池",
out usEcontrolB
);
ModualControl.cPoolLevelConfig.Remove(ModualControl.cPoolLevelConfig[i]);
}
}
AutoControl.Automatic_control(usWcontrolB.status, usEcontrolB.status);
}
else if (file.Length != 0)
{
usEcontrol.modularx = InIHelper.ReadConfig<int>("Channel number", "东液位通道");
usWcontrol.modularx = InIHelper.ReadConfig<int>("Channel number", "西液位通道");
usWcontrol.maxLevel = InIHelper.ReadConfig<float>("MaxLevel", "西·中转池");
usWcontrol.minLevel = InIHelper.ReadConfig<float>("MinLevel", "西·中转池");
usEcontrol.maxLevel = InIHelper.ReadConfig<float>("MaxLevel", "东·中转池");
usEcontrol.minLevel = InIHelper.ReadConfig<float>("MinLevel", "东·中转池");
usEcontrol.realTimeLevel =
ModualPoll.cx18x.sX18xDataStruct[usEcontrol.modularx].dNowConvertData[0];
usWcontrol.realTimeLevel =
ModualPoll.cx18x.sX18xDataStruct[usWcontrol.modularx].dNowConvertData[0];
AutoControl.CriticalValueMonitoring(
ref usEcontrol,
true,
"东·中转池",
out usEcontrolB
);
AutoControl.CriticalValueMonitoring(
ref usWcontrol,
true,
"西·中转池",
out usWcontrolB
);
AutoControl.Automatic_control(usWcontrolB.status, usEcontrolB.status);
}
else
{
usWcontrol.status = false;
usEcontrol.status = false;
AutoControl.Automatic_control(usWcontrol.status, usEcontrol.status);
totxt.Log("Self - control has not started");
}
}
}
=======
private Thread ModbusPollThread; private Thread ModbusPollThread;
>>>>>>> refs/remotes/origin/master
private void vModbusPoll() private void vModbusPoll()
{ {
while (true) while (true)
...@@ -984,8 +1095,12 @@ namespace ModbusDemo ...@@ -984,8 +1095,12 @@ namespace ModbusDemo
{ {
} }
<<<<<<< HEAD
private async void SubscribeBut_Click(object sender, EventArgs e)
=======
private void SubscribeBut_Click(object sender, EventArgs e) private void SubscribeBut_Click(object sender, EventArgs e)
>>>>>>> refs/remotes/origin/master
{ {
} }
...@@ -1039,14 +1154,24 @@ namespace ModbusDemo ...@@ -1039,14 +1154,24 @@ namespace ModbusDemo
SetMqtt(); SetMqtt();
MQTT_thread = new MethodInvoker(Sendout); MQTT_thread = new MethodInvoker(Sendout);
MQTT_thread.BeginInvoke(null, null); MQTT_thread.BeginInvoke(null, null);
<<<<<<< HEAD
Task.Run(async () => {await ConnectMqttServerAsync(); });
=======
await Task.Run(async () => { await ConnectMqttServerAsync(); }); await Task.Run(async () => { await ConnectMqttServerAsync(); });
>>>>>>> refs/remotes/origin/master
ModbusComm.Modbus = ModbusSerialMaster.CreateRtu(comPort); ModbusComm.Modbus = ModbusSerialMaster.CreateRtu(comPort);
ModbusComm.Modbus.Transport.Retries = 0; ModbusComm.Modbus.Transport.Retries = 0;
ModbusComm.Modbus.Transport.ReadTimeout = 1000; ModbusComm.Modbus.Transport.ReadTimeout = 1000;
ModbusComm.Modbus.Transport.WriteTimeout = 1000; ModbusComm.Modbus.Transport.WriteTimeout = 1000;
ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0; ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0;
<<<<<<< HEAD
//t_AutoControl = new Thread(T_AutoControl);
//t_AutoControl.IsBackground = true;
//t_AutoControl.Start();
=======
>>>>>>> refs/remotes/origin/master
modbus_Timer.Enabled = true; modbus_Timer.Enabled = true;
btOpenCOM.Enabled = false; btOpenCOM.Enabled = false;
btCloseCOM.Enabled = true; btCloseCOM.Enabled = true;
...@@ -1055,9 +1180,18 @@ namespace ModbusDemo ...@@ -1055,9 +1180,18 @@ namespace ModbusDemo
bCretaThead = true; bCretaThead = true;
ModbusPollThread = new Thread(vModbusPoll); ModbusPollThread = new Thread(vModbusPoll);
ModbusPollThread.Start(); ModbusPollThread.Start();
ModbusPollThread.Priority = ThreadPriority.Normal;
ModbusControlThread = new Thread(ModualControl.vControl_Poll); ModbusControlThread = new Thread(ModualControl.vControl_Poll);
ModbusControlThread.Start(); ModbusControlThread.Start();
ModbusControlThread.Priority = ThreadPriority.BelowNormal;
MqttReceiveThread = new Thread(vMqtt_Receive_Handle);
MqttReceiveThread.Start();
MqttReceiveThread.Priority = ThreadPriority.AboveNormal;
Task task1 = Task.Factory.StartNew(async() => {await ModualControl.vControl_Res_Poll();});
} }
else else
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment