Commit cf469d03 authored by leon.huang's avatar leon.huang

Increase communication, water level too high or too low, control abnormal,run…

Increase communication, water level too high or too low, control abnormal,run timeout error send repeatedly,The sending interval is 10 minutes.And Modify the automatic control
parent 506c66e6
......@@ -32,7 +32,7 @@ namespace ModbusDemo.windows
public DeviceInfo m_DeviceInfo;
public ArrayList myHMIList = new ArrayList();
string FMAC =null;
//string FMAC =null;
string localip = null;
......
......@@ -15,6 +15,7 @@ namespace ModbusDemo.Common
public const ushort usChannelNumber = 8;
public static string sAlarmJson;
public static string sAgainAlarmJson;
public static string sAlarmJsonPackage;
//private IMqttClient mqttClient = null;
public enum eAlarmCode : ushort
......@@ -47,6 +48,24 @@ namespace ModbusDemo.Common
sAlarmJson += JsonConvert.SerializeObject(hMqtttAlarmMap);
}
public static void vSet_Alarm_Again_List(ushort usAddress, ushort[] usChannel, ushort[] usChannelAlarmcode)
{
ushort i = 0;
Hashtable hMqtttAlarmMap = new Hashtable();
hMqtttAlarmMap.Add("addr", usAddress.ToString());
string sAlarm = "alm";
foreach (ushort usdata in usChannelAlarmcode)
{
hMqtttAlarmMap.Add(sAlarm + usChannel[i], usChannelAlarmcode[i]);
i++;
}
hMqtttAlarmMap.Add("ts", Form1.GetTimeStamp());
if (sAgainAlarmJson != "[")
{
sAgainAlarmJson += ",";
}
sAgainAlarmJson += JsonConvert.SerializeObject(hMqtttAlarmMap);
}
public static async Task vPublishAlarmPackageJson(IMqttClient mqttClient)
{
if (mqttClient.IsConnected == true)
......
......@@ -266,7 +266,7 @@ namespace ModbusDemo.MessageFormat
if ((liModuualControl[i].usDurationTime + liModuualControl[i].ulStartTime) <= Form1.GetTimeStamp())
{
bool[] bControlData;
string str;
//string str;
liModuualControl[i].bControlStatus = ModualPoll.bGet_channel_Value<bool>(liModuualControl[i].sbModbusID, out bControlData, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
//for (int j = 0; j < 8; j++)
//{
......@@ -608,7 +608,7 @@ namespace ModbusDemo.MessageFormat
dUpLevel = double.Parse(cCfgRoot.ss[i].cfg.upper),
dDownLevel = double.Parse(cCfgRoot.ss[i].cfg.down)
};
vSet_Pool_Alarm_Level(cLiquidLevelConfig.byModbusID,cLiquidLevelConfig.dUpLevel,cLiquidLevelConfig.dDownLevel);
for (int j = 0; j < 8; j++)
{
string strChannelString = "d" + j.ToString();
......@@ -619,7 +619,7 @@ namespace ModbusDemo.MessageFormat
break;
}
}
vSet_Pool_Alarm_Level(cLiquidLevelConfig.byModbusID,cLiquidLevelConfig.dUpLevel,cLiquidLevelConfig.dDownLevel,cLiquidLevelConfig.stChannelNumber);
if (jsonObj["ss"][i]["cfg"]["ts"] != null)
{
jsonObj["ss"][i]["cfg"]["ts"] = Form1.GetTimeStamp();
......@@ -637,30 +637,30 @@ namespace ModbusDemo.MessageFormat
stResponseStrign = jsonObj.ToString();
}
}
public static void vSet_Pool_Alarm_Level(byte byModbusID,double dMaxLevel,double dMinLevel)
public static void vSet_Pool_Alarm_Level(byte byModbusID,double dMaxLevel,double dMinLevel,string strChannelName)
{
if (byModbusID == AllPond.cSlurryPool.cLevel.byModbusID)
if (byModbusID == AllPond.cSlurryPool.cLevel.byModbusID && ((IList<string>)AllPond.cSlurryPool.cLevel.strChannelNumber).Contains(strChannelName) == true)
{
AllPond.cSlurryPool.vSetMaxLevel = dMaxLevel;
AllPond.cSlurryPool.vSetMinLevel = dMinLevel;
pcConfig.WriteConfig("匀浆池配置", "报警最高液位", AllPond.cSlurryPool.vSetMaxLevel.ToString());
pcConfig.WriteConfig("匀浆池配置", "报警最低液位", AllPond.cSlurryPool.vSetMinLevel.ToString());
}
else if (byModbusID == AllPond.cDesiltingPool.cLevel.byModbusID)
else if (byModbusID == AllPond.cDesiltingPool.cLevel.byModbusID && ((IList<string>)AllPond.cDesiltingPool.cLevel.strChannelNumber).Contains(strChannelName) == true)
{
AllPond.cDesiltingPool.vSetMaxLevel = dMaxLevel;
AllPond.cDesiltingPool.vSetMinLevel = dMinLevel;
pcConfig.WriteConfig("沉砂池池配置", "报警最高液位", AllPond.cDesiltingPool.vSetMaxLevel.ToString());
pcConfig.WriteConfig("沉砂池池配置", "报警最低液位", AllPond.cDesiltingPool.vSetMinLevel.ToString());
}
else if (byModbusID == AllPond.cOctagonalPool.cLevel.byModbusID)
else if (byModbusID == AllPond.cOctagonalPool.cLevel.byModbusID && ((IList<string>)AllPond.cOctagonalPool.cLevel.strChannelNumber).Contains(strChannelName) == true)
{
AllPond.cOctagonalPool.vSetMaxLevel = dMaxLevel;
AllPond.cOctagonalPool.vSetMinLevel = dMinLevel;
pcConfig.WriteConfig("八角池配置", "报警最高液位", AllPond.cOctagonalPool.vSetMaxLevel.ToString());
pcConfig.WriteConfig("八角池配置", "报警最低液位", AllPond.cOctagonalPool.vSetMinLevel.ToString());
}
else if (byModbusID == AllPond.cDischargePool.cLevel.byModbusID)
else if (byModbusID == AllPond.cDischargePool.cLevel.byModbusID && ((IList<string>)AllPond.cDischargePool.cLevel.strChannelNumber).Contains(strChannelName) == true)
{
AllPond.cDischargePool.vSetMaxLevel = dMaxLevel;
AllPond.cDischargePool.vSetMinLevel = dMinLevel;
......
......@@ -36,8 +36,8 @@ namespace ModbusDemo.Modular
public static _414P c14formulasormual = new _414P();
#if DEBUG_TEST
public const byte byX18xNumber = 1;
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 } };
public static byte[] byX18xIdlist = { 13};
private static modual.eX18xSensorChannelType[,] sX18xChannelType = new modual.eX18xSensorChannelType[byX18xNumber, byX18xReadDataNumber] { { modual.eX18xSensorChannelType.Mike_6, modual.eX18xSensorChannelType.Mike_6, modual.eX18xSensorChannelType.Mike_6, modual.eX18xSensorChannelType.Mike_6, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Mike_6, modual.eX18xSensorChannelType.Mike_6, modual.eX18xSensorChannelType.Mike_6 } };
#else
public const byte byX18xNumber = 6;
public static byte[] byX18xIdlist = {3,53,6,12,21,25};
......@@ -550,7 +550,7 @@ namespace ModbusDemo.Modular
cx18x.sX18xDataStruct[i].dNowConvertData[k] = ((double.Parse(strCalculData[k]) - 4) / 16 * 5);
break;
case modual.eX18xSensorChannelType.Mike_6:
cx18x.sX18xDataStruct[i].dNowConvertData[k] = ((double.Parse(strCalculData[k]) - 6) / 16 * 6);
cx18x.sX18xDataStruct[i].dNowConvertData[k] = ((double.Parse(strCalculData[k]) - 4) / 16 * 6);
break;
case modual.eX18xSensorChannelType.Mike_7:
cx18x.sX18xDataStruct[i].dNowConvertData[k] = ((double.Parse(strCalculData[k]) - 4) / 16 * 7);
......@@ -736,6 +736,122 @@ namespace ModbusDemo.Modular
}
return bControlStatus;
}
public static async Task bSend_Alarm_Again()
{
bool bOccurErrorChange = false;
ModualAlarm.sAgainAlarmJson = "[";
for (byte i = 0; i < byX14pNumber; i++)
{
bool bX14pError = false;
List<ushort> usChannelErrorlist = new List<ushort>();
List<ushort> usChannelErrorCodeList = new List<ushort>();
for (byte j = 0; j < byX14pReadDataNumber; j++)
{
if ((cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelControlError) == (ushort)ModualAlarm.eAlarmCode.ChannelControlError ||
(cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelLevelError) == (ushort)ModualAlarm.eAlarmCode.ChannelLevelError ||
(cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelCommunError) == (ushort)ModualAlarm.eAlarmCode.ChannelCommunError ||
(cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError) == (ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError )
{
bOccurErrorChange = true;
bX14pError = true;
usChannelErrorlist.Add(j);
usChannelErrorCodeList.Add((ushort)cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j]);
}
//cx14P.sX14PAlarmStruct[i].usBeforeAlarmCode[j] = cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j];
}
if (bX14pError == true)
{
ushort[] usChannelList = usChannelErrorlist.ToArray();
ushort[] usCodeList = usChannelErrorCodeList.ToArray();
ModualAlarm.vSet_Alarm_Again_List(cx14P.byModbusID[i], usChannelList, usCodeList);
}
}
for (byte i = 0; i < byX18xNumber; i++)
{
bool bX18xError = false;
List<ushort> usChannelErrorlist = new List<ushort>();
List<ushort> usChannelErrorCodeList = new List<ushort>();
for (byte j = 0; j < byX18xReadTypeNumber; j++)
{
if ((cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelControlError) == (ushort)ModualAlarm.eAlarmCode.ChannelControlError ||
(cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelLevelError) == (ushort)ModualAlarm.eAlarmCode.ChannelLevelError ||
(cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelCommunError) == (ushort)ModualAlarm.eAlarmCode.ChannelCommunError ||
(cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError) == (ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError )
{
bX18xError = true;
bOccurErrorChange = true;
usChannelErrorlist.Add(j);
usChannelErrorCodeList.Add((ushort)cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j]);
}
//cx18x.sX18xAlarmstruct[i].usBeforeAlarmCode[j] = cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j];
}
if (bX18xError == true)
{
ushort[] usChannelList = usChannelErrorlist.ToArray();
ushort[] usCodeList = usChannelErrorCodeList.ToArray();
ModualAlarm.vSet_Alarm_Again_List(cx18x.byModbusID[i], usChannelList, usCodeList);
}
}
for (byte i = 0; i < byX78cNumber; i++)
{
bool bX78CError = false;
List<ushort> usChannelErrorlist = new List<ushort>();
List<ushort> usChannelErrorCodeList = new List<ushort>();
for (byte j = 0; j < byX78cOutputRegNumber + byX78cInputRegNumber; j++)
{
if ((cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelControlError) == (ushort)ModualAlarm.eAlarmCode.ChannelControlError ||
(cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelLevelError) == (ushort)ModualAlarm.eAlarmCode.ChannelLevelError ||
(cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelCommunError) == (ushort)ModualAlarm.eAlarmCode.ChannelCommunError ||
(cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError) == (ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError )
{
bOccurErrorChange = true;
bX78CError = true;
usChannelErrorlist.Add(j);
usChannelErrorCodeList.Add((ushort)cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j]);
}
//cx78c.sX78cAlarmStruct[i].usBeforeAlarmCode[j] = cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j];
}
if (bX78CError == true)
{
ushort[] usChannelList = usChannelErrorlist.ToArray();
ushort[] usCodeList = usChannelErrorCodeList.ToArray();
ModualAlarm.vSet_Alarm_Again_List(cx78c.byModbusID[i], usChannelList, usCodeList);
}
}
for (byte i = 0; i < byX66cNumber; i++)
{
bool bX66cError = false;
List<ushort> usChannelErrorlist = new List<ushort>();
List<ushort> usChannelErrorCodeList = new List<ushort>();
for (byte j = 0; j < byX66cRelayRegNumber; j++)
{
if ((cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelControlError) == (ushort)ModualAlarm.eAlarmCode.ChannelControlError ||
(cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelLevelError) == (ushort)ModualAlarm.eAlarmCode.ChannelLevelError ||
(cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelCommunError) == (ushort)ModualAlarm.eAlarmCode.ChannelCommunError ||
(cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] & (ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError) == (ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError )
{
bOccurErrorChange = true;
bX66cError = true;
usChannelErrorlist.Add(j);
usChannelErrorCodeList.Add((ushort)cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j]);
}
//cx66c.sX66cAlarmStruct[i].usBeforeAlarmCode[j] = cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j];
}
if (bX66cError == true)
{
ushort[] usChannelList = usChannelErrorlist.ToArray();
ushort[] usCodeList = usChannelErrorCodeList.ToArray();
ModualAlarm.vSet_Alarm_Again_List(cx66c.byModbusID[i], usChannelList, usCodeList);
}
}
if (bOccurErrorChange == true)
{
ModualAlarm.sAgainAlarmJson += "]";
await Form1.Publish(Form1.sAlarmTopic,ModualAlarm.sAgainAlarmJson);
}
}
}
}

using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
......@@ -9,10 +8,394 @@ using ModbusDemo.Modular;
using ModbusDemo.MessageFormat;
using ModbusDemo.Common;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace ModbusDemo.application
{
#if DEBUG_TEST
public class AutoControl
{
public class Status
{
public bool Beyond_the_limit; //超出极限值
public bool normal;//正常·工作中
public bool Minimum_Early_Warning;//低值预警
}
public class Control : Status
{
public bool Enablation; //任务使能
public double maxLevel;
public double minLevel;
public double DifferenceValue;
public double realTimeLevel;
public bool status;
public string Name;
public double StatusTime;
public int modularx;
public byte modbusID;
}
public static byte[] EmodbusId = { 90, 39 }; //39 CH0/1 CH2/3 //90 CH0/1 CH2/3
public static byte[] WmodbusId = {31}; //31 CH2/3 CH4/5
public static byte[] LevelmodbusID = { 13, 13 }; // CH0 CH3
public static bool[] state_ON = { true, true, true, true};
public static bool[] state_OFF = { false, false, false,false};
public static bool Etimerun = false;
public static bool Wtimerun = false;
static System.Diagnostics.Stopwatch ETime = new System.Diagnostics.Stopwatch();
static System.Diagnostics.Stopwatch WTime = new System.Diagnostics.Stopwatch();
private static readonly int Runtimeout = 30;
public static void CriticalValueMonitoring(ref Control usControl, bool Enabl, string Affiliation, out Control control)
{
if (usControl.Enablation == true)
{
if (usControl.maxLevel != 0.0 && usControl.minLevel != 0.0)
{
InIHelper.WriteConfig("MaxLevel", Affiliation, usControl.maxLevel.ToString());
InIHelper.WriteConfig("MinLevel", Affiliation, usControl.minLevel.ToString());
}
else
{
usControl.maxLevel = InIHelper.ReadConfig<float>("MaxLevel", Affiliation);
usControl.minLevel = InIHelper.ReadConfig<float>("MinLevel", Affiliation);
}
//usControl.realTimeLevel = Meanfilter(usControl.realTimeLevel);//实时值
//usControl.DifferenceValue = usControl.maxLevel - usControl.minLevel;//极值差
if (usControl.realTimeLevel > usControl.maxLevel)
{
usControl.status = true;
usControl.Beyond_the_limit = true;
usControl.normal = false;
usControl.Minimum_Early_Warning = false;
}
else if (usControl.realTimeLevel < usControl.maxLevel && usControl.realTimeLevel > (usControl.minLevel + usControl.minLevel * 0.15))
{
usControl.normal = true;
usControl.Beyond_the_limit = false;
usControl.Minimum_Early_Warning = false;
}
if (usControl.realTimeLevel < (usControl.minLevel - usControl.minLevel * 0.1))
{
usControl.status = false;
usControl.Minimum_Early_Warning = true;
usControl.Beyond_the_limit = false;
usControl.normal = false;
}
}
control = usControl;
}
static double[] MeanValue = new double[10];
public static double Meanfilter(double Value)
{
for (int i = 0; i < 10; i++)
{
MeanValue[i] = Value;
}
Value = MeanValue[0] * 0.1 + MeanValue[5] * 0.3 + MeanValue[9] * 0.6;
return Value;
}
public static void Automatic_control(bool Eenabl, bool Wenabl)
{
TimeSpan Wtime = WTime.Elapsed;
TimeSpan timespan = ETime.Elapsed; // 获取当前实例测量得出的总时间
for (int i = 0; i < 1; i++)
{
if (Eenabl == true)
{
if (Etimerun == false)
{
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_ON)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i + 1], 16, state_ON)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
ETime.Start(); // 开始监视运行时间
Etimerun = true;
}
if (timespan.TotalMinutes > Runtimeout)
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
if (timespan.TotalMinutes > Runtimeout + Runtimeout * 0.2)
{
ETime.Reset();
ETime.Stop(); // 停止监视
}
}
}
else
{
if (Etimerun == true)
{
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_OFF)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i+1], 16, state_OFF)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR
)
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
ETime.Reset();
ETime.Stop();
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
Etimerun = false;
}
}
if (Wenabl == true)
{
if (Wtimerun == false)
{
if (ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i], 18, state_ON)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
WTime.Start();//开始监视
Wtimerun = true;
}
if (Wtime.TotalMinutes > Runtimeout)
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
if (Wtime.TotalMinutes > Runtimeout * 2)
{
WTime.Reset();
WTime.Stop();//停止监视
}
}
}
else
{
if (Wtimerun == true)
{
if (ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i], 18, state_OFF)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR
)
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
WTime.Reset();
WTime.Stop();//停止监视
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
Wtimerun = false;
}
}
double Whours = Wtime.TotalHours;
double Wminures = Wtime.TotalMinutes;
double Wseconds = Wtime.TotalSeconds;
double Wmilliseconds = Wtime.TotalMilliseconds; // 总毫秒数
double hours = timespan.TotalHours; // 总小时
double minutes = timespan.TotalMinutes; // 总分钟
double seconds = timespan.TotalSeconds; // 总秒数
double milliseconds = timespan.TotalMilliseconds; // 总毫秒数
//Console.WriteLine(Wtime);
//Console.WriteLine(timespan);
}
}
public static void T_AutoControl()
{
Control usEcontrol = new Control();
Control usEcontrolB = new Control();
Control usWcontrol = new Control();
Control usWcontrolB = new Control();
FileInfo file = new FileInfo(InIHelper.FileName);
while (true)
{
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[3];
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());
CriticalValueMonitoring(ref usWcontrol,
true,
"西·中转池",
out usWcontrolB
);
}
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());
CriticalValueMonitoring(
ref usEcontrol,
true,
"东·中转池",
out usEcontrolB
);
}
ModualControl.cPoolLevelConfig.Remove(ModualControl.cPoolLevelConfig[i]);
}
Automatic_control(usEcontrolB.status, usWcontrolB.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[3];
usEcontrol.Enablation=true;
usWcontrol.Enablation=true;
CriticalValueMonitoring(
ref usEcontrol,
true,
"东·中转池",
out usEcontrolB
);
CriticalValueMonitoring(
ref usWcontrol,
true,
"西·中转池",
out usWcontrolB
);
Automatic_control(usEcontrolB.status, usWcontrolB.status);
}
else
{
usWcontrol.status = false;
usEcontrol.status = false;
Automatic_control(usEcontrol.status, usWcontrol.status);
}
}
}
}
#else
public class AutoControl
{
//Automatic Control Enablation
......@@ -28,29 +411,30 @@ namespace ModbusDemo.application
}
public class Control : Status
{
public bool Enablation; //任务使能
public bool Enablation; //任务使能
public double maxLevel;
public double minLevel;
public double DifferenceValue;
public double realTimeLevel;
public bool status;
public bool status;
public string Name;
public double StatusTime;
public int modularx;
public byte modbusID;
public int modularx;
public byte modbusID;
}
public static byte[] EmodbusId = { 16, 51 };
public static byte[] EmodbusId = { 15,12};//5,20
public static byte[] WmodbusId = { 35, 31 };
public static byte[] LevelmodbusID = { 6, 13 };
public static byte[] LevelmodbusID = { 3, 13 };
public static bool[] state_ON = { true, true, true, true, true, true };
public static bool[] state_OFF = { false, false, false, false, false, false };
public static bool timerun = false;
public static bool Etimerun = false;
public static bool Wtimerun = false;
static System.Diagnostics.Stopwatch ETime = new System.Diagnostics.Stopwatch();
static System.Diagnostics.Stopwatch WTime = new System.Diagnostics.Stopwatch();
private static readonly int Runtimeout = 10;
private static readonly int Runtimeout = 30;
public static void CriticalValueMonitoring(ref Control usControl,bool Enabl, string Affiliation, out Control control)
public static void CriticalValueMonitoring(ref Control usControl, bool Enabl, string Affiliation, out Control control)
{
if (usControl.Enablation == true)
{
......@@ -66,51 +450,58 @@ namespace ModbusDemo.application
}
usControl.realTimeLevel = Meanfilter(usControl.realTimeLevel);//实时值
usControl.DifferenceValue = usControl.maxLevel - usControl.minLevel;//极值差
//usControl.DifferenceValue = usControl.maxLevel - usControl.minLevel;//极值差
if (usControl.realTimeLevel > usControl.maxLevel)
{
usControl.status = true;
usControl.Beyond_the_limit = true;
usControl.normal = false;
usControl.Minimum_Early_Warning = false;
}
else if (usControl.realTimeLevel < usControl.maxLevel && usControl.realTimeLevel > (usControl.minLevel + usControl.minLevel * 0.15))
{
usControl.normal = true;
usControl.Beyond_the_limit = false;
usControl.Minimum_Early_Warning = false;
}
if (usControl.realTimeLevel < (usControl.minLevel - usControl.minLevel * 0.1))
{
usControl.status = false;
usControl.Minimum_Early_Warning = true;
usControl.Beyond_the_limit = false;
usControl.normal = false;
}
}
control = usControl;
}
static double[] MeanValue = new double[10];
public static double Meanfilter(double Value)
{
double[] MeanValue = new double[10];
MeanValue[0] = Value;
for (int i = 0; i < 10; i++)
{
MeanValue[i] = Value;
}
Value = MeanValue[0] * 0.1 + MeanValue[5] * 0.3 + MeanValue[9] * 0.6;
return Value;
}
public static void Automatic_control(bool Eenabl,bool Wenabl)
public static void Automatic_control(bool Eenabl, bool Wenabl)
{
TimeSpan Wtime = WTime.Elapsed;
TimeSpan timespan = ETime.Elapsed; // 获取当前实例测量得出的总时间
for (int i = 0; i < 1; i++)
{
if (Eenabl == true)
{
if (timerun == false)
if (Etimerun == false)
{
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_ON)
==
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_ON)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
......@@ -120,27 +511,26 @@ namespace ModbusDemo.application
else
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i+1], 16, state_ON)
==
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i + 1], 16, state_ON)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i+1],
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i+1],
(ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR|
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
ETime.Start(); // 开始监视运行时间
timerun = true;
Etimerun = true;
}
if (timespan.TotalMinutes > Runtimeout)
{
......@@ -152,7 +542,7 @@ namespace ModbusDemo.application
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
if (timespan.TotalMinutes > Runtimeout * 2)
if (timespan.TotalMinutes > Runtimeout + Runtimeout * 0.2)
{
ETime.Reset();
ETime.Stop(); // 停止监视
......@@ -161,9 +551,11 @@ namespace ModbusDemo.application
}
else
{
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_OFF)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
if (Etimerun == true)
{
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_OFF)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
......@@ -172,34 +564,45 @@ namespace ModbusDemo.application
else
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
if(ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_OFF)
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_OFF)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR
)
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i+1],
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
ETime.Reset();
ETime.Stop();
timerun = false;
ETime.Reset();
ETime.Stop();
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
Etimerun = false;
}
}
if (Wenabl ==true)
if (Wenabl == true)
{
if(Wtimerun ==false)
if (Wtimerun == false)
{
if(ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i],16,state_ON)
if (ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i], 16, state_ON)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
......@@ -214,17 +617,17 @@ namespace ModbusDemo.application
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
if (ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i+1], 16, state_ON)
if (ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i + 1], 16, state_ON)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i+1],
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i+1],
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
......@@ -233,7 +636,7 @@ namespace ModbusDemo.application
WTime.Start();//开始监视
Wtimerun = true;
}
if(Wtime.TotalMinutes> Runtimeout)
if (Wtime.TotalMinutes > Runtimeout)
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
......@@ -252,7 +655,9 @@ namespace ModbusDemo.application
}
else
{
if(ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i], 16, state_OFF)
if (Wtimerun == true)
{
if (ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i], 16, state_OFF)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR
)
......@@ -264,27 +669,38 @@ namespace ModbusDemo.application
else
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
if(ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i+1], 16, state_OFF)
if (ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i + 1], 16, state_OFF)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR
)
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i+1],
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i+1],
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
WTime.Reset();
WTime.Stop();//停止监视
Wtimerun = false;
WTime.Reset();
WTime.Stop();//停止监视
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i + 1],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, false, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
Wtimerun = false;
}
}
double Whours = Wtime.TotalHours;
......@@ -295,44 +711,18 @@ namespace ModbusDemo.application
double minutes = timespan.TotalMinutes; // 总分钟
double seconds = timespan.TotalSeconds; // 总秒数
double milliseconds = timespan.TotalMilliseconds; // 总毫秒数
Console.WriteLine(Wtime);
Console.WriteLine(timespan);
//Console.WriteLine(Wtime);
//Console.WriteLine(timespan);
}
}
public static void T_AutoControl()
{
Control usEcontrol = new Control();
Control usEcontrol = new Control();
Control usEcontrolB = new Control();
Control usWcontrol = new Control();
Control usWcontrol = 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)
{
if (ModualControl.cPoolLevelConfig.Count != 0)
......@@ -384,12 +774,37 @@ namespace ModbusDemo.application
"东·中转池",
out usEcontrolB
);
}
ModualControl.cPoolLevelConfig.Remove(ModualControl.cPoolLevelConfig[i]);
}
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
{
......@@ -397,8 +812,9 @@ namespace ModbusDemo.application
usEcontrol.status = false;
Automatic_control(usWcontrol.status, usEcontrol.status);
}
Thread.Sleep(100);
}
}
}
#endif
}
......@@ -26,7 +26,7 @@ namespace ModbusDemo
{
public partial class Form1 : Form
{
const bool LOCALDEBUG = false;
const bool LOCALDEBUG = true;
private bool bStart = false;
AutoResetEvent exitEvent;
private int waitTime;
......@@ -35,6 +35,7 @@ namespace ModbusDemo
public delegate void invokeDelegate();
System.Timers.Timer MQTTTimer = new System.Timers.Timer();
System.Timers.Timer tSendAlarmAgainTimer = new System.Timers.Timer();
BackgroundWorker m_bgw0 = new BackgroundWorker();
bool m_Isbgw0_CanContinueRun = true;
bool bCreatThead = false;
......@@ -251,7 +252,7 @@ namespace ModbusDemo
}
private void MqttClient_Connected(object sender, EventArgs e)
{
Invoke( (new Action(async() =>
Invoke( (new Action( () =>
{
txtReceiveMessage.AppendText("已连接到MQTT服务器!" + Environment.NewLine);
})));
......@@ -270,7 +271,7 @@ namespace ModbusDemo
//Reconnecting
if (isReconnect)
{
Invoke((new Action(async () =>
Invoke((new Action(() =>
{
txtReceiveMessage.AppendText("正在尝试重新连接" + Environment.NewLine);
totxt.Log("正在尝试重新连接" + Environment.NewLine);
......@@ -389,6 +390,23 @@ namespace ModbusDemo
return;
}
};
tSendAlarmAgainTimer.Interval = 600000;
tSendAlarmAgainTimer.Enabled = true;
tSendAlarmAgainTimer.AutoReset = true;
tSendAlarmAgainTimer.Start();
tSendAlarmAgainTimer.Elapsed += async (o, a) =>
{
try
{
await ModualPoll.bSend_Alarm_Again();
}
catch (Exception ex)
{
totxt.Log(ex + "," + Environment.NewLine + "\n");
return;
}
};
}
//声明委托
......@@ -986,7 +1004,7 @@ namespace ModbusDemo
{
if (LOCALDEBUG == true)
{
comPort.PortName = "COM6";
comPort.PortName = "COM2";
comPort.BaudRate = 9600;
comPort.Parity = Parity.None;
comPort.StopBits = StopBits.One;
......
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