Commit 2d5a6d39 authored by 潘栩锋's avatar 潘栩锋 🚴

修复 系统有多个PLC,但只显示第1个PLC的连接状态,现在任何一个断开都会触发报警

优化 AppJustOne 能实现程序重启
parent 8957f54b
...@@ -8,6 +8,17 @@ namespace FLY.AppHelper ...@@ -8,6 +8,17 @@ namespace FLY.AppHelper
{ {
public class AppJustOne public class AppJustOne
{ {
static bool IsReboot = false;
public static void Restart() {
//通知AppJustOne不要限制
IsReboot = true;
//重启软件
System.Windows.Forms.Application.Restart();
Application.Current.Shutdown();
}
public AppJustOne(Application app) public AppJustOne(Application app)
{ {
app.Startup += new StartupEventHandler(app_Startup); app.Startup += new StartupEventHandler(app_Startup);
...@@ -16,6 +27,13 @@ namespace FLY.AppHelper ...@@ -16,6 +27,13 @@ namespace FLY.AppHelper
void app_Startup(object sender, StartupEventArgs e) void app_Startup(object sender, StartupEventArgs e)
{ {
if (IsReboot)
{
IsReboot = false;
return;
}
Process process = Process.GetCurrentProcess(); Process process = Process.GetCurrentProcess();
string name = process.ProcessName; string name = process.ProcessName;
......
...@@ -47,6 +47,14 @@ namespace FLY.AppHelper ...@@ -47,6 +47,14 @@ namespace FLY.AppHelper
wsl = this.window.WindowState; wsl = this.window.WindowState;
this.window.StateChanged += new EventHandler(window_StateChanged); this.window.StateChanged += new EventHandler(window_StateChanged);
this.window.Closing += new System.ComponentModel.CancelEventHandler(window_Closing); this.window.Closing += new System.ComponentModel.CancelEventHandler(window_Closing);
Application.ApplicationExit += Application_ApplicationExit;
}
private void Application_ApplicationExit(object sender, EventArgs e)
{
notifyIcon.Dispose();
System.Environment.Exit(0); //这个是不会触发 ApplicationExit, 但可以把全部线程清除掉
} }
...@@ -61,9 +69,9 @@ namespace FLY.AppHelper ...@@ -61,9 +69,9 @@ namespace FLY.AppHelper
if (r == System.Windows.MessageBoxResult.Yes) if (r == System.Windows.MessageBoxResult.Yes)
{ {
//notifyIcon.Visible = false; //notifyIcon.Visible = false;
notifyIcon.Dispose(); //notifyIcon.Dispose();
//System.Windows.Application.Current.Shutdown(); //System.Windows.Application.Current.Shutdown();
System.Environment.Exit(0); Application.Exit();
} }
} }
void window_Closing(object sender, System.ComponentModel.CancelEventArgs e) void window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
......
...@@ -120,7 +120,7 @@ namespace FLY.OBJComponents.Client ...@@ -120,7 +120,7 @@ namespace FLY.OBJComponents.Client
public string[] GetSyncPropNames() public string[] GetSyncPropNames()
{ {
return new string[] { return new string[] {
"IsConnectedWithPLC" nameof(IsConnectedWithPLC)
}; };
} }
......
...@@ -20,13 +20,13 @@ namespace FLY.OBJComponents.Server ...@@ -20,13 +20,13 @@ namespace FLY.OBJComponents.Server
/// <summary> /// <summary>
/// 需要设置 /// 需要设置
/// </summary> /// </summary>
IPLCProxySystemService PLCos; PLCProxySystem PLCos;
/// <summary> /// <summary>
/// 报警系统 /// 报警系统
/// </summary> /// </summary>
WarningSystem mWarning; WarningSystem mWarning;
public byte ErrCode=0; public byte ErrCode=0;
public ErrorConf(IPLCProxySystemService PLCos, WarningSystem mWarning, string plcName) public ErrorConf(PLCProxySystem PLCos, WarningSystem mWarning, string plcName)
{ {
this.PLCos = PLCos; this.PLCos = PLCos;
this.mWarning = mWarning; this.mWarning = mWarning;
...@@ -98,22 +98,27 @@ namespace FLY.OBJComponents.Server ...@@ -98,22 +98,27 @@ namespace FLY.OBJComponents.Server
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
//连接断开事件 //连接断开事件, 3秒查一次,不能有复位的机会
FObjBase.PollModule.Current.Poll_Config(PollModule.POLL_CONFIG.ADD, FObjBase.PollModule.Current.Poll_Config(PollModule.POLL_CONFIG.ADD,
() => () =>
{ {
Misc.BindingOperations.SetBinding(PLCos, nameof(PLCos.IsConnectedWithPLC), () => for (int i = 0; i < PLCos.PLCs.Count(); i++)
{ {
bool b = !PLCos.IsConnectedWithPLC; bool b = !PLCos.PLCs[i].Client.IsConnected;
ERR_STATE state = b ? ERR_STATE.ON : ERR_STATE.OFF; ERR_STATE state = b ? ERR_STATE.ON : ERR_STATE.OFF;
ERRNO errno = PlcErrNos.ERRNO_PLC_DISCONNECTED; ERRNO errno = PlcErrNos.ERRNO_PLC_DISCONNECTED;
byte errcode = errno.Code; byte errcode = (byte)(errno.Code - i);
string description = $"{plcName} "+errno.Descrption; string description;
if (PLCos.PLCs.Count() > 1)
description = $"{plcName} No.{i} " + errno.Descrption;
else
description = $"{plcName} " + errno.Descrption;
mWarning.Add(errcode, description, state); mWarning.Add(errcode, description, state);
}); }
}, TimeSpan.FromSeconds(3), true, false, this, MARKNO_DELAY_ISCONNECTED, true);
}, TimeSpan.FromSeconds(3), true, false, this, MARKNO_DELAY_ISCONNECTED, false);
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
//启动定时器,每1秒查报警,防止 以为报警复位了,但其实还在报警 //启动定时器,每1秒查报警,防止 以为报警复位了,但其实还在报警
......
...@@ -111,12 +111,18 @@ namespace FLY.OBJComponents.Server ...@@ -111,12 +111,18 @@ namespace FLY.OBJComponents.Server
} }
Misc.BindingOperations.SetBinding(PLCs[0].Client, "IsConnected", () =>
//任何一个PLC断开,也会显示连接断开
IsConnectedWithPLC = PLCs.All(plc => plc.Client.IsConnected);
foreach (var plc in PLCs)
{
plc.Client.PropertyChanged += (s, e) =>
{ {
IsConnectedWithPLC = PLCs[0].Client.IsConnected; if (e.PropertyName == nameof(Modbus.WithThread.ClientTCP.IsConnected)) {
//if (!IsConnectedWithPLC) IsConnectedWithPLC = PLCs.All(p => p.Client.IsConnected);
// ClearPlan(); }
}); };
}
foreach (var obj in ObjNames.Values) foreach (var obj in ObjNames.Values)
{ {
...@@ -357,7 +363,7 @@ namespace FLY.OBJComponents.Server ...@@ -357,7 +363,7 @@ namespace FLY.OBJComponents.Server
public string[] GetSyncPropNames() public string[] GetSyncPropNames()
{ {
return new string[] { "IsConnectedWithPLC" }; return new string[] { nameof(IsConnectedWithPLC) };
} }
public string[] GetNoSyncPropNames() public string[] GetNoSyncPropNames()
......
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