Commit 918658a8 authored by leon.huang's avatar leon.huang

merge origin

parents 4a5bdbd8 fc5bbaa0
...@@ -8,6 +8,7 @@ using ModbusDemo.windows; ...@@ -8,6 +8,7 @@ using ModbusDemo.windows;
using ModbusDemo.Modular; using ModbusDemo.Modular;
using ModbusDemo.MessageFormat; using ModbusDemo.MessageFormat;
using ModbusDemo.Common; using ModbusDemo.Common;
using System.IO;
namespace ModbusDemo.application namespace ModbusDemo.application
{ {
...@@ -37,6 +38,16 @@ namespace ModbusDemo.application ...@@ -37,6 +38,16 @@ namespace ModbusDemo.application
public int modularx; public int modularx;
public byte modbusID; public byte modbusID;
} }
public static byte[] EmodbusId = { 5, 51 };
public static byte[] WmodbusId = { 35, 31 };
public static byte[] LevelmodbusID = { 6, 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 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 = 1;
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)
{ {
...@@ -75,6 +86,7 @@ namespace ModbusDemo.application ...@@ -75,6 +86,7 @@ namespace ModbusDemo.application
} }
control = usControl; control = usControl;
} }
public static double Meanfilter(double Value) public static double Meanfilter(double Value)
{ {
double[] MeanValue = new double[10]; double[] MeanValue = new double[10];
...@@ -85,15 +97,6 @@ namespace ModbusDemo.application ...@@ -85,15 +97,6 @@ namespace ModbusDemo.application
Value = MeanValue[0] * 0.1 + MeanValue[5] * 0.3 + MeanValue[9] * 0.6; Value = MeanValue[0] * 0.1 + MeanValue[5] * 0.3 + MeanValue[9] * 0.6;
return Value; return Value;
} }
public static byte[] EmodbusId ={5,51};
public static byte[] WmodbusId = {35,31};
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 Wtimerun = false;
static System.Diagnostics.Stopwatch ETime = new System.Diagnostics.Stopwatch();
static System.Diagnostics.Stopwatch WTime = new System.Diagnostics.Stopwatch();
public static void Automatic_control(bool Eenabl,bool Wenabl) public static void Automatic_control(bool Eenabl,bool Wenabl)
{ {
...@@ -139,7 +142,7 @@ namespace ModbusDemo.application ...@@ -139,7 +142,7 @@ namespace ModbusDemo.application
ETime.Start(); // 开始监视运行时间 ETime.Start(); // 开始监视运行时间
timerun = true; timerun = true;
} }
if (timespan.TotalMinutes > 2) if (timespan.TotalMinutes > Runtimeout)
{ {
ModualAlarm.vSet_Modual_Alarm(EmodbusId[i], ModualAlarm.vSet_Modual_Alarm(EmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError | (ushort)ModualAlarm.eAlarmCode.ChannelControlError |
...@@ -149,10 +152,13 @@ namespace ModbusDemo.application ...@@ -149,10 +152,13 @@ namespace ModbusDemo.application
(ushort)ModualAlarm.eAlarmCode.ChannelControlError | (ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, true, 1, (ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7"); "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
if (Runtimeout > Runtimeout * 2)
{
ETime.Reset(); ETime.Reset();
ETime.Stop(); // 停止监视 ETime.Stop(); // 停止监视
} }
} }
}
else else
{ {
if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_OFF) if (ModbusComm.Modbus_WriteMultipleCoils(EmodbusId[i], 16, state_OFF)
...@@ -187,7 +193,7 @@ namespace ModbusDemo.application ...@@ -187,7 +193,7 @@ namespace ModbusDemo.application
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7"); "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
} }
ETime.Reset(); ETime.Reset();
ETime.Stop(); // 停止监视 ETime.Stop();
timerun = false; timerun = false;
} }
...@@ -229,7 +235,7 @@ namespace ModbusDemo.application ...@@ -229,7 +235,7 @@ namespace ModbusDemo.application
WTime.Start();//开始监视 WTime.Start();//开始监视
Wtimerun = true; Wtimerun = true;
} }
if(Wtime.TotalMinutes>1) if(Wtime.TotalMinutes> Runtimeout)
{ {
ModualAlarm.vSet_Modual_Alarm(WmodbusId[i], ModualAlarm.vSet_Modual_Alarm(WmodbusId[i],
(ushort)ModualAlarm.eAlarmCode.ChannelControlError | (ushort)ModualAlarm.eAlarmCode.ChannelControlError |
...@@ -239,9 +245,11 @@ namespace ModbusDemo.application ...@@ -239,9 +245,11 @@ namespace ModbusDemo.application
(ushort)ModualAlarm.eAlarmCode.ChannelControlError | (ushort)ModualAlarm.eAlarmCode.ChannelControlError |
(ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, true, 1, (ushort)ModualAlarm.eAlarmCode.ChannelRunOverTimeError, true, 1,
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7"); "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
if (Runtimeout > Runtimeout * 2)
{
WTime.Reset(); WTime.Reset();
WTime.Stop();//停止监视 WTime.Stop();//停止监视
Wtimerun = false; }
} }
} }
else else
...@@ -281,7 +289,6 @@ namespace ModbusDemo.application ...@@ -281,7 +289,6 @@ namespace ModbusDemo.application
WTime.Reset(); WTime.Reset();
WTime.Stop();//停止监视 WTime.Stop();//停止监视
Wtimerun = false; Wtimerun = false;
} }
double Whours = Wtime.TotalHours; double Whours = Wtime.TotalHours;
...@@ -296,5 +303,102 @@ namespace ModbusDemo.application ...@@ -296,5 +303,102 @@ namespace ModbusDemo.application
Console.WriteLine(timespan); Console.WriteLine(timespan);
} }
} }
public static void T_AutoControl()
{
Control usEcontrol = new Control();
Control usEcontrolB = new Control();
Control usWcontrol = new Control();
Control usWcontrolB = new Control();
while (true)
{
FileInfo file = new FileInfo(InIHelper.FileName);
if (ModualControl.cPoolLevelConfig.Count != 0)
{
for (int i = 0; i < ModualControl.cPoolLevelConfig.Count; i++)
{
for (int j = 0; j < ModualPoll.byX18xNumber; j++)
{
if (ModualPoll.cx18x.byModbusID[j] == LevelmodbusID[0])
{
usWcontrol.realTimeLevel =
ModualPoll.cx18x.sX18xDataStruct[j].dNowConvertData[0];
usWcontrol.modularx = j;
usWcontrol.modbusID = LevelmodbusID[0];
}
if (ModualPoll.cx18x.byModbusID[j] == LevelmodbusID[1])
{
usEcontrol.realTimeLevel =
ModualPoll.cx18x.sX18xDataStruct[j].dNowConvertData[0];
usEcontrol.modularx = j;
usEcontrol.modbusID = LevelmodbusID[1];
}
}
if (ModualControl.cPoolLevelConfig[i].byModbusID == LevelmodbusID[0])
{
usWcontrol.maxLevel = ModualControl.cPoolLevelConfig[i].dUpLevel;
usWcontrol.minLevel = ModualControl.cPoolLevelConfig[i].dDownLevel;
usWcontrol.Name = "西·中转池";
usWcontrol.Enablation = true;
InIHelper.WriteConfig("Channel number", "西液位通道", usWcontrol.modularx.ToString());
CriticalValueMonitoring(ref usWcontrol,
true,
"西·中转池",
out usWcontrolB
);
ModualControl.cPoolLevelConfig.Remove(ModualControl.cPoolLevelConfig[i]);
}
if (ModualControl.cPoolLevelConfig[i].byModbusID == LevelmodbusID[1])
{
usEcontrol.maxLevel = ModualControl.cPoolLevelConfig[i].dUpLevel;
usEcontrol.minLevel = ModualControl.cPoolLevelConfig[i].dDownLevel;
usEcontrol.Name = "东·中转池";
usEcontrol.Enablation = true;
InIHelper.WriteConfig("Channel number", "东液位通道", usEcontrol.modularx.ToString());
CriticalValueMonitoring(
ref usEcontrol,
true,
"东·中转池",
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
{
usWcontrol.status = false;
usEcontrol.status = false;
Automatic_control(usWcontrol.status, usEcontrol.status);
}
}
}
} }
} }
...@@ -32,6 +32,7 @@ namespace ModbusDemo ...@@ -32,6 +32,7 @@ namespace ModbusDemo
private int waitTime; private int waitTime;
private Thread t_UpgradeConn; private Thread t_UpgradeConn;
private Thread t_AutoControl; private Thread t_AutoControl;
public delegate void invokeDelegate(); public delegate void invokeDelegate();
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();
...@@ -60,7 +61,9 @@ namespace ModbusDemo ...@@ -60,7 +61,9 @@ namespace ModbusDemo
t_UpgradeConn = new Thread(UpgradeProc); t_UpgradeConn = new Thread(UpgradeProc);
t_UpgradeConn.IsBackground = true; t_UpgradeConn.IsBackground = true;
t_UpgradeConn.Start(); t_UpgradeConn.Start();
run();
} }
private void Form1_FormClosed(object sender, FormClosedEventArgs e) private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{ {
System.Environment.Exit(0); System.Environment.Exit(0);
...@@ -76,8 +79,8 @@ namespace ModbusDemo ...@@ -76,8 +79,8 @@ namespace ModbusDemo
int mqttPort; int mqttPort;
string mqttUsername; string mqttUsername;
string mqttPwd; string mqttPwd;
byte[] LevelmodbusID = { 6, 13};
public const string mqttSn = "66666666"; public const string mqttSn = "256333344";
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";
...@@ -160,8 +163,12 @@ namespace ModbusDemo ...@@ -160,8 +163,12 @@ namespace ModbusDemo
.WithAtLeastOnceQoS() .WithAtLeastOnceQoS()
.WithRetainFlag(false) .WithRetainFlag(false)
.Build(); .Build();
<<<<<<< HEAD
mqttClient.PublishAsync(message); mqttClient.PublishAsync(message);
totxt.Log("我在247,执行了Back"); totxt.Log("我在247,执行了Back");
=======
await mqttClient.PublishAsync(message);
>>>>>>> refs/remotes/origin/master
} }
private async Task vCfgResponseBack(string data) private async Task vCfgResponseBack(string data)
...@@ -200,9 +207,6 @@ namespace ModbusDemo ...@@ -200,9 +207,6 @@ namespace ModbusDemo
txtReceiveMessage.AppendText($"已订阅[{mqttSubscribeControlTopic}]主题{Environment.NewLine}"); txtReceiveMessage.AppendText($"已订阅[{mqttSubscribeControlTopic}]主题{Environment.NewLine}");
txtReceiveMessage.AppendText($"已订阅[{mqttCfgTopic}]主题{Environment.NewLine}"); txtReceiveMessage.AppendText($"已订阅[{mqttCfgTopic}]主题{Environment.NewLine}");
//totxt.Log($"已订阅[{mqttSubscribeTopic}]主题{Environment.NewLine}");
//txtReceiveMessage.AppendText($"已订阅[{Data}]主题{Environment.NewLine}");
}))); })));
} }
//private async Task ConnectMqttServerAsync() //private async Task ConnectMqttServerAsync()
...@@ -374,6 +378,7 @@ namespace ModbusDemo ...@@ -374,6 +378,7 @@ namespace ModbusDemo
#region modbus线程 #region modbus线程
private static bool bSetDataIsRunning = false; private static bool bSetDataIsRunning = false;
<<<<<<< HEAD
private Thread ModbusPollThread; private Thread ModbusPollThread;
private void T_AutoControl() private void T_AutoControl()
...@@ -473,16 +478,27 @@ namespace ModbusDemo ...@@ -473,16 +478,27 @@ namespace ModbusDemo
} }
} }
} }
=======
private Thread ModbusPollThread;
>>>>>>> refs/remotes/origin/master
private void vModbusPoll() private void vModbusPoll()
{ {
while (true) while (true)
{
Parallel.Invoke(
() =>
{ {
bSetDataIsRunning = true; bSetDataIsRunning = true;
ModualPoll.vAllNodePoll(); ModualPoll.vAllNodePoll();
mqttData = ModualPoll.stAll_Poll_Package(); mqttData = ModualPoll.stAll_Poll_Package();
ModualPoll.vCheckAlarm_And_Send(mqttClient); ModualPoll.vCheckAlarm_And_Send(mqttClient);
label5.Text = ModbusComm.usCommunFailTimes.ToString(); label5.Text = ModbusComm.usCommunFailTimes.ToString();
Thread.Sleep(100); },
() =>
{
AutoControl.T_AutoControl();
})
;
} }
} }
private void Sendout() private void Sendout()
...@@ -542,8 +558,7 @@ namespace ModbusDemo ...@@ -542,8 +558,7 @@ namespace ModbusDemo
} }
else else
{ {
//txtbox.Text = message; totxt.Log(message);
//totxt.Log(message);
} }
} }
#endregion #endregion
...@@ -999,7 +1014,7 @@ namespace ModbusDemo ...@@ -999,7 +1014,7 @@ namespace ModbusDemo
errCnt++; errCnt++;
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message); Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
MessageBox.Show(DateTime.Now.ToString() + " " + exception.Message); //MessageBox.Show(DateTime.Now.ToString() + " " + exception.Message);
this.UpdateBar.Value = this.UpdateBar.Minimum; this.UpdateBar.Value = this.UpdateBar.Minimum;
//this.StartTest.Enabled = false; //this.StartTest.Enabled = false;
//this.reset.Enabled = false; //this.reset.Enabled = false;
...@@ -1089,13 +1104,18 @@ namespace ModbusDemo ...@@ -1089,13 +1104,18 @@ namespace ModbusDemo
{ {
} }
<<<<<<< HEAD
private async void SubscribeBut_Click(object sender, EventArgs e) private async void SubscribeBut_Click(object sender, EventArgs e)
=======
private void SubscribeBut_Click(object sender, EventArgs e)
>>>>>>> refs/remotes/origin/master
{ {
await Subscribe();
} }
[Obsolete] [Obsolete]
private void btOpenCOM_Click(object sender, EventArgs e) private async void btOpenCOM_Click(object sender, EventArgs e)
{ {
if (LOCALDEBUG == true) if (LOCALDEBUG == true)
{ {
...@@ -1143,22 +1163,36 @@ namespace ModbusDemo ...@@ -1143,22 +1163,36 @@ namespace ModbusDemo
SetMqtt(); SetMqtt();
MQTT_thread = new MethodInvoker(Sendout); MQTT_thread = new MethodInvoker(Sendout);
MQTT_thread.BeginInvoke(null, null); MQTT_thread.BeginInvoke(null, null);
<<<<<<< HEAD
Task.Run(async () => {await ConnectMqttServerAsync(); }); Task.Run(async () => {await ConnectMqttServerAsync(); });
=======
await Task.Run(async () => { await ConnectMqttServerAsync(); });
>>>>>>> refs/remotes/origin/master
ModbusComm.Modbus = ModbusSerialMaster.CreateRtu(comPort); ModbusComm.Modbus = ModbusSerialMaster.CreateRtu(comPort);
ModbusComm.Modbus.Transport.Retries = 0; ModbusComm.Modbus.Transport.Retries = 0;
ModbusComm.Modbus.Transport.ReadTimeout = 1000; ModbusComm.Modbus.Transport.ReadTimeout = 1000;
ModbusComm.Modbus.Transport.WriteTimeout = 1000; ModbusComm.Modbus.Transport.WriteTimeout = 1000;
ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0; ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0;
<<<<<<< HEAD
//t_AutoControl = new Thread(T_AutoControl); //t_AutoControl = new Thread(T_AutoControl);
//t_AutoControl.IsBackground = true; //t_AutoControl.IsBackground = true;
//t_AutoControl.Start(); //t_AutoControl.Start();
=======
//t_AutoControl = new Thread(T_AutoControl)
//{
// IsBackground = true
//};
//t_AutoControl.Start();
>>>>>>> refs/remotes/origin/master
modbus_Timer.Enabled = true; modbus_Timer.Enabled = true;
btOpenCOM.Enabled = false; btOpenCOM.Enabled = false;
btCloseCOM.Enabled = true; btCloseCOM.Enabled = true;
if (bCretaThead == false) if (bCretaThead == false)
{ {
bCretaThead = true; bCretaThead = true;
ModbusPollThread = new Thread (vModbusPoll); ModbusPollThread = new Thread(vModbusPoll);
ModbusPollThread.Start(); ModbusPollThread.Start();
ModbusPollThread.Priority = ThreadPriority.Normal; ModbusPollThread.Priority = ThreadPriority.Normal;
...@@ -1178,6 +1212,7 @@ namespace ModbusDemo ...@@ -1178,6 +1212,7 @@ namespace ModbusDemo
ModbusPollThread.Resume(); ModbusPollThread.Resume();
} }
totxt.Log(DateTime.Now.ToString() + " =>Open " + comPort.PortName + " sucessfully!"); totxt.Log(DateTime.Now.ToString() + " =>Open " + comPort.PortName + " sucessfully!");
await Subscribe();
} }
catch (Exception ex) catch (Exception ex)
{ {
...@@ -1185,7 +1220,60 @@ namespace ModbusDemo ...@@ -1185,7 +1220,60 @@ namespace ModbusDemo
MessageBox.Show("Error: " + ex.Message); MessageBox.Show("Error: " + ex.Message);
return; return;
} }
}
private async void run()
{
comPort.PortName = "COM1";
comPort.BaudRate = 9600;
comPort.Parity = Parity.None;
comPort.StopBits = StopBits.One;
comPort.DataBits = 8;
try
{
comPort.Open();
isReconnect = true;
SetMqtt();
MQTT_thread = new MethodInvoker(Sendout);
MQTT_thread.BeginInvoke(null, null);
await Task.Run(async () => { await ConnectMqttServerAsync(); });
ModbusComm.Modbus = ModbusSerialMaster.CreateRtu(comPort);
ModbusComm.Modbus.Transport.Retries = 0;
ModbusComm.Modbus.Transport.ReadTimeout = 1000;
ModbusComm.Modbus.Transport.WriteTimeout = 1000;
ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0;
//t_AutoControl = new Thread(T_AutoControl)
//{
// IsBackground = true
//};
//t_AutoControl.Start();
modbus_Timer.Enabled = true;
btOpenCOM.Enabled = false;
btCloseCOM.Enabled = true;
if (bCretaThead == false)
{
bCretaThead = true;
ModbusPollThread = new Thread(vModbusPoll);
ModbusPollThread.Start();
ModbusControlThread = new Thread(ModualControl.vControl_Poll);
ModbusControlThread.Start();
}
else
{
ModbusPollThread.Resume();
}
totxt.Log(DateTime.Now.ToString() + " =>Open " + comPort.PortName + " sucessfully!");
await Subscribe();
}
catch (Exception ex)
{
totxt.Log("Error: " + ex.Message);
MessageBox.Show("Error: " + ex.Message);
return;
}
} }
[Obsolete] [Obsolete]
private void btCloseCOM_Click(object sender, EventArgs e) private void btCloseCOM_Click(object sender, EventArgs e)
......
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