Commit 5e2f988a authored by leon.huang's avatar leon.huang

add data in time updata

parent a6ed3828
...@@ -138,7 +138,6 @@ namespace ModbusDemo.MessageFormat ...@@ -138,7 +138,6 @@ namespace ModbusDemo.MessageFormat
#endif #endif
public static void vGetaWay_Receive_Control(string sDataString, out string stResponseData) public static void vGetaWay_Receive_Control(string sDataString, out string stResponseData)
{ {
List<string> strOperation = new List<string>();
MqttRoot cControl = new MqttRoot(); MqttRoot cControl = new MqttRoot();
var jsonObj = new JObject(); var jsonObj = new JObject();
try try
...@@ -154,6 +153,7 @@ namespace ModbusDemo.MessageFormat ...@@ -154,6 +153,7 @@ namespace ModbusDemo.MessageFormat
{ {
for (int m = 0; m < cControl.ss[i].op.Count(); m++) for (int m = 0; m < cControl.ss[i].op.Count(); m++)
{ {
List<string> strOperation = new List<string>();
bool[] bOperationStatus = new bool[8] { false, false, false, false, false, false, false, false }; bool[] bOperationStatus = new bool[8] { false, false, false, false, false, false, false, false };
ModualCntrol cModualCntrol = new ModualCntrol ModualCntrol cModualCntrol = new ModualCntrol
{ {
...@@ -207,6 +207,7 @@ namespace ModbusDemo.MessageFormat ...@@ -207,6 +207,7 @@ namespace ModbusDemo.MessageFormat
bOperationStatus[j] = false; bOperationStatus[j] = false;
} }
} }
//Form1.vSuspend_Poll_Control(false); //Form1.vSuspend_Poll_Control(false);
} }
if (cModualCntrol.bControlStatus == true && cModualCntrol.strOperationChannelName.Count() <= 1) if (cModualCntrol.bControlStatus == true && cModualCntrol.strOperationChannelName.Count() <= 1)
...@@ -290,7 +291,6 @@ namespace ModbusDemo.MessageFormat ...@@ -290,7 +291,6 @@ namespace ModbusDemo.MessageFormat
} }
Thread.Sleep(100); Thread.Sleep(100);
} }
} }
public static Task vControl_Res_Poll() public static Task vControl_Res_Poll()
{ {
...@@ -298,6 +298,9 @@ namespace ModbusDemo.MessageFormat ...@@ -298,6 +298,9 @@ namespace ModbusDemo.MessageFormat
{ {
pcConfig.WriteConfig("匀浆池配置", "报警最高液位", "8"); pcConfig.WriteConfig("匀浆池配置", "报警最高液位", "8");
pcConfig.WriteConfig("匀浆池配置", "报警最低液位", "1"); pcConfig.WriteConfig("匀浆池配置", "报警最低液位", "1");
AllPond.cEastTransitPool.vSetMaxLevel = pcConfig.ReadConfig<double>("匀浆池配置","报警最高液位");
AllPond.cEastTransitPool.vSetMinLevel = pcConfig.ReadConfig<double>("匀浆池配置","报警最低液位");
} }
else else
{ {
...@@ -581,6 +584,7 @@ namespace ModbusDemo.MessageFormat ...@@ -581,6 +584,7 @@ namespace ModbusDemo.MessageFormat
ModualAlarm.vSet_Modual_Alarm(sbModbusID,(ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, str); ModualAlarm.vSet_Modual_Alarm(sbModbusID,(ushort)ModualAlarm.eAlarmCode.ChannelControlError, true, 1, str);
} }
} }
ModualPoll.vSend_Actual_Data(sbModbusID);
return bControlStatus; return bControlStatus;
} }
public static void vDelete_Same_Control(ModualCntrol cModualCntrol) public static void vDelete_Same_Control(ModualCntrol cModualCntrol)
...@@ -613,9 +617,9 @@ namespace ModbusDemo.MessageFormat ...@@ -613,9 +617,9 @@ namespace ModbusDemo.MessageFormat
dDownLevel = double.Parse(cCfgRoot.ss[i].cfg.down) dDownLevel = double.Parse(cCfgRoot.ss[i].cfg.down)
}; };
vSet_Pool_Alarm_Level(cLiquidLevelConfig.byModbusID,cLiquidLevelConfig.dUpLevel,cLiquidLevelConfig.dDownLevel); vSet_Pool_Alarm_Level(cLiquidLevelConfig.byModbusID,cLiquidLevelConfig.dUpLevel,cLiquidLevelConfig.dDownLevel);
string strChannelString = "d" + i.ToString();
for (int j = 0; j < 8; j++) for (int j = 0; j < 8; j++)
{ {
string strChannelString = "d" + j.ToString();
if (jsonObj["ss"][i]["cfg"].Value<string>("name") == strChannelString) if (jsonObj["ss"][i]["cfg"].Value<string>("name") == strChannelString)
{ {
cLiquidLevelConfig.stChannelNumber = strChannelString; cLiquidLevelConfig.stChannelNumber = strChannelString;
...@@ -649,7 +653,7 @@ namespace ModbusDemo.MessageFormat ...@@ -649,7 +653,7 @@ namespace ModbusDemo.MessageFormat
AllPond.cEastTransitPool.vSetMaxLevel = dMaxLevel; AllPond.cEastTransitPool.vSetMaxLevel = dMaxLevel;
AllPond.cEastTransitPool.vSetMinLevel = dMinLevel; AllPond.cEastTransitPool.vSetMinLevel = dMinLevel;
pcConfig.WriteConfig("匀浆池配置", "报警最高液位", AllPond.cEastTransitPool.vSetMaxLevel.ToString()); pcConfig.WriteConfig("匀浆池配置", "报警最高液位", AllPond.cEastTransitPool.vSetMaxLevel.ToString());
pcConfig.WriteConfig("匀浆池配置", "报警最低液位", AllPond.cEastTransitPool.vSetMaxLevel.ToString()); pcConfig.WriteConfig("匀浆池配置", "报警最低液位", AllPond.cEastTransitPool.vSetMinLevel.ToString());
} }
} }
......
...@@ -442,7 +442,66 @@ namespace ModbusDemo.Modular ...@@ -442,7 +442,66 @@ namespace ModbusDemo.Modular
await ModualAlarm.vPublishAlarmPackageJson(mqttClient); await ModualAlarm.vPublishAlarmPackageJson(mqttClient);
} }
} }
public static void vSend_Actual_Data(byte byModbusID)
{
string strRes = null;
for (int i = 0; i < ModualPoll.byX18xNumber; i++)
{
if (byModbusID == ModualPoll.cx18x.byModbusID[i])
{
double[] dGetData;
bGet_channel_Value<double> (byModbusID, out dGetData, "d0","d1","d2","d3","d4","d5","d6","d7");
string stIdString = byModbusID.ToString();
WTDR18X OneNodeJsonPackage = new WTDR18X(stIdString, cx18x.sX18xDataStruct[i].dNowConvertData[0], cx18x.sX18xDataStruct[i].dNowConvertData[1], cx18x.sX18xDataStruct[i].dNowConvertData[2], cx18x.sX18xDataStruct[i].dNowConvertData[3], cx18x.sX18xDataStruct[i].dNowConvertData[4], cx18x.sX18xDataStruct[i].dNowConvertData[5], cx18x.sX18xDataStruct[i].dNowConvertData[6], cx18x.sX18xDataStruct[i].dNowConvertData[7], Form1.GetTimeStamp());
strRes = JsonConvert.SerializeObject(OneNodeJsonPackage);
break;
}
}
for (int i = 0; i < ModualPoll.byX14pNumber; i++)
{
if (byModbusID == ModualPoll.cx14P.byModbusID[i])
{
string stIdString = byModbusID.ToString();
double[] dGetData;
bGet_channel_Value<double> (byModbusID, out dGetData, "d0","d1","d2","d3","d4");
WTDR14P OneNodeJsonPackage = new WTDR14P(stIdString, cx14P.sX14pDataStruct[i].dNowConvertData[0], cx14P.sX14pDataStruct[i].dNowConvertData[1], cx14P.sX14pDataStruct[i].dNowConvertData[2], cx14P.sX14pDataStruct[i].dNowConvertData[3], Form1.GetTimeStamp());
strRes = JsonConvert.SerializeObject(OneNodeJsonPackage);
break;
}
}
for (int i = 0; i < ModualPoll.byX78cNumber; i++)
{
if (byModbusID == ModualPoll.cx78c.byModbusID[i])
{
string stIdString = byModbusID.ToString();
bool[] dGetData;
bGet_channel_Value<bool> (byModbusID, out dGetData, "d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","d10","d11","d12","d13","d14","d15");
_478C cBoolConvertInt = new _478C();
int[] InputConvert, OutPutConver;
InputConvert = cBoolConvertInt.IO(cx78c.sX78cRegStatusStruct[i].bInputRegStatus);
OutPutConver = cBoolConvertInt.IO(cx78c.sX78cRegStatusStruct[i].bOutPutRegStatus);
WTDR78C OneNodeJsonPackage = new WTDR78C(stIdString, InputConvert[0], InputConvert[1], InputConvert[2], InputConvert[3], InputConvert[4], InputConvert[5], InputConvert[6], InputConvert[7], OutPutConver[0], OutPutConver[1], OutPutConver[2], OutPutConver[3], OutPutConver[4], OutPutConver[5], OutPutConver[6], OutPutConver[7], Form1.GetTimeStamp());
strRes = JsonConvert.SerializeObject(OneNodeJsonPackage);
break;
}
}
for (int i = 0; i < ModualPoll.byX66cNumber; i++)
{
if (byModbusID == ModualPoll.cx66c.byModbusID[i])
{
string stIdString = byModbusID.ToString();
bool[] dGetData;
bGet_channel_Value<bool> (byModbusID, out dGetData, "d0","d1","d2","d3","d4","d5");
_478C cBoolConvertInt = new _478C();
int[] sRelayConvert;
sRelayConvert = cBoolConvertInt.IO(cx66c.sX66cRegStatusStruct[i].bRegRelayStatus);
WTDR66C OneNodeJsonPackage = new WTDR66C(stIdString, sRelayConvert[0], sRelayConvert[1], sRelayConvert[2], sRelayConvert[3], sRelayConvert[4], sRelayConvert[5], Form1.GetTimeStamp());
strRes = JsonConvert.SerializeObject(OneNodeJsonPackage);
break;
}
}
Form1.vControlResponseBack(Form1.mqttTopic,strRes);
}
public static bool bGet_channel_Value<T> (byte byModbusID, out T[] ChannnelData, params string[] strChannelList) public static bool bGet_channel_Value<T> (byte byModbusID, out T[] ChannnelData, params string[] strChannelList)
{ {
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR; ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
...@@ -485,26 +544,27 @@ namespace ModbusDemo.Modular ...@@ -485,26 +544,27 @@ namespace ModbusDemo.Modular
switch (cx18x.beChannelType[i, k]) switch (cx18x.beChannelType[i, k])
{ {
case modual.eX18xSensorChannelType.Weiertai: case modual.eX18xSensorChannelType.Weiertai:
arrayList.Add((T)Convert.ChangeType(8 - ((double.Parse(strCalculData[k]) - 4) / 16 * 8), typeof(T))); cx18x.sX18xDataStruct[i].dNowConvertData[k] = 8 - ((double.Parse(strCalculData[k]) - 4) / 16 * 8);
break; break;
case modual.eX18xSensorChannelType.Mike_5: case modual.eX18xSensorChannelType.Mike_5:
arrayList.Add((T)Convert.ChangeType(5 - ((double.Parse(strCalculData[k]) - 4) / 16 * 5), typeof(T))); cx18x.sX18xDataStruct[i].dNowConvertData[k] = 5 - ((double.Parse(strCalculData[k]) - 4) / 16 * 5);
break; break;
case modual.eX18xSensorChannelType.Mike_6: case modual.eX18xSensorChannelType.Mike_6:
arrayList.Add((T)Convert.ChangeType(6 - ((double.Parse(strCalculData[k]) - 4) / 16 * 6), typeof(T))); cx18x.sX18xDataStruct[i].dNowConvertData[k] = 6 - ((double.Parse(strCalculData[k]) - 6) / 16 * 6);
break; break;
case modual.eX18xSensorChannelType.Mike_7: case modual.eX18xSensorChannelType.Mike_7:
arrayList.Add((T)Convert.ChangeType(7 - ((double.Parse(strCalculData[k]) - 4) / 16 * 7), typeof(T))); cx18x.sX18xDataStruct[i].dNowConvertData[k] = 7 - ((double.Parse(strCalculData[k]) - 4) / 16 * 7);
break; break;
case modual.eX18xSensorChannelType.NormalCurrent: case modual.eX18xSensorChannelType.NormalCurrent:
arrayList.Add((T)Convert.ChangeType(double.Parse(strCalculData[k]), typeof(T))); cx18x.sX18xDataStruct[i].dNowConvertData[k] = double.Parse(strCalculData[k]);
break; break;
case modual.eX18xSensorChannelType.Null: case modual.eX18xSensorChannelType.Null:
arrayList.Add((T)Convert.ChangeType(0, typeof(T))); cx18x.sX18xDataStruct[i].dNowConvertData[k] = 0;
break; break;
default: default:
break; break;
} }
arrayList.Add((T)Convert.ChangeType(cx18x.sX18xDataStruct[i].dNowConvertData[k], typeof(T)));
} }
} }
...@@ -536,14 +596,16 @@ namespace ModbusDemo.Modular ...@@ -536,14 +596,16 @@ namespace ModbusDemo.Modular
bGetStatus = false; bGetStatus = false;
} }
strCalculData = c14formulasormual.RtdValue(usRegValue, usRegType); strCalculData = c14formulasormual.RtdValue(usRegValue, usRegType);
for (int j = 0; j < strChannelList.Count(); j++) for (int j = 0; j < strChannelList.Count(); j++)
{ {
for (int k = 0; k < byX14pReadTypeNumber; k++) for (int k = 0; k < byX14pReadTypeNumber; k++)
{ {
ModualPoll.cx14P.sX14pDataStruct[i].dNowConvertData[k] = double.Parse(strCalculData[k]);
string str = "d" + k.ToString(); string str = "d" + k.ToString();
if (str == strChannelList[j]) if (str == strChannelList[j])
{ {
arrayList.Add((T)Convert.ChangeType(strCalculData, typeof(T))); arrayList.Add((T)Convert.ChangeType(ModualPoll.cx14P.sX14pDataStruct[i].dNowConvertData[k], typeof(T)));
} }
} }
} }
...@@ -573,6 +635,8 @@ namespace ModbusDemo.Modular ...@@ -573,6 +635,8 @@ namespace ModbusDemo.Modular
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7"); ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bGetStatus = false; bGetStatus = false;
} }
ModualPoll.cx78c.sX78cRegStatusStruct[i].bInputRegStatus = bInputData;
ModualPoll.cx78c.sX78cRegStatusStruct[i].bOutPutRegStatus= bOutPutData;
for (int j = 0; j < strChannelList.Count(); j++) for (int j = 0; j < strChannelList.Count(); j++)
{ {
for (int k = 0; k < byX78cInputRegNumber; k++) for (int k = 0; k < byX78cInputRegNumber; k++)
...@@ -580,7 +644,7 @@ namespace ModbusDemo.Modular ...@@ -580,7 +644,7 @@ namespace ModbusDemo.Modular
string str = "d" + k.ToString(); string str = "d" + k.ToString();
if (str == strChannelList[j]) if (str == strChannelList[j])
{ {
arrayList.Add((T)Convert.ChangeType(bInputData[j], typeof(T))); arrayList.Add((T)Convert.ChangeType(bInputData[k], typeof(T)));
} }
} }
for (int k = byX78cInputRegNumber; k < byX78cOutputRegNumber + byX78cInputRegNumber; k++) for (int k = byX78cInputRegNumber; k < byX78cOutputRegNumber + byX78cInputRegNumber; k++)
...@@ -588,7 +652,7 @@ namespace ModbusDemo.Modular ...@@ -588,7 +652,7 @@ namespace ModbusDemo.Modular
string str = "d" + k.ToString(); string str = "d" + k.ToString();
if (str == strChannelList[j]) if (str == strChannelList[j])
{ {
arrayList.Add((T)Convert.ChangeType(bOutPutData[j],typeof(T))); arrayList.Add((T)Convert.ChangeType(bOutPutData[k],typeof(T)));
} }
} }
} }
...@@ -609,6 +673,8 @@ namespace ModbusDemo.Modular ...@@ -609,6 +673,8 @@ namespace ModbusDemo.Modular
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7"); ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bGetStatus = false; bGetStatus = false;
} }
ModualPoll.cx66c.sX66cRegStatusStruct[i].bRegRelayStatus = bRelayValue;
for (int j = 0; j < strChannelList.Count() && j < byX66cRelayRegNumber; j++) for (int j = 0; j < strChannelList.Count() && j < byX66cRelayRegNumber; j++)
{ {
for (int k = 0; k < byX66cRelayRegNumber; k++) for (int k = 0; k < byX66cRelayRegNumber; k++)
...@@ -616,7 +682,7 @@ namespace ModbusDemo.Modular ...@@ -616,7 +682,7 @@ namespace ModbusDemo.Modular
string str = "d" + k.ToString(); string str = "d" + k.ToString();
if (str == strChannelList[j]) if (str == strChannelList[j])
{ {
arrayList.Add((T)Convert.ChangeType(bRelayValue[j],typeof(T))); arrayList.Add((T)Convert.ChangeType(bRelayValue[k],typeof(T)));
} }
} }
} }
......
...@@ -10,143 +10,269 @@ namespace ModbusDemo.application ...@@ -10,143 +10,269 @@ 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, "d2"); 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 = 31, byModbusID = 16,
strOperationNumber = "d1", strOperationNumber = "d0",
strChannelNumber = new string[] { "d1","d2" }, 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 = 0, byResModbusID = 0,
strResChannelNumber = null strResChannelNumber = null
}; };
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 = "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 = 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 = 39,
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 = 0, 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 = 35, byModbusID = 39,
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,true}, bCloseOperation = new bool[] { false, true },
bHadRefControl = false, bHadRefControl = false,
byResModbusID = 0, 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 = 35, byModbusID = 90,
strOperationNumber = "d2", strOperationNumber = "d0",
strChannelNumber = new string[] { "d2","d3" }, strChannelNumber = new string[] { "d0" },
bOpenOperation = new bool[] { true,true}, bOpenOperation = new bool[] { true },
bCloseOperation = new bool[] { false,false}, bCloseOperation = new bool[] { false },
bHadRefControl = false, bHadRefControl = true,
byResModbusID = 0, byResModbusID = 13,
strResChannelNumber = null strResChannelNumber = "d0"
}; };
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 = 39, byModbusID = 90,
strOperationNumber = "d0", strOperationNumber = "d1",
strChannelNumber = new string[] { "d0", "d1" }, strChannelNumber = new string[] { "d1" },
bOpenOperation = new bool[] { true, true }, bOpenOperation = new bool[] { true },
bCloseOperation = new bool[] { false, false }, bCloseOperation = new bool[] { false },
bHadRefControl = true, bHadRefControl = false,
byResModbusID = 13, byResModbusID = 0xFF,
strResChannelNumber = "d0" strResChannelNumber = "d0"
}; };
private static ModualPool.pcMachine cEastTransitPoolStirrer2 = new ModualPool.pcMachine("EastTransitPoolStirrer_2", cEastTransitPoolStirrer2Base); private static ModualPool.pcMachine cEastTransitPoolStirrer2 = new ModualPool.pcMachine("EastTransitPoolStirrer_2", cEastTransitPoolStirrer2Base);
private static ModualPool.pcOperation cEastTransitPoolStirrer3Base = new ModualPool.pcOperation private static ModualPool.pcOperation cEastTransitPoolStirrer3Base = new ModualPool.pcOperation
{ {
byModbusID = 39, byModbusID = 90,
strOperationNumber = "d2", strOperationNumber = "d2",
strChannelNumber = new string[] { "d2", "d3" }, strChannelNumber = new string[] { "d2" },
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 cEastTransitPoolStirrer3 = new ModualPool.pcMachine("EastTransitPoolStirrer_3", cEastTransitPoolStirrer3Base);
private static ModualPool.pcOperation cEastTransitPoolStirrer4Base = new ModualPool.pcOperation private static ModualPool.pcOperation cEastTransitPoolStirrer4Base = new ModualPool.pcOperation
{ {
byModbusID = 16, byModbusID = 90,
strOperationNumber = "d4", strOperationNumber = "d3",
strChannelNumber = new string[] { "d4" }, strChannelNumber = new string[] { "d3" },
bOpenOperation = new bool[] { true }, bOpenOperation = new bool[] { true },
bCloseOperation = new bool[] { false }, bCloseOperation = new bool[] { false },
bHadRefControl = false, bHadRefControl = false,
byResModbusID = 0xFF, byResModbusID = 0xFF,
strResChannelNumber = null strResChannelNumber = null
}; };
private static ModualPool.pcMachine cEastTransitPoolStirrer4 = new ModualPool.pcMachine("EastTransitPoolStirrer_4", cEastTransitPoolStirrer4Base); private static ModualPool.pcMachine cEastTransitPoolStirrer4 = new ModualPool.pcMachine("EastTransitPoolStirrer_4", cEastTransitPoolStirrer4Base);
private static ModualPool.pcButtonOperation cEastTransitPoolButton1Base = new ModualPool.pcButtonOperation 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 }
}; };
private static ModualPool.pcButton cEastTransitPoolButton1 = new ModualPool.pcButton("EastTransitPoolButton1",cEastTransitPoolButton1Base); 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 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
{ {
public static double vSetMaxLevel; public static double vSetMaxLevel;
public static double vSetMinLevel; public static double vSetMinLevel;
public static ModualPool.pcTemperature cTemper { get => cEastTransitPoolTemper; set => cEastTransitPoolTemper = value;} public static ModualPool.pcTemperature cTemper { get => cEastTransitPoolTemper; set => cEastTransitPoolTemper = value; }
public static ModualPool.pcLiquidlevel cLevel { get => cEastTransitPoolLevel; set => cEastTransitPoolLevel = value;} public static ModualPool.pcLiquidlevel cLevel { get => cEastTransitPoolLevel; set => cEastTransitPoolLevel = value; }
public static ModualPool.pcMachine cSouthWater { get => cEastTransitPoolSouthWater; set => cEastTransitPoolSouthWater = value; } public static ModualPool.pcMachine cSouthWater { get => cEastTransitPoolSouthWater; set => cEastTransitPoolSouthWater = value; }
public static ModualPool.pcMachine cNorthWater { get => cEastTransitPoolNorthWater; set => cEastTransitPoolNorthWater = value; } public static ModualPool.pcMachine cNorthWater { get => cEastTransitPoolNorthWater; set => cEastTransitPoolNorthWater = value; }
public static ModualPool.pcMachine cPumb1 {get => cEastTransitPoolPumb1; set => cEastTransitPoolPumb1 = value; } public static ModualPool.pcMachine cPumb1 { get => cEastTransitPoolPumb1; set => cEastTransitPoolPumb1 = value; }
public static ModualPool.pcMachine cPumb2 {get => cEastTransitPoolPumb2; set => cEastTransitPoolPumb2 = value; } public static ModualPool.pcMachine cPumb2 { get => cEastTransitPoolPumb2; set => cEastTransitPoolPumb2 = value; }
public static ModualPool.pcMachine cStirrer1 {get => cEastTransitPoolStirrer1; set => cEastTransitPoolStirrer1 = value; } public static ModualPool.pcMachine cStirrer1 { get => cEastTransitPoolStirrer1; set => cEastTransitPoolStirrer1 = value; }
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; } public static ModualPool.pcButton cButton1 { get => cEastTransitPoolButton1; set => cEastTransitPoolButton1 = value; }
}
private static ModualPool.pcTemperature cWestTransitPoolTemper = new ModualPool.pcTemperature("WestTransitPoolTemper", 27, "d0");
private static ModualPool.pcLiquidlevel cWestTransitPoolLevel = new ModualPool.pcLiquidlevel("WestTransitPoolLevel", 13, "d0");
private static ModualPool.pcOperation cWestTransitPoolSouthWaterBase = new ModualPool.pcOperation
{
byModbusID = 35,
strOperationNumber = "d0",
strChannelNumber = new string[] { "d0", "d1" },
bOpenOperation = new bool[] { true, true },
bCloseOperation = new bool[] { false, false },
bHadRefControl = false,
byResModbusID = 0,
strResChannelNumber = null
};
private static ModualPool.pcMachine cWestTransitPoolSouthWater = new ModualPool.pcMachine("WestTransitPoolSouthWater", cWestTransitPoolSouthWaterBase);
private static ModualPool.pcOperation cWestTransitPoolNorthWaterBase = new ModualPool.pcOperation
{
byModbusID = 35,
strOperationNumber = "d2",
strChannelNumber = new string[] { "d2", "d3" },
bOpenOperation = new bool[] { true, true },
bCloseOperation = new bool[] { false, false },
bHadRefControl = false,
byResModbusID = 0xFF,
strResChannelNumber = null
};
private static ModualPool.pcMachine cWestTransitPoolNorthWater = new ModualPool.pcMachine("WestTransitPoolNorthWater", cWestTransitPoolNorthWaterBase);
private static ModualPool.pcOperation cWestTransitPoolPumb1Base = new ModualPool.pcOperation
{
byModbusID = 31,
strOperationNumber = "d2",
strChannelNumber = new string[] { "d2", "d3" },
bOpenOperation = new bool[] { true, true },
bCloseOperation = new bool[] { false, false },
bHadRefControl = false,
byResModbusID = 0,
strResChannelNumber = null
};
private static ModualPool.pcMachine cWestTransitPoolPumb1 = new ModualPool.pcMachine("WestTransitPoolPumb_1", cWestTransitPoolPumb1Base);
private static ModualPool.pcOperation cWestTransitPoolPumb2Base = new ModualPool.pcOperation
{
byModbusID = 39,
strOperationNumber = "d2",
strChannelNumber = new string[] { "d2", "d3" },
bOpenOperation = new bool[] { true, true },
bCloseOperation = new bool[] { false, true },
bHadRefControl = false,
byResModbusID = 0,
strResChannelNumber = null
};
private static ModualPool.pcMachine cWestTransitPoolPumb2 = new ModualPool.pcMachine("WestTransitPoolPumb_2", cWestTransitPoolPumb2Base);
private static ModualPool.pcOperation cWestTransitPoolStirrer1Base = new ModualPool.pcOperation
{
byModbusID = 31,
strOperationNumber = "d4",
strChannelNumber = new string[] { "d4","d5" },
bOpenOperation = new bool[] { true,true },
bCloseOperation = new bool[] { false,false },
bHadRefControl = false,
byResModbusID = 0xFF,
strResChannelNumber = null
};
private static ModualPool.pcMachine cWestTransitPoolStirrer1 = new ModualPool.pcMachine("WestTransitPoolStirrer_1", cWestTransitPoolStirrer1Base);
private static ModualPool.pcOperation cWestTransitPoolStirrer2Base = new ModualPool.pcOperation
{
byModbusID = 90,
strOperationNumber = "d1",
strChannelNumber = new string[] { "d1" },
bOpenOperation = new bool[] { true },
bCloseOperation = new bool[] { false },
bHadRefControl = false,
byResModbusID = 0xFF,
strResChannelNumber = "d0"
};
private static ModualPool.pcMachine cWestTransitPoolStirrer2 = new ModualPool.pcMachine("WestTransitPoolStirrer_2", cWestTransitPoolStirrer2Base);
private static ModualPool.pcOperation cWestTransitPoolStirrer3Base = new ModualPool.pcOperation
{
byModbusID = 90,
strOperationNumber = "d2",
strChannelNumber = new string[] { "d2" },
bOpenOperation = new bool[] { true },
bCloseOperation = new bool[] { false },
bHadRefControl = false,
byResModbusID = 0xFF,
strResChannelNumber = null
};
private static ModualPool.pcMachine cWestTransitPoolStirrer3 = new ModualPool.pcMachine("WestTransitPoolStirrer_3", cWestTransitPoolStirrer3Base);
private static ModualPool.pcOperation cWestTransitPoolStirrer4Base = new ModualPool.pcOperation
{
byModbusID = 90,
strOperationNumber = "d3",
strChannelNumber = new string[] { "d3" },
bOpenOperation = new bool[] { true },
bCloseOperation = new bool[] { false },
bHadRefControl = false,
byResModbusID = 0xFF,
strResChannelNumber = null
};
private static ModualPool.pcMachine cWestTransitPoolStirrer4 = new ModualPool.pcMachine("WestTransitPoolStirrer_4", cWestTransitPoolStirrer4Base);
public static class pcWestTransitPool
{
public static double vSetMaxLevel;
public static double vSetMinLevel;
public static ModualPool.pcTemperature cTemper { get => cWestTransitPoolTemper; set => cWestTransitPoolTemper = value; }
public static ModualPool.pcLiquidlevel cLevel { get => cWestTransitPoolLevel; set => cWestTransitPoolLevel = value; }
public static ModualPool.pcMachine cSouthWater { get => cWestTransitPoolSouthWater; set => cWestTransitPoolSouthWater = value; }
public static ModualPool.pcMachine cNorthWater { get => cWestTransitPoolNorthWater; set => cWestTransitPoolNorthWater = value; }
public static ModualPool.pcMachine cPumb1 { get => cWestTransitPoolPumb1; set => cWestTransitPoolPumb1 = value; }
public static ModualPool.pcMachine cPumb2 { get => cWestTransitPoolPumb2; set => cWestTransitPoolPumb2 = value; }
public static ModualPool.pcMachine cStirrer1 { get => cWestTransitPoolStirrer1; set => cWestTransitPoolStirrer1 = value; }
public static ModualPool.pcMachine cStirrer2 { get => cWestTransitPoolStirrer2; set => cWestTransitPoolStirrer2 = value; }
public static ModualPool.pcMachine cStirrer3 { get => cWestTransitPoolStirrer3; set => cWestTransitPoolStirrer3 = value; }
public static ModualPool.pcMachine cStirrer4 { get => cWestTransitPoolStirrer4; set => cWestTransitPoolStirrer4 = value; }
} }
} }
} }
...@@ -9,7 +9,8 @@ using ModbusDemo.Modular; ...@@ -9,7 +9,8 @@ using ModbusDemo.Modular;
using ModbusDemo.MessageFormat; using ModbusDemo.MessageFormat;
using ModbusDemo.Common; using ModbusDemo.Common;
using System.IO; using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace ModbusDemo.application namespace ModbusDemo.application
{ {
public class AutoControl public class AutoControl
...@@ -104,7 +105,6 @@ namespace ModbusDemo.application ...@@ -104,7 +105,6 @@ namespace ModbusDemo.application
TimeSpan timespan = ETime.Elapsed; // 获取当前实例测量得出的总时间 TimeSpan timespan = ETime.Elapsed; // 获取当前实例测量得出的总时间
for (int i = 0; i < 1; i++) for (int i = 0; i < 1; i++)
{ {
if (Eenabl == true) if (Eenabl == true)
{ {
if (timerun == false) if (timerun == false)
...@@ -310,9 +310,35 @@ namespace ModbusDemo.application ...@@ -310,9 +310,35 @@ namespace ModbusDemo.application
Control usEcontrolB = new Control(); Control usEcontrolB = new Control();
Control usWcontrol = new Control(); Control usWcontrol = new Control();
Control usWcontrolB = new Control(); Control usWcontrolB = new Control();
FileInfo file = new FileInfo(InIHelper.FileName);
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];
CriticalValueMonitoring(
ref usEcontrol,
true,
"东·中转池",
out usEcontrolB
);
CriticalValueMonitoring(
ref usWcontrol,
true,
"西·中转池",
out usWcontrolB
);
Automatic_control(usWcontrolB.status, usEcontrolB.status);
}
while (true) while (true)
{ {
FileInfo file = new FileInfo(InIHelper.FileName);
if (ModualControl.cPoolLevelConfig.Count != 0) if (ModualControl.cPoolLevelConfig.Count != 0)
{ {
for (int i = 0; i < ModualControl.cPoolLevelConfig.Count; i++) for (int i = 0; i < ModualControl.cPoolLevelConfig.Count; i++)
...@@ -369,38 +395,13 @@ namespace ModbusDemo.application ...@@ -369,38 +395,13 @@ namespace ModbusDemo.application
Automatic_control(usWcontrolB.status, usEcontrolB.status); 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];
CriticalValueMonitoring(
ref usEcontrol,
true,
"东·中转池",
out usEcontrolB
);
CriticalValueMonitoring(
ref usWcontrol,
true,
"西·中转池",
out usWcontrolB
);
Automatic_control(usWcontrolB.status, usEcontrolB.status);
}
else else
{ {
usWcontrol.status = false; usWcontrol.status = false;
usEcontrol.status = false; usEcontrol.status = false;
Automatic_control(usWcontrol.status, usEcontrol.status); Automatic_control(usWcontrol.status, usEcontrol.status);
} }
Thread.Sleep(100);
} }
} }
} }
......
...@@ -37,7 +37,7 @@ namespace ModbusDemo ...@@ -37,7 +37,7 @@ namespace ModbusDemo
System.Timers.Timer MQTTTimer = new System.Timers.Timer(); System.Timers.Timer MQTTTimer = new System.Timers.Timer();
BackgroundWorker m_bgw0 = new BackgroundWorker(); BackgroundWorker m_bgw0 = new BackgroundWorker();
bool m_Isbgw0_CanContinueRun = true; bool m_Isbgw0_CanContinueRun = true;
bool bCretaThead = false; bool bCreatThead = false;
public static ModbusDemo.windows.Totxt totxt = new windows.Totxt(AppDomain.CurrentDomain.BaseDirectory + @"/log/Log.txt"); public static ModbusDemo.windows.Totxt totxt = new windows.Totxt(AppDomain.CurrentDomain.BaseDirectory + @"/log/Log.txt");
public Form1() public Form1()
...@@ -84,12 +84,12 @@ namespace ModbusDemo ...@@ -84,12 +84,12 @@ namespace ModbusDemo
public const string mqttSubscribeControlTopic = "Witium/WTDS78X/" + mqttSn + "/Ctrl"; public const string mqttSubscribeControlTopic = "Witium/WTDS78X/" + mqttSn + "/Ctrl";
public const string mqttBackTopic = "Witium/WTDS78X/" + mqttSn + "/Back"; public const string mqttBackTopic = "Witium/WTDS78X/" + mqttSn + "/Back";
public const string mqttCfgTopic = "Witium/WTDS78X/" + mqttSn + "/Config"; public const string mqttCfgTopic = "Witium/WTDS78X/" + mqttSn + "/Config";
public const string mqttCfgResTopic = "Witium/WTDS78X/" + mqttSn + "/CfgRes"; public const string mqttCfgResTopic = "Witium/WTDS78X/" + mqttSn + "/Back";
public const string mqttTopic = "Witium/WTDS78X/" + mqttSn + "/Data"; public const string mqttTopic = "Witium/WTDS78X/" + mqttSn + "/Data";
public const string sAlarmTopic = "Witium/WTDS78X/" + mqttSn + "/Alarm"; public const string sAlarmTopic = "Witium/WTDS78X/" + mqttSn + "/Alarm";
string mqttData;//数据 string mqttData;//数据
string mqttData_Back;//数据 string mqttData_Back;//数据
private IMqttClient mqttClient = null; private static IMqttClient mqttClient = null;
private bool isReconnect = true; private bool isReconnect = true;
private void SetMqtt() private void SetMqtt()
{ {
...@@ -141,29 +141,30 @@ namespace ModbusDemo ...@@ -141,29 +141,30 @@ namespace ModbusDemo
private Thread ModbusControlThread; private Thread ModbusControlThread;
private Thread MqttReceiveThread; private Thread MqttReceiveThread;
public List<string> ListHandle = new List<string>(); public List<string> ListHandle = new List<string>();
private async Task Publish() private static object SenPackage = new object();
public static async Task Publish(string strTopic ,string strJsonPackage)
{ {
if (mqttClient.IsConnected == true) if (mqttClient.IsConnected == true)
{ {
var message = new MqttApplicationMessageBuilder() var message = new MqttApplicationMessageBuilder()
.WithTopic(mqttTopic) .WithTopic(strTopic)
.WithPayload(mqttData) .WithPayload(strJsonPackage)
.WithAtMostOnceQoS() .WithAtMostOnceQoS()
.WithRetainFlag(false) .WithRetainFlag(false)
.Build(); .Build();
if (mqttData != null) if (strJsonPackage != null)
{ {
await mqttClient.PublishAsync(message); await mqttClient.PublishAsync(message);
} }
} }
} }
private void vControlResponseBack() public static void vControlResponseBack(string strTopic ,string strJsonPackage)
{ {
if (mqttClient.IsConnected == true) if (mqttClient.IsConnected == true)
{ {
var message = new MqttApplicationMessageBuilder() var message = new MqttApplicationMessageBuilder()
.WithTopic(mqttBackTopic) .WithTopic(strTopic)
.WithPayload(mqttData_Back) .WithPayload(strJsonPackage)
.WithAtLeastOnceQoS() .WithAtLeastOnceQoS()
.WithRetainFlag(false) .WithRetainFlag(false)
.Build(); .Build();
...@@ -171,19 +172,6 @@ namespace ModbusDemo ...@@ -171,19 +172,6 @@ namespace ModbusDemo
} }
} }
private async Task vCfgResponseBack(string data)
{
if (mqttClient.IsConnected == true)
{
var message = new MqttApplicationMessageBuilder()
.WithTopic(mqttCfgResTopic)
.WithPayload(data)
.WithAtMostOnceQoS()
.WithRetainFlag(false)
.Build();
await mqttClient.PublishAsync(message);
}
}
private async Task Subscribe() private async Task Subscribe()
{ {
if (!mqttClient.IsConnected) if (!mqttClient.IsConnected)
...@@ -263,12 +251,9 @@ namespace ModbusDemo ...@@ -263,12 +251,9 @@ namespace ModbusDemo
} }
private void MqttClient_Connected(object sender, EventArgs e) private void MqttClient_Connected(object sender, EventArgs e)
{ {
Invoke((new Action(() => Invoke( (new Action(async() =>
{ {
//txtReceiveMessage.Clear(); txtReceiveMessage.AppendText("已连接到MQTT服务器!" + Environment.NewLine);
txtReceiveMessage.AppendText("已连接到MQTT服务器!" + Environment.NewLine);
//totxt.Log("已连接到MQTT服务器!" + Environment.NewLine);
//Console.WriteLine("已连接到MQTT服务器!" + Environment.NewLine);
}))); })));
} }
private void MqttClient_Disconnected(object sender, EventArgs e) private void MqttClient_Disconnected(object sender, EventArgs e)
...@@ -279,11 +264,7 @@ namespace ModbusDemo ...@@ -279,11 +264,7 @@ namespace ModbusDemo
DateTime curTime = new DateTime(); DateTime curTime = new DateTime();
curTime = DateTime.UtcNow; curTime = DateTime.UtcNow;
txtReceiveMessage.AppendText($">> [{curTime.ToLongTimeString()}]"); txtReceiveMessage.AppendText($">> [{curTime.ToLongTimeString()}]");
//totxt.Log($">> [{curTime.ToLongTimeString()}]");
txtReceiveMessage.AppendText("已断开MQTT连接!" + Environment.NewLine); txtReceiveMessage.AppendText("已断开MQTT连接!" + Environment.NewLine);
//totxt.Log("已断开MQTT连接!" + Environment.NewLine);
//Console.WriteLine("已断开MQTT连接!" + Environment.NewLine);
}))); })));
//Reconnecting //Reconnecting
...@@ -293,8 +274,6 @@ namespace ModbusDemo ...@@ -293,8 +274,6 @@ namespace ModbusDemo
{ {
txtReceiveMessage.AppendText("正在尝试重新连接" + Environment.NewLine); txtReceiveMessage.AppendText("正在尝试重新连接" + Environment.NewLine);
totxt.Log("正在尝试重新连接" + Environment.NewLine); totxt.Log("正在尝试重新连接" + Environment.NewLine);
await Subscribe();
//Console.WriteLine("正在尝试重新连接" + Environment.NewLine);
}))); })));
...@@ -311,12 +290,11 @@ namespace ModbusDemo ...@@ -311,12 +290,11 @@ namespace ModbusDemo
try try
{ {
await mqttClient.ConnectAsync(options); await mqttClient.ConnectAsync(options);
await Subscribe();
} }
catch catch
{ {
txtReceiveMessage.AppendText("### RECONNECTING FAILED ###" + Environment.NewLine); txtReceiveMessage.AppendText("### RECONNECTING FAILED ###" + Environment.NewLine);
//totxt.Log("### RECONNECTING FAILED ###" + Environment.NewLine);
//Console.WriteLine("### RECONNECTING FAILED ###" + Environment.NewLine);
} }
}))); })));
} }
...@@ -326,7 +304,6 @@ namespace ModbusDemo ...@@ -326,7 +304,6 @@ namespace ModbusDemo
{ {
txtReceiveMessage.AppendText("已下线!" + Environment.NewLine); txtReceiveMessage.AppendText("已下线!" + Environment.NewLine);
totxt.Log("已下线!" + Environment.NewLine); totxt.Log("已下线!" + Environment.NewLine);
//Console.WriteLine("已下线!" + Environment.NewLine);
}))); })));
} }
} }
...@@ -358,7 +335,7 @@ namespace ModbusDemo ...@@ -358,7 +335,7 @@ namespace ModbusDemo
else if (e.ApplicationMessage.Topic == mqttCfgTopic) else if (e.ApplicationMessage.Topic == mqttCfgTopic)
{ {
ModualControl.vPoolLevelParse(stConvertString, out mqttData_Back); ModualControl.vPoolLevelParse(stConvertString, out mqttData_Back);
await vCfgResponseBack(mqttData_Back); await Publish(mqttCfgResTopic,mqttData_Back);
} }
}))); })));
} }
...@@ -369,7 +346,7 @@ namespace ModbusDemo ...@@ -369,7 +346,7 @@ namespace ModbusDemo
for (int i = 0; i < ListHandle.Count; i++) for (int i = 0; i < ListHandle.Count; i++)
{ {
ModualControl.vGetaWay_Receive_Control(ListHandle[i], out mqttData_Back); ModualControl.vGetaWay_Receive_Control(ListHandle[i], out mqttData_Back);
vControlResponseBack(); vControlResponseBack(mqttBackTopic,mqttData_Back);
ListHandle.Remove(ListHandle[i]); ListHandle.Remove(ListHandle[i]);
} }
Thread.Sleep(100); Thread.Sleep(100);
...@@ -396,7 +373,7 @@ namespace ModbusDemo ...@@ -396,7 +373,7 @@ namespace ModbusDemo
private void Sendout() private void Sendout()
{ {
Control.CheckForIllegalCrossThreadCalls = false; Control.CheckForIllegalCrossThreadCalls = false;
MQTTTimer.Interval = 20000l;//120500 MQTTTimer.Interval = 20000;//120500
MQTTTimer.Enabled = true; MQTTTimer.Enabled = true;
MQTTTimer.AutoReset = true;//设置是执行一次(false)还是一直执行(true); MQTTTimer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
MQTTTimer.Start(); MQTTTimer.Start();
...@@ -404,7 +381,7 @@ namespace ModbusDemo ...@@ -404,7 +381,7 @@ namespace ModbusDemo
{ {
try try
{ {
await Publish(); await Publish(mqttTopic, mqttData);
} }
catch (Exception ex) catch (Exception ex)
{ {
...@@ -1062,17 +1039,17 @@ namespace ModbusDemo ...@@ -1062,17 +1039,17 @@ namespace ModbusDemo
ModbusComm.Modbus.Transport.WriteTimeout = 1000; ModbusComm.Modbus.Transport.WriteTimeout = 1000;
ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0; ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0;
//t_AutoControl = new Thread(AtuoControl_run); t_AutoControl = new Thread(AtuoControl_run);
//t_AutoControl.IsBackground = true; t_AutoControl.IsBackground = true;
//t_AutoControl.Start(); t_AutoControl.Start();
modbus_Timer.Enabled = true; modbus_Timer.Enabled = true;
btOpenCOM.Enabled = false; btOpenCOM.Enabled = false;
btCloseCOM.Enabled = true; btCloseCOM.Enabled = true;
if (bCretaThead == false) if (bCreatThead == false)
{ {
bCretaThead = true; bCreatThead = true;
ModbusPollThread = new Thread(vModbusPoll); ModbusPollThread = new Thread(vModbusPoll);
ModbusPollThread.Start(); ModbusPollThread.Start();
ModbusPollThread.Priority = ThreadPriority.Normal; ModbusPollThread.Priority = ThreadPriority.Normal;
...@@ -1104,12 +1081,18 @@ namespace ModbusDemo ...@@ -1104,12 +1081,18 @@ namespace ModbusDemo
} }
private async void run() private async void run()
{ {
comPort.PortName = "COM2"; if (LOCALDEBUG == true)
{
comPort.PortName = "COM6";
}
else
{
comPort.PortName = "COM6";
}
comPort.BaudRate = 9600; comPort.BaudRate = 9600;
comPort.Parity = Parity.None; comPort.Parity = Parity.None;
comPort.StopBits = StopBits.One; comPort.StopBits = StopBits.One;
comPort.DataBits = 8; comPort.DataBits = 8;
try try
{ {
comPort.Open(); comPort.Open();
...@@ -1124,35 +1107,32 @@ namespace ModbusDemo ...@@ -1124,35 +1107,32 @@ namespace ModbusDemo
ModbusComm.Modbus.Transport.WriteTimeout = 1000; ModbusComm.Modbus.Transport.WriteTimeout = 1000;
ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0; ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0;
//t_AutoControl = new Thread(AtuoControl_run)
//{
// IsBackground = true
//};
//t_AutoControl.Start();
modbus_Timer.Enabled = true; modbus_Timer.Enabled = true;
btOpenCOM.Enabled = false; btOpenCOM.Enabled = false;
btCloseCOM.Enabled = true; btCloseCOM.Enabled = true;
if (bCretaThead == false) if (bCreatThead == false)
{ {
if (bCretaThead == false) bCreatThead = true;
{ ModbusPollThread = new Thread(vModbusPoll);
bCretaThead = true; ModbusPollThread.Start();
ModbusPollThread = new Thread(vModbusPoll); ModbusPollThread.Priority = ThreadPriority.Normal;
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; ModbusControlThread.Priority = ThreadPriority.BelowNormal;
MqttReceiveThread = new Thread(vMqtt_Receive_Handle); MqttReceiveThread = new Thread(vMqtt_Receive_Handle);
MqttReceiveThread.Start(); MqttReceiveThread.Start();
MqttReceiveThread.Priority = ThreadPriority.AboveNormal; MqttReceiveThread.Priority = ThreadPriority.AboveNormal;
Task task1 = Task.Factory.StartNew(async() => {await ModualControl.vControl_Res_Poll();}); Task task1 = Task.Factory.StartNew(async() => {await ModualControl.vControl_Res_Poll();});
} t_AutoControl = new Thread(AtuoControl_run)
{
IsBackground = true
};
t_AutoControl.Start();
t_AutoControl.Priority = ThreadPriority.Normal;
} }
totxt.Log(DateTime.Now.ToString() + " =>Open " + comPort.PortName + " sucessfully!"); totxt.Log(DateTime.Now.ToString() + " =>Open " + comPort.PortName + " sucessfully!");
await Subscribe(); await Subscribe();
......
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