修正Interlock在PLC同步数据之前可能意外错误触发的问题

调整ToolLoader中初始化各个管理器的顺序,以确保InterlockManager运行前PLC至少同步一次数据。
ToolLoader中增加IoProvider数据同步是否完成的检查。
修正和优化InterlockManager相关对象。
修正Module状态指示器的一些显示问题。
This commit is contained in:
Liang Su 2024-03-25 15:18:37 +08:00
parent 1a71898bc1
commit 33a1da6731
3 changed files with 25 additions and 21 deletions

View File

@ -10,7 +10,7 @@ using MECF.Framework.RT.Core.IoProviders;
namespace SicModules.Devices
{
public partial class SiemensIoProvider : IoProvider
public class SiemensIoProvider : IoProvider
{
private string _diVariable;
private string _doVariable;
@ -88,10 +88,6 @@ namespace SicModules.Devices
//byte[] byteArr = BitConverter.GetBytes(input[0]);
//float fValve = BitConverter.ToSingle(byteArr, 0);
var diData = ReadDIn();
//if (IsCommunicationError) return CommunicationError();
if (diData != null)

View File

@ -1,4 +1,5 @@
using Aitex.Core.RT.DataCollection.HighPerformance;
using Aitex.Core.RT.IOCore.Interlock;
using SicRT.Equipments.Systems;
using MECF.Framework.UI.Client.TrayThickness.HistoryData;
using MECF.Framework.Common.Aitex.Core.Common.DeviceData;
@ -17,31 +18,26 @@ namespace SicRT.Instances
public void Initialize()
{
#region Prepare Env
Singleton<LogManager>.Instance.Initialize();
LOG.Write($"RT v{RtInstance.SystemVersion} launch ...");
Singleton<ConfigManager>.Instance.Initialize();
Singleton<DataBaseManager>.Instance.Initialize();
Singleton<DataManager>.Instance.Initialize();
Singleton<OperationManager>.Instance.Initialize();
Singleton<EventManager>.Instance.Initialize(PathManager.GetCfgDir() + "EventDefine.xml");
AccountExManager.Instance.Initialize(true);
Singleton<SystemConfigManager>.Instance.Initialize(PathManager.GetCfgDir() + "System.sccfg");
RecipeFileManager.Instance.Initialize(new SicRecipeFileContext());
AccountExManager.Instance.Initialize(true);
#endregion
Singleton<SystemConfigManager>.Instance.Initialize(PathManager.GetCfgDir() + "System.sccfg");
ConnectionManager.Instance.Initialize();
MultiProcessClient.Instance.Initialize();
string ioProviderPathFile = PathManager.GetCfgDir() + "IoProviderConfig.xml";
var ioProviderPathFile = PathManager.GetCfgDir() + "IoProviderConfig.xml";
IoProviderManager.Instance.Initialize(ioProviderPathFile);
WaferManager.Instance.Initialize();
@ -70,21 +66,26 @@ namespace SicRT.Instances
// 若过早的使能DeviceManager被卸载的Module可能产生误报警。
Singleton<DeviceEntity>.Instance.Initialize();
// make sure the PLC data has been synced at least once to avoid erroneous warnings or alarms.
IoProviderManager.Instance.WaitFirstSync(1000);
HistoryCoatingManager.Instance.Initialize();
if (Singleton<EquipmentManager>.Instance.Modules[ModuleName.TM].IsInstalled)
IoManager.Instance.Initialize(PathManager.GetCfgDir() + "tm\\interlock.xml");
Singleton<InterlockManager>.Instance.Initialize(PathManager.GetCfgDir() + "tm\\interlock.xml", IoManager.Instance);
if (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1].IsInstalled)
IoManager.Instance.Initialize($"{PathManager.GetCfgDir()}pm\\pm1\\interlockPM1.xml");
Singleton<InterlockManager>.Instance.Initialize($"{PathManager.GetCfgDir()}pm\\pm1\\interlockPM1.xml", IoManager.Instance);
if (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM2].IsInstalled)
IoManager.Instance.Initialize($"{PathManager.GetCfgDir()}pm\\pm2\\interlockPM2.xml");
Singleton<InterlockManager>.Instance.Initialize($"{PathManager.GetCfgDir()}pm\\pm2\\interlockPM2.xml", IoManager.Instance);
MaintainManager2.Instance.Initialize();
Singleton<ProcessHistoryItemsDefault>.Instance.Initialize();
#region Post Prepare Env
//! DataCollectionManager必须在最后初始化否则在其之后注册的DATA数据均会被忽略
//Singleton<DataCollectionManager>.Instance.Initialize();
Singleton<DataTraceManager>.Instance.Initialize(["System", "IO.PM1", "IO.PM2", "IO.TM", "PM1", "PM2"]);
@ -92,7 +93,7 @@ namespace SicRT.Instances
//开启循环删除数据库
Singleton<DataBaseCleanerManager>.Instance.Initialize();
#endregion
}

View File

@ -462,6 +462,11 @@
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid.Resources>
<Style TargetType="controls:ModuleStatusIndicator">
<Setter Property="Margin" Value="0,2,4,2"/>
</Style>
</Grid.Resources>
<controls:ModuleStatusIndicator
Grid.Row="0"
Grid.Column="0"
@ -470,7 +475,9 @@
IsOnline="{Binding IsOnlineSystem}"
ModuleDescription="All Module"
ModuleName="System"
Status="{Binding RtStatus}" />
Status="{Binding RtStatus}"
d:IsOnline="true"
d:Status="Test"/>
<controls:ModuleStatusIndicator
Grid.Row="0"
Grid.Column="1"