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);
}
}
}
}
This diff is collapsed.
......@@ -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