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

merge origin

parents 6e241f93 e3cca5ae
...@@ -7,6 +7,7 @@ using System.Threading.Tasks; ...@@ -7,6 +7,7 @@ using System.Threading.Tasks;
using ModbusDemo.windows; using ModbusDemo.windows;
using ModbusDemo.Modular; using ModbusDemo.Modular;
using ModbusDemo.MessageFormat; using ModbusDemo.MessageFormat;
using ModbusDemo.Common;
namespace ModbusDemo.application namespace ModbusDemo.application
{ {
...@@ -36,14 +37,13 @@ namespace ModbusDemo.application ...@@ -36,14 +37,13 @@ namespace ModbusDemo.application
public int modularx; public int modularx;
} }
public static void CriticalValueMonitoring(bool Enabl, string Affiliation, out Control control) public static void CriticalValueMonitoring(ref Control usControl,bool Enabl, string Affiliation, out Control control)
{ {
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); //Control usControl = new Control
Control usControl = new Control //{
{ // Enablation = Enabl,
Enablation = Enabl, // Name = Affiliation,
Name = Affiliation //};
};
if (usControl.Enablation == true) if (usControl.Enablation == true)
{ {
if (usControl.maxLevel != 0.0 && usControl.minLevel != 0.0) if (usControl.maxLevel != 0.0 && usControl.minLevel != 0.0)
...@@ -67,7 +67,7 @@ namespace ModbusDemo.application ...@@ -67,7 +67,7 @@ namespace ModbusDemo.application
} }
else if (usControl.realTimeLevel < usControl.maxLevel && usControl.realTimeLevel > (usControl.minLevel + usControl.minLevel * 0.15)) else if (usControl.realTimeLevel < usControl.maxLevel && usControl.realTimeLevel > (usControl.minLevel + usControl.minLevel * 0.15))
{ {
usControl.status = true; //usControl.status = true;
usControl.normal = true; usControl.normal = true;
} }
...@@ -76,19 +76,6 @@ namespace ModbusDemo.application ...@@ -76,19 +76,6 @@ namespace ModbusDemo.application
usControl.status = false; usControl.status = false;
usControl.Minimum_Early_Warning = true; usControl.Minimum_Early_Warning = true;
} }
if (usControl.status == true)
{
stopwatch.Start(); // 开始监视运行时间
}
else
{
stopwatch.Stop(); // 停止监视
}
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
//double hours = timespan.TotalHours; // 总小时
usControl.StatusTime = timespan.TotalMinutes; // 总分钟
//usControl.StatusTime = timespan.TotalSeconds; // 总秒数
usControl.StatusTime = timespan.TotalMilliseconds; // 总毫秒数
} }
control = usControl; control = usControl;
...@@ -104,33 +91,161 @@ namespace ModbusDemo.application ...@@ -104,33 +91,161 @@ namespace ModbusDemo.application
return Value; return Value;
} }
public static byte[] EmodbusId ={5,51}; public static byte[] EmodbusId ={5,51};
public static byte[] WmodbusId = {37,8}; public static byte[] WmodbusId = {35,31};
public static bool[] state_ON = {true, true, true, true, true, true }; 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[] state_OFF = {false, false, false, false, false, false};
public static bool timerun = false;
public static bool Wtimerun = false;
static System.Diagnostics.Stopwatch ETime = new System.Diagnostics.Stopwatch();
static System.Diagnostics.Stopwatch WTime = new System.Diagnostics.Stopwatch();
//public static string
public static void Automatic_control(bool Eenabl,bool Wenabl) public static void Automatic_control(bool Eenabl,bool Wenabl)
{ {
for (int i = 0; i < 2; i++) TimeSpan Wtime = WTime.Elapsed;
TimeSpan timespan = ETime.Elapsed; // 获取当前实例测量得出的总时间
for (int i = 0; i < 1; i++)
{ {
//for (int j = 0; j < ModualPoll.byX66cNumber; j++)
//{
//}
if (Eenabl == true) if (Eenabl == true)
{ {
ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 0, state_ON); if (timerun == 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)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR|
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
ETime.Start(); // 开始监视运行时间
timerun = true;
}
if (timespan.TotalMinutes > 2)
{
if(ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_OFF)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
}
else
{
}
if(ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i + 1], 16, state_OFF)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR
)
{
}
ETime.Reset();
ETime.Stop(); // 停止监视
//timerun = false;
}
} }
else else
{ {
ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 0, state_OFF); ETime.Reset();
ETime.Stop(); // 停止监视
timerun = false;
ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_OFF);
ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i + 1], 16, state_OFF);
} }
if (Wenabl ==true) if (Wenabl ==true)
{ {
ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i], 0, state_ON); if(Wtimerun ==false)
{
if(ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i],16,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 else
{ {
ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i], 0, state_OFF); ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelCommunError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
} }
if (ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i+1], 16, state_ON)
==
ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
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],
(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>2)
{
WTime.Reset();
WTime.Stop();//停止监视
Wtimerun = false;
ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i], 16, state_OFF);
ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i+1], 16, state_OFF);
}
}
else
{
WTime.Reset();
WTime.Stop();//停止监视
Wtimerun = false;
ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i], 16, state_OFF);
ModbusComm.Modbus_WriteMultipleCoils(WmodbusId[i + 1], 16, state_OFF);
}
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);
} }
} }
} }
......
...@@ -76,12 +76,12 @@ namespace ModbusDemo ...@@ -76,12 +76,12 @@ namespace ModbusDemo
int mqttPort; int mqttPort;
string mqttUsername; string mqttUsername;
string mqttPwd; string mqttPwd;
byte[] LevelmodbusID = { 6, 3}; byte[] LevelmodbusID = { 6, 13};
public const string mqttSn = "66666666"; public const string mqttSn = "66666666";
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 + "/Back"; public const string mqttCfgResTopic = "Witium/WTDS78X/" + mqttSn + "/CfgRes";
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;//数据
...@@ -372,11 +372,14 @@ namespace ModbusDemo ...@@ -372,11 +372,14 @@ namespace ModbusDemo
private static bool bSetDataIsRunning = false; private static bool bSetDataIsRunning = false;
private Thread ModbusPollThread; private Thread ModbusPollThread;
private void T_AutoControl() private void T_AutoControl()
{
while (true)
{ {
AutoControl.Control usEcontrol = new AutoControl.Control(); AutoControl.Control usEcontrol = new AutoControl.Control();
AutoControl.Control usEcontrolB = new AutoControl.Control();
AutoControl.Control usWcontrol = new AutoControl.Control(); AutoControl.Control usWcontrol = new AutoControl.Control();
AutoControl.Control usWcontrolB = new AutoControl.Control();
while (true)
{
FileInfo file = new FileInfo(InIHelper.FileName);
if (ModualControl.cPoolLevelConfig.Count != 0) if (ModualControl.cPoolLevelConfig.Count != 0)
{ {
for (int i = 0; i < ModualControl.cPoolLevelConfig.Count; i++) for (int i = 0; i < ModualControl.cPoolLevelConfig.Count; i++)
...@@ -385,15 +388,15 @@ namespace ModbusDemo ...@@ -385,15 +388,15 @@ namespace ModbusDemo
{ {
if (ModualPoll.cx18x.byModbusID[j] == LevelmodbusID[0]) if (ModualPoll.cx18x.byModbusID[j] == LevelmodbusID[0])
{ {
usEcontrol.realTimeLevel = usWcontrol.realTimeLevel =
ModualPoll.cx18x.sX18xDataStruct[j].dNowConvertData[0]; ModualPoll.cx18x.sX18xDataStruct[j].dNowConvertData[0];
usEcontrol.modularx = j; usWcontrol.modularx = j;
} }
if (ModualPoll.cx18x.byModbusID[j] == LevelmodbusID[1]) if (ModualPoll.cx18x.byModbusID[j] == LevelmodbusID[1])
{ {
usWcontrol.realTimeLevel = usEcontrol.realTimeLevel =
ModualPoll.cx18x.sX18xDataStruct[j].dNowConvertData[0]; ModualPoll.cx18x.sX18xDataStruct[j].dNowConvertData[0];
usWcontrol.modularx = j; usEcontrol.modularx = j;
} }
} }
if (ModualControl.cPoolLevelConfig[i].byModbusID == LevelmodbusID[0]) if (ModualControl.cPoolLevelConfig[i].byModbusID == LevelmodbusID[0])
...@@ -402,11 +405,13 @@ namespace ModbusDemo ...@@ -402,11 +405,13 @@ namespace ModbusDemo
usWcontrol.minLevel = ModualControl.cPoolLevelConfig[i].dDownLevel; usWcontrol.minLevel = ModualControl.cPoolLevelConfig[i].dDownLevel;
usWcontrol.Name = "西·中转池"; usWcontrol.Name = "西·中转池";
usWcontrol.Enablation = true; usWcontrol.Enablation = true;
AutoControl.CriticalValueMonitoring(true, InIHelper.WriteConfig("Channel number", "西液位通道", usWcontrol.modularx.ToString());
AutoControl.CriticalValueMonitoring(ref usWcontrol,
true,
"西·中转池", "西·中转池",
out usWcontrol out usWcontrolB
); );
InIHelper.WriteConfig("Channel number", "西液位通道", usWcontrol.modularx.ToString()); ModualControl.cPoolLevelConfig.Remove(ModualControl.cPoolLevelConfig[i]);
} }
if (ModualControl.cPoolLevelConfig[i].byModbusID == LevelmodbusID[1]) if (ModualControl.cPoolLevelConfig[i].byModbusID == LevelmodbusID[1])
{ {
...@@ -414,37 +419,44 @@ namespace ModbusDemo ...@@ -414,37 +419,44 @@ namespace ModbusDemo
usEcontrol.minLevel = ModualControl.cPoolLevelConfig[i].dDownLevel; usEcontrol.minLevel = ModualControl.cPoolLevelConfig[i].dDownLevel;
usEcontrol.Name = "东·中转池"; usEcontrol.Name = "东·中转池";
usEcontrol.Enablation = true; usEcontrol.Enablation = true;
InIHelper.WriteConfig("Channel number", "东液位通道", usEcontrol.modularx.ToString());
AutoControl.CriticalValueMonitoring(true, AutoControl.CriticalValueMonitoring(
ref usEcontrol,
true,
"东·中转池", "东·中转池",
out usEcontrol out usEcontrolB
); );
InIHelper.WriteConfig("Channel number", "东液位通道", usEcontrol.modularx.ToString()); ModualControl.cPoolLevelConfig.Remove(ModualControl.cPoolLevelConfig[i]);
} }
} }
AutoControl.Automatic_control(usWcontrol.status, usEcontrol.status); AutoControl.Automatic_control(usWcontrolB.status, usEcontrolB.status);
} }
else if (InIHelper.FileName.Length!= 0)
else if (file.Length!= 0)
{ {
usEcontrol.modularx = InIHelper.ReadConfig<int>("Channel number", "东液位通道"); usEcontrol.modularx = InIHelper.ReadConfig<int>("Channel number", "东液位通道");
usWcontrol.modularx = InIHelper.ReadConfig<int>("Channel number", "西液位通道"); usWcontrol.modularx = InIHelper.ReadConfig<int>("Channel number", "西液位通道");
usWcontrol.maxLevel = InIHelper.ReadConfig<float>("MaxLevel", "西·中转池"); usWcontrol.maxLevel = InIHelper.ReadConfig<float>("MaxLevel", "西·中转池");
usWcontrol.minLevel = InIHelper.ReadConfig<float>("MinLevel", "西·中转池"); usWcontrol.minLevel = InIHelper.ReadConfig<float>("MinLevel", "西·中转池");
usEcontrol.maxLevel = InIHelper.ReadConfig<float>("MaxLevel", "东·中转池"); usEcontrol.maxLevel = InIHelper.ReadConfig<float>("MaxLevel", "东·中转池");
usEcontrol.minLevel = InIHelper.ReadConfig<float>("MaxLevel", "东·中转池"); usEcontrol.minLevel = InIHelper.ReadConfig<float>("MinLevel", "东·中转池");
usEcontrol.realTimeLevel = usEcontrol.realTimeLevel =
ModualPoll.cx18x.sX18xDataStruct[usEcontrol.modularx].dNowConvertData[0]; ModualPoll.cx18x.sX18xDataStruct[usEcontrol.modularx].dNowConvertData[0];
usWcontrol.realTimeLevel = usWcontrol.realTimeLevel =
ModualPoll.cx18x.sX18xDataStruct[usWcontrol.modularx].dNowConvertData[0]; ModualPoll.cx18x.sX18xDataStruct[usWcontrol.modularx].dNowConvertData[0];
AutoControl.CriticalValueMonitoring(true, AutoControl.CriticalValueMonitoring(
ref usEcontrol,
true,
"东·中转池", "东·中转池",
out usEcontrol out usEcontrolB
); );
AutoControl.CriticalValueMonitoring(true, AutoControl.CriticalValueMonitoring(
ref usWcontrol,
true,
"西·中转池", "西·中转池",
out usWcontrol out usWcontrolB
); );
AutoControl.Automatic_control(usWcontrol.status, usEcontrol.status); AutoControl.Automatic_control(usWcontrolB.status, usEcontrolB.status);
} }
else else
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment