Skip to content

Commit

Permalink
Resolve crash TIA
Browse files Browse the repository at this point in the history
  • Loading branch information
caprican committed Apr 25, 2024
1 parent ee556c1 commit 88205c4
Show file tree
Hide file tree
Showing 6 changed files with 190 additions and 76 deletions.
102 changes: 96 additions & 6 deletions Extract.Core/Properties/Resources.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

42 changes: 36 additions & 6 deletions Extract.Core/Properties/Resources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -118,24 +118,54 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="BuildAlarmsEnded" xml:space="preserve">
<value>Génération des alarmes terminée</value>
<value>HMI alarm generation completed</value>
</data>
<data name="BuildAlarms_AlarmOn" xml:space="preserve">
<value>on</value>
</data>
<data name="BuildAlarms_BuildAlarmFrom" xml:space="preserve">
<value>Build HMI alarm from</value>
</data>
<data name="BuildAlarms_BuilderNoCompatible" xml:space="preserve">
<value>Builder non compatible with</value>
</data>
<data name="BuildAlarms_CannotCompile" xml:space="preserve">
<value>do not compil</value>
</data>
<data name="BuildAlarms_CreateAlarm" xml:space="preserve">
<value>Create HMI alarm from</value>
</data>
<data name="BuildAlarms_ExtractAlarmForm" xml:space="preserve">
<value>Extract HMI alarms from</value>
</data>
<data name="BuildAlarms_NoConnexionDevice" xml:space="preserve">
<value>No connexion found between</value>
</data>
<data name="BuildAlarms_NoConnexionDeviceAnd" xml:space="preserve">
<value>and</value>
</data>
<data name="BuildAlarms_UpdateAlarm" xml:space="preserve">
<value>Updayte HMI alarm from</value>
</data>
<data name="BuildAlarms_UpdateOnDevice" xml:space="preserve">
<value>HMI Alarms updated on</value>
</data>
<data name="CancelByUser" xml:space="preserve">
<value>La génération à été annulé par l'utilisateur</value>
<value>Build canceled by user</value>
</data>
<data name="ContextMenu_GlobalDb" xml:space="preserve">
<value>Build</value>
</data>
<data name="EmptyGlobalDb" xml:space="preserve">
<value>Aucun DB d'alarmes trouvé dans le dossier</value>
<value>No alarm DB found in folder</value>
</data>
<data name="Feedback_AlarmsUpdated_Text" xml:space="preserve">
<value>Alarmes mises à jour</value>
<value>Alarms updated</value>
</data>
<data name="Feedback_NoProject_Text" xml:space="preserve">
<value>Aucun projet trouvé</value>
<value>No projects found</value>
</data>
<data name="TaskGenerateCancel" xml:space="preserve">
<value>La tâche à été annulé par l'utilisateur</value>
<value>Tack canceled by user</value>
</data>
</root>
38 changes: 15 additions & 23 deletions Extract_V18/AlarmsTextsAddIn.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public class AlarmsTextsAddIn : ContextMenuAddIn

private const string databaseMark = "_Defauts";
private const string userFolder = "UserFiles";
private const string alarmsClassName = "Alarm";

private FeedbackContext _feedbackContext;

Expand All @@ -57,7 +58,6 @@ public class AlarmsTextsAddIn : ContextMenuAddIn
public AlarmsTextsAddIn(TiaPortal tiaPortal) : base(s_DisplayNameOfAddIn)
{
_tiaPortal = tiaPortal;
GetFeedbackContext();

//#if DEBUG
// Core.Properties.Resources.Culture = new CultureInfo("en-US");
Expand Down Expand Up @@ -95,11 +95,9 @@ private MenuStatus OnCanGenerate(MenuSelectionProvider<IEngineeringObject> menuS
// Disabled = Visible but not executable
// Hidden = Item will not be shown

var select1 = menuSelectionProvider.GetSelection<SimaticSW.GlobalDB>();
var select2 = menuSelectionProvider.GetSelection<SimaticSW.PlcBlockUserGroup>();
var select3 = menuSelectionProvider.GetSelection<TagTable>();

if (select1.Any() || select2.Any() || select3.Any())
if (menuSelectionProvider.GetSelection<SimaticSW.GlobalDB>().Any() ||
menuSelectionProvider.GetSelection<SimaticSW.PlcBlockUserGroup>().Any() ||
menuSelectionProvider.GetSelection<TagTable>().Any())
return MenuStatus.Enabled;
else
return MenuStatus.Hidden;
Expand Down Expand Up @@ -147,14 +145,13 @@ private void OnGenerate(MenuSelectionProvider<IEngineeringObject> menuSelectionP
do
{
if (tempGroupList[0].Blocks.Where(bloc => bloc is SimaticSW.GlobalDB).Cast<SimaticSW.GlobalDB>() is IEnumerable<SimaticSW.GlobalDB> globalDBs)
{
foreach (var plcDataBlock in globalDBs)
{
asUpdateAlarms = true;
BuildAlarms(exclusiveAccess, plcDataBlock, projectPath.Directory.FullName);
_feedbackContext.Log(NotificationIcon.Success, Extract.Core.Properties.Resources.Feedback_AlarmsUpdated_Text);
}
}

if (tempGroupList[0].Groups.Count > 0)
tempGroupList.AddRange(tempGroupList[0].Groups);

Expand All @@ -171,7 +168,6 @@ private void OnGenerate(MenuSelectionProvider<IEngineeringObject> menuSelectionP
break;
case TagTable hmiTagTable:
var hmiSoft = GetDeviceSoftware<HmiSoftware>(hmiTagTable);

foreach (var connection in hmiSoft.Connections)
{
var devices = new List<Device>();
Expand All @@ -198,13 +194,11 @@ private void OnGenerate(MenuSelectionProvider<IEngineeringObject> menuSelectionP
{
var group = plcSoftware.BlockGroup.Groups.Find(hmiTagTable.Name);
foreach (var plcGroupBlock in group.Blocks.Where(bloc => bloc.Name.EndsWith(databaseMark)))
{
if (plcGroupBlock is SimaticSW.GlobalDB dB)
{
BuildAlarms(exclusiveAccess, dB, projectPath.Directory.FullName);
_feedbackContext.Log(NotificationIcon.Success, Extract.Core.Properties.Resources.Feedback_AlarmsUpdated_Text);
}
}
}
}
}
Expand All @@ -217,9 +211,9 @@ private void OnGenerate(MenuSelectionProvider<IEngineeringObject> menuSelectionP

public void BuildAlarms(ExclusiveAccess exclusiveAccess, SimaticSW.GlobalDB globalDB, string projectDirectoryPath)
{
_feedbackContext.Log(NotificationIcon.Information, $"Extraction des alarmes depuis {globalDB.Name}");
_feedbackContext.Log(NotificationIcon.Information, $"{Extract.Core.Properties.Resources.BuildAlarms_ExtractAlarmForm} {globalDB.Name}");

exclusiveAccess.Text = $"Génération des messages depuis {globalDB.Name}";
exclusiveAccess.Text = $"{Extract.Core.Properties.Resources.BuildAlarms_BuildAlarmFrom} {globalDB.Name}";

if (globalDB.Name.EndsWith(databaseMark))
{
Expand All @@ -234,7 +228,7 @@ public void BuildAlarms(ExclusiveAccess exclusiveAccess, SimaticSW.GlobalDB glob
var comp = globalDB.GetService<ICompilable>();
if (comp.Compile().State != CompilerResultState.Success)
{
_feedbackContext.Log(NotificationIcon.Error, $"{globalDB.Name} n'est pas compilable.");
_feedbackContext.Log(NotificationIcon.Error, $"{globalDB.Name} {Extract.Core.Properties.Resources.BuildAlarms_CannotCompile}");
return;
}
}
Expand Down Expand Up @@ -283,7 +277,6 @@ public void BuildAlarms(ExclusiveAccess exclusiveAccess, SimaticSW.GlobalDB glob
}
} while (deviceGroup.Count > 0);


foreach (var device in devices)
{
foreach (var deviceItem in device.DeviceItems)
Expand All @@ -300,18 +293,18 @@ public void BuildAlarms(ExclusiveAccess exclusiveAccess, SimaticSW.GlobalDB glob
switch (softContainer?.Software)
{
case HmiTarget hmi:
_feedbackContext.Log(NotificationIcon.Information, $"Générateur non compatible avec {device.Name}.");
_feedbackContext.Log(NotificationIcon.Information, $"{Extract.Core.Properties.Resources.BuildAlarms_BuilderNoCompatible} {device.Name}.");
break;
case HmiSoftware hmiUnified:
var connexion = hmiUnified.Connections.FirstOrDefault(con => con.Partner == plcSoft.Name);

if (connexion is null)
{
_feedbackContext.Log(NotificationIcon.Information, $"Pas de connexion trouvée entre {device.Name} et {plcSoft.Name}.");
_feedbackContext.Log(NotificationIcon.Information, $" {device.Name} et {plcSoft.Name}.");
break;
}

var alarmClass = hmiUnified.AlarmClasses.Find("Alarm");
var alarmClass = hmiUnified.AlarmClasses.Find(alarmsClassName);

foreach (var internalMember in globalDB.Interface.Members)
{
Expand Down Expand Up @@ -354,7 +347,7 @@ public void BuildAlarms(ExclusiveAccess exclusiveAccess, SimaticSW.GlobalDB glob
break;
}
else
alarmClass = hmiUnified.AlarmClasses.Find("Alarm");
alarmClass = hmiUnified.AlarmClasses.Find(alarmsClassName);
}
}
break;
Expand All @@ -366,17 +359,16 @@ public void BuildAlarms(ExclusiveAccess exclusiveAccess, SimaticSW.GlobalDB glob
if (hmiUnified.Tags.Find(tagname) is HmiTag hmiTag)
{
tag = hmiTag;
exclusiveAccess.Text = $"Mise à jour de l'alarme depuis {globalDB.Name}/{exportTag.Name} dans {device.Name}";
exclusiveAccess.Text = $"{Extract.Core.Properties.Resources.BuildAlarms_UpdateAlarm} {globalDB.Name}/{exportTag.Name} {Extract.Core.Properties.Resources.BuildAlarms_AlarmOn} {device.Name}";
}
else
{
exclusiveAccess.Text = $"Création de l'alarme depuis {globalDB.Name}/{exportTag.Name} dans {device.Name}";
exclusiveAccess.Text = $"{Extract.Core.Properties.Resources.BuildAlarms_CreateAlarm} {globalDB.Name}/{exportTag.Name} {Extract.Core.Properties.Resources.BuildAlarms_AlarmOn} {device.Name}";

if (string.IsNullOrEmpty(folderName))
tag = hmiUnified.Tags.Create(tagname);
else
{

var tagTables = new List<HmiTagTable>();
tagTables.AddRange(hmiUnified.TagTables);

Expand Down Expand Up @@ -419,7 +411,7 @@ public void BuildAlarms(ExclusiveAccess exclusiveAccess, SimaticSW.GlobalDB glob
}
}
}
_feedbackContext.Log(NotificationIcon.Success, $"Alarmes mis à jours sur {device.Name}");
_feedbackContext.Log(NotificationIcon.Success, $"{Extract.Core.Properties.Resources.BuildAlarms_UpdateOnDevice} {device.Name}");

break;
}
Expand Down
Loading

0 comments on commit 88205c4

Please sign in to comment.