diff --git a/mappFramework/Logical/ChineseHelp/mappFramework.chm b/mappFramework/Logical/ChineseHelp/mappFramework.chm index d18a2235..72c47f73 100644 Binary files a/mappFramework/Logical/ChineseHelp/mappFramework.chm and b/mappFramework/Logical/ChineseHelp/mappFramework.chm differ diff --git a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmHandling.st b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmHandling.st index eee808ee..dfc714d1 100644 --- a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmHandling.st +++ b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmHandling.st @@ -1,12 +1,12 @@ ACTION AlarmHandling: - // CommissioningModeActive = TRUE will inhibit Alarms[0]. The alarm will not trigger even if the alarm condition is active. - // CommissioningModeActive = FALSE will NOT inhibit Alarms[0]. The alarm will trigger when the alarm condition is active. - // See Alarm.mpalarmxcore (must enable Advanced Features) - CommissioningModeActive; + // CommissioningModeActive = TRUE will inhibit Alarms[0]. The alarm will not trigger even if the alarm condition is active. + // CommissioningModeActive = FALSE will NOT inhibit Alarms[0]. The alarm will trigger when the alarm condition is active. + // See Alarm.mpalarmxcore (must enable Advanced Features) + CommissioningModeActive; - // Define the condition which triggers each alarm below. - Alarms[0]; + // Define the condition which triggers each alarm below. + Alarms[0]; // Alarms[1] := ; // Alarms[2] := ; diff --git a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.st b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.st index 59ceebb0..a047c2aa 100644 --- a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.st +++ b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.st @@ -8,39 +8,39 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappAlarmXFiles'), pName := ADR('/')); + DirCreateAlarm(enable := TRUE, pDevice := ADR('mappAlarmXFiles'), pName := ADR('/')); // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreateAlarm.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreateAlarm(enable := FALSE); END_IF // Call action to intialize alarm samples AlarmSampleInit; // Initialize mapp function blocks - MpAlarmXCore_0.Enable := TRUE; - MpAlarmXCore_0.MpLink := ADR(gMpLinkAlarmXCore); - MpAlarmXCore_0(); - - MpAlarmXHistory_0.Enable := TRUE; - MpAlarmXHistory_0.DeviceName := ADR('mappAlarmXFiles'); - MpAlarmXHistory_0.MpLink := ADR(gMpLinkAlarmXHistory); - MpAlarmXHistory_0(); - - MpAlarmXListUI_0.Enable := TRUE; - MpAlarmXListUI_0.MpLink := ADR(gMpLinkAlarmXCore); - MpAlarmXListUI_0.UISetup.AlarmListScrollWindow := 10; - MpAlarmXListUI_0.UISetup.AlarmListSize := 50; - MpAlarmXListUI_0.UISetup.TimeStampPattern := '%Y %m %d %H:%M:%S'; - MpAlarmXListUI_0(); - - MpAlarmXHistoryUI_0.Enable := TRUE; - MpAlarmXHistoryUI_0.MpLink := ADR(gMpLinkAlarmXHistory); - MpAlarmXHistoryUI_0.UISetup.AlarmListScrollWindow := 10; - MpAlarmXHistoryUI_0.UISetup.AlarmListSize := (SIZEOF(MpAlarmXListUIConnect.AlarmList.InstanceID) / SIZEOF(MpAlarmXListUIConnect.AlarmList.InstanceID[0])); - MpAlarmXHistoryUI_0.UISetup.TimeStampPattern := '%Y %m %d %H:%M:%S'; - MpAlarmXHistoryUI_0(); + MpAlarmXCoreMain.Enable := TRUE; + MpAlarmXCoreMain.MpLink := ADR(gMpLinkAlarmXCore); + MpAlarmXCoreMain(); + + MpAlarmXHistoryMain.Enable := TRUE; + MpAlarmXHistoryMain.DeviceName := ADR('mappAlarmXFiles'); + MpAlarmXHistoryMain.MpLink := ADR(gMpLinkAlarmXHistory); + MpAlarmXHistoryMain(); + + MpAlarmXListUIMain.Enable := TRUE; + MpAlarmXListUIMain.MpLink := ADR(gMpLinkAlarmXCore); + MpAlarmXListUIMain.UISetup.AlarmListScrollWindow := 10; + MpAlarmXListUIMain.UISetup.AlarmListSize := 50; + MpAlarmXListUIMain.UISetup.TimeStampPattern := '%Y %m %d %H:%M:%S'; + MpAlarmXListUIMain(); + + MpAlarmXHistoryUIMain.Enable := TRUE; + MpAlarmXHistoryUIMain.MpLink := ADR(gMpLinkAlarmXHistory); + MpAlarmXHistoryUIMain.UISetup.AlarmListScrollWindow := 10; + MpAlarmXHistoryUIMain.UISetup.AlarmListSize := (SIZEOF(MpAlarmXListUIConnect.AlarmList.InstanceID) / SIZEOF(MpAlarmXListUIConnect.AlarmList.InstanceID[0])); + MpAlarmXHistoryUIMain.UISetup.TimeStampPattern := '%Y %m %d %H:%M:%S'; + MpAlarmXHistoryUIMain(); END_PROGRAM @@ -72,50 +72,50 @@ PROGRAM _CYCLIC END_IF // Error reset - IF NOT MpAlarmXCore_0.Error THEN - MpAlarmXCore_0.ErrorReset := FALSE; + IF NOT MpAlarmXCoreMain.Error THEN + MpAlarmXCoreMain.ErrorReset := FALSE; END_IF - IF NOT MpAlarmXListUI_0.Error THEN - MpAlarmXListUI_0.ErrorReset := FALSE; + IF NOT MpAlarmXListUIMain.Error THEN + MpAlarmXListUIMain.ErrorReset := FALSE; END_IF - IF NOT MpAlarmXHistory_0.Error THEN - MpAlarmXHistory_0.ErrorReset := FALSE; + IF NOT MpAlarmXHistoryMain.Error THEN + MpAlarmXHistoryMain.ErrorReset := FALSE; END_IF - IF NOT MpAlarmXHistoryUI_0.Error THEN - MpAlarmXHistoryUI_0.ErrorReset := FALSE; + IF NOT MpAlarmXHistoryUIMain.Error THEN + MpAlarmXHistoryUIMain.ErrorReset := FALSE; END_IF // Assign MpLinks & address references - MpAlarmXCore_0.MpLink := ADR(gMpLinkAlarmXCore); - MpAlarmXListUI_0.MpLink := ADR(gMpLinkAlarmXCore); - MpAlarmXListUI_0.UIConnect := ADR(MpAlarmXListUIConnect); - MpAlarmXHistory_0.MpLink := ADR(gMpLinkAlarmXHistory); - MpAlarmXHistory_0.DeviceName := ADR('mappAlarmXFiles'); - MpAlarmXHistoryUI_0.MpLink := ADR(gMpLinkAlarmXHistory); - MpAlarmXHistoryUI_0.UIConnect := ADR(MpAlarmXHistoryUIConnect); + MpAlarmXCoreMain.MpLink := ADR(gMpLinkAlarmXCore); + MpAlarmXListUIMain.MpLink := ADR(gMpLinkAlarmXCore); + MpAlarmXListUIMain.UIConnect := ADR(MpAlarmXListUIConnect); + MpAlarmXHistoryMain.MpLink := ADR(gMpLinkAlarmXHistory); + MpAlarmXHistoryMain.DeviceName := ADR('mappAlarmXFiles'); + MpAlarmXHistoryUIMain.MpLink := ADR(gMpLinkAlarmXHistory); + MpAlarmXHistoryUIMain.UIConnect := ADR(MpAlarmXHistoryUIConnect); // Call function blocks - MpAlarmXCore_0(); - MpAlarmXListUI_0(); - MpAlarmXHistory_0(); - MpAlarmXHistoryUI_0(); + MpAlarmXCoreMain(); + MpAlarmXListUIMain(); + MpAlarmXHistoryMain(); + MpAlarmXHistoryUIMain(); END_PROGRAM PROGRAM _EXIT // Disable the function blocls to unlink the MpLinks - MpAlarmXCore_0.Enable := FALSE; - MpAlarmXListUI_0.Enable := FALSE; - MpAlarmXHistory_0.Enable := FALSE; - MpAlarmXHistoryUI_0.Enable := FALSE; - QueryActiveAlarms_0.Enable := FALSE; + MpAlarmXCoreMain.Enable := FALSE; + MpAlarmXListUIMain.Enable := FALSE; + MpAlarmXHistoryMain.Enable := FALSE; + MpAlarmXHistoryUIMain.Enable := FALSE; + QueryActiveAlarms.Enable := FALSE; // Call function blocks - MpAlarmXCore_0(); - MpAlarmXListUI_0(); - MpAlarmXHistory_0(); - MpAlarmXHistoryUI_0(); - QueryActiveAlarms_0(); + MpAlarmXCoreMain(); + MpAlarmXListUIMain(); + MpAlarmXHistoryMain(); + MpAlarmXHistoryUIMain(); + QueryActiveAlarms(); END_PROGRAM \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.var b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.var index 3ccabefe..b8e6a378 100644 --- a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.var +++ b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.var @@ -1,12 +1,12 @@ (*Function Blocks*) VAR - MpAlarmXHistory_0 : MpAlarmXHistory; (*MpAlarmXHistory instance*) - MpAlarmXHistoryUI_0 : MpAlarmXHistoryUI; (*MpAlarmXHistoryUI instance*) - MpAlarmXListUI_0 : MpAlarmXListUI; (*MpAlarmXList instance*) - MpAlarmXCore_0 : MpAlarmXCore; (*MpAlarmXCore instance*) (*ChangeStyleAlarmButton : USINT := 0; (*changeStyle of a AlarmFlyout in mappView*) - MpAlarmXControlExample_0 : {REDUND_UNREPLICABLE} MpAlarmXAlarmControl; (*MpAlarmXAlarmControl instance*) - QueryActiveAlarms_0 : {REDUND_UNREPLICABLE} MpAlarmXQuery; (*MpAlarmXQuery instance*) - DirCreate_0 : DirCreate; (*DirCreate instance*) + MpAlarmXHistoryMain : MpAlarmXHistory; (*MpAlarmXHistory instance*) + MpAlarmXHistoryUIMain : MpAlarmXHistoryUI; (*MpAlarmXHistoryUI instance*) + MpAlarmXListUIMain : MpAlarmXListUI; (*MpAlarmXList instance*) + MpAlarmXCoreMain : MpAlarmXCore; (*MpAlarmXCore instance*) (*ChangeStyleAlarmButton : USINT := 0; (*changeStyle of a AlarmFlyout in mappView*) + MpAlarmXControlExample : {REDUND_UNREPLICABLE} MpAlarmXAlarmControl; (*MpAlarmXAlarmControl instance*) + QueryActiveAlarms : {REDUND_UNREPLICABLE} MpAlarmXQuery; (*MpAlarmXQuery instance*) + DirCreateAlarm : DirCreate; (*DirCreate instance*) END_VAR (*Constants*) VAR CONSTANT diff --git a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmSamples.st b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmSamples.st index 30029155..0aef044d 100644 --- a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmSamples.st +++ b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmSamples.st @@ -25,10 +25,10 @@ ACTION AlarmSampleFub: // Typically this function is called from other tasks within the application (decentralized). // For example, if you have an error in the recipe system, you can trigger it directly in the recipe task. // Therefore, copy/paste this example to other places in the application as needed. - MpAlarmXControlExample_0.MpLink := ADR(gMpLinkAlarmXCore); - MpAlarmXControlExample_0.Enable := TRUE; - MpAlarmXControlExample_0.Name := ADR('MpAlarmXControlExample'); - MpAlarmXControlExample_0.Set := AlarmExamples.SetControlExample; - MpAlarmXControlExample_0(); + MpAlarmXControlExample.MpLink := ADR(gMpLinkAlarmXCore); + MpAlarmXControlExample.Enable := TRUE; + MpAlarmXControlExample.Name := ADR('MpAlarmXControlExample'); + MpAlarmXControlExample.Set := AlarmExamples.SetControlExample; + MpAlarmXControlExample(); END_ACTION \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/ExecuteQuery.st b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/ExecuteQuery.st index f08e9835..aae3db8f 100644 --- a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/ExecuteQuery.st +++ b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/ExecuteQuery.st @@ -1,11 +1,11 @@ ACTION ExecuteQuery: // Initialize mapp function block - QueryActiveAlarms_0.MpLink := ADR(gMpLinkAlarmXCore); - QueryActiveAlarms_0.Enable := TRUE; - QueryActiveAlarms_0.Name := ADR('ActiveAlarms'); - QueryActiveAlarms_0.Language := ADR('en'); - QueryActiveAlarms_0(); + QueryActiveAlarms.MpLink := ADR(gMpLinkAlarmXCore); + QueryActiveAlarms.Enable := TRUE; + QueryActiveAlarms.Name := ADR('ActiveAlarms'); + QueryActiveAlarms.Language := ADR('en'); + QueryActiveAlarms(); CASE (AlarmQuery.State) OF ACTIVE_ALARM_WAIT: @@ -13,35 +13,35 @@ ACTION ExecuteQuery: // If you prefer that the query runs anytime new data is available, then uncomment line 15 and comment out line 16 and delete // the "Run query" button from the HMI. //IF (AlarmQuery.LastUpdateCount <> AlarmQuery.UpdateCount) THEN - IF (HmiAlarmX.Commands.RunQuery = TRUE) THEN + IF (HmiAlarmX.Commands.RunQuery) THEN brsmemset(ADR(AlarmQuery.Alarms[0]), 0, SIZEOF(AlarmQuery.Alarms)); AlarmQuery.LastUpdateCount := AlarmQuery.UpdateCount; - QueryActiveAlarms_0.Execute := TRUE; + QueryActiveAlarms.Execute := TRUE; HmiAlarmX.Commands.RunQuery := FALSE; AlarmQuery.State := ACTIVE_ALARM_QUERY; END_IF ACTIVE_ALARM_QUERY: // If the number of query results is less than MAX_QUERY_RESULTS, return to the wait state - IF ((QueryActiveAlarms_0.CommandDone = TRUE) AND (QueryActiveAlarms_0.Info.HasMoreRows = FALSE)) THEN - QueryActiveAlarms_0.Execute := FALSE; - QueryActiveAlarms_0.Next := FALSE; + IF (QueryActiveAlarms.CommandDone AND (NOT QueryActiveAlarms.Info.HasMoreRows)) THEN + QueryActiveAlarms.Execute := FALSE; + QueryActiveAlarms.Next := FALSE; AlarmQuery.State := ACTIVE_ALARM_WAIT; // If the number of query results is more than MAX_QUERY_RESULTS, then query the next set of results - ELSIF ((QueryActiveAlarms_0.CommandDone = TRUE) AND (QueryActiveAlarms_0.Info.HasMoreRows = TRUE)) THEN - QueryActiveAlarms_0.Next := FALSE; + ELSIF ((QueryActiveAlarms.CommandDone) AND (QueryActiveAlarms.Info.HasMoreRows)) THEN + QueryActiveAlarms.Next := FALSE; AlarmQuery.State := ACTIVE_ALARM_NEXT; END_IF ACTIVE_ALARM_NEXT: - IF (AlarmQuery.Next = TRUE) THEN + IF (AlarmQuery.Next) THEN // By default, AlarmQuery.Alarms has 20 elements, so it can hold 20 query results at a time (MAX_QUERY_RESULTS = 19). // If AlarmQuery.Next is true, this means the query result is more than 20 alarms. // If you want to save the data for the first 20 alarms, add code here to copy AlarmQuery.Alarms to another location. // Otherwise, the older alarms in the query will get overwritten with the newest entries here. brsmemset(ADR(AlarmQuery.Alarms[0]), 0, SIZEOF(AlarmQuery.Alarms)); AlarmQuery.Next := FALSE; - QueryActiveAlarms_0.Next := TRUE; + QueryActiveAlarms.Next := TRUE; AlarmQuery.State := ACTIVE_ALARM_QUERY; END_IF END_CASE diff --git a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/HMIActions.st index f7606583..4dceedef 100644 --- a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/HMIActions.st @@ -3,7 +3,7 @@ ACTION GetBacktraceInformation: MaxIndex := (SIZEOF(MpAlarmXListUIConnect.AlarmList.InstanceID)/SIZEOF(MpAlarmXListUIConnect.AlarmList.InstanceID[0])) - 1; // Find selected alarm in order to show backtrace information FOR i := 0 TO MaxIndex DO - IF (MpAlarmXCore_0.PendingAlarms = 0) THEN + IF (MpAlarmXCoreMain.PendingAlarms = 0) THEN // No pending alarms, reset instance id HmiAlarmX.Parameters.InstanceID := 0; EXIT; @@ -16,7 +16,7 @@ ACTION GetBacktraceInformation: END_IF IF (MpAlarmXListUIConnect.AlarmList.InstanceID[i] = 0) THEN - IF (MpAlarmXCore_0.PendingAlarms > i) THEN + IF (MpAlarmXCoreMain.PendingAlarms > i) THEN // Alarm not found, list can page up MpAlarmXListUIConnect.AlarmList.PageUp := TRUE; END_IF @@ -46,12 +46,12 @@ END_ACTION ACTION ExportAlarms: - IF (HmiAlarmX.Commands.ExportAlarms = TRUE) THEN - MpAlarmXHistory_0.Export := TRUE; + IF (HmiAlarmX.Commands.ExportAlarms) THEN + MpAlarmXHistoryMain.Export := TRUE; END_IF - IF ((MpAlarmXHistory_0.Export = TRUE) AND (MpAlarmXHistory_0.CommandDone = TRUE)) THEN - MpAlarmXHistory_0.Export := FALSE; + IF ((MpAlarmXHistoryMain.Export) AND (MpAlarmXHistoryMain.CommandDone)) THEN + MpAlarmXHistoryMain.Export := FALSE; HmiAlarmX.Commands.ExportAlarms := FALSE; HmiAlarmX.Status.AlarmExportDone := TRUE; END_IF diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.st b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.st index 10ceea0a..97480a30 100644 --- a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.st +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.st @@ -8,36 +8,36 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappAuditFiles'), pName := ADR('/')); + DirCreateAudit(enable := TRUE, pDevice := ADR('mappAuditFiles'), pName := ADR('/')); // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreateAudit.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreateAudit(enable := FALSE); END_IF // Initialize mapp function blocks - MpAuditTrail_0.Enable := TRUE; - MpAuditTrail_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrail_0.Language := ADR('en'); - MpAuditTrail_0.DeviceName := ADR('mappAuditFiles'); - MpAuditTrail_0(); - - MpAuditTrailConfig_0.Enable := TRUE; - MpAuditTrailConfig_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrailConfig_0.Configuration := ADR(AuditTrailConfig); - MpAuditTrailConfig_0.Load := TRUE; - MpAuditTrailConfig_0(); - - MpAuditTrail_CEvents.Enable := TRUE; - MpAuditTrail_CEvents.MpLink := ADR(gMpLinkCustomEvents); - MpAuditTrail_CEvents(); - - MpAuditTrailUI_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrailUI_0.UIConnect := ADR(MpAuditTrailUIConnect); - MpAuditTrailUI_0.UISetup.EventListSize := SIZEOF(MpAuditTrailUIConnect.Output.EventID) / SIZEOF(MpAuditTrailUIConnect.Output.EventID[0]); - MpAuditTrailUI_0.UISetup.ScrollWindow := 1; - MpAuditTrailUI_0.Enable := TRUE; - MpAuditTrailUI_0(); + MpAuditTrailSys.Enable := TRUE; + MpAuditTrailSys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailSys.Language := ADR('en'); + MpAuditTrailSys.DeviceName := ADR('mappAuditFiles'); + MpAuditTrailSys(); + + MpAuditTrailConfigSys.Enable := TRUE; + MpAuditTrailConfigSys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailConfigSys.Configuration := ADR(AuditTrailConfig); + MpAuditTrailConfigSys.Load := TRUE; + MpAuditTrailConfigSys(); + + MpAuditTrailCEvents.Enable := TRUE; + MpAuditTrailCEvents.MpLink := ADR(gMpLinkCustomEvents); + MpAuditTrailCEvents(); + + MpAuditTrailUISys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailUISys.UIConnect := ADR(MpAuditTrailUIConnect); + MpAuditTrailUISys.UISetup.EventListSize := SIZEOF(MpAuditTrailUIConnect.Output.EventID) / SIZEOF(MpAuditTrailUIConnect.Output.EventID[0]); + MpAuditTrailUISys.UISetup.ScrollWindow := 1; + MpAuditTrailUISys.Enable := TRUE; + MpAuditTrailUISys(); // Initialize custom events CustomEvent[0].Type := "Custom Event Type"; @@ -96,40 +96,40 @@ PROGRAM _CYCLIC END_IF // Error reset - IF NOT MpAuditTrail_0.Error THEN - MpAuditTrail_0.ErrorReset := FALSE; + IF NOT MpAuditTrailSys.Error THEN + MpAuditTrailSys.ErrorReset := FALSE; END_IF // Assign MpLinks & address references - MpAuditTrail_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrail_0.DeviceName := ADR('mappAuditFiles'); - MpAuditTrailConfig_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrailConfig_0.Configuration := ADR(AuditTrailConfig); - MpAuditTrail_CEvents.MpLink := ADR(gMpLinkCustomEvents); - MpAuditTrailUI_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrailUI_0.UIConnect := ADR(MpAuditTrailUIConnect); + MpAuditTrailSys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailSys.DeviceName := ADR('mappAuditFiles'); + MpAuditTrailConfigSys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailConfigSys.Configuration := ADR(AuditTrailConfig); + MpAuditTrailCEvents.MpLink := ADR(gMpLinkCustomEvents); + MpAuditTrailUISys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailUISys.UIConnect := ADR(MpAuditTrailUIConnect); // Call function blocks - MpAuditTrail_0(); - MpAuditTrailConfig_0(); - MpAuditTrail_CEvents(); - MpAuditTrailUI_0(); + MpAuditTrailSys(); + MpAuditTrailConfigSys(); + MpAuditTrailCEvents(); + MpAuditTrailUISys(); END_PROGRAM PROGRAM _EXIT // Disable the function blocks to unlink the MpLinks - MpAuditTrail_0.Enable := FALSE; - MpAuditTrailConfig_0.Enable := FALSE; - MpAuditTrail_CEvents.Enable := FALSE; - MpAuditTrailUI_0.Enable := FALSE; + MpAuditTrailSys.Enable := FALSE; + MpAuditTrailConfigSys.Enable := FALSE; + MpAuditTrailCEvents.Enable := FALSE; + MpAuditTrailUISys.Enable := FALSE; // Call function blocks - MpAuditTrail_0(); - MpAuditTrailConfig_0(); - MpAuditTrail_CEvents(); - MpAuditTrailUI_0(); + MpAuditTrailSys(); + MpAuditTrailConfigSys(); + MpAuditTrailCEvents(); + MpAuditTrailUISys(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.var b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.var index 208f3d1e..6dfb91a6 100644 --- a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.var +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.var @@ -1,11 +1,11 @@ (*Function Blocks*) VAR - DirCreate_0 : DirCreate; (*DirCreate instance*) - MpAuditTrail_0 : MpAuditTrail; (*AuditTrail for regular mapp events*) - MpAuditTrailConfig_0 : MpAuditTrailConfig; (*AuditTrail configuration*) - MpAuditTrail_CEvents : MpAuditTrail; (*AuditTrail for custom events*) - QueryUserEvents_0 : {REDUND_UNREPLICABLE} MpAuditQuery; (*MpAlarmXQuery instance*) - MpAuditTrailUI_0 : MpAuditTrailUI; (*AuditTrail UI interface*) + DirCreateAudit : DirCreate; (*DirCreate instance*) + MpAuditTrailSys : MpAuditTrail; (*AuditTrail for regular mapp events*) + MpAuditTrailConfigSys : MpAuditTrailConfig; (*AuditTrail configuration*) + MpAuditTrailCEvents : MpAuditTrail; (*AuditTrail for custom events*) + QueryUserEvents : {REDUND_UNREPLICABLE} MpAuditQuery; (*MpAlarmXQuery instance*) + MpAuditTrailUISys : MpAuditTrailUI; (*AuditTrail UI interface*) END_VAR (*Constants*) VAR CONSTANT diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ChangeConfiguration.st b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ChangeConfiguration.st index 346df19a..1b91aae9 100644 --- a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ChangeConfiguration.st +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ChangeConfiguration.st @@ -1,30 +1,30 @@ ACTION ChangeConfiguration: - MpAuditTrailConfig_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrailConfig_0.Configuration := ADR(AuditTrailConfig); + MpAuditTrailConfigSys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailConfigSys.Configuration := ADR(AuditTrailConfig); - IF (MpAuditTrailConfig_0.Error = TRUE) THEN - IF (MpAuditTrailConfig_0.StatusID = mpAUDIT_ERR_CONFIG_LOAD) THEN + IF (MpAuditTrailConfigSys.Error) THEN + IF (MpAuditTrailConfigSys.StatusID = mpAUDIT_ERR_CONFIG_LOAD) THEN LoadAuditConfiguration; END_IF - MpAuditTrailConfig_0.Load := FALSE; - MpAuditTrailConfig_0.Save := FALSE; - MpAuditTrailConfig_0.ErrorReset := TRUE; + MpAuditTrailConfigSys.Load := FALSE; + MpAuditTrailConfigSys.Save := FALSE; + MpAuditTrailConfigSys.ErrorReset := TRUE; END_IF - MpAuditTrailConfig_0(); - MpAuditTrailConfig_0.ErrorReset := FALSE; + MpAuditTrailConfigSys(); + MpAuditTrailConfigSys.ErrorReset := FALSE; - IF (MpAuditTrailConfig_0.CommandDone = TRUE) THEN - IF (MpAuditTrailConfig_0.Load = TRUE) THEN + IF (MpAuditTrailConfigSys.CommandDone) THEN + IF (MpAuditTrailConfigSys.Load) THEN LoadAuditConfiguration; END_IF // after save the AuditTrail needs to restart - IF (MpAuditTrailConfig_0.Save = TRUE) THEN - MpAuditTrail_0.Enable := FALSE; + IF (MpAuditTrailConfigSys.Save) THEN + MpAuditTrailSys.Enable := FALSE; END_IF - MpAuditTrailConfig_0.Load := FALSE; - MpAuditTrailConfig_0.Save := FALSE; + MpAuditTrailConfigSys.Load := FALSE; + MpAuditTrailConfigSys.Save := FALSE; END_IF END_ACTION diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ExecuteQuery.st b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ExecuteQuery.st index 8834ce95..7fda1b0c 100644 --- a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ExecuteQuery.st +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ExecuteQuery.st @@ -1,11 +1,11 @@ ACTION ExecuteQuery: // Initialize mapp function block - QueryUserEvents_0.MpLink := ADR(gMpLinkAuditTrail); - QueryUserEvents_0.Enable := TRUE; - QueryUserEvents_0.Name := ADR(HmiAudit.Status.Query.Name); - QueryUserEvents_0.Language := ADR('en'); - QueryUserEvents_0(); + QueryUserEvents.MpLink := ADR(gMpLinkAuditTrail); + QueryUserEvents.Enable := TRUE; + QueryUserEvents.Name := ADR(HmiAudit.Status.Query.Name); + QueryUserEvents.Language := ADR('en'); + QueryUserEvents(); CASE (AuditQuery.State) OF ACTIVE_AUDIT_WAIT: @@ -13,12 +13,12 @@ ACTION ExecuteQuery: // If you prefer that the query runs anytime new data is available, then uncomment line 15 and comment out line 16 and delete // the "Run query" button from the HMI. //IF (AuditQuery.LastUpdateCount <> AuditQuery.UpdateCount) THEN - IF (HmiAudit.Commands.RunQuery = TRUE) THEN + IF (HmiAudit.Commands.RunQuery) THEN // Call the custom event function when the query execution is triggered MpAuditCustomEvent(gMpLinkCustomEvents,CustomEvent[2].Type,CustomEvent[2].Msg,CustomEvent[2].Comment); brsmemset(ADR(AuditQuery.Audits[0]), 0, SIZEOF(AuditQuery.Audits)); AuditQuery.LastUpdateCount := AuditQuery.UpdateCount; - QueryUserEvents_0.Execute := TRUE; + QueryUserEvents.Execute := TRUE; HmiAudit.Commands.RunQuery := FALSE; IF (HmiAudit.Status.Query.Name = 'UserEvents') THEN HmiAudit.Status.Query.Option := 0; @@ -31,27 +31,27 @@ ACTION ExecuteQuery: ACTIVE_AUDIT_QUERY: // If the number of query results is less than MAX_QUERY_RESULTS, return to the wait state - IF ((QueryUserEvents_0.CommandDone = TRUE) AND (QueryUserEvents_0.Info.HasMoreRows = FALSE)) THEN + IF ((QueryUserEvents.CommandDone) AND (NOT QueryUserEvents.Info.HasMoreRows)) THEN // Call the custom event function when the query execution is done MpAuditCustomEvent(gMpLinkCustomEvents,"Cmd Done","Executing the query command has finished","For additional information check the logger."); - QueryUserEvents_0.Execute := FALSE; - QueryUserEvents_0.Next := FALSE; + QueryUserEvents.Execute := FALSE; + QueryUserEvents.Next := FALSE; AuditQuery.State := ACTIVE_AUDIT_WAIT; // If the number of query results is more than MAX_QUERY_RESULTS, then query the next set of results - ELSIF ((QueryUserEvents_0.CommandDone = TRUE) AND (QueryUserEvents_0.Info.HasMoreRows = TRUE)) THEN - QueryUserEvents_0.Next := FALSE; + ELSIF ((QueryUserEvents.CommandDone) AND (QueryUserEvents.Info.HasMoreRows)) THEN + QueryUserEvents.Next := FALSE; AuditQuery.State := ACTIVE_AUDIT_NEXT; END_IF ACTIVE_AUDIT_NEXT: - IF (AuditQuery.Next = TRUE) THEN + IF (AuditQuery.Next) THEN // By default, AuditQuery.Alarms has 20 elements, so it can hold 20 query results at a time (MAX_QUERY_RESULTS = 19). // If AuditQuery.Next is true, this means the query result is more than 20 alarms. // If you want to save the data for the first 20 alarms, add code here to copy AuditQuery.Alarms to another location. // Otherwise, the older alarms in the query will get overwritten with the newest entries here. brsmemset(ADR(AuditQuery.Audits[0]), 0, SIZEOF(AuditQuery.Audits)); AuditQuery.Next := FALSE; - QueryUserEvents_0.Next := TRUE; + QueryUserEvents.Next := TRUE; AuditQuery.State := ACTIVE_AUDIT_QUERY; END_IF END_CASE diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/HMIActions.st index 751c1a0b..aa5a15bf 100644 --- a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/HMIActions.st @@ -1,11 +1,11 @@ ACTION ArchiveExport: // Assign variables to exchange with the HMI - MpAuditTrail_0.ExportArchive := HmiAudit.Commands.ExportArchives; - HmiAudit.Status.ArchiveAvailable := MpAuditTrail_0.ArchiveAvailable; - HmiAudit.Status.NumberOfArchives := MpAuditTrail_0.Info.NumberArchives; + MpAuditTrailSys.ExportArchive := HmiAudit.Commands.ExportArchives; + HmiAudit.Status.ArchiveAvailable := MpAuditTrailSys.ArchiveAvailable; + HmiAudit.Status.NumberOfArchives := MpAuditTrailSys.Info.NumberArchives; - IF (HmiAudit.Commands.ExportArchives AND MpAuditTrail_0.CommandDone) THEN + IF (HmiAudit.Commands.ExportArchives AND MpAuditTrailSys.CommandDone) THEN HmiAudit.Commands.ExportArchives := FALSE; END_IF @@ -14,15 +14,15 @@ END_ACTION ACTION ArchiveSettings: // Audit Trail Config implementation - IF (HmiAudit.Commands.SaveConfig = TRUE) THEN + IF (HmiAudit.Commands.SaveConfig) THEN HmiAudit.Commands.SaveConfig := FALSE; SaveAuditConfiguration; - MpAuditTrailConfig_0.Save := TRUE; + MpAuditTrailConfigSys.Save := TRUE; END_IF // After the configuration has been changed the AuditTrail is reset (disabled). This re-enables the component - IF MpAuditTrail_0.Active = FALSE THEN - MpAuditTrail_0.Enable := TRUE; + IF NOT MpAuditTrailSys.Active THEN + MpAuditTrailSys.Enable := TRUE; END_IF END_ACTION diff --git a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.st b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.st index 4442b781..95264bd9 100644 --- a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.st +++ b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.st @@ -1,244 +1,252 @@ -//*********************************************************************** -// Copyright: B&R Industrial Automation GmbH -// Author: B&R Industrial Automation GmbH -// Created: April 12, 2022 -// Description: Task for backup management. -//*********************************************************************** - -PROGRAM _INIT - - // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappBackupFiles'), pName := ADR('/')); - - // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); - END_IF - - // Initialize mapp function blocks - MpBackupCore_0.MpLink := ADR(gMpLinkBackupCore); - MpBackupCore_0.Enable := TRUE; - MpBackupCore_0(); - - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIBackup); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0.Enable := TRUE; - MpFileManagerUI_0(); - - MpBackupCoreConfig_0.Enable := TRUE; - MpBackupCoreConfig_0.MpLink := ADR(gMpLinkBackupCore); - MpBackupCoreConfig_0.Configuration := ADR(MpBackupConfiguration); - - MpBackupCoreConfig_0.Load := NOT(DiagCpuIsARsim() OR DiagCpuIsSimulated()); - - MpBackupCoreConfig_0(); - - HmiBackup.Status.DeviceDataProvider[0] := '{"value":"mappBackupFiles","text":"CF/PLC"}'; - - // Restored the retained values to the backup settings - HmiBackup.Parameters.AutomaticBackup := AutomaticBackupRetain; - -END_PROGRAM - -PROGRAM _CYCLIC - - // Call all cyclic actions - FileManager; - IF NOT DiagCpuIsARsim() THEN - ChangeConfiguration; - END_IF - FormatDeviceDataProvider; - - CASE BackupState OF - BACKUP_IDLE: - HmiBackup.Status.CreateAllowed := NOT(MpBackupCore_0.Info.Automatic.Backup.InProgress) AND NOT HmiBackup.Status.SimulationActive; - HmiBackup.Status.Busy := FALSE; - IF (MpBackupCore_0.Error = TRUE) THEN - MpBackupCore_0.ErrorReset := FALSE; - BackupState := BACKUP_ERROR; - ELSIF DiagCpuIsARsim() OR DiagCpuIsSimulated() THEN - HmiBackup.Status.CreateAllowed := FALSE; - HmiBackup.Status.RestoreAllowed := FALSE; - BackupState := BACKUP_SIM; - ELSIF (HmiBackup.Commands.Create = TRUE) THEN - HmiBackup.Commands.Create := FALSE; - MpBackupCore_0.Create := TRUE; - HmiBackup.Status.Busy := TRUE; - HmiBackup.Status.CreateAllowed := FALSE; - HmiBackup.Status.RestoreAllowed := FALSE; - MpBackupCore_0.Name := ADR(HmiBackup.Parameters.Name); - BackupState := BACKUP_CREATING; - ELSIF MpBackupCore_0.Info.Automatic.Backup.InProgress THEN - HmiBackup.Status.Busy := TRUE; - HmiBackup.Status.CreateAllowed := FALSE; - HmiBackup.Status.RestoreAllowed := FALSE; - BackupState := BACKUP_AUTOCREATE; - ELSIF (HmiBackup.Commands.Restore = TRUE) THEN - HmiBackup.Commands.Restore := FALSE; - MpBackupCore_0.Install := TRUE; - HmiBackup.Status.Busy := TRUE; - HmiBackup.Status.CreateAllowed := FALSE; - HmiBackup.Status.RestoreAllowed := FALSE; - MpBackupCore_0.Name := ADR(MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name); - BackupState := BACKUP_RESTORING; - ELSIF (HmiBackup.Commands.Update = TRUE) THEN - HmiBackup.Commands.Update := FALSE; - MpBackupCore_0.Install := TRUE; - HmiBackup.Status.Busy := TRUE; - HmiBackup.Status.CreateAllowed := FALSE; - HmiBackup.Status.RestoreAllowed := FALSE; - MpBackupCore_0.Name := ADR(MpBackupCore_0.Info.Automatic.Update.Name); - BackupState := BACKUP_UPDATING; - ELSIF (HmiBackup.Commands.Delete = TRUE) THEN - MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].IsSelected := TRUE; - HmiBackup.Commands.Delete := FALSE; - MpFileManagerUIConnect.File.Delete := TRUE; - BackupState := BACKUP_DELETING; - ELSIF (HmiBackup.Commands.SaveConfig = TRUE) THEN - HmiBackup.Commands.SaveConfig := FALSE; - SaveBackupConfiguration; - MpBackupCoreConfig_0.Save := TRUE; - ELSIF ((HmiBackup.Status.SelectedIndex <> HmiBackup.Status.LastSelectedIndex) AND (MpBackupCore_0.CommandBusy <> TRUE)) THEN - HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.SelectedIndex; - MpBackupCore_0.Name := ADR(MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name); - MpBackupCore_0.RequestInfo := TRUE; - END_IF - - BACKUP_CREATING: - IF (MpBackupCore_0.CommandDone = TRUE) THEN - MpBackupCore_0.Create := FALSE; - MpBackupCore_0.Install := FALSE; - MpBackupCore_0.RequestInfo := FALSE; - MpFileManagerUIConnect.File.Refresh := TRUE; - BackupState := BACKUP_REFRESHING_LIST; - ELSIF (MpBackupCore_0.Error = TRUE) THEN - BackupState := BACKUP_ERROR; - END_IF - - BACKUP_AUTOCREATE: - IF ( MpBackupCore_0.Info.Automatic.Backup.InProgress = FALSE) THEN - MpBackupCore_0.Install := FALSE; - MpBackupCore_0.RequestInfo := FALSE; - MpFileManagerUIConnect.File.Refresh := TRUE; - BackupState := BACKUP_REFRESHING_LIST; - ELSIF (MpBackupCore_0.Error = TRUE) THEN - BackupState := BACKUP_ERROR; - END_IF - - BACKUP_REFRESHING_LIST: - IF MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_REFRESH THEN - // Wait for the list to be refreshed with the newly created backup file - ELSIF MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE THEN - HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.LastSelectedIndex + 1; - BackupState := BACKUP_IDLE; - ELSIF (MpBackupCore_0.Error = TRUE) THEN - BackupState := BACKUP_ERROR; - END_IF - - BACKUP_RESTORING: - IF (MpBackupCore_0.CommandDone = TRUE) THEN - MpBackupCore_0.Create := FALSE; - MpBackupCore_0.Install := FALSE; - MpBackupCore_0.RequestInfo := FALSE; - MpFileManagerUIConnect.File.Refresh := TRUE; - BackupState := BACKUP_IDLE; - ELSIF (MpBackupCore_0.Error = TRUE) THEN - BackupState := BACKUP_ERROR; - END_IF - - BACKUP_UPDATING: - IF (MpBackupCore_0.CommandDone = TRUE) THEN - MpBackupCore_0.Create := FALSE; - MpBackupCore_0.Install := FALSE; - MpBackupCore_0.RequestInfo := FALSE; - BackupState := BACKUP_IDLE; - ELSIF (MpBackupCore_0.Error = TRUE) THEN - BackupState := BACKUP_ERROR; - END_IF - - BACKUP_DELETING: - CASE (MpFileManagerUIConnect.MessageBox.Type) OF - mpFILE_MSG_CONFIRM_DELETE: - MpFileManagerUIConnect.MessageBox.Confirm := TRUE; - mpFILE_MSG_OK: - IF (MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE) THEN - HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.LastSelectedIndex + 1; - FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect.File.List.Items[i])/SIZEOF(MpFileManagerUIConnect.File.List.Items[0])) - 1) DO - MpFileManagerUIConnect.File.List.Items[i].IsSelected := FALSE; - END_FOR - HmiBackup.Status.SelectedIndex := 0; - MpFileManagerUIConnect.MessageBox.Confirm := FALSE; - BackupState := BACKUP_IDLE; - END_IF - END_CASE - - BACKUP_SIM: - HmiBackup.Status.SimulationActive := TRUE; - - BACKUP_ERROR: - MpBackupCore_0.Create := FALSE; - MpBackupCore_0.Install := FALSE; - IF MpBackupCore_0.Info.Diag.StatusID.ID <> 0 THEN //-1064159486 - HmiBackup.Status.Error := TRUE; - END_IF - IF HmiBackup.Commands.Reset OR (MpBackupCore_0.Info.Diag.StatusID.ID = -1064159486) THEN - HmiBackup.Commands.Reset := FALSE; - MpBackupCore_0.ErrorReset := TRUE; - BackupState := BACKUP_IDLE; - ELSIF ((MpBackupCore_0.Info.Diag.StatusID.ID = 0) AND (MpBackupCore_0.Error = FALSE)) THEN - BackupState := BACKUP_IDLE; - END_IF - END_CASE - - // Reset any errors caused by requesting information - IF EDGEPOS((MpBackupCore_0.Error = TRUE) AND (MpBackupCore_0.RequestInfo = TRUE)) THEN - MpBackupCore_0.ErrorReset := TRUE; - MpBackupCore_0.RequestInfo := FALSE; - brsmemset(ADR(HmiBackup.Status.Info), 0, SIZEOF(HmiBackup.Status.Info)); - END_IF - - MpBackupCore_0.MpLink := ADR(gMpLinkBackupCore); - MpBackupCore_0.DeviceName := ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[MpFileManagerUIConnect.DeviceList.SelectedIndex]); - MpBackupCore_0(); - - IF (MpBackupCore_0.CommandDone = TRUE) AND (MpBackupCore_0.RequestInfo = TRUE) THEN - MpBackupCore_0.RequestInfo := FALSE; - HmiBackup.Status.Info := MpBackupCore_0.Info.Project.Requested; - END_IF - IF EDGEPOS(MpBackupCore_0.Error = FALSE) THEN - MpBackupCore_0.ErrorReset := FALSE; - HmiBackup.Status.Error := FALSE; - END_IF - - HmiBackup.Status.RestoreAllowed := (MpFileManagerUIConnect.File.PathInfo.FolderCount > 0) AND NOT(MpBackupCore_0.Info.Automatic.Backup.InProgress) AND NOT HmiBackup.Status.SimulationActive; - HmiBackup.Status.Update := MpBackupCore_0.Info.Automatic.Update; - HmiBackup.Status.BackupCtrlEnabled := (NOT HmiBackup.Status.SimulationActive); - - // Assign MpLinks & address references - MpBackupCore_0.MpLink := ADR(gMpLinkBackupCore); - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIBackup); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpBackupCoreConfig_0.MpLink := ADR(gMpLinkBackupCore); - MpBackupCoreConfig_0.Configuration := ADR(MpBackupConfiguration); - - // Call function blocks - MpBackupCore_0(); - MpFileManagerUI_0(); - MpBackupCoreConfig_0(); - -END_PROGRAM - -PROGRAM _EXIT - - // Disable the function blocks to unlink the MpLinks - MpBackupCore_0.Enable := FALSE; - MpFileManagerUI_0.Enable := FALSE; - MpBackupCoreConfig_0.Enable := FALSE; - - // Call function blocks - MpBackupCore_0(); - MpFileManagerUI_0(); - MpBackupCoreConfig_0(); - -END_PROGRAM - +//*********************************************************************** +// Copyright: B&R Industrial Automation GmbH +// Author: B&R Industrial Automation GmbH +// Created: April 12, 2022 +// Description: Task for backup management. +//*********************************************************************** + +PROGRAM _INIT + + // Create folder for this component on the user file device + DirCreateBackup(enable := TRUE, pDevice := ADR('mappBackupFiles'), pName := ADR('/')); + + // Check if folder already exist and if so disabled the function block call + IF DirCreateBackup.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreateBackup(enable := FALSE); + END_IF + + // Initialize mapp function blocks + MpBackupCoreSys.MpLink := ADR(gMpLinkBackupCore); + MpBackupCoreSys.Enable := TRUE; + MpBackupCoreSys(); + + MpFileManagerUIBackup.UISetup.FileListSize := 50; + FOR i:=0 TO ((SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames)/SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames[0])) - 1) DO + MpFileManagerUIConnect.DeviceList.DeviceNames[i] := ''; + END_FOR + MpFileManagerUIConnect.DeviceList.DeviceNames[0] := 'mappBackupFiles'; + + MpFileManagerUIBackup.MpLink := ADR(gMpLinkFileManagerUIBackup); + MpFileManagerUIBackup.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIBackup.Enable := TRUE; + MpFileManagerUIBackup(); + + MpBackupCoreConfigSys.Enable := TRUE; + MpBackupCoreConfigSys.MpLink := ADR(gMpLinkBackupCore); + MpBackupCoreConfigSys.Configuration := ADR(MpBackupConfiguration); + + MpBackupCoreConfigSys.Load := NOT(DiagCpuIsARsim() OR DiagCpuIsSimulated()); + + MpBackupCoreConfigSys(); + + HmiBackup.Status.DeviceDataProvider[0] := '{"value":"mappBackupFiles","text":"CF/PLC"}'; + + // Restored the retained values to the backup settings + HmiBackup.Parameters.AutomaticBackup := AutomaticBackupRetain; + +END_PROGRAM + +PROGRAM _CYCLIC + + // Call all cyclic actions + FileManager; + IF NOT DiagCpuIsARsim() THEN + ChangeConfiguration; + END_IF + FormatDeviceDataProvider; + + CASE BackupState OF + BACKUP_IDLE: + HmiBackup.Status.CreateAllowed := NOT(MpBackupCoreSys.Info.Automatic.Backup.InProgress) AND NOT HmiBackup.Status.SimulationActive; + HmiBackup.Status.Busy := FALSE; + IF (MpBackupCoreSys.Error) THEN + MpBackupCoreSys.ErrorReset := FALSE; + BackupState := BACKUP_ERROR; + ELSIF DiagCpuIsARsim() OR DiagCpuIsSimulated() THEN + HmiBackup.Status.CreateAllowed := FALSE; + HmiBackup.Status.RestoreAllowed := FALSE; + BackupState := BACKUP_SIM; + ELSIF (HmiBackup.Commands.Create) THEN + HmiBackup.Commands.Create := FALSE; + MpBackupCoreSys.Create := TRUE; + HmiBackup.Status.Busy := TRUE; + HmiBackup.Status.CreateAllowed := FALSE; + HmiBackup.Status.RestoreAllowed := FALSE; + MpBackupCoreSys.Name := ADR(HmiBackup.Parameters.Name); + BackupState := BACKUP_CREATING; + ELSIF MpBackupCoreSys.Info.Automatic.Backup.InProgress THEN + HmiBackup.Status.Busy := TRUE; + HmiBackup.Status.CreateAllowed := FALSE; + HmiBackup.Status.RestoreAllowed := FALSE; + BackupState := BACKUP_AUTOCREATE; + ELSIF (HmiBackup.Commands.Restore) THEN + HmiBackup.Commands.Restore := FALSE; + MpBackupCoreSys.Install := TRUE; + HmiBackup.Status.Busy := TRUE; + HmiBackup.Status.CreateAllowed := FALSE; + HmiBackup.Status.RestoreAllowed := FALSE; + MpBackupCoreSys.Name := ADR(MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name); + BackupState := BACKUP_RESTORING; + ELSIF (HmiBackup.Commands.Update) THEN + HmiBackup.Commands.Update := FALSE; + MpBackupCoreSys.Install := TRUE; + HmiBackup.Status.Busy := TRUE; + HmiBackup.Status.CreateAllowed := FALSE; + HmiBackup.Status.RestoreAllowed := FALSE; + MpBackupCoreSys.Name := ADR(MpBackupCoreSys.Info.Automatic.Update.Name); + BackupState := BACKUP_UPDATING; + ELSIF (HmiBackup.Commands.Delete) THEN + MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].IsSelected := TRUE; + HmiBackup.Commands.Delete := FALSE; + MpFileManagerUIConnect.File.Delete := TRUE; + BackupState := BACKUP_DELETING; + ELSIF (HmiBackup.Commands.SaveConfig) THEN + HmiBackup.Commands.SaveConfig := FALSE; + SaveBackupConfiguration; + MpBackupCoreConfigSys.Save := TRUE; + ELSIF ((HmiBackup.Status.SelectedIndex <> HmiBackup.Status.LastSelectedIndex) AND (MpBackupCoreSys.CommandBusy <> TRUE)) THEN + HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.SelectedIndex; + MpBackupCoreSys.Name := ADR(MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name); + IF MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name <> '' THEN + MpBackupCoreSys.RequestInfo := TRUE; + END_IF + END_IF + + BACKUP_CREATING: + IF (MpBackupCoreSys.CommandDone) THEN + MpBackupCoreSys.Create := FALSE; + MpBackupCoreSys.Install := FALSE; + MpBackupCoreSys.RequestInfo := FALSE; + MpFileManagerUIConnect.File.Refresh := TRUE; + BackupState := BACKUP_REFRESHING_LIST; + ELSIF (MpBackupCoreSys.Error) THEN + BackupState := BACKUP_ERROR; + END_IF + + BACKUP_AUTOCREATE: + IF NOT MpBackupCoreSys.Info.Automatic.Backup.InProgress THEN + MpBackupCoreSys.Install := FALSE; + MpBackupCoreSys.RequestInfo := FALSE; + MpFileManagerUIConnect.File.Refresh := TRUE; + BackupState := BACKUP_REFRESHING_LIST; + ELSIF (MpBackupCoreSys.Error) THEN + BackupState := BACKUP_ERROR; + END_IF + + BACKUP_REFRESHING_LIST: + IF MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_REFRESH THEN + // Wait for the list to be refreshed with the newly created backup file + ELSIF MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE THEN + HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.LastSelectedIndex + 1; + BackupState := BACKUP_IDLE; + ELSIF (MpBackupCoreSys.Error) THEN + BackupState := BACKUP_ERROR; + END_IF + + BACKUP_RESTORING: + IF (MpBackupCoreSys.CommandDone) THEN + MpBackupCoreSys.Create := FALSE; + MpBackupCoreSys.Install := FALSE; + MpBackupCoreSys.RequestInfo := FALSE; + MpFileManagerUIConnect.File.Refresh := TRUE; + BackupState := BACKUP_IDLE; + ELSIF (MpBackupCoreSys.Error) THEN + BackupState := BACKUP_ERROR; + END_IF + + BACKUP_UPDATING: + IF (MpBackupCoreSys.CommandDone) THEN + MpBackupCoreSys.Create := FALSE; + MpBackupCoreSys.Install := FALSE; + MpBackupCoreSys.RequestInfo := FALSE; + BackupState := BACKUP_IDLE; + ELSIF (MpBackupCoreSys.Error) THEN + BackupState := BACKUP_ERROR; + END_IF + + BACKUP_DELETING: + CASE (MpFileManagerUIConnect.MessageBox.Type) OF + mpFILE_MSG_CONFIRM_DELETE: + MpFileManagerUIConnect.MessageBox.Confirm := TRUE; + mpFILE_MSG_OK: + IF (MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE) THEN + HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.LastSelectedIndex + 1; + FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect.File.List.Items[i])/SIZEOF(MpFileManagerUIConnect.File.List.Items[0])) - 1) DO + MpFileManagerUIConnect.File.List.Items[i].IsSelected := FALSE; + END_FOR + HmiBackup.Status.SelectedIndex := 0; + MpFileManagerUIConnect.MessageBox.Confirm := FALSE; + BackupState := BACKUP_IDLE; + END_IF + END_CASE + + BACKUP_SIM: + HmiBackup.Status.SimulationActive := TRUE; + + BACKUP_ERROR: + MpBackupCoreSys.Create := FALSE; + MpBackupCoreSys.Install := FALSE; + IF MpBackupCoreSys.Info.Diag.StatusID.ID <> 0 THEN //-1064159486 + HmiBackup.Status.Error := TRUE; + END_IF + IF HmiBackup.Commands.Reset OR (MpBackupCoreSys.Info.Diag.StatusID.ID = -1064159486) THEN + HmiBackup.Commands.Reset := FALSE; + MpBackupCoreSys.ErrorReset := TRUE; + BackupState := BACKUP_IDLE; + ELSIF ((MpBackupCoreSys.Info.Diag.StatusID.ID = 0) AND (NOT MpBackupCoreSys.Error)) THEN + BackupState := BACKUP_IDLE; + END_IF + END_CASE + + // Reset any errors caused by requesting information + IF EDGEPOS((MpBackupCoreSys.Error) AND (MpBackupCoreSys.RequestInfo)) THEN + MpBackupCoreSys.ErrorReset := TRUE; + MpBackupCoreSys.RequestInfo := FALSE; + brsmemset(ADR(HmiBackup.Status.Info), 0, SIZEOF(HmiBackup.Status.Info)); + END_IF + + MpBackupCoreSys.MpLink := ADR(gMpLinkBackupCore); + MpBackupCoreSys.DeviceName := ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[MpFileManagerUIConnect.DeviceList.SelectedIndex]); + MpBackupCoreSys(); + + IF (MpBackupCoreSys.CommandDone) AND (MpBackupCoreSys.RequestInfo) THEN + MpBackupCoreSys.RequestInfo := FALSE; + HmiBackup.Status.Info := MpBackupCoreSys.Info.Project.Requested; + END_IF + IF EDGEPOS(NOT MpBackupCoreSys.Error) THEN + MpBackupCoreSys.ErrorReset := FALSE; + HmiBackup.Status.Error := FALSE; + END_IF + + HmiBackup.Status.RestoreAllowed := (MpFileManagerUIConnect.File.PathInfo.FolderCount > 0) AND NOT(MpBackupCoreSys.Info.Automatic.Backup.InProgress) AND NOT HmiBackup.Status.SimulationActive; + HmiBackup.Status.Update := MpBackupCoreSys.Info.Automatic.Update; + HmiBackup.Status.BackupCtrlEnabled := (NOT HmiBackup.Status.SimulationActive); + + // Assign MpLinks & address references + MpBackupCoreSys.MpLink := ADR(gMpLinkBackupCore); + MpFileManagerUIBackup.MpLink := ADR(gMpLinkFileManagerUIBackup); + MpFileManagerUIBackup.UIConnect := ADR(MpFileManagerUIConnect); + MpBackupCoreConfigSys.MpLink := ADR(gMpLinkBackupCore); + MpBackupCoreConfigSys.Configuration := ADR(MpBackupConfiguration); + + // Call function blocks + MpBackupCoreSys(); + MpFileManagerUIBackup(); + MpBackupCoreConfigSys(); + +END_PROGRAM + +PROGRAM _EXIT + + // Disable the function blocks to unlink the MpLinks + MpBackupCoreSys.Enable := FALSE; + MpFileManagerUIBackup.Enable := FALSE; + MpBackupCoreConfigSys.Enable := FALSE; + + // Call function blocks + MpBackupCoreSys(); + MpFileManagerUIBackup(); + MpBackupCoreConfigSys(); + +END_PROGRAM + diff --git a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.var b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.var index 87b283f5..e36a9163 100644 --- a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.var +++ b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.var @@ -1,9 +1,9 @@ (*Function Blocks*) VAR - MpBackupCore_0 : MpBackupCore; (*MpBackupCore instance*) - MpBackupCoreConfig_0 : MpBackupCoreConfig; (*MpBackupCoreConfig instance*) - MpFileManagerUI_0 : MpFileManagerUI := (UISetup:=(FileListSize:=50)); (*MpFileManagerUI instance*) - DirCreate_0 : DirCreate; (*DirCreate instance*) + MpBackupCoreSys : MpBackupCore; (*MpBackupCore instance*) + MpBackupCoreConfigSys : MpBackupCoreConfig; (*MpBackupCoreConfig instance*) + MpFileManagerUIBackup : MpFileManagerUI; (*MpFileManagerUI instance*) + DirCreateBackup : DirCreate; (*DirCreate instance*) END_VAR (*Constants*) VAR CONSTANT @@ -12,7 +12,7 @@ END_VAR (*Structure Types*) VAR MpBackupConfiguration : MpBackupCoreConfigType; (*MpBackup configuration*) - MpFileManagerUIConnect : MpFileManagerUIConnectType := (DeviceList:=(DeviceNames:=['mappBackupFiles','USB1',8('')])); (*MpFile connection to the HMI*) + MpFileManagerUIConnect : MpFileManagerUIConnectType; (*MpFile connection to the HMI*) HmiBackup : BackupHmiInterfaceType; (*HMI interface structure*) END_VAR (*Enumerations*) diff --git a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/ChangeConfiguration.st b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/ChangeConfiguration.st index e6fd70f5..5735bd88 100644 --- a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/ChangeConfiguration.st +++ b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/ChangeConfiguration.st @@ -1,25 +1,25 @@ ACTION ChangeConfiguration: - MpBackupCoreConfig_0.MpLink := ADR(gMpLinkBackupCore); - MpBackupCoreConfig_0.Configuration := ADR(MpBackupConfiguration); - IF (MpBackupCoreConfig_0.Error = TRUE) THEN + MpBackupCoreConfigSys.MpLink := ADR(gMpLinkBackupCore); + MpBackupCoreConfigSys.Configuration := ADR(MpBackupConfiguration); + IF (MpBackupCoreConfigSys.Error) THEN // Loading currently always throws an error about failed to write Auditing.Type - IF (MpBackupCoreConfig_0.StatusID = mpBACKUP_ERR_CONFIG_LOAD) THEN + IF (MpBackupCoreConfigSys.StatusID = mpBACKUP_ERR_CONFIG_LOAD) THEN LoadBackupConfiguration; END_IF - MpBackupCoreConfig_0.Load := FALSE; - MpBackupCoreConfig_0.Save := FALSE; - MpBackupCoreConfig_0.ErrorReset := TRUE; + MpBackupCoreConfigSys.Load := FALSE; + MpBackupCoreConfigSys.Save := FALSE; + MpBackupCoreConfigSys.ErrorReset := TRUE; END_IF - MpBackupCoreConfig_0(); - MpBackupCoreConfig_0.ErrorReset := FALSE; - IF (MpBackupCoreConfig_0.CommandDone = TRUE) THEN - IF (MpBackupCoreConfig_0.Load = TRUE) THEN + MpBackupCoreConfigSys(); + MpBackupCoreConfigSys.ErrorReset := FALSE; + IF (MpBackupCoreConfigSys.CommandDone) THEN + IF (MpBackupCoreConfigSys.Load) THEN LoadBackupConfiguration; END_IF - MpBackupCoreConfig_0.Load := FALSE; - MpBackupCoreConfig_0.Save := FALSE; + MpBackupCoreConfigSys.Load := FALSE; + MpBackupCoreConfigSys.Save := FALSE; END_IF END_ACTION diff --git a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/HMIActions.st index 72a20dcb..67a8b445 100644 --- a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/HMIActions.st @@ -107,9 +107,9 @@ END_ACTION ACTION FileManager: - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIBackup); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0(); + MpFileManagerUIBackup.MpLink := ADR(gMpLinkFileManagerUIBackup); + MpFileManagerUIBackup.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIBackup(); FOR i := 0 TO ((SIZEOF(HmiBackup.Status.FileNames)/SIZEOF(HmiBackup.Status.FileNames[0])) - 1) DO HmiBackup.Status.FileNames[i] := MpFileManagerUIConnect.File.List.Items[i].Name; HmiBackup.Status.TimeStamps[i] := MpFileManagerUIConnect.File.List.Items[i].LastModified; diff --git a/mappFramework/Logical/Infrastructure/File/FileMgr/FIFOOperations.st b/mappFramework/Logical/Infrastructure/File/FileMgr/FIFOOperations.st index 67d607c9..7846c24d 100644 --- a/mappFramework/Logical/Infrastructure/File/FileMgr/FIFOOperations.st +++ b/mappFramework/Logical/Infrastructure/File/FileMgr/FIFOOperations.st @@ -1,10 +1,10 @@ ACTION FIFOOperation: - R_TRIG_CheckStatus(CLK := (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_CHANGE_DIR) OR + CheckStatusTrigger(CLK := (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_CHANGE_DIR) OR (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_CHANGE_DEVICE) OR (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_CREATE)); - IF R_TRIG_CheckStatus.Q OR TON_ScanFolder.Q THEN + IF CheckStatusTrigger.Q OR ScanFolderTimer.Q THEN HmiFile.Commands.CheckFolder := HmiFile.Parameters.Fifo.Enable; END_IF @@ -19,7 +19,7 @@ ACTION FIFOOperation: // Autodelete oldest files based on scanning option CASE HmiFile.Status.DeleteStep OF FILE_DISABLED: - IF (HmiFile.Parameters.Fifo.Enable = TRUE) THEN + IF (HmiFile.Parameters.Fifo.Enable) THEN MpFileManagerUI_FIFO.Enable := TRUE; HmiFile.Status.DeleteStep := FILE_DELETE_WAIT; ELSE @@ -27,12 +27,12 @@ ACTION FIFOOperation: END_IF FILE_DELETE_WAIT: - IF (HmiFile.Parameters.Fifo.Enable = TRUE) THEN + IF (HmiFile.Parameters.Fifo.Enable) THEN // Wait for check the correct device selection - TON_ScanFolder.IN := TRUE; + ScanFolderTimer.IN := TRUE; HmiFile.Status.FifoConfigEnable := TRUE; - IF TON_ScanFolder.Q THEN - TON_ScanFolder.IN := FALSE; + IF ScanFolderTimer.Q THEN + ScanFolderTimer.IN := FALSE; HmiFile.Status.FifoConfigEnable := FALSE; Fifo_Count := 0; HmiFile.Status.DeleteStep := FILE_SCAN_FOLDER_WAIT; @@ -43,7 +43,7 @@ ACTION FIFOOperation: FILE_SCAN_FOLDER_WAIT: // Wait for check for old files command - IF (HmiFile.Commands.CheckFolder = TRUE) AND ((MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) OR (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_ERROR)) THEN + IF (HmiFile.Commands.CheckFolder) AND ((MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) OR (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_ERROR)) THEN HmiFile.Commands.CheckFolder := FALSE; HmiFile.Status.DeleteStep := FILE_SELECT_DEVICE; HmiFile.Parameters.OldSortOrder := MpFileManagerUIConnect_FIFO.File.SortOrder; @@ -66,7 +66,7 @@ ACTION FIFOOperation: END_IF FILE_REFRESH: - IF ((MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) AND (MpFileManagerUIConnect_FIFO.File.Refresh = FALSE)) THEN + IF ((MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) AND (NOT MpFileManagerUIConnect_FIFO.File.Refresh)) THEN HmiFile.Status.DeleteStep := FILE_SORT_BY_DATE; END_IF @@ -79,7 +79,7 @@ ACTION FIFOOperation: MpFileManagerUI_FIFO(); END_IF - IF (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_REFRESH) AND (MpFileManagerUIConnect_FIFO.File.Refresh = FALSE) THEN + IF (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_REFRESH) AND (NOT MpFileManagerUIConnect_FIFO.File.Refresh) THEN HmiFile.Status.DeleteStep := FILE_SORT_BY_DATE_WAIT; END_IF @@ -110,15 +110,15 @@ ACTION FIFOOperation: END_IF FILE_GO_TO_END_1: - TON_Wait.IN := (MpFileManagerUIConnect_FIFO.File.List.PageDown = FALSE); - TON_Wait.PT := T#200ms; - IF (TON_Wait.Q = TRUE) THEN - TON_Wait.IN := FALSE; + WaitTimer.IN := (NOT MpFileManagerUIConnect_FIFO.File.List.PageDown); + WaitTimer.PT := T#200ms; + IF (WaitTimer.Q) THEN + WaitTimer.IN := FALSE; Fifo_Count := Fifo_Count + 1; // in case we are stuck trying to get to the last page HmiFile.Status.DeleteStep := SEL(Fifo_Count > 10, FILE_GO_TO_END, FILE_DELETE_WAIT); END_IF - TON_Wait(); + WaitTimer(); FILE_CHECK_FOR_FILTER: // Check which delete filter is active @@ -176,15 +176,15 @@ ACTION FIFOOperation: IF (CurrentIndex = 0) THEN HmiFile.Status.FolderSize := 0; END_IF - DirRead_FolderSize.enable := TRUE; - DirRead_FolderSize.pDevice := ADR(HmiFile.Parameters.Fifo.DeviceName); - DirRead_FolderSize.pPath := 0; - DirRead_FolderSize.entry := CurrentIndex; - DirRead_FolderSize.option := fiFILE; - DirRead_FolderSize.pData := ADR(DirectoryData); - DirRead_FolderSize.data_len := SIZEOF(DirectoryData); - DirRead_FolderSize(); - IF ((DirRead_FolderSize.status = ERR_OK) OR (DirRead_FolderSize.status = fiERR_NO_MORE_ENTRIES)) THEN + DirReadFolderSize.enable := TRUE; + DirReadFolderSize.pDevice := ADR(HmiFile.Parameters.Fifo.DeviceName); + DirReadFolderSize.pPath := 0; + DirReadFolderSize.entry := CurrentIndex; + DirReadFolderSize.option := fiFILE; + DirReadFolderSize.pData := ADR(DirectoryData); + DirReadFolderSize.data_len := SIZEOF(DirectoryData); + DirReadFolderSize(); + IF ((DirReadFolderSize.status = ERR_OK) OR (DirReadFolderSize.status = fiERR_NO_MORE_ENTRIES)) THEN HmiFile.Status.FolderSize := HmiFile.Status.FolderSize + UDINT_TO_REAL(DirectoryData.Filelength); CurrentIndex := CurrentIndex + 1; IF (CurrentIndex >= MpFileManagerUIConnect_FIFO.File.PathInfo.FileCount) THEN @@ -262,7 +262,7 @@ ACTION FIFOOperation: FifoSettingsRetain := HmiFile.Parameters.Fifo; // Timer to scan file device in intervals - TON_ScanFolder(PT := DINT_TO_TIME(HmiFile.Parameters.Fifo.ScanInterval * 60000)); + ScanFolderTimer(PT := DINT_TO_TIME(HmiFile.Parameters.Fifo.ScanInterval * 60000)); MpFileManagerUIConnect_FIFO.DeviceList.DeviceNames[0] := HmiFile.Parameters.Fifo.DeviceName; MpFileManagerUI_FIFO.UIConnect := ADR(MpFileManagerUIConnect_FIFO); diff --git a/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.st b/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.st index 75aa451c..75d812d0 100644 --- a/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.st +++ b/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.st @@ -1,124 +1,117 @@ -//*********************************************************************** -// Copyright: B&R Industrial Automation GmbH -// Author: B&R Industrial Automation GmbH -// Created: April 12, 2022 -// Description: Task for file management -//*********************************************************************** - -PROGRAM _INIT - - // Inititialize mapp function block - MpFileManagerUIConnect.DeviceList.DeviceNames[0] := 'USER'; - MpFileManagerUIConnect.DeviceList.DeviceNames[1] := 'mappRecipeFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[2] := 'mappAuditFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[3] := 'mappReportFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[4] := 'mappDataFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[5] := 'mappBackupFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[6] := 'mappAlarmXFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[7] := 'mappUserXFiles'; - MpFileManagerUI_0.Enable := TRUE; - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIFile); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); - MpFileManagerUI_0(); - - HmiFile.Status.DeleteStep := FILE_DISABLED; - - // Initialize FIFO feature - HmiFile.Status.FifoConfigEnable := TRUE; - IF HmiFile.Parameters.Fifo.DeviceName = '' THEN - HmiFile.Parameters.Fifo.DeviceName := 'mappDataFiles'; - END_IF - - // MaxFolderSize is in kB - IF HmiFile.Parameters.Fifo.MaxFolderSize = 0 THEN - HmiFile.Parameters.Fifo.MaxFolderSize := 1000; - END_IF - - IF HmiFile.Parameters.Fifo.MaxNumberOfFiles = 0 THEN - HmiFile.Parameters.Fifo.MaxNumberOfFiles := 20; - END_IF - - // ScanInterval is in minutes - IF HmiFile.Parameters.Fifo.ScanInterval = 0 THEN - HmiFile.Parameters.Fifo.ScanInterval := 60; - END_IF - - - // Initialize which folders should exist - PathCheck.DeviceList := MpFileManagerUIConnect.DeviceList; - - PathCheck.PrgName[0] := 'RecipeMgr'; - PathCheck.PrgName[1] := 'AuditMgr'; - PathCheck.PrgName[2] := 'ReportMgr'; - PathCheck.PrgName[3] := 'DataMgr'; - PathCheck.PrgName[4] := 'BackupMgr'; - PathCheck.PrgName[5] := 'AlarmMgr'; - PathCheck.PrgName[6] := 'UserXMgr'; - PathCheck.PrgName[7] := 'UsbMgr'; - PathCheck.PrgName[8] := 'UsbMgr'; - - PathCheck.Folder[0] := 'Recipe'; - PathCheck.Folder[1] := 'Audit'; - PathCheck.Folder[2] := 'Report'; - PathCheck.Folder[3] := 'Data'; - PathCheck.Folder[4] := 'Backup'; - PathCheck.Folder[5] := 'AlarmX'; - PathCheck.Folder[6] := 'UserX'; - - HmiFile.Status.DeviceDataProvider[0] := '{"value":"USER","text":"UserPath"}'; - HmiFile.Status.DeviceDataProvider[1] := '{"value":"mappRecipeFiles","text":"mappRecipeFiles"}'; - HmiFile.Status.DeviceDataProvider[2] := '{"value":"mappAuditFiles","text":"mappAuditFiles"}'; - HmiFile.Status.DeviceDataProvider[3] := '{"value":"mappReportFiles","text":"mappReportFiles"}'; - HmiFile.Status.DeviceDataProvider[4] := '{"value":"mappDataFiles","text":"mappDataFiles"}'; - HmiFile.Status.DeviceDataProvider[5] := '{"value":"mappBackupFiles","text":"mappBackupFiles"}'; - HmiFile.Status.DeviceDataProvider[6] := '{"value":"mappAlarmXFiles","text":"mappAlarmXFiles"}'; - HmiFile.Status.DeviceDataProvider[7] := '{"value":"mappUserXFiles","text":"mappUserXFiles"}'; - - // Calculate offset for potential additional USB devices - FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames) / SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames[0])) - 1) DO - IF MpFileManagerUIConnect.DeviceList.DeviceNames[i] <> '' THEN - USBOffset := USBOffset + 1; - END_IF - END_FOR - - // Restored the retained values to the FIFO settings - HmiFile.Parameters.Fifo := FifoSettingsRetain; - -END_PROGRAM - -PROGRAM _CYCLIC - - // Call all cyclic actions - FormatDeviceDataProvider; - FileManager; - FIFOOperation; - - // Error reset - IF NOT MpFileManagerUI_0.Error THEN - MpFileManagerUI_0.ErrorReset := FALSE; - END_IF - - // Assign MpLinks and address references - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIFile); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_FIFO.MpLink := ADR(gMpLinkFileManagerUIFile_FIFO); - - // Call function blocks - MpFileManagerUI_0(); - MpFileManagerUI_FIFO(); - -END_PROGRAM - -PROGRAM _EXIT - - // Disable the function blocks to unlink the MpLink - MpFileManagerUI_0.Enable := FALSE; - MpFileManagerUI_FIFO.Enable := FALSE; - - // Call function blocks - MpFileManagerUI_0(); - MpFileManagerUI_FIFO(); - -END_PROGRAM - +//*********************************************************************** +// Copyright: B&R Industrial Automation GmbH +// Author: B&R Industrial Automation GmbH +// Created: April 12, 2022 +// Description: Task for file management +//*********************************************************************** + +PROGRAM _INIT + + // Inititialize mapp function block + MpFileManagerUIConnect.DeviceList.DeviceNames[0] := 'USER'; + MpFileManagerUIConnect.DeviceList.DeviceNames[1] := 'mappRecipeFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[2] := 'mappAuditFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[3] := 'mappReportFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[4] := 'mappBackupFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[5] := 'mappAlarmXFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[6] := 'mappUserXFiles'; + MpFileManagerUISys.Enable := TRUE; + MpFileManagerUISys.MpLink := ADR(gMpLinkFileManagerUIFile); + MpFileManagerUISys.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUISys.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); + MpFileManagerUISys(); + + HmiFile.Status.DeleteStep := FILE_DISABLED; + + // Restored the retained values to the FIFO settings + HmiFile.Parameters.Fifo := FifoSettingsRetain; + // If the FIFO is disabled and parameters are 0, set default values + IF NOT HmiFile.Parameters.Fifo.Enable THEN + IF HmiFile.Parameters.Fifo.MaxFolderSize = 0 THEN + HmiFile.Parameters.Fifo.MaxFolderSize := 1000; + END_IF + IF HmiFile.Parameters.Fifo.MaxNumberOfFiles = 0 THEN + HmiFile.Parameters.Fifo.MaxNumberOfFiles := 20; + END_IF + IF HmiFile.Parameters.Fifo.ScanInterval = 0 THEN + HmiFile.Parameters.Fifo.ScanInterval := 60; + END_IF + IF HmiFile.Parameters.Fifo.DeviceName = '' THEN + HmiFile.Parameters.Fifo.DeviceName := 'USER'; + END_IF + END_IF + + // enable the FIFO configuration, used to prevent the user from making changes while the FIFO is actively deleting files + HmiFile.Status.FifoConfigEnable := TRUE; + + // Initialize which folders should exist + PathCheck.DeviceList := MpFileManagerUIConnect.DeviceList; + + PathCheck.PrgName[0] := 'RecipeMgr'; + PathCheck.PrgName[1] := 'AuditMgr'; + PathCheck.PrgName[2] := 'ReportMgr'; + PathCheck.PrgName[3] := 'BackupMgr'; + PathCheck.PrgName[4] := 'AlarmMgr'; + PathCheck.PrgName[5] := 'UserXMgr'; + PathCheck.PrgName[6] := 'UsbMgr'; + PathCheck.PrgName[7] := 'UsbMgr'; + + PathCheck.Folder[0] := 'Recipe'; + PathCheck.Folder[1] := 'Audit'; + PathCheck.Folder[2] := 'Report'; + PathCheck.Folder[3] := 'Backup'; + PathCheck.Folder[4] := 'AlarmX'; + PathCheck.Folder[5] := 'UserX'; + + HmiFile.Status.DeviceDataProvider[0] := '{"value":"USER","text":"UserPath"}'; + HmiFile.Status.DeviceDataProvider[1] := '{"value":"mappRecipeFiles","text":"mappRecipeFiles"}'; + HmiFile.Status.DeviceDataProvider[2] := '{"value":"mappAuditFiles","text":"mappAuditFiles"}'; + HmiFile.Status.DeviceDataProvider[3] := '{"value":"mappReportFiles","text":"mappReportFiles"}'; + HmiFile.Status.DeviceDataProvider[4] := '{"value":"mappBackupFiles","text":"mappBackupFiles"}'; + HmiFile.Status.DeviceDataProvider[5] := '{"value":"mappAlarmXFiles","text":"mappAlarmXFiles"}'; + HmiFile.Status.DeviceDataProvider[6] := '{"value":"mappUserXFiles","text":"mappUserXFiles"}'; + + // Calculate offset for potential additional USB devices + FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames) / SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames[0])) - 1) DO + IF MpFileManagerUIConnect.DeviceList.DeviceNames[i] <> '' THEN + USBOffset := USBOffset + 1; + END_IF + END_FOR + +END_PROGRAM + +PROGRAM _CYCLIC + + // Call all cyclic actions + FormatDeviceDataProvider; + FileManager; + FIFOOperation; + + // Error reset + IF NOT MpFileManagerUISys.Error THEN + MpFileManagerUISys.ErrorReset := FALSE; + END_IF + + // Assign MpLinks and address references + MpFileManagerUISys.MpLink := ADR(gMpLinkFileManagerUIFile); + MpFileManagerUISys.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUI_FIFO.MpLink := ADR(gMpLinkFileManagerUIFile_FIFO); + + // Call function blocks + MpFileManagerUISys(); + MpFileManagerUI_FIFO(); + +END_PROGRAM + +PROGRAM _EXIT + + // Disable the function blocks to unlink the MpLink + MpFileManagerUISys.Enable := FALSE; + MpFileManagerUI_FIFO.Enable := FALSE; + + // Call function blocks + MpFileManagerUISys(); + MpFileManagerUI_FIFO(); + +END_PROGRAM + diff --git a/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.var b/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.var index d7f15181..e2370807 100644 --- a/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.var +++ b/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.var @@ -1,12 +1,12 @@ (*Function Blocks*) VAR - MpFileManagerUI_0 : MpFileManagerUI; (*MpFileManagerUI instance*) + MpFileManagerUISys : MpFileManagerUI; (*MpFileManagerUI instance*) MpFileManagerUI_FIFO : MpFileManagerUI; (*MpFileManagerUI instance*) - R_TRIG_CheckStatus : R_TRIG; (*Trigger function block*) - TON_Wait : TON; (*FIFO handling support*) - TON_ScanFolder : TON; (*Timer to scan for folder*) + CheckStatusTrigger : R_TRIG; (*Trigger function block*) + WaitTimer : TON; (*FIFO handling support*) + ScanFolderTimer : TON; (*Timer to scan for folder*) CurrentIndex : UDINT; (*FIFO handling support deleting more then 50 files*) - DirRead_FolderSize : DirRead; (*FIFO handling support reading current folder size*) + DirReadFolderSize : DirRead; (*FIFO handling support reading current folder size*) END_VAR (*Constants*) VAR CONSTANT @@ -27,7 +27,7 @@ VAR Ident : UDINT; (*Ident of a program on target*) IdentStatus : UINT; (*Status variable if a program exists on target*) FolderDepthCount : USINT; (*Keeps track of the folder depth location to determine whether or not the back button should be shown*) - USBOffset : USINT := 0; (*Device list offset where to add USB device*) + USBOffset : USINT; (*Device list offset where to add USB device*) MaxDeviceNameIndex : USINT; (*How many devices are configured*) TempIdx : USINT; (*FIFO handling support index variable*) FileNameArraySize : USINT; (*FIFO handling support size of the array*) diff --git a/mappFramework/Logical/Infrastructure/File/FileMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/File/FileMgr/HMIActions.st index c49b1575..ddd99964 100644 --- a/mappFramework/Logical/Infrastructure/File/FileMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/File/FileMgr/HMIActions.st @@ -53,6 +53,7 @@ ACTION FormatDeviceDataProvider: brsstrcat(ADR(HmiFile.Status.TableConfig[1]), ADR(',"to":49, "visible":false}]}')); // Create device data provider for FIFO drop down + brsmemset(ADR(HmiFile.Status.DeviceDataProvider), 0, SIZEOF(HmiFile.Status.DeviceDataProvider)); FOR i := 0 TO MaxDeviceNameIndex DO IF (MpFileManagerUIConnect.DeviceList.DeviceNames[i] <> '') THEN HmiFile.Status.DeviceDataProvider[i] := '{"value":"'; @@ -61,7 +62,8 @@ ACTION FormatDeviceDataProvider: brsstrcat(ADR(HmiFile.Status.DeviceDataProvider[i]), ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[i])); brsstrcat(ADR(HmiFile.Status.DeviceDataProvider[i]), ADR('"}')); ELSE - brsmemset(ADR(HmiFile.Status.DeviceDataProvider[i]), 0, SIZEOF(HmiFile.Status.DeviceDataProvider[i])); + HmiFile.Status.DeviceDataProvider[i] := '{"value":"Disable","text":"Disable FIFO"}'; + EXIT; END_IF END_FOR @@ -69,9 +71,9 @@ END_ACTION ACTION FileManager: - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIFile); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0(); + MpFileManagerUISys.MpLink := ADR(gMpLinkFileManagerUIFile); + MpFileManagerUISys.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUISys(); FOR i := 0 TO ((SIZEOF(HmiFile.Status.FileNames)/SIZEOF(HmiFile.Status.FileNames[0])) - 1) DO HmiFile.Status.FileNames[i] := MpFileManagerUIConnect.File.List.Items[i].Name; @@ -88,9 +90,9 @@ ACTION FileManager: END_IF // Set file selected when the table is clicked Single and MultiSelect - IF (MpFileManagerUIConnect.File.MultiSelect = FALSE) THEN + IF (NOT MpFileManagerUIConnect.File.MultiSelect) THEN MpFileManagerUIConnect.File.List.Items[i].IsSelected := (i = HmiFile.Status.SelectedIndex); - ELSIF (MpFileManagerUIConnect.File.MultiSelect = TRUE) AND (HmiFile.Commands.MultiSelect = TRUE) THEN + ELSIF (MpFileManagerUIConnect.File.MultiSelect) AND (HmiFile.Commands.MultiSelect) THEN IF (i = HmiFile.Status.SelectedIndex) AND NOT MpFileManagerUIConnect.File.List.Items[i].IsSelected THEN MpFileManagerUIConnect.File.List.Items[i].IsSelected := TRUE; HmiFile.Commands.MultiSelect := FALSE; diff --git a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/HMIActions.st index e9fa7023..db50f928 100644 --- a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/HMIActions.st @@ -2,23 +2,23 @@ ACTION HmiActions: // Connect HMIPackML Commands to function block - MpPackMLModule_Main.Command.Abort := HmiPackML.Commands.Abort; - MpPackMLModule_Main.Command.Clear := HmiPackML.Commands.Clear; - MpPackMLModule_Main.Command.Hold := HmiPackML.Commands.Hold; - MpPackMLModule_Main.Command.Reset := HmiPackML.Commands.Reset; - MpPackMLModule_Main.Command.Start := HmiPackML.Commands.Start; - MpPackMLModule_Main.Command.Stop := HmiPackML.Commands.Stop; - MpPackMLModule_Main.Command.Suspend := HmiPackML.Commands.Suspend; - MpPackMLModule_Main.Command.Unhold := HmiPackML.Commands.Unhold; - MpPackMLModule_Main.Command.Unsuspend := HmiPackML.Commands.Unsuspend; + MpPackMLModuleMain.Command.Abort := HmiPackML.Commands.Abort; + MpPackMLModuleMain.Command.Clear := HmiPackML.Commands.Clear; + MpPackMLModuleMain.Command.Hold := HmiPackML.Commands.Hold; + MpPackMLModuleMain.Command.Reset := HmiPackML.Commands.Reset; + MpPackMLModuleMain.Command.Start := HmiPackML.Commands.Start; + MpPackMLModuleMain.Command.Stop := HmiPackML.Commands.Stop; + MpPackMLModuleMain.Command.Suspend := HmiPackML.Commands.Suspend; + MpPackMLModuleMain.Command.Unhold := HmiPackML.Commands.Unhold; + MpPackMLModuleMain.Command.Unsuspend := HmiPackML.Commands.Unsuspend; // Allow user to command StateComplete only while machine is in state execute - IF MpPackMLModule_Main.StateCurrent = mpPACKML_STATE_EXECUTE THEN - MpPackMLModule_Main.Command.StateComplete := HmiPackML.Commands.Complete; + IF MpPackMLModuleMain.StateCurrent = mpPACKML_STATE_EXECUTE THEN + MpPackMLModuleMain.Command.StateComplete := HmiPackML.Commands.Complete; END_IF // Assign mode configuration based on active mode - CASE MpPackMLModule_Main.ModeID OF + CASE MpPackMLModuleMain.ModeID OF 1: HmiPackML.Parameters.StateEnabled := AutomaticMode; 2: @@ -35,18 +35,18 @@ ACTION HmiActions: PackMLBaseModel(HmiPackML.Parameters.StateEnabled,ADR(HmiPackML.Status.PackMLStateModel)); //start timer before transitioning to the current state which turns the opacity to 100% creating a blinking effect - TON_StateBlink.IN := TRUE; - IF TON_StateBlink.Q THEN - HmiPackML.Status.PackMLState := MpPackMLModule_Main.StateCurrent; - TON_StateBlink.IN := FALSE; + StateBlinkTimer.IN := TRUE; + IF StateBlinkTimer.Q THEN + HmiPackML.Status.PackMLState := MpPackMLModuleMain.StateCurrent; + StateBlinkTimer.IN := FALSE; END_IF mpPACKML_STATE_CLEARING..mpPACKML_STATE_COMPLETE: - TON_StateBlink.IN := TRUE; - IF TON_StateBlink.Q THEN + StateBlinkTimer.IN := TRUE; + IF StateBlinkTimer.Q THEN HmiPackML.Status.PackMLState := 0; - TON_StateBlink.IN := FALSE; + StateBlinkTimer.IN := FALSE; END_IF ELSE //if the state does't exist because of the synchronized mode use just go back to state 0 @@ -54,11 +54,11 @@ ACTION HmiActions: END_CASE // timer function block call - TON_StateBlink(PT := t#1s); + StateBlinkTimer(PT := t#1s); // copy status info to HMI structure - HmiPackML.Status.StateCurrent := MpPackMLModule_Main.Info.StateCurrent; - HmiPackML.Status.ModeCurrent := MpPackMLModule_Main.Info.ModeCurrent; + HmiPackML.Status.StateCurrent := MpPackMLModuleMain.Info.StateCurrent; + HmiPackML.Status.ModeCurrent := MpPackMLModuleMain.Info.ModeCurrent; END_ACTION diff --git a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/IEC.prg b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/IEC.prg index bcad0e7c..0921f7d1 100644 --- a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/IEC.prg +++ b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/IEC.prg @@ -9,5 +9,6 @@ StateMachine.st LocalFunctions.fun PackMLBaseModel.st + StateInitialize.st \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/PackMLMgr.st b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/PackMLMgr.st index c46b563b..56e5ada6 100644 --- a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/PackMLMgr.st +++ b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/PackMLMgr.st @@ -8,22 +8,27 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappPackMLFiles'), pName := ADR('/')); + DirCreatePackML(enable := TRUE, pDevice := ADR('mappPackMLFiles'), pName := ADR('/')); // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreatePackML.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreatePackML(enable := FALSE); END_IF // Initialize mapp function blocks - MpPackMLModule_Main.Parameters := ADR(MpPackMLModulePar_Main); - MpPackMLModule_Main.MpLink := ADR(gPackMLModule_Main); - MpPackMLModule_Main.Enable := TRUE; - MpPackMLModule_Main(); + MpPackMLModuleMain.Parameters := ADR(MpPackMLModuleParMain); + MpPackMLModuleMain.MpLink := ADR(gMpPackMLModuleMain); + MpPackMLModuleMain.Enable := TRUE; + MpPackMLModuleMain(); + + //PackML Mode Initializations + StateInitialize; // Initialize startup mode - Automatic Mode HmiPackML.Commands.Mode := 1; + + END_PROGRAM PROGRAM _CYCLIC @@ -33,21 +38,21 @@ PROGRAM _CYCLIC HmiActions; // Assign MpLinks & UIConnects - MpPackMLModule_Main.Parameters := ADR(MpPackMLModulePar_Main); - MpPackMLModule_Main.MpLink := ADR(gPackMLModule_Main); + MpPackMLModuleMain.Parameters := ADR(MpPackMLModuleParMain); + MpPackMLModuleMain.MpLink := ADR(gMpPackMLModuleMain); // Call function blocks - MpPackMLModule_Main(); + MpPackMLModuleMain(); END_PROGRAM PROGRAM _EXIT // Disable the function blocks to unlink the MpLinks - MpPackMLModule_Main.Enable := FALSE; + MpPackMLModuleMain.Enable := FALSE; // Call function blocks - MpPackMLModule_Main(); + MpPackMLModuleMain(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/PackMLMgr.var b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/PackMLMgr.var index 11dc1dfc..5b8ba06d 100644 --- a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/PackMLMgr.var +++ b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/PackMLMgr.var @@ -1,16 +1,16 @@ (*Function Blocks*) VAR - DirCreate_0 : DirCreate; (*DirCreate instance*) - MpPackMLModule_Main : MpPackMLModule; (*PackMLModule instance*) - MpPackMLModulePar_Main : MpPackMLModuleParType; (*PackMLModule Parameter instance*) - TON_StateBlink : TON; (*Timer to control state blinking action*) + DirCreatePackML : DirCreate; (*DirCreate instance*) + MpPackMLModuleMain : MpPackMLModule; (*PackMLModule instance*) + MpPackMLModuleParMain : MpPackMLModuleParType; (*PackMLModule Parameter instance*) + StateBlinkTimer : TON; (*Timer to control state blinking action*) END_VAR (*Constants*) (*Structure Types*) VAR - Manual : PackMLStateEnabledType := (Clearing:=FALSE,Stopped:=TRUE,Starting:=TRUE,Idle:=TRUE,Suspended:=FALSE,Execute:=TRUE,Stopping:=TRUE,Aborting:=TRUE,Aborted:=TRUE,Holding:=FALSE,Held:=FALSE,Unholding:=FALSE,Suspending:=FALSE,Unsuspending:=FALSE,Resetting:=TRUE,Completing:=FALSE,Complete:=FALSE); (*State active / inactive control*) - Maintenance : PackMLStateEnabledType := (Clearing:=TRUE,Stopped:=TRUE,Starting:=TRUE,Idle:=TRUE,Suspended:=FALSE,Execute:=TRUE,Stopping:=TRUE,Aborting:=TRUE,Aborted:=TRUE,Holding:=TRUE,Held:=TRUE,Unholding:=TRUE,Suspending:=FALSE,Unsuspending:=FALSE,Resetting:=TRUE,Completing:=FALSE,Complete:=FALSE); (*State active / inactive control*) - AutomaticMode : PackMLStateEnabledType := (Clearing:=TRUE,Stopped:=TRUE,Starting:=TRUE,Idle:=TRUE,Suspended:=TRUE,Execute:=TRUE,Stopping:=TRUE,Aborting:=TRUE,Aborted:=TRUE,Holding:=TRUE,Held:=TRUE,Unholding:=TRUE,Suspending:=TRUE,Unsuspending:=TRUE,Resetting:=TRUE,Completing:=TRUE,Complete:=TRUE); (*State active / inactive control*) - HmiPackML : PackMLHmiInterfaceType := (Parameters:=(StateEnabled:=(Clearing:=TRUE,Stopped:=TRUE,Starting:=TRUE,Idle:=TRUE,Suspended:=TRUE,Execute:=TRUE,Stopping:=TRUE,Aborting:=TRUE,Aborted:=TRUE,Holding:=TRUE,Held:=TRUE,Unholding:=TRUE,Suspending:=TRUE,Unsuspending:=TRUE,Resetting:=TRUE,Completing:=TRUE,Complete:=TRUE))); (*HMI interface structure*) + Manual : PackMLStateEnabledType; (*State active / inactive control*) + Maintenance : PackMLStateEnabledType; (*State active / inactive control*) + AutomaticMode : PackMLStateEnabledType; (*State active / inactive control*) + HmiPackML : PackMLHmiInterfaceType; (*HMI interface structure*) END_VAR (*Variables*) diff --git a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/StateInitialize.st b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/StateInitialize.st new file mode 100644 index 00000000..c0a5c1ac --- /dev/null +++ b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/StateInitialize.st @@ -0,0 +1,79 @@ + +ACTION StateInitialize: + + //Initialize the PackML framework + + Manual.Clearing:=FALSE; + Manual.Stopped:=TRUE; + Manual.Starting:=TRUE; + Manual.Idle:=TRUE; + Manual.Suspended:=FALSE; + Manual.Execute:=TRUE; + Manual.Stopping:=TRUE; + Manual.Aborting:=TRUE; + Manual.Aborted:=TRUE; + Manual.Holding:=FALSE; + Manual.Held:=FALSE; + Manual.Unholding:=FALSE; + Manual.Suspending:=FALSE; + Manual.Unsuspending:=FALSE; + Manual.Resetting:=TRUE; + Manual.Completing:=FALSE; + Manual.Complete:=FALSE; + + Maintenance.Clearing:=TRUE; + Maintenance.Stopped:=TRUE; + Maintenance.Starting:=TRUE; + Maintenance.Idle:=TRUE; + Maintenance.Suspended:=FALSE; + Maintenance.Execute:=TRUE; + Maintenance.Stopping:=TRUE; + Maintenance.Aborting:=TRUE; + Maintenance.Aborted:=TRUE; + Maintenance.Holding:=TRUE; + Maintenance.Held:=TRUE; + Maintenance.Unholding:=TRUE; + Maintenance.Suspending:=FALSE; + Maintenance.Unsuspending:=FALSE; + Maintenance.Resetting:=TRUE; + Maintenance.Completing:=FALSE; + Maintenance.Complete:=FALSE; + + AutomaticMode.Clearing:=TRUE; + AutomaticMode.Stopped:=TRUE; + AutomaticMode.Starting:=TRUE; + AutomaticMode.Idle:=TRUE; + AutomaticMode.Suspended:=TRUE; + AutomaticMode.Execute:=TRUE; + AutomaticMode.Stopping:=TRUE; + AutomaticMode.Aborting:=TRUE; + AutomaticMode.Aborted:=TRUE; + AutomaticMode.Holding:=TRUE; + AutomaticMode.Held:=TRUE; + AutomaticMode.Unholding:=TRUE; + AutomaticMode.Suspending:=TRUE; + AutomaticMode.Unsuspending:=TRUE; + AutomaticMode.Resetting:=TRUE; + AutomaticMode.Completing:=TRUE; + AutomaticMode.Complete:=TRUE; + + HmiPackML.Parameters.StateEnabled.Clearing:=TRUE; + HmiPackML.Parameters.StateEnabled.Stopped:=TRUE; + HmiPackML.Parameters.StateEnabled.Starting:=TRUE; + HmiPackML.Parameters.StateEnabled.Idle:=TRUE; + HmiPackML.Parameters.StateEnabled.Suspended:=TRUE; + HmiPackML.Parameters.StateEnabled.Execute:=TRUE; + HmiPackML.Parameters.StateEnabled.Stopping:=TRUE; + HmiPackML.Parameters.StateEnabled.Aborting:=TRUE; + HmiPackML.Parameters.StateEnabled.Aborted:=TRUE; + HmiPackML.Parameters.StateEnabled.Holding:=TRUE; + HmiPackML.Parameters.StateEnabled.Held:=TRUE; + HmiPackML.Parameters.StateEnabled.Unholding:=TRUE; + HmiPackML.Parameters.StateEnabled.Suspending:=TRUE; + HmiPackML.Parameters.StateEnabled.Unsuspending:=TRUE; + HmiPackML.Parameters.StateEnabled.Resetting:=TRUE; + HmiPackML.Parameters.StateEnabled.Completing:=TRUE; + HmiPackML.Parameters.StateEnabled.Complete:=TRUE; + + +END_ACTION diff --git a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/StateMachine.st b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/StateMachine.st index 96a0b1c0..4e3a4e48 100644 --- a/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/StateMachine.st +++ b/mappFramework/Logical/Infrastructure/PackML/PackMLMgr/StateMachine.st @@ -6,7 +6,7 @@ ACTION StateMachine: MpPackMLChangeMode(gMpLinkPackMLCore,HmiPackML.Commands.Mode); END_IF - CASE MpPackMLModule_Main.StateCurrent OF + CASE MpPackMLModuleMain.StateCurrent OF mpPACKML_STATE_STOPPED: @@ -16,7 +16,7 @@ ACTION StateMachine: // Add STARTING actions here - MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := TRUE; mpPACKML_STATE_IDLE: @@ -26,7 +26,7 @@ ACTION StateMachine: // Add SUSPENDING actions here - MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := TRUE; mpPACKML_STATE_SUSPENDED: @@ -36,7 +36,7 @@ ACTION StateMachine: // Add UNSUSPENDING actions here - MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := TRUE; mpPACKML_STATE_EXECUTE: @@ -46,13 +46,13 @@ ACTION StateMachine: // Add STOPPING actions here - MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := TRUE; mpPACKML_STATE_ABORTING: // Add ABORTING actions here - MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := TRUE; mpPACKML_STATE_ABORTED: @@ -62,7 +62,7 @@ ACTION StateMachine: // Add HOLDING actions here - MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := TRUE; mpPACKML_STATE_HELD: @@ -72,7 +72,7 @@ ACTION StateMachine: // Add UNHOLDING actions here - MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := TRUE; mpPACKML_STATE_COMPLETING: @@ -80,8 +80,8 @@ ACTION StateMachine: // NOTE: once COMPLETING actions that take more than one cyclic have been added, the below line // should be removed and replaced by the following line. - MpPackMLModule_Main.Command.StateComplete := NOT MpPackMLModule_Main.Command.StateComplete; - // MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := NOT MpPackMLModuleMain.Command.StateComplete; + // MpPackMLModuleMain.Command.StateComplete := TRUE; mpPACKML_STATE_COMPLETE: @@ -92,13 +92,13 @@ ACTION StateMachine: // Add RESETTING actions here - MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := TRUE; mpPACKML_STATE_CLEARING: // Add CLEARING actions here - MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := TRUE; mpPACKML_STATE_DEACTIVATING: @@ -112,7 +112,7 @@ ACTION StateMachine: // Add ACTIVATING actions here - MpPackMLModule_Main.Command.StateComplete := TRUE; + MpPackMLModuleMain.Command.StateComplete := TRUE; END_CASE diff --git a/mappFramework/Logical/Infrastructure/Recipe/Package.pkg b/mappFramework/Logical/Infrastructure/Recipe/Package.pkg index 772b8e2f..cbc1ba4b 100644 --- a/mappFramework/Logical/Infrastructure/Recipe/Package.pkg +++ b/mappFramework/Logical/Infrastructure/Recipe/Package.pkg @@ -4,5 +4,6 @@ RecipeMgr RecipeAlarms.tmx + RecipeParTexts.tmx \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/HMIActions.st index 3cf3d553..79aba4a4 100644 --- a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/HMIActions.st @@ -30,8 +30,14 @@ ACTION LoadStatus: HmiRecipe.Status.FilesAvailable := (MpRecipeUIConnect.Recipe.List.Names[0] <> ''); HmiRecipe.Status.LoadAllowed := HmiRecipe.Status.FilesAvailable AND NOT HmiRecipe.Status.InvalidRecipe; - HmiRecipe.Status.DeviceValid := (MpFileManagerUI_0.StatusID <> mpFILE_ERR_INVALID_FILE_DEV); + HmiRecipe.Status.DeviceValid := (MpFileManagerUIRecipe.StatusID <> mpFILE_ERR_INVALID_FILE_DEV); + + IF HmiRecipe.Status.SelectedIndex > MpRecipeUIConnect.Recipe.List.MaxSelection THEN + HmiRecipe.Status.SelectedIndex := MpRecipeUIConnect.Recipe.List.MaxSelection; + END_IF + MpRecipeUIConnect.Recipe.List.SelectedIndex := HmiRecipe.Status.SelectedIndex; + END_ACTION ACTION LoadPreview: @@ -40,18 +46,19 @@ ACTION LoadPreview: CASE HmiRecipe.Status.PreviewCase OF PREVIEW_WAIT: // Load preview when a recipe is selected - IF (MpRecipeUIConnect.Recipe.List.SelectedIndex <> HmiRecipe.Status.LastSelectedIndex) OR (HmiRecipe.Status.LastMaxSelection <> MpRecipeUIConnect.Recipe.List.MaxSelection) - OR (HmiRecipe.Status.PreviousRangeStart <> MpRecipeUIConnect.Recipe.List.RangeStart) OR (HmiRecipe.Status.PreviousRangeStart <> MpRecipeUIConnect.Recipe.List.RangeStart) THEN + IF ((HmiRecipe.Status.SelectedIndex <> HmiRecipe.Status.LastSelectedIndex) OR (HmiRecipe.Status.LastMaxSelection <> MpRecipeUIConnect.Recipe.List.MaxSelection) + OR (HmiRecipe.Status.PreviousRangeStart <> MpRecipeUIConnect.Recipe.List.RangeStart) OR (HmiRecipe.Status.PreviousRangeStart <> MpRecipeUIConnect.Recipe.List.RangeStart)) + AND (MpRecipeUIConnect.Status = mpRECIPE_UI_STATUS_IDLE) THEN HmiRecipe.Status.PreviewCase := PREVIEW_LOAD; END_IF PREVIEW_LOAD: // Check selected recipe name is not empty - IF (brsstrlen(ADR(MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex])) > 0) THEN - MpRecipe_0.FileName := ADR(MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex]); - MpRecipe_0.Category := ADR(HmiRecipe.Parameters.Category); - MpRecipe_0.Load := TRUE; - HmiRecipe.Status.LastSelectedIndex := MpRecipeUIConnect.Recipe.List.SelectedIndex; + IF (brsstrlen(ADR(MpRecipeUIConnect.Recipe.List.Names[HmiRecipe.Status.SelectedIndex])) > 0) AND (HmiRecipe.Status.HMIcommand = REC_HMI_WAIT) THEN + MpRecipeSys.FileName := ADR(MpRecipeUIConnect.Recipe.List.Names[HmiRecipe.Status.SelectedIndex]); + MpRecipeSys.Category := ADR(HmiRecipe.Parameters.Category); + MpRecipeSys.Load := TRUE; + HmiRecipe.Status.LastSelectedIndex := HmiRecipe.Status.SelectedIndex; HmiRecipe.Status.LastMaxSelection := MpRecipeUIConnect.Recipe.List.MaxSelection; HmiRecipe.Status.PreviousRangeStart := MpRecipeUIConnect.Recipe.List.RangeStart; HmiRecipe.Status.PreviousRangeEnd := MpRecipeUIConnect.Recipe.List.RangeEnd; @@ -61,19 +68,19 @@ ACTION LoadPreview: PREVIEW_CHANGE: //Load a second time to ensure correct preview on page up/page down - MpRecipe_0.Load := TRUE; + MpRecipeSys.Load := TRUE; HmiRecipe.Status.PreviewCase := PREVIEW_WAIT; END_CASE; - // Reset load command on MpRecipe_0 FUB - IF MpRecipe_0.StatusID <> 0 THEN + // Reset load command on MpRecipeSys FUB + IF MpRecipeSys.StatusID <> 0 THEN HmiRecipe.Status.InvalidRecipe := TRUE; HmiRecipe.Commands.ResetPreview := TRUE; END_IF; - IF ((MpRecipe_0.CommandDone = TRUE) OR (MpRecipe_0.Error = TRUE)) THEN - MpRecipe_0.Load := FALSE; + IF ((MpRecipeSys.CommandDone) OR (MpRecipeSys.Error)) THEN + MpRecipeSys.Load := FALSE; END_IF END_ACTION @@ -126,14 +133,14 @@ ACTION RecipeHMIcommands: END_IF Header.Name := MpRecipeUIConnect.New.FileName; - DTGetTime_0.enable := TRUE; + DTGetTimeRecipe.enable := TRUE; REPEAT - DTGetTime_0(); - UNTIL (DTGetTime_0.status = 0) + DTGetTimeRecipe(); + UNTIL (DTGetTimeRecipe.status = 0) END_REPEAT; - Header.DateTime := DTGetTime_0.DT1; - DTGetTime_0.enable := FALSE; - DTGetTime_0(); + Header.DateTime := DTGetTimeRecipe.DT1; + DTGetTimeRecipe.enable := FALSE; + DTGetTimeRecipe(); MpRecipeUIConnect.New.Create := TRUE; HmiRecipe.Status.HMIcommand := REC_HMI_WAIT; @@ -147,11 +154,12 @@ ACTION RecipeHMIcommands: IF HmiRecipe.Status.ParameterRecipeMissing THEN HmiRecipe.Status.LastLoadedProductRecipe := DEFAULT_PARAMETERS; brsstrcat(ADR(HmiRecipe.Status.LastLoadedProductRecipe), ADR(PARAMETERS_FILE_EXTENSION)); + HmiRecipeRetain.LastLoadedProductRecipe := HmiRecipe.Status.LastLoadedProductRecipe; HmiRecipe.Status.ParameterRecipeMissing := FALSE; // Otherwise, the last loaded recipe is the selected recipe ELSE - HmiRecipe.Status.LastLoadedProductRecipe := MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex]; - HmiRecipeRetain.LastLoadedProductRecipe := MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex]; + HmiRecipe.Status.LastLoadedProductRecipe := MpRecipeUIConnect.Recipe.List.Names[HmiRecipe.Status.SelectedIndex]; + HmiRecipeRetain.LastLoadedProductRecipe := MpRecipeUIConnect.Recipe.List.Names[HmiRecipe.Status.SelectedIndex]; END_IF ELSIF (brsstrcmp(ADR(HmiRecipe.Parameters.Category), ADR(MACHINE_CONFIGURATION_RECIPE)) = 0) THEN MachineSettings := MachineSettingsPreview; @@ -160,11 +168,12 @@ ACTION RecipeHMIcommands: IF HmiRecipe.Status.MachineSettingsRecipeMissing THEN HmiRecipe.Status.LastLoadedConfigRecipe := DEFAULT_MACHINE_CONFIGURATION; brsstrcat(ADR(HmiRecipe.Status.LastLoadedConfigRecipe), ADR(MACHINE_CONFIG_FILE_EXTENSION)); + HmiRecipeRetain.LastLoadedConfigRecipe := HmiRecipe.Status.LastLoadedConfigRecipe; HmiRecipe.Status.MachineSettingsRecipeMissing := FALSE; // Otherwise, the last loaded recipe is the selected recipe ELSE - HmiRecipe.Status.LastLoadedConfigRecipe := MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex]; - HmiRecipeRetain.LastLoadedConfigRecipe := MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex]; + HmiRecipe.Status.LastLoadedConfigRecipe := MpRecipeUIConnect.Recipe.List.Names[HmiRecipe.Status.SelectedIndex]; + HmiRecipeRetain.LastLoadedConfigRecipe := MpRecipeUIConnect.Recipe.List.Names[HmiRecipe.Status.SelectedIndex]; END_IF END_IF HmiRecipe.Status.HMIcommand := REC_HMI_WAIT; @@ -180,8 +189,8 @@ ACTION RecipeHMIcommands: END_IF IF (brsstrlen(ADR(HmiRecipe.Status.SelectedRecipe)) > 0) THEN - MpRecipe_0.FileName := ADR(HmiRecipe.Status.SelectedRecipe); - MpRecipe_0.Save := TRUE; + MpRecipeSys.FileName := ADR(HmiRecipe.Status.SelectedRecipe); + MpRecipeSys.Save := TRUE; END_IF HmiRecipe.Status.HMIcommand := REC_HMI_WAIT; @@ -197,7 +206,7 @@ ACTION RecipeHMIcommands: END_CASE - // IF NOT MpRecipe_0.CommandBusy AND brsstrcmp(ADR(HmiRecipe.Status.PreviousRecipe), ADR(HmiRecipe.Parameters.FileName)) <> 0 THEN + // IF NOT MpRecipeSys.CommandBusy AND brsstrcmp(ADR(HmiRecipe.Status.PreviousRecipe), ADR(HmiRecipe.Parameters.FileName)) <> 0 THEN // HmiRecipe.Parameters.FileName := HmiRecipe.Status.PreviousRecipe; // END_IF @@ -242,6 +251,6 @@ ACTION RecipeHMIcommands: // Update status information HmiRecipe.Status.LastStatus := MpRecipeUIConnect.Status; - HmiRecipe.Status.SelectedRecipe := MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex]; + HmiRecipe.Status.SelectedRecipe := MpRecipeUIConnect.Recipe.List.Names[HmiRecipe.Status.SelectedIndex]; END_ACTION diff --git a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.st b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.st index 0a2f9c74..8336f068 100644 --- a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.st +++ b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.st @@ -8,16 +8,16 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappRecipeFiles'), pName := ADR('/')); + DirCreateRecipe(enable := TRUE, pDevice := ADR('mappRecipeFiles'), pName := ADR('/')); // Wait for DirCreate_0 to complete. - WHILE (DirCreate_0.status = ERR_FUB_BUSY) DO - DirCreate_0(); + WHILE (DirCreateRecipe.status = ERR_FUB_BUSY) DO + DirCreateRecipe(); END_WHILE // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST OR (DirCreate_0.status = ERR_OK) THEN - DirCreate_0(enable := FALSE); + IF DirCreateRecipe.status = fiERR_DIR_ALREADY_EXIST OR (DirCreateRecipe.status = ERR_OK) THEN + DirCreateRecipe(enable := FALSE); END_IF // Initialize mapp function blocks @@ -29,25 +29,26 @@ PROGRAM _INIT MpRecipeUISetup.AutoLoadHeader := TRUE; MpRecipeUIConnect.New.FileName := 'newRecipe'; MpRecipeUIConnect.Recipe.Filter := '*par'; - MpRecipeUI_0.MpLink := ADR(gMpLinkRecipeXml); - MpRecipeUI_0.Enable := TRUE; - MpRecipeUI_0.UIConnect := ADR(MpRecipeUIConnect); - MpRecipeUI_0.UISetup := MpRecipeUISetup; - MpRecipeUI_0(); + MpRecipeUISys.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeUISys.Enable := TRUE; + MpRecipeUISys.UIConnect := ADR(MpRecipeUIConnect); + MpRecipeUISys.UISetup := MpRecipeUISetup; + MpRecipeUISys(); HmiRecipe.Parameters.Category := PARAMETERS_CATEGORY; HmiRecipe.Status.DeviceDataProvider[0] := '{"value":"mappRecipeFiles","text":"CF/PLC"}'; HmiRecipe.Parameters.DeviceName := 'mappRecipeFiles'; - MpRecipe_0.MpLink := ADR(gMpLinkRecipeXml); - MpRecipe_0.Enable := TRUE; - MpRecipe_0.Category := ADR(HmiRecipe.Parameters.Category); - MpRecipe_0.DeviceName := ADR(HmiRecipe.Parameters.DeviceName); - MpRecipe_0.FileName := ADR(HmiRecipe.Parameters.FileName); - MpRecipe_0.Header := ADR(Header); - - // Wait for MpRecipe_0 to activate. This must be active before you can call the RegPar function blocks, which is below. - WHILE NOT(MpRecipe_0.Active OR MpRecipe_0.Error) DO - MpRecipe_0(); + MpRecipeSys.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeSys.Enable := TRUE; + MpRecipeSys.Category := ADR(HmiRecipe.Parameters.Category); + MpRecipeSys.DeviceName := ADR(HmiRecipe.Parameters.DeviceName); + MpRecipeSys.FileName := ADR(HmiRecipe.Parameters.FileName); + MpRecipeSys.Header := ADR(Header); + + // Wait for MpRecipeSys to activate. This must be active before you can call the RegPar function blocks, which is below. + WHILE NOT(MpRecipeSys.Active OR MpRecipeSys.Error) DO + MpRecipeSys(); + MpRecipeUISys(); END_WHILE // Register the preview variables to the recipe. These preview variables are a buffer between the recipe system and the @@ -78,15 +79,18 @@ PROGRAM _INIT // Load default Machine Settings recipe HmiRecipe.Parameters.Category := MACHINE_CONFIGURATION_CATEGORY; + HmiRecipe.Status.DefaultConfig := DEFAULT_MACHINE_CONFIGURATION; + brsstrcat(ADR(HmiRecipe.Status.DefaultConfig),ADR(MACHINE_CONFIG_FILE_EXTENSION)); + IF (brsstrcmp(ADR(HmiRecipeRetain.LastLoadedConfigRecipe), ADR('')) <> 0) THEN HmiRecipe.Parameters.FileName := HmiRecipeRetain.LastLoadedConfigRecipe; ELSE - HmiRecipe.Parameters.FileName := DEFAULT_MACHINE_CONFIGURATION; - brsstrcat(ADR(HmiRecipe.Parameters.FileName),ADR(MACHINE_CONFIG_FILE_EXTENSION)); + HmiRecipe.Parameters.FileName := HmiRecipe.Status.DefaultConfig; END_IF - MpRecipe_0.Load := TRUE; - WHILE NOT(MpRecipe_0.CommandDone OR MpRecipe_0.Error) DO - MpRecipe_0(); + MpRecipeSys.Load := TRUE; + WHILE NOT(MpRecipeSys.CommandDone OR MpRecipeSys.Error) DO + MpRecipeSys(); + MpRecipeUISys(); END_WHILE MachineSettings := MachineSettingsPreview; IF (brsstrcmp(ADR(HmiRecipeRetain.LastLoadedConfigRecipe), ADR('')) <> 0) THEN @@ -99,28 +103,35 @@ PROGRAM _INIT HmiRecipe.Status.ConfigRecipeLoaded := TRUE; // Check if the default machine settings recipe is missing - IF MpRecipe_0.Info.Diag.StatusID.ID = mpRECIPE_ERR_LOAD_DATA THEN - HmiRecipe.Status.MachineSettingsRecipeMissing := TRUE; + IF MpRecipeSys.Info.Diag.StatusID.ID = mpRECIPE_ERR_LOAD_DATA THEN + IF ((HmiRecipe.Status.DefaultConfig <> HmiRecipe.Parameters.FileName) AND (MpRecipeUIConnect.Recipe.List.Names[0] = '')) + OR (HmiRecipe.Status.DefaultConfig = HmiRecipe.Parameters.FileName) THEN + HmiRecipe.Status.MachineSettingsRecipeMissing := TRUE; + END_IF HmiRecipe.Status.LastLoadedConfigRecipe := ''; + HmiRecipeRetain.LastLoadedConfigRecipe := HmiRecipe.Status.LastLoadedConfigRecipe; HmiRecipe.Status.ConfigRecipeLoaded := FALSE; END_IF - MpRecipe_0.ErrorReset := MpRecipe_0.Error; - MpRecipe_0.Load := FALSE; - MpRecipe_0(); + MpRecipeSys.ErrorReset := MpRecipeSys.Error; + MpRecipeSys.Load := FALSE; + MpRecipeSys(); // Load default Parameter recipe HmiRecipe.Parameters.Category := PARAMETERS_CATEGORY; + HmiRecipe.Status.DefaultRecipe := DEFAULT_PARAMETERS; + brsstrcat(ADR(HmiRecipe.Status.DefaultRecipe),ADR(PARAMETERS_FILE_EXTENSION)); + IF (brsstrcmp(ADR(HmiRecipeRetain.LastLoadedProductRecipe), ADR('')) <> 0) THEN HmiRecipe.Parameters.FileName := HmiRecipeRetain.LastLoadedProductRecipe; ELSE - HmiRecipe.Parameters.FileName := DEFAULT_PARAMETERS; - brsstrcat(ADR(HmiRecipe.Parameters.FileName),ADR(PARAMETERS_FILE_EXTENSION)); + HmiRecipe.Parameters.FileName := HmiRecipe.Status.DefaultRecipe; END_IF - HmiRecipe.Status.PreviousRecipe := DEFAULT_PARAMETERS; - MpRecipe_0.Load := TRUE; - WHILE NOT(MpRecipe_0.CommandDone OR MpRecipe_0.Error) DO - MpRecipe_0(); + + MpRecipeSys.Load := TRUE; + WHILE NOT(MpRecipeSys.CommandDone OR MpRecipeSys.Error) DO + MpRecipeSys(); + MpRecipeUISys(); END_WHILE Parameters := ParametersPreview; IF (brsstrcmp(ADR(HmiRecipeRetain.LastLoadedProductRecipe), ADR('')) <> 0) THEN @@ -133,29 +144,33 @@ PROGRAM _INIT HmiRecipe.Status.ProductRecipeLoaded := TRUE; // Check if the default parameters recipe is missing - IF MpRecipe_0.Info.Diag.StatusID.ID = mpRECIPE_ERR_LOAD_DATA THEN - HmiRecipe.Status.ParameterRecipeMissing := TRUE; + IF MpRecipeSys.Info.Diag.StatusID.ID = mpRECIPE_ERR_LOAD_DATA THEN + IF ((HmiRecipe.Status.DefaultRecipe <> HmiRecipe.Parameters.FileName) AND (MpRecipeUIConnect.Recipe.List.Names[0] = '')) + OR (HmiRecipe.Status.DefaultRecipe = HmiRecipe.Parameters.FileName) THEN + HmiRecipe.Status.ParameterRecipeMissing := TRUE; + END_IF HmiRecipe.Status.LastLoadedProductRecipe := ''; + HmiRecipeRetain.LastLoadedProductRecipe := HmiRecipe.Status.LastLoadedProductRecipe; HmiRecipe.Status.ProductRecipeLoaded := FALSE; END_IF - MpRecipe_0.ErrorReset := MpRecipe_0.Error; - MpRecipe_0.Load := FALSE; - MpRecipe_0(); + MpRecipeSys.ErrorReset := MpRecipeSys.Error; + MpRecipeSys.Load := FALSE; + MpRecipeSys(); // Trigger update notification so that the initial parameters are copied to the process - MpRecipe_0.UpdateNotification := TRUE; + MpRecipeSys.UpdateNotification := TRUE; // Init Filemanager for exporting/importing files - MpFileManagerUI_0.Enable := TRUE; - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIRecipe); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); + MpFileManagerUIRecipe.Enable := TRUE; + MpFileManagerUIRecipe.MpLink := ADR(gMpLinkFileManagerUIRecipe); + MpFileManagerUIRecipe.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIRecipe.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); MpFileManagerUIConnect.DeviceList.DeviceNames[0] := 'mappRecipeFiles'; MpFileManagerUIConnect.DeviceList.DeviceNames[1] := ''; - MpFileManagerUI_0(); + MpFileManagerUIRecipe(); HmiRecipe.Status.HMIcommand := REC_HMI_WAIT; @@ -170,46 +185,46 @@ PROGRAM _CYCLIC LoadStatus; // Reset commands on MpRecipe FUB - IF MpRecipe_0.CommandDone THEN - MpRecipe_0.Load := FALSE; - MpRecipe_0.Save := FALSE; + IF MpRecipeSys.CommandDone THEN + MpRecipeSys.Load := FALSE; + MpRecipeSys.Save := FALSE; // Set update notification for machine category - IF ((brsstrcmp(ADR(HmiRecipe.Parameters.Category), ADR(MACHINE_CONFIGURATION_CATEGORY)) = 0) AND (MpRecipe_0.Save = TRUE)) THEN - MpRecipe_0.UpdateNotification := TRUE; + IF ((brsstrcmp(ADR(HmiRecipe.Parameters.Category), ADR(MACHINE_CONFIGURATION_CATEGORY)) = 0) AND (MpRecipeSys.Save)) THEN + MpRecipeSys.UpdateNotification := TRUE; ELSE - MpRecipe_0.UpdateNotification := FALSE; + MpRecipeSys.UpdateNotification := FALSE; END_IF END_IF // Error reset - IF NOT MpRecipe_0.Error THEN - MpRecipe_0.ErrorReset := FALSE; + IF NOT MpRecipeSys.Error THEN + MpRecipeSys.ErrorReset := FALSE; END_IF - IF NOT MpRecipeUI_0.Error THEN - MpRecipeUI_0.ErrorReset := FALSE; + IF NOT MpRecipeUISys.Error THEN + MpRecipeUISys.ErrorReset := FALSE; END_IF // Assign MpLinks & address references - MpRecipe_0.MpLink := ADR(gMpLinkRecipeXml); - MpRecipe_0.DeviceName := ADR(HmiRecipe.Parameters.DeviceName); - MpRecipe_0.Header := ADR(Header); - MpRecipeUI_0.MpLink := ADR(gMpLinkRecipeXml); - MpRecipeUI_0.UIConnect := ADR(MpRecipeUIConnect); - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIRecipe); + MpRecipeSys.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeSys.DeviceName := ADR(HmiRecipe.Parameters.DeviceName); + MpRecipeSys.Header := ADR(Header); + MpRecipeUISys.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeUISys.UIConnect := ADR(MpRecipeUIConnect); + MpFileManagerUIRecipe.MpLink := ADR(gMpLinkFileManagerUIRecipe); MpRecipeRegPar_PreviewPar.MpLink := ADR(gMpLinkRecipeXml); MpRecipeRegPar_PreviewPar.PVName := ADR('RecipeMgr:ParametersPreview'); MpRecipeRegPar_PreviewPar.Category := ADR(PARAMETERS_CATEGORY); MpRecipeRegPar_PreviewCfg.MpLink := ADR(gMpLinkRecipeXml); MpRecipeRegPar_PreviewCfg.PVName := ADR('RecipeMgr:MachineSettingsPreview'); MpRecipeRegPar_PreviewCfg.Category := ADR(MACHINE_CONFIGURATION_CATEGORY); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIRecipe.UIConnect := ADR(MpFileManagerUIConnect); // Call function blocks - MpRecipe_0(); - MpRecipeUI_0(); - MpFileManagerUI_0(); + MpRecipeSys(); + MpRecipeUISys(); + MpFileManagerUIRecipe(); MpRecipeRegPar_PreviewPar(); MpRecipeRegPar_PreviewCfg(); @@ -218,18 +233,18 @@ END_PROGRAM PROGRAM _EXIT // Disable the function blocls to unlink the MpLinks - MpRecipe_0.Enable := FALSE; - MpRecipeUI_0.Enable := FALSE; + MpRecipeSys.Enable := FALSE; + MpRecipeUISys.Enable := FALSE; MpRecipeRegPar_PreviewPar.Enable := FALSE; MpRecipeRegPar_PreviewCfg.Enable := FALSE; - MpFileManagerUI_0.Enable := FALSE; + MpFileManagerUIRecipe.Enable := FALSE; // Call function blocks - MpRecipe_0(); - MpRecipeUI_0(); + MpRecipeSys(); + MpRecipeUISys(); MpRecipeRegPar_PreviewPar(); MpRecipeRegPar_PreviewCfg(); - MpFileManagerUI_0(); + MpFileManagerUIRecipe(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.typ b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.typ index 1970ce61..031a15b4 100644 --- a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.typ +++ b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.typ @@ -24,14 +24,16 @@ TYPE LastLoadedProductRecipe : STRING[255]; (*Last loaded product recipe*) ProductRecipeLoaded : BOOL; (*Product recipe was loaded*) ConfigRecipeLoaded : BOOL; (*Config recipe was loaded*) - PreviousRangeStart : REAL; - PreviousRangeEnd : REAL; + PreviousRangeStart : REAL; (*Scroll range temp variables*) + PreviousRangeEnd : REAL; (*Scroll range temp variables*) LastMaxSelection : UINT; (*The previous maximum number of recipes*) + SelectedIndex : UINT; (*The currently selected index*) LastSelectedIndex : UINT; (*The previous selected index*) LastStatus : MpRecipeUIStatusEnum; (*The previous UI status*) EditDialogOpened : BOOL; (*Flag that the edit dialog box was opened*) CreateDialogOpened : BOOL; (*Flag that the create dialog box was opened*) - PreviousRecipe : STRING[80]; (*Name of the previous recipe*) + DefaultConfig : STRING[255]; (*Name of the default configuration*) + DefaultRecipe : STRING[255]; (*Name of the default recipe*) FileDuplicate : BOOL; (*Recipe file already exists, warn the user.*) FilesAvailable : BOOL; (*Control access to widget when no files are available*) InvalidRecipe : BOOL; (*The selected recipe cannot be previewed*) diff --git a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.var b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.var index a9571307..c1dd7b6d 100644 --- a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.var +++ b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.var @@ -1,12 +1,12 @@ (*Function Blocks*) VAR - MpRecipe_0 : MpRecipeXml; (*MpRecipe instance*) + MpRecipeSys : MpRecipeXml; (*MpRecipe instance*) MpRecipeRegPar_PreviewPar : MpRecipeRegPar; (*MpRecipeRegPar instance for ParametersPreview variable*) MpRecipeRegPar_PreviewCfg : MpRecipeRegPar; (*MpRecipeRegPar instance for MachineSettingsPreview*) - MpRecipeUI_0 : MpRecipeUI; (*MpRecupeUI instance*) - MpFileManagerUI_0 : MpFileManagerUI; (*MpFileManagerUI instance*) - DTGetTime_0 : DTGetTime; (*DTGetTime instance*) - DirCreate_0 : DirCreate; (*DirCreate instance*) + MpRecipeUISys : MpRecipeUI; (*MpRecupeUI instance*) + MpFileManagerUIRecipe : MpFileManagerUI; (*MpFileManagerUI instance*) + DTGetTimeRecipe : DTGetTime; (*DTGetTime instance*) + DirCreateRecipe : DirCreate; (*DirCreate instance*) END_VAR (*Constants*) VAR CONSTANT diff --git a/mappFramework/Logical/Infrastructure/Recipe/RecipeParTexts.tmx b/mappFramework/Logical/Infrastructure/Recipe/RecipeParTexts.tmx new file mode 100644 index 00000000..82c21107 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Recipe/RecipeParTexts.tmx @@ -0,0 +1,119 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + IAT/mappFramework/Recipe +
+ + + + Parameter 1 + + + 参数1 + + + Parameter 1 + + + + + Parameter 2 + + + 参数2 + + + Parameter 2 + + + + + Parameter 3 + + + 参数3 + + + Parameter 3 + + + + + Parameter 4 + + + 参数4 + + + Parameter 4 + + + + + Parameter 5 + + + 参数5 + + + Parameter 5 + + + + + Einstellung 1 + + + 设置1 + + + Setting 1 + + + + + Einstellung 2 + + + 设置2 + + + Setting 2 + + + + + Einstellung 3 + + + 设置3 + + + Setting 3 + + + + + Einstellung 4 + + + 设置4 + + + Setting 4 + + + + + Einstellung 5 + + + 设置5 + + + Setting 5 + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Report/ReportMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/Report/ReportMgr/HMIActions.st index 0232f74b..ab88832a 100644 --- a/mappFramework/Logical/Infrastructure/Report/ReportMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/Report/ReportMgr/HMIActions.st @@ -2,17 +2,17 @@ ACTION ReportFormat: // If the current format and the selected format do not match, disable the function block for a cycle and make the change IF HmiReport.Parameters.UseAdvancedFormat AND (HmiReport.Status.CurrentFormat = FORMAT_SIMPLE) THEN - MpReportCore_0.Enable := FALSE; - MpReportCore_0.MpLink := ADR(gMpLinkAdvancedReport); + MpReportCoreSys.Enable := FALSE; + MpReportCoreSys.MpLink := ADR(gMpLinkAdvancedReport); HmiReport.Parameters.Name := 'AdvancedReport'; HmiReport.Status.CurrentFormat := FORMAT_ADVANCED; ELSIF NOT HmiReport.Parameters.UseAdvancedFormat AND (HmiReport.Status.CurrentFormat = FORMAT_ADVANCED) THEN - MpReportCore_0.Enable := FALSE; - MpReportCore_0.MpLink := ADR(gMpLinkSimpleReport); + MpReportCoreSys.Enable := FALSE; + MpReportCoreSys.MpLink := ADR(gMpLinkSimpleReport); HmiReport.Parameters.Name := 'SimpleReport'; HmiReport.Status.CurrentFormat := FORMAT_SIMPLE; ELSE - MpReportCore_0.Enable := TRUE; + MpReportCoreSys.Enable := TRUE; END_IF END_ACTION @@ -20,12 +20,12 @@ END_ACTION ACTION ReportFileExplorer: // Connections between the HMI structure and the report function block - HmiReport.Status.Busy := MpReportCore_0.CommandBusy; - HmiReport.Status.Error := MpReportCore_0.Error; - MpReportCore_0.Language := ADR(HmiReport.Parameters.SelectedLanguage); + HmiReport.Status.Busy := MpReportCoreSys.CommandBusy; + HmiReport.Status.Error := MpReportCoreSys.Error; + MpReportCoreSys.Language := ADR(HmiReport.Parameters.SelectedLanguage); // Set or reset bits based on when a report can be created, deleted, and/or viewed. - HmiReport.Status.CreateAllowed := NOT(MpReportCore_0.CommandBusy); + HmiReport.Status.CreateAllowed := NOT(MpReportCoreSys.CommandBusy); HmiReport.Status.ViewAllowed := (MpFileManagerUIConnect.File.List.Items[HmiReport.Status.SelectedIndex].ItemType = mpFILE_ITEM_TYPE_USER1); HmiReport.Status.DeleteAllowed := (MpFileManagerUIConnect.File.List.Items[HmiReport.Status.SelectedIndex].ItemType = mpFILE_ITEM_TYPE_USER1); @@ -91,7 +91,7 @@ ACTION ReportFileExplorer: HmiReport.Status.FileOverMax := ItemCount > 50; // Set file device to selected - MpReportCore_0.DeviceName := ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[MpFileManagerUIConnect.DeviceList.SelectedIndex]); + MpReportCoreSys.DeviceName := ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[MpFileManagerUIConnect.DeviceList.SelectedIndex]); // Sort reports for next cycle IF HmiReport.Parameters.SortType = 'NameAsc' THEN diff --git a/mappFramework/Logical/Infrastructure/Report/ReportMgr/ReportMgr.st b/mappFramework/Logical/Infrastructure/Report/ReportMgr/ReportMgr.st index e6728aee..c5a5677b 100644 --- a/mappFramework/Logical/Infrastructure/Report/ReportMgr/ReportMgr.st +++ b/mappFramework/Logical/Infrastructure/Report/ReportMgr/ReportMgr.st @@ -8,27 +8,43 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappReportFiles'), pName := ADR('/')); + DirCreateReport(enable := TRUE, pDevice := ADR('mappReportFiles'), pName := ADR('/')); + // Wait for DirCreateReport to complete. + WHILE (DirCreateReport.status = ERR_FUB_BUSY) DO + DirCreateReport(); + END_WHILE + // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreateReport.status = fiERR_DIR_ALREADY_EXIST OR (DirCreateReport.status = ERR_OK) THEN + DirCreateReport(enable := FALSE); END_IF // Initialize mapp function blocks - MpReportCore_0.Language := ADR('en'); - MpReportCore_0.DeviceName := ADR('mappReportFiles'); - MpReportCore_0.MpLink := ADR(gMpLinkSimpleReport); - MpReportCore_0.Name := ADR(HmiReport.Parameters.Name); + MpReportCoreSys.Language := ADR('en'); + MpReportCoreSys.DeviceName := ADR('mappReportFiles'); + MpReportCoreSys.MpLink := ADR(gMpLinkSimpleReport); + MpReportCoreSys.Name := ADR(HmiReport.Parameters.Name); HmiReport.Parameters.Name := 'SimpleReport'; HmiReport.Parameters.SortType := 'NameAsc'; - MpReportCore_0(); - - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIReport); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); - MpFileManagerUI_0.Enable := TRUE; - MpFileManagerUI_0(); + MpReportCoreSys(); + + MpFileManagerUIConnect.DeviceList.DeviceNames[0] := 'mappReportFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[1] := ''; + MpFileManagerUIConnect.DeviceList.DeviceNames[2] := ''; + MpFileManagerUIConnect.DeviceList.DeviceNames[3] := ''; + MpFileManagerUIConnect.DeviceList.DeviceNames[4] := ''; + MpFileManagerUIConnect.DeviceList.DeviceNames[5] := ''; + MpFileManagerUIConnect.DeviceList.DeviceNames[6] := ''; + MpFileManagerUIConnect.DeviceList.DeviceNames[7] := ''; + MpFileManagerUIConnect.DeviceList.DeviceNames[8] := ''; + MpFileManagerUIConnect.DeviceList.DeviceNames[9] := ''; + + MpFileManagerUIReport.MpLink := ADR(gMpLinkFileManagerUIReport); + MpFileManagerUIReport.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIReport.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); + MpFileManagerUIReport.Enable := TRUE; + MpFileManagerUIReport(); // Fill an array to create example data for the example report TimeIndex := 0; @@ -50,7 +66,7 @@ END_PROGRAM PROGRAM _CYCLIC // Once a report has been generated, clear the generate command - IF MpReportCore_0.CommandDone THEN + IF MpReportCoreSys.CommandDone THEN MpFileManagerUIConnect.File.Refresh := TRUE; HmiReport.Commands.Generate := FALSE; END_IF @@ -60,29 +76,29 @@ PROGRAM _CYCLIC ReportFileExplorer; // Generate command - MpReportCore_0.Generate := HmiReport.Commands.Generate; - MpReportCore_0.Name := ADR(HmiReport.Parameters.Name); + MpReportCoreSys.Generate := HmiReport.Commands.Generate; + MpReportCoreSys.Name := ADR(HmiReport.Parameters.Name); // Assign address references - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIReport); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIReport.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIReport.MpLink := ADR(gMpLinkFileManagerUIReport); + MpFileManagerUIReport.UIConnect := ADR(MpFileManagerUIConnect); // Call function blocks - MpReportCore_0(); - MpFileManagerUI_0(); + MpReportCoreSys(); + MpFileManagerUIReport(); END_PROGRAM PROGRAM _EXIT // Disable the function blocks to unlink the MpLinks - MpReportCore_0.Enable := FALSE; - MpFileManagerUI_0.Enable := FALSE; + MpReportCoreSys.Enable := FALSE; + MpFileManagerUIReport.Enable := FALSE; // Call function blocks - MpReportCore_0(); - MpFileManagerUI_0(); + MpReportCoreSys(); + MpFileManagerUIReport(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/Report/ReportMgr/ReportMgr.var b/mappFramework/Logical/Infrastructure/Report/ReportMgr/ReportMgr.var index 4dc4d392..41c96c49 100644 --- a/mappFramework/Logical/Infrastructure/Report/ReportMgr/ReportMgr.var +++ b/mappFramework/Logical/Infrastructure/Report/ReportMgr/ReportMgr.var @@ -1,8 +1,8 @@ (*Function Blocks*) VAR - MpReportCore_0 : MpReportCore; (*MpReport instance*) - MpFileManagerUI_0 : MpFileManagerUI; (*MpFileManagerUI instance*) - DirCreate_0 : DirCreate; (*DirCreate instance*) + MpReportCoreSys : MpReportCore; (*MpReport instance*) + MpFileManagerUIReport : MpFileManagerUI; (*MpFileManagerUI instance*) + DirCreateReport : DirCreate; (*DirCreate instance*) END_VAR (*Constants*) VAR CONSTANT @@ -13,7 +13,7 @@ END_VAR VAR HmiReport : ReportHmiInterfaceType; (*HMI interface structure*) ReportExample : ReportExampleType; (*Structure for the example data used by the two types of reports*) - MpFileManagerUIConnect : MpFileManagerUIConnectType := (DeviceList:=(DeviceNames:=['mappReportFiles',9('')])); (*MpFile connection to the HMI*) + MpFileManagerUIConnect : MpFileManagerUIConnectType; (*MpFile connection to the HMI*) END_VAR (*Variables*) VAR diff --git a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/IEC.prg b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/IEC.prg index 770085b7..471a697d 100644 --- a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/IEC.prg +++ b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/IEC.prg @@ -3,7 +3,7 @@ UsbMgr.st - UsbMgr.typ - UsbMgr.var + UsbMgr.typ + UsbMgr.var \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.st b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.st index a5de7ad2..ecc72e6b 100644 --- a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.st +++ b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.st @@ -18,20 +18,20 @@ PROGRAM _CYCLIC // Refresh USB data every X seconds when enabled Node := 1; USB.Status := ERR_OK; - IF USB.Cmd.AutoScan = TRUE THEN - TON_01(IN := 1, PT := USB.Par.RefreshInterval); + IF USB.Cmd.AutoScan THEN + RefreshTimer(IN := 1, PT := USB.Par.RefreshInterval); // Get new USB data - IF(TON_01.Q) THEN - TON_01(IN := 0); + IF(RefreshTimer.Q) THEN + RefreshTimer(IN := 0); USB.Status := ERR_FUB_BUSY; - brsmemset(ADR(Usb_data), 0, SIZEOF(Usb_data)); + brsmemset(ADR(UsbData), 0, SIZEOF(UsbData)); StateMachine := USB_CREATE_NODE_ID_LIST; END_IF ELSE - TON_01(IN := 0); + RefreshTimer(IN := 0); END_IF // Refresh USB data every X seconds when enabled - IF USB.Cmd.ErrorReset = TRUE THEN + IF USB.Cmd.ErrorReset THEN StateMachine := USB_ERROR; END_IF @@ -43,23 +43,23 @@ PROGRAM _CYCLIC // Get USB device list // ----------------------------------------------------------------------------------------------------------- USB_CREATE_NODE_ID_LIST: - UsbNodeListGet_0.enable := 1; - UsbNodeListGet_0.pBuffer := ADR(Node_id_buffer); - UsbNodeListGet_0.bufferSize := SIZEOF(Node_id_buffer); - UsbNodeListGet_0.filterInterfaceClass := asusb_CLASS_MASS_STORAGE; - UsbNodeListGet_0.filterInterfaceSubClass := 0; - UsbNodeListGet_0; + GetUsbNodeList.enable := 1; + GetUsbNodeList.pBuffer := ADR(NodeIdBuffer); + GetUsbNodeList.bufferSize := SIZEOF(NodeIdBuffer); + GetUsbNodeList.filterInterfaceClass := asusb_CLASS_MASS_STORAGE; + GetUsbNodeList.filterInterfaceSubClass := 0; + GetUsbNodeList; // -------------------------------------------------------------------------------------------------------------------- // Success - IF UsbNodeListGet_0.status = 0 THEN + IF GetUsbNodeList.status = 0 THEN StateMachine := USB_READ_DEVICE_DATA; Node := 1; // No USB devices found - ELSIF UsbNodeListGet_0.status = asusbERR_USB_NOTFOUND THEN + ELSIF GetUsbNodeList.status = asusbERR_USB_NOTFOUND THEN // Unlink old device if it is gone now otherwise wait for next round FOR i:=1 TO MAX_IDX_USB_DEV_LIST DO - IF(USB.Par.IsConnected[i] = TRUE) THEN + IF(USB.Par.IsConnected[i]) THEN Node := 1; StateMachine := USB_CHECK_LINKED; RETURN; @@ -67,10 +67,10 @@ PROGRAM _CYCLIC END_FOR; StateMachine := USB_WAIT; // Error - ELSIF UsbNodeListGet_0.status <> ERR_FUB_BUSY THEN - USB.Status := UsbNodeListGet_0.status; + ELSIF GetUsbNodeList.status <> ERR_FUB_BUSY THEN + USB.Status := GetUsbNodeList.status; USB.Err.State := StateMachine; - IF UsbNodeListGet_0.status = asusbERR_BUFSIZE THEN + IF GetUsbNodeList.status = asusbERR_BUFSIZE THEN USB.Err.Text := 'maximum number of devices reached'; ELSE USB.Err.Text := 'error getting device list'; @@ -81,17 +81,17 @@ PROGRAM _CYCLIC // Get device information // ----------------------------------------------------------------------------------------------------------- USB_READ_DEVICE_DATA: - UsbNodeGet_0.enable := 1; - UsbNodeGet_0.nodeId := Node_id_buffer[Node]; - UsbNodeGet_0.pBuffer := ADR(Usb_data[Node]); - UsbNodeGet_0.bufferSize := SIZEOF (Usb_data[Node]); - UsbNodeGet_0; + GetUsbNode.enable := 1; + GetUsbNode.nodeId := NodeIdBuffer[Node]; + GetUsbNode.pBuffer := ADR(UsbData[Node]); + GetUsbNode.bufferSize := SIZEOF (UsbData[Node]); + GetUsbNode; // -------------------------------------------------------------------------------------------------------------------- // Success - IF UsbNodeGet_0.status = 0 THEN + IF GetUsbNode.status = 0 THEN // Make sure we have enough space to store USB data, proceed with next StateMachine when all devices are detetced - IF (Node = UsbNodeListGet_0.listNodes) OR (Node = MAX_IDX_USB_DEV_LIST) THEN + IF (Node = GetUsbNodeList.listNodes) OR (Node = MAX_IDX_USB_DEV_LIST) THEN Node := 1; StateMachine := USB_CHECK_LINKED; // Get next USB device @@ -99,8 +99,8 @@ PROGRAM _CYCLIC Node := Node + 1; END_IF; // Error - ELSIF UsbNodeGet_0.status <> ERR_FUB_BUSY THEN - USB.Status := UsbNodeGet_0.status; + ELSIF GetUsbNode.status <> ERR_FUB_BUSY THEN + USB.Status := GetUsbNode.status; USB.Err.State := StateMachine; USB.Err.Text := 'error getting device data'; StateMachine := USB_ERROR; @@ -118,27 +118,27 @@ PROGRAM _CYCLIC // ----------------------------------------------------------------------------------------------------------- // Check if device is still active - Is_linked := FALSE; + IsLinked := FALSE; FOR i:=1 TO MAX_IDX_USB_DEV_LIST DO // Compare old and new data - IF(brsmemcmp(ADR(Usb_data_old[Node]), ADR(Usb_data[i]), SIZEOF(Usb_data[i])) = 0) AND - (USB.Par.IgnoreDongle = FALSE OR (USB.Par.IgnoreDongle = TRUE AND Usb_data[i].productId <> BRproductId AND Usb_data[i].vendorId <> BRvendorId)) THEN + IF(brsmemcmp(ADR(UsbDataOld[Node]), ADR(UsbData[i]), SIZEOF(UsbData[i])) = 0) AND + (NOT USB.Par.IgnoreDongle OR (USB.Par.IgnoreDongle AND UsbData[i].productId <> BrProductId AND UsbData[i].vendorId <> BrVendorId)) THEN // Clear data, mark as linked and EXIT loop - brsmemset(ADR(Usb_data[i]), 0, SIZEOF(Usb_data[i])); - Is_linked := TRUE; + brsmemset(ADR(UsbData[i]), 0, SIZEOF(UsbData[i])); + IsLinked := TRUE; EXIT; END_IF END_FOR; // ----------------------------------------------------------------------------------------------------------- // Find next linked device - IF(Is_linked OR Usb_data_old[Node].interfaceClass = 0) THEN + IF(IsLinked OR UsbDataOld[Node].interfaceClass = 0) THEN IF(Node < MAX_IDX_USB_DEV_LIST) THEN Node := Node + 1; - WHILE(Node < MAX_IDX_USB_DEV_LIST AND Usb_data_old[Node].interfaceClass = 0) DO + WHILE(Node < MAX_IDX_USB_DEV_LIST AND UsbDataOld[Node].interfaceClass = 0) DO Node := Node + 1; END_WHILE; - IF(Node = MAX_IDX_USB_DEV_LIST AND Usb_data_old[Node].interfaceClass = 0) THEN + IF(Node = MAX_IDX_USB_DEV_LIST AND UsbDataOld[Node].interfaceClass = 0) THEN Node := Node + 1; END_IF ELSE @@ -160,8 +160,8 @@ PROGRAM _CYCLIC // ----------------------------------------------------------------------------------------------------------- // Find next new device - IF(Usb_data[Node].interfaceClass <> 0) THEN - IF(USB.Par.IgnoreDongle = FALSE OR (Usb_data[Node].productId <> BRproductId AND Usb_data[Node].vendorId <> BRvendorId)) THEN + IF(UsbData[Node].interfaceClass <> 0) THEN + IF(USB.Par.IgnoreDongle OR (UsbData[Node].productId <> BrProductId AND UsbData[Node].vendorId <> BrVendorId)) THEN StateMachine := USB_LINK_DEVICE; RETURN; END_IF @@ -173,12 +173,12 @@ PROGRAM _CYCLIC USB_LINK_DEVICE: // Find empty slot FOR i:=1 TO MAX_IDX_USB_DEV_LIST DO - IF(Usb_data_old[i].interfaceClass = 0) THEN + IF(UsbDataOld[i].interfaceClass = 0) THEN EXIT; END_IF END_FOR; // No more slot available - IF(i = MAX_IDX_USB_DEV_LIST AND Usb_data_old[i].interfaceClass <> 0) THEN + IF(i = MAX_IDX_USB_DEV_LIST AND UsbDataOld[i].interfaceClass <> 0) THEN USB.Status := ERR_MAX_DEVICE; USB.Err.State := StateMachine; USB.Err.Text := 'maximum number of device reached'; @@ -186,29 +186,29 @@ PROGRAM _CYCLIC RETURN; END_IF // Create device string - brsstrcpy(ADR(Device_param), ADR('/DEVICE=')); - brsstrcat(ADR(Device_param), ADR(Usb_data[Node].ifName)); - brsstrcpy(ADR(Device_name), ADR('USB')); + brsstrcpy(ADR(DevicePara), ADR('/DEVICE=')); + brsstrcat(ADR(DevicePara), ADR(UsbData[Node].ifName)); + brsstrcpy(ADR(DeviceName), ADR('USB')); brsitoa(i, ADR(tmpSTR)); - brsstrcat(ADR(Device_name), ADR(tmpSTR)); + brsstrcat(ADR(DeviceName), ADR(tmpSTR)); // Link device - DevLink_0.enable := 1; - DevLink_0.pDevice := ADR(Device_name); - DevLink_0.pParam := ADR(Device_param); - DevLink_0; + DevLinkSys.enable := 1; + DevLinkSys.pDevice := ADR(DeviceName); + DevLinkSys.pParam := ADR(DevicePara); + DevLinkSys; // -------------------------------------------------------------------------------------------------------------------- // Success - IF DevLink_0.status = 0 THEN + IF DevLinkSys.status = 0 THEN // Store data for new device - brsmemcpy(ADR(Usb_data_old[i]), ADR(Usb_data[Node]), SIZEOF(Usb_data[Node])); + brsmemcpy(ADR(UsbDataOld[i]), ADR(UsbData[Node]), SIZEOF(UsbData[Node])); USB.Par.IsConnected[i] := TRUE; - Link_handle[i] := DevLink_0.handle; + LinkHandle[i] := DevLinkSys.handle; Node := Node + 1; StateMachine := USB_LINK_NEW; // Error - ELSIF DevLink_0.status <> ERR_FUB_BUSY THEN - USB.Status := DevLink_0.status; + ELSIF DevLinkSys.status <> ERR_FUB_BUSY THEN + USB.Status := DevLinkSys.status; USB.Err.State := StateMachine; USB.Err.Text := 'error linking device'; StateMachine := USB_ERROR; @@ -217,34 +217,34 @@ PROGRAM _CYCLIC // UnLink device // ----------------------------------------------------------------------------------------------------------- USB_UNLINK_DEVICE: - DevUnlink_0.enable := 1; - DevUnlink_0.handle := Link_handle[Node]; - DevUnlink_0; + DevUnlinkSys.enable := 1; + DevUnlinkSys.handle := LinkHandle[Node]; + DevUnlinkSys; // -------------------------------------------------------------------------------------------------------------------- // Success - IF DevUnlink_0.status = 0 THEN + IF DevUnlinkSys.status = 0 THEN // Clear data - brsmemset(ADR(Usb_data_old[Node]), 0, SIZEOF(Usb_data_old[Node])); + brsmemset(ADR(UsbDataOld[Node]), 0, SIZEOF(UsbDataOld[Node])); USB.Par.IsConnected[Node] := FALSE; - Link_handle[Node] := 0; + LinkHandle[Node] := 0; // Find next linked device - WHILE(Node < MAX_IDX_USB_DEV_LIST AND Usb_data_old[Node].interfaceClass = 0) DO + WHILE(Node < MAX_IDX_USB_DEV_LIST AND UsbDataOld[Node].interfaceClass = 0) DO Node := Node + 1; END_WHILE; - IF(Node = MAX_IDX_USB_DEV_LIST AND Usb_data_old[Node].interfaceClass = 0) THEN + IF(Node = MAX_IDX_USB_DEV_LIST AND UsbDataOld[Node].interfaceClass = 0) THEN Node := Node + 1; END_IF StateMachine := USB_CHECK_LINKED; // Error - ELSIF DevUnlink_0.status <> ERR_FUB_BUSY THEN + ELSIF DevUnlinkSys.status <> ERR_FUB_BUSY THEN // Clear data - brsmemset(ADR(Usb_data_old[Node]), 0, SIZEOF(Usb_data_old[Node])); + brsmemset(ADR(UsbDataOld[Node]), 0, SIZEOF(UsbDataOld[Node])); USB.Par.IsConnected[Node] := FALSE; - Link_handle[Node] := 0; + LinkHandle[Node] := 0; brsitoa(Node, ADR(tmpSTR)); - USB.Status := DevUnlink_0.status; + USB.Status := DevUnlinkSys.status; USB.Err.State := StateMachine; USB.Err.Text := 'error unlinking device no '; brsstrcat(ADR(USB.Err.Text), ADR(tmpSTR)); @@ -261,13 +261,13 @@ PROGRAM _CYCLIC // Unlink device IF(USB.Err.State = USB_LINK_DEVICE) THEN - DevUnlink_0.enable := 1; - DevUnlink_0.handle := DevLink_0.handle; - DevUnlink_0; + DevUnlinkSys.enable := 1; + DevUnlinkSys.handle := DevLinkSys.handle; + DevUnlinkSys; END_IF // Reset error - IF(USB.Cmd.ErrorReset AND DevUnlink_0.status <> ERR_FUB_BUSY) THEN + IF(USB.Cmd.ErrorReset AND DevUnlinkSys.status <> ERR_FUB_BUSY) THEN USB.Cmd.ErrorReset := FALSE; brsmemset(ADR(USB.Err), 0, SIZEOF(USB.Err)); StateMachine := USB_WAIT; @@ -279,10 +279,10 @@ END_PROGRAM PROGRAM _EXIT FOR i:=1 TO MAX_IDX_USB_DEV_LIST DO REPEAT - DevUnlink_0.enable := 1; - DevUnlink_0.handle := Link_handle[i]; - DevUnlink_0; - UNTIL DevUnlink_0.status <> ERR_FUB_BUSY + DevUnlinkSys.enable := 1; + DevUnlinkSys.handle := LinkHandle[i]; + DevUnlinkSys; + UNTIL DevUnlinkSys.status <> ERR_FUB_BUSY END_REPEAT; END_FOR; END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.var b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.var index f5c54709..3c47e983 100644 --- a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.var +++ b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.var @@ -1,32 +1,32 @@ (*Function Blocks*) VAR - TON_01 : TON; - UsbNodeListGet_0 : UsbNodeListGet; (*Type of FUB UsbNodeListGet*) - UsbNodeGet_0 : UsbNodeGet; (*Type of FUB UsbNodeGet*) - DevLink_0 : DevLink; (*Type of FUB DevLink*) - DevUnlink_0 : DevUnlink; (*Type of FUB DevUnlink*) + RefreshTimer : TON; + GetUsbNodeList : UsbNodeListGet; (*Type of FUB UsbNodeListGet*) + GetUsbNode : UsbNodeGet; (*Type of FUB UsbNodeGet*) + DevLinkSys : DevLink; (*Type of FUB DevLink*) + DevUnlinkSys : DevUnlink; (*Type of FUB DevUnlink*) END_VAR (*Constants*) VAR CONSTANT - BRvendorId : UINT := 1615; (*B&R vendor id*) - BRproductId : UINT := 1001; (*B&R dongle product id*) + BrVendorId : UINT := 1615; (*B&R vendor id*) + BrProductId : UINT := 1001; (*B&R dongle product id*) + ERR_MAX_DEVICE : UINT := 50000; (*Maximum number of dongles reached*) END_VAR (*Structure Types*) VAR USB : UsbMainType; StateMachine : UsbStateEnum; (*State machine*) - Usb_data : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF usbNode_typ; (*Data of all available USB devices*) - Usb_data_old : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF usbNode_typ; (*Old data of all available USB devices*) + UsbData : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF usbNode_typ; (*Data of all available USB devices*) + UsbDataOld : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF usbNode_typ; (*Old data of all available USB devices*) END_VAR (*Variables*) VAR - Device_param : STRING[80]; (*Connection path of USB device*) - Device_name : STRING[40]; (*Connection path of USB device*) - Link_handle : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF UDINT; (*Link handle for USB device*) - Node_id_buffer : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF UDINT; (*Different nodeIDs saved in array-elements*) - Is_linked : BOOL; (*Helper variable that indicates that a USB stick is linked*) + DevicePara : STRING[80]; (*Connection path of USB device*) + DeviceName : STRING[40]; (*Connection path of USB device*) + LinkHandle : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF UDINT; (*Link handle for USB device*) + NodeIdBuffer : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF UDINT; (*Different nodeIDs saved in array-elements*) + IsLinked : BOOL; (*Helper variable that indicates that a USB stick is linked*) Node : USINT; (*Node number*) i : USINT; tmpSTR : STRING[10]; - ERR_MAX_DEVICE : UINT := 50000; (*Maximum number of dongles reached*) END_VAR diff --git a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.st b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.st index 988fd711..b0ad5781 100644 --- a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.st +++ b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.st @@ -8,11 +8,11 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappUserXFiles'), pName := ADR('/')); + DirCreateUser(enable := TRUE, pDevice := ADR('mappUserXFiles'), pName := ADR('/')); // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreateUser.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreateUser(enable := FALSE); END_IF // Initialize mapp function blocks @@ -25,19 +25,20 @@ PROGRAM _INIT UserXMgrUIConnect.User.List.MaxSelection := USER_LIST_MAX_SELECTION; UserXMgrUIConnect.User.List.RangeStart := USER_LIST_RANGE_START; UserXMgrUIConnect.User.List.RangeEnd := USER_LIST_RANGE_END; - MpUserXManagerUI_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXManagerUI_0.Enable := TRUE; - MpUserXManagerUI_0.UIConnect := ADR(UserXMgrUIConnect); - MpUserXManagerUI_0(); + MpUserXManagerUISys.MpLink := ADR(gMpLinkUserXLogin); + MpUserXManagerUISys.Enable := TRUE; + MpUserXManagerUISys.UIConnect := ADR(UserXMgrUIConnect); + MpUserXManagerUISys(); + MpUserXManagerUISys.UISetup.FileDevice := 'mappUserXFiles'; - MpUserXLoginUI_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXLoginUI_0.Enable := TRUE; - MpUserXLoginUI_0.UIConnect := ADR(UserXLoginUIConnect); - MpUserXLoginUI_0(); + MpUserXLoginUISys.MpLink := ADR(gMpLinkUserXLogin); + MpUserXLoginUISys.Enable := TRUE; + MpUserXLoginUISys.UIConnect := ADR(UserXLoginUIConnect); + MpUserXLoginUISys(); - MpUserXLogin_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXLogin_0.Enable := TRUE; - MpUserXLogin_0(); + MpUserXLoginSys.MpLink := ADR(gMpLinkUserXLogin); + MpUserXLoginSys.Enable := TRUE; + MpUserXLoginSys(); END_PROGRAM @@ -45,16 +46,16 @@ END_PROGRAM PROGRAM _CYCLIC // Error reset - IF NOT MpUserXManagerUI_0.Error THEN - MpUserXManagerUI_0.ErrorReset := FALSE; + IF NOT MpUserXManagerUISys.Error THEN + MpUserXManagerUISys.ErrorReset := FALSE; END_IF - IF NOT MpUserXLoginUI_0.Error THEN - MpUserXLoginUI_0.ErrorReset := FALSE; + IF NOT MpUserXLoginUISys.Error THEN + MpUserXLoginUISys.ErrorReset := FALSE; END_IF - IF NOT MpUserXLogin_0.Error THEN - MpUserXLogin_0.ErrorReset := FALSE; + IF NOT MpUserXLoginSys.Error THEN + MpUserXLoginSys.ErrorReset := FALSE; END_IF // Call all cyclic actions @@ -64,16 +65,16 @@ PROGRAM _CYCLIC HmiUserX.Status.LastMgrConnectStatus := UserXMgrUIConnect.Status; // Assign MpLinks & address references - MpUserXManagerUI_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXManagerUI_0.UIConnect := ADR(UserXMgrUIConnect); - MpUserXLoginUI_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXLoginUI_0.UIConnect := ADR(UserXLoginUIConnect); - MpUserXLogin_0.MpLink := ADR(gMpLinkUserXLogin); + MpUserXManagerUISys.MpLink := ADR(gMpLinkUserXLogin); + MpUserXManagerUISys.UIConnect := ADR(UserXMgrUIConnect); + MpUserXLoginUISys.MpLink := ADR(gMpLinkUserXLogin); + MpUserXLoginUISys.UIConnect := ADR(UserXLoginUIConnect); + MpUserXLoginSys.MpLink := ADR(gMpLinkUserXLogin); // Call function blocks - MpUserXManagerUI_0(); - MpUserXLoginUI_0(); - MpUserXLogin_0(); + MpUserXManagerUISys(); + MpUserXLoginUISys(); + MpUserXLoginSys(); END_PROGRAM @@ -81,14 +82,14 @@ END_PROGRAM PROGRAM _EXIT // Disable the function blocls to unlink the MpLinks - MpUserXManagerUI_0.Enable := FALSE; - MpUserXLoginUI_0.Enable := FALSE; - MpUserXLogin_0.Enable := FALSE; + MpUserXManagerUISys.Enable := FALSE; + MpUserXLoginUISys.Enable := FALSE; + MpUserXLoginSys.Enable := FALSE; // Call function blocks - MpUserXManagerUI_0(); - MpUserXLoginUI_0(); - MpUserXLogin_0(); + MpUserXManagerUISys(); + MpUserXLoginUISys(); + MpUserXLoginSys(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.var b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.var index 082050fc..de53013c 100644 --- a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.var +++ b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.var @@ -1,9 +1,9 @@ (*Function Blocks*) VAR - MpUserXLogin_0 : MpUserXLogin; (*MpUserXLogin instance*) - MpUserXManagerUI_0 : MpUserXManagerUI := (UISetup:=(FileDevice:='mappUserXFiles')); (*MpUserXManagerUI instance*) - MpUserXLoginUI_0 : MpUserXLoginUI; (*MpUserXLoginUI instance*) - DirCreate_0 : DirCreate; (*DirCreate instance*) + MpUserXLoginSys : MpUserXLogin; (*MpUserXLogin instance*) + MpUserXManagerUISys : MpUserXManagerUI := (UISetup:=(FileDevice:='mappUserXFiles')); (*MpUserXManagerUI instance*) + MpUserXLoginUISys : MpUserXLoginUI; (*MpUserXLoginUI instance*) + DirCreateUser : DirCreate; (*DirCreate instance*) END_VAR (*Constants*) VAR CONSTANT diff --git a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmHandling.st b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmHandling.st index eee808ee..8c5989d4 100644 --- a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmHandling.st +++ b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmHandling.st @@ -1,6 +1,6 @@ ACTION AlarmHandling: - // CommissioningModeActive = TRUE will inhibit Alarms[0]. The alarm will not trigger even if the alarm condition is active. + // CommissioningModeActive will inhibit Alarms[0]. The alarm will not trigger even if the alarm condition is active. // CommissioningModeActive = FALSE will NOT inhibit Alarms[0]. The alarm will trigger when the alarm condition is active. // See Alarm.mpalarmxcore (must enable Advanced Features) CommissioningModeActive; diff --git a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmMgr.st b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmMgr.st index 54bcc756..615524f5 100644 --- a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmMgr.st +++ b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmMgr.st @@ -8,11 +8,11 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappAlarmXFiles'), pName := ADR('/')); + DirCreateAlarm(enable := TRUE, pDevice := ADR('mappAlarmXFiles'), pName := ADR('/')); // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreateAlarm.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreateAlarm(enable := FALSE); END_IF // Initial visibility setup @@ -22,28 +22,28 @@ PROGRAM _INIT AlarmSampleInit; // Initialize mapp function blocks - MpAlarmXCore_0.Enable := TRUE; - MpAlarmXCore_0.MpLink := ADR(gMpLinkAlarmXCore); - MpAlarmXCore_0(); - - MpAlarmXHistory_0.Enable := TRUE; - MpAlarmXHistory_0.DeviceName := ADR('mappAlarmXFiles'); - MpAlarmXHistory_0.MpLink := ADR(gMpLinkAlarmXHistory); - MpAlarmXHistory_0(); - - MpAlarmXListUI_0.Enable := TRUE; - MpAlarmXListUI_0.MpLink := ADR(gMpLinkAlarmXCore); - MpAlarmXListUI_0.UISetup.AlarmListScrollWindow := 10; - MpAlarmXListUI_0.UISetup.AlarmListSize := 50; - MpAlarmXListUI_0.UISetup.TimeStampPattern := '%Y %m %d %H:%M:%S'; - MpAlarmXListUI_0(); - - MpAlarmXHistoryUI_0.Enable := TRUE; - MpAlarmXHistoryUI_0.MpLink := ADR(gMpLinkAlarmXHistory); - MpAlarmXHistoryUI_0.UISetup.AlarmListScrollWindow := 10; - MpAlarmXHistoryUI_0.UISetup.AlarmListSize := (SIZEOF(MpAlarmXListUIConnect.AlarmList.InstanceID) / SIZEOF(MpAlarmXListUIConnect.AlarmList.InstanceID[0])); - MpAlarmXHistoryUI_0.UISetup.TimeStampPattern := '%Y %m %d %H:%M:%S'; - MpAlarmXHistoryUI_0(); + MpAlarmXCoreMain.Enable := TRUE; + MpAlarmXCoreMain.MpLink := ADR(gMpLinkAlarmXCore); + MpAlarmXCoreMain(); + + MpAlarmXHistoryMain.Enable := TRUE; + MpAlarmXHistoryMain.DeviceName := ADR('mappAlarmXFiles'); + MpAlarmXHistoryMain.MpLink := ADR(gMpLinkAlarmXHistory); + MpAlarmXHistoryMain(); + + MpAlarmXListUIMain.Enable := TRUE; + MpAlarmXListUIMain.MpLink := ADR(gMpLinkAlarmXCore); + MpAlarmXListUIMain.UISetup.AlarmListScrollWindow := 10; + MpAlarmXListUIMain.UISetup.AlarmListSize := 50; + MpAlarmXListUIMain.UISetup.TimeStampPattern := '%Y %m %d %H:%M:%S'; + MpAlarmXListUIMain(); + + MpAlarmXHistoryUIMain.Enable := TRUE; + MpAlarmXHistoryUIMain.MpLink := ADR(gMpLinkAlarmXHistory); + MpAlarmXHistoryUIMain.UISetup.AlarmListScrollWindow := 10; + MpAlarmXHistoryUIMain.UISetup.AlarmListSize := (SIZEOF(MpAlarmXListUIConnect.AlarmList.InstanceID) / SIZEOF(MpAlarmXListUIConnect.AlarmList.InstanceID[0])); + MpAlarmXHistoryUIMain.UISetup.TimeStampPattern := '%Y %m %d %H:%M:%S'; + MpAlarmXHistoryUIMain(); END_PROGRAM @@ -53,8 +53,8 @@ PROGRAM _CYCLIC MpAlarmXListUIConnect.AcknowledgeAll := TRUE; END_IF - IF (HmiAlarmX.Commands.ExportAlarms = TRUE) THEN - MpAlarmXHistory_0.Export := TRUE; + IF (HmiAlarmX.Commands.ExportAlarms) THEN + MpAlarmXHistoryMain.Export := TRUE; END_IF // Call all cyclic actions @@ -76,55 +76,56 @@ PROGRAM _CYCLIC // Info is active. Add code here to resond to info situation. END_IF - IF ((MpAlarmXHistory_0.Export = TRUE) AND (MpAlarmXHistory_0.CommandDone = TRUE)) THEN + IF ((MpAlarmXHistoryMain.Export) AND (MpAlarmXHistoryMain.CommandDone)) THEN HmiAlarmX.Commands.ExportAlarms := FALSE; - MpAlarmXHistory_0.Export := FALSE; + MpAlarmXHistoryMain.Export := FALSE; END_IF // Error reset - IF NOT MpAlarmXCore_0.Error THEN - MpAlarmXCore_0.ErrorReset := FALSE; + IF NOT MpAlarmXCoreMain.Error THEN + MpAlarmXCoreMain.ErrorReset := FALSE; END_IF - IF NOT MpAlarmXListUI_0.Error THEN - MpAlarmXListUI_0.ErrorReset := FALSE; + IF NOT MpAlarmXListUIMain.Error THEN + MpAlarmXListUIMain.ErrorReset := FALSE; END_IF - IF NOT MpAlarmXHistory_0.Error THEN - MpAlarmXHistory_0.ErrorReset := FALSE; + IF NOT MpAlarmXHistoryMain.Error THEN + MpAlarmXHistoryMain.ErrorReset := FALSE; END_IF - IF NOT MpAlarmXHistoryUI_0.Error THEN - MpAlarmXHistoryUI_0.ErrorReset := FALSE; + IF NOT MpAlarmXHistoryUIMain.Error THEN + MpAlarmXHistoryUIMain.ErrorReset := FALSE; END_IF - // Assign MpLinks & UIConnects - MpAlarmXCore_0.MpLink := ADR(gMpLinkAlarmXCore); - MpAlarmXListUI_0.MpLink := ADR(gMpLinkAlarmXCore); - MpAlarmXListUI_0.UIConnect := ADR(MpAlarmXListUIConnect); - MpAlarmXHistory_0.MpLink := ADR(gMpLinkAlarmXHistory); - MpAlarmXHistoryUI_0.MpLink := ADR(gMpLinkAlarmXHistory); - MpAlarmXHistoryUI_0.UIConnect := ADR(MpAlarmXHistoryUIConnect); + // Assign MpLinks & address references + MpAlarmXCoreMain.MpLink := ADR(gMpLinkAlarmXCore); + MpAlarmXListUIMain.MpLink := ADR(gMpLinkAlarmXCore); + MpAlarmXListUIMain.UIConnect := ADR(MpAlarmXListUIConnect); + MpAlarmXHistoryMain.MpLink := ADR(gMpLinkAlarmXHistory); + MpAlarmXHistoryMain.DeviceName := ADR('mappAlarmXFiles'); + MpAlarmXHistoryUIMain.MpLink := ADR(gMpLinkAlarmXHistory); + MpAlarmXHistoryUIMain.UIConnect := ADR(MpAlarmXHistoryUIConnect); // Call function blocks - MpAlarmXCore_0(); - MpAlarmXListUI_0(); - MpAlarmXHistory_0(); - MpAlarmXHistoryUI_0(); - + MpAlarmXCoreMain(); + MpAlarmXListUIMain(); + MpAlarmXHistoryMain(); + MpAlarmXHistoryUIMain(); + END_PROGRAM PROGRAM _EXIT // Disable the function blocls to unlink the MpLinks - MpAlarmXCore_0.Enable := FALSE; - MpAlarmXListUI_0.Enable := FALSE; - MpAlarmXHistory_0.Enable := FALSE; - MpAlarmXHistoryUI_0.Enable := FALSE; - QueryActiveAlarms_0.Enable := FALSE; + MpAlarmXCoreMain.Enable := FALSE; + MpAlarmXListUIMain.Enable := FALSE; + MpAlarmXHistoryMain.Enable := FALSE; + MpAlarmXHistoryUIMain.Enable := FALSE; + QueryActiveAlarms.Enable := FALSE; // Call function blocks - MpAlarmXCore_0(); - MpAlarmXListUI_0(); - MpAlarmXHistory_0(); - MpAlarmXHistoryUI_0(); - QueryActiveAlarms_0(); + MpAlarmXCoreMain(); + MpAlarmXListUIMain(); + MpAlarmXHistoryMain(); + MpAlarmXHistoryUIMain(); + QueryActiveAlarms(); END_PROGRAM \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmMgr.var b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmMgr.var index 27a9aeeb..ef6aa712 100644 --- a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmMgr.var +++ b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmMgr.var @@ -1,12 +1,12 @@ (*Function Blocks*) VAR - MpAlarmXHistory_0 : MpAlarmXHistory; (*MpAlarmXHistory instance*) - MpAlarmXHistoryUI_0 : MpAlarmXHistoryUI; (*MpAlarmXHistoryUI instance*) - MpAlarmXListUI_0 : MpAlarmXListUI; (*MpAlarmXList instance*) - MpAlarmXCore_0 : MpAlarmXCore; (*MpAlarmXCore instance*) (*ChangeStyleAlarmButton : USINT := 0; (*changeStyle of a AlarmFlyout in mappView*) - MpAlarmXControlExample_0 : {REDUND_UNREPLICABLE} MpAlarmXAlarmControl; (*MpAlarmXAlarmControl instance*) - QueryActiveAlarms_0 : {REDUND_UNREPLICABLE} MpAlarmXQuery; (*MpAlarmXQuery instance*) - DirCreate_0 : DirCreate; (*DirCreate instance*) + MpAlarmXHistoryMain : MpAlarmXHistory; (*MpAlarmXHistory instance*) + MpAlarmXHistoryUIMain : MpAlarmXHistoryUI; (*MpAlarmXHistoryUI instance*) + MpAlarmXListUIMain : MpAlarmXListUI; (*MpAlarmXList instance*) + MpAlarmXCoreMain : MpAlarmXCore; (*MpAlarmXCore instance*) (*ChangeStyleAlarmButton : USINT := 0; (*changeStyle of a AlarmFlyout in mappView*) + MpAlarmXControlExample : {REDUND_UNREPLICABLE} MpAlarmXAlarmControl; (*MpAlarmXAlarmControl instance*) + QueryActiveAlarms : {REDUND_UNREPLICABLE} MpAlarmXQuery; (*MpAlarmXQuery instance*) + DirCreateAlarm : DirCreate; (*DirCreate instance*) END_VAR (*Constants*) VAR CONSTANT diff --git a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmSamples.st b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmSamples.st index 30029155..0aef044d 100644 --- a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmSamples.st +++ b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/AlarmSamples.st @@ -25,10 +25,10 @@ ACTION AlarmSampleFub: // Typically this function is called from other tasks within the application (decentralized). // For example, if you have an error in the recipe system, you can trigger it directly in the recipe task. // Therefore, copy/paste this example to other places in the application as needed. - MpAlarmXControlExample_0.MpLink := ADR(gMpLinkAlarmXCore); - MpAlarmXControlExample_0.Enable := TRUE; - MpAlarmXControlExample_0.Name := ADR('MpAlarmXControlExample'); - MpAlarmXControlExample_0.Set := AlarmExamples.SetControlExample; - MpAlarmXControlExample_0(); + MpAlarmXControlExample.MpLink := ADR(gMpLinkAlarmXCore); + MpAlarmXControlExample.Enable := TRUE; + MpAlarmXControlExample.Name := ADR('MpAlarmXControlExample'); + MpAlarmXControlExample.Set := AlarmExamples.SetControlExample; + MpAlarmXControlExample(); END_ACTION \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/ExecuteQuery.st b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/ExecuteQuery.st index 8b346081..287f8970 100644 --- a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/ExecuteQuery.st +++ b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/ExecuteQuery.st @@ -1,10 +1,11 @@ ACTION ExecuteQuery: // Initialize mapp function block - QueryActiveAlarms_0.MpLink := ADR(gMpLinkAlarmXCore); - QueryActiveAlarms_0.Enable := TRUE; - QueryActiveAlarms_0.Name := ADR('ActiveAlarms'); - QueryActiveAlarms_0(); + QueryActiveAlarms.MpLink := ADR(gMpLinkAlarmXCore); + QueryActiveAlarms.Enable := TRUE; + QueryActiveAlarms.Name := ADR('ActiveAlarms'); + QueryActiveAlarms.Language := ADR('en'); + QueryActiveAlarms(); CASE (AlarmQuery.State) OF ACTIVE_ALARM_WAIT: @@ -12,19 +13,19 @@ ACTION ExecuteQuery: // If you prefer that the query runs anytime new data is available, then uncomment line 15 and comment out line 16 and delete // the "Run query" button from the HMI. //IF (AlarmQuery.LastUpdateCount <> AlarmQuery.UpdateCount) THEN - IF (HmiAlarmX.Commands.RunQuery = TRUE) THEN + IF (HmiAlarmX.Commands.RunQuery) THEN brsmemset(ADR(AlarmQuery.Alarms[0]), 0, SIZEOF(AlarmQuery.Alarms)); AlarmQuery.LastUpdateCount := AlarmQuery.UpdateCount; - QueryActiveAlarms_0.Execute := TRUE; + QueryActiveAlarms.Execute := TRUE; HmiAlarmX.Commands.RunQuery := FALSE; AlarmQuery.State := ACTIVE_ALARM_QUERY; END_IF ACTIVE_ALARM_QUERY: // If the number of query results is less than MAX_QUERY_RESULTS, return to the wait state - IF ((QueryActiveAlarms_0.CommandDone = TRUE) AND (QueryActiveAlarms_0.Info.HasMoreRows = FALSE)) THEN - QueryActiveAlarms_0.Execute := FALSE; - QueryActiveAlarms_0.Next := FALSE; + IF ((QueryActiveAlarms.CommandDone) AND (NOT QueryActiveAlarms.Info.HasMoreRows)) THEN + QueryActiveAlarms.Execute := FALSE; + QueryActiveAlarms.Next := FALSE; AlarmQuery.State := ACTIVE_ALARM_WAIT; // Convert the query results into arrays that can be displayed in VC4 FOR i := 0 TO MAX_QUERY_RESULTS DO @@ -46,20 +47,20 @@ ACTION ExecuteQuery: END_IF END_FOR // If the number of query results is more than MAX_QUERY_RESULTS, then query the next set of results - ELSIF ((QueryActiveAlarms_0.CommandDone = TRUE) AND (QueryActiveAlarms_0.Info.HasMoreRows = TRUE)) THEN - QueryActiveAlarms_0.Next := FALSE; + ELSIF ((QueryActiveAlarms.CommandDone) AND (QueryActiveAlarms.Info.HasMoreRows)) THEN + QueryActiveAlarms.Next := FALSE; AlarmQuery.State := ACTIVE_ALARM_NEXT; END_IF ACTIVE_ALARM_NEXT: - IF (AlarmQuery.Next = TRUE) THEN + IF (AlarmQuery.Next) THEN // By default, AlarmQuery.Alarms has 20 elements, so it can hold 20 query results at a time (MAX_QUERY_RESULTS = 19). // If AlarmQuery.Next is true, this means the query result is more than 20 alarms. // If you want to save the data for the first 20 alarms, add code here to copy AlarmQuery.Alarms to another location. // Otherwise, the older alarms in the query will get overwritten with the newest entries here. brsmemset(ADR(AlarmQuery.Alarms[0]), 0, SIZEOF(AlarmQuery.Alarms)); AlarmQuery.Next := FALSE; - QueryActiveAlarms_0.Next := TRUE; + QueryActiveAlarms.Next := TRUE; AlarmQuery.State := ACTIVE_ALARM_QUERY; END_IF END_CASE diff --git a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/HMIActions.st index 236c6bdc..5cb07781 100644 --- a/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/VC4/AlarmX/AlarmMgr/HMIActions.st @@ -8,7 +8,7 @@ END_ACTION ACTION VC4_Cyclic: // AlarmHistory Export process has been completed - IF ((MpAlarmXHistory_0.Export = TRUE) AND (MpAlarmXHistory_0.CommandDone = TRUE)) THEN + IF ((MpAlarmXHistoryMain.Export) AND (MpAlarmXHistoryMain.CommandDone)) THEN HmiAlarmX.Status.HistoryExportLayer := DISPLAY; END_IF @@ -18,21 +18,21 @@ ACTION VC4_Cyclic: // English 0: MpAlarmXListUIConnect.Language := 'en'; - MpAlarmXHistory_0.Language := ADR('en'); + MpAlarmXHistoryMain.Language := ADR('en'); MpAlarmXHistoryUIConnect.Language := 'en'; - QueryActiveAlarms_0.Language := ADR('en'); + QueryActiveAlarms.Language := ADR('en'); // German 1: MpAlarmXListUIConnect.Language := 'de'; - MpAlarmXHistory_0.Language := ADR('de'); + MpAlarmXHistoryMain.Language := ADR('de'); MpAlarmXHistoryUIConnect.Language := 'de'; - QueryActiveAlarms_0.Language := ADR('de'); + QueryActiveAlarms.Language := ADR('de'); // Chinese 2: MpAlarmXListUIConnect.Language := 'zh'; - MpAlarmXHistory_0.Language := ADR('zh'); + MpAlarmXHistoryMain.Language := ADR('zh'); MpAlarmXHistoryUIConnect.Language := 'zh'; - QueryActiveAlarms_0.Language := ADR('zh'); + QueryActiveAlarms.Language := ADR('zh'); END_CASE diff --git a/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/AuditMgr.st b/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/AuditMgr.st index 3f4cc489..04b8b831 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/AuditMgr.st +++ b/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/AuditMgr.st @@ -8,43 +8,43 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappAuditFiles'), pName := ADR('/')); + DirCreateAudit(enable := TRUE, pDevice := ADR('mappAuditFiles'), pName := ADR('/')); // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreateAudit.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreateAudit(enable := FALSE); END_IF // Initialize mapp function blocks - MpAuditTrail_0.Enable := TRUE; - MpAuditTrail_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrail_0.Language := ADR('en'); - MpAuditTrail_0.DeviceName := ADR('mappAuditFiles'); - MpAuditTrail_0(); - - MpAuditTrailConfig_0.Enable := TRUE; - MpAuditTrailConfig_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrailConfig_0.Configuration := ADR(AuditTrailConfig); - MpAuditTrailConfig_0.Load := TRUE; - MpAuditTrailConfig_0(); - - MpAuditTrail_CEvents.Enable := TRUE; - MpAuditTrail_CEvents.MpLink := ADR(gMpLinkCustomEvents); - MpAuditTrail_CEvents(); - - MpAuditTrailUI_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrailUI_0.UIConnect := ADR(MpAuditTrailUIConnect); - MpAuditTrailUI_0.UISetup.EventListSize := SIZEOF(MpAuditTrailUIConnect.Output.EventID) / SIZEOF(MpAuditTrailUIConnect.Output.EventID[0]); - MpAuditTrailUI_0.UISetup.ScrollWindow := 1; - MpAuditTrailUI_0.Enable := TRUE; - MpAuditTrailUI_0(); + MpAuditTrailSys.Enable := TRUE; + MpAuditTrailSys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailSys.Language := ADR('en'); + MpAuditTrailSys.DeviceName := ADR('mappAuditFiles'); + MpAuditTrailSys(); + + MpAuditTrailConfigSys.Enable := TRUE; + MpAuditTrailConfigSys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailConfigSys.Configuration := ADR(AuditTrailConfig); + MpAuditTrailConfigSys.Load := TRUE; + MpAuditTrailConfigSys(); + + MpAuditTrailCEvents.Enable := TRUE; + MpAuditTrailCEvents.MpLink := ADR(gMpLinkCustomEvents); + MpAuditTrailCEvents(); + + MpAuditTrailUISys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailUISys.UIConnect := ADR(MpAuditTrailUIConnect); + MpAuditTrailUISys.UISetup.EventListSize := SIZEOF(MpAuditTrailUIConnect.Output.EventID) / SIZEOF(MpAuditTrailUIConnect.Output.EventID[0]); + MpAuditTrailUISys.UISetup.ScrollWindow := 1; + MpAuditTrailUISys.Enable := TRUE; + MpAuditTrailUISys(); - MpAuditTrail_CEvents_UI_0.MpLink := ADR(gMpLinkCustomEvents); - MpAuditTrail_CEvents_UI_0.UIConnect := ADR(MpAuditTrail_CEvents_UIConnect); - MpAuditTrail_CEvents_UI_0.UISetup.EventListSize := SIZEOF(MpAuditTrail_CEvents_UIConnect.Output.EventID) / SIZEOF(MpAuditTrail_CEvents_UIConnect.Output.EventID[0]); - MpAuditTrail_CEvents_UI_0.UISetup.ScrollWindow := 1; - MpAuditTrail_CEvents_UI_0.Enable := TRUE; - MpAuditTrail_CEvents_UI_0(); + MpAuditTrailCEventsUI.MpLink := ADR(gMpLinkCustomEvents); + MpAuditTrailCEventsUI.UIConnect := ADR(MpAuditTrailCEventsUIConnect); + MpAuditTrailCEventsUI.UISetup.EventListSize := SIZEOF(MpAuditTrailCEventsUIConnect.Output.EventID) / SIZEOF(MpAuditTrailCEventsUIConnect.Output.EventID[0]); + MpAuditTrailCEventsUI.UISetup.ScrollWindow := 1; + MpAuditTrailCEventsUI.Enable := TRUE; + MpAuditTrailCEventsUI(); // Initialize custom events @@ -113,25 +113,28 @@ PROGRAM _CYCLIC END_IF // Error reset - IF NOT MpAuditTrail_0.Error THEN - MpAuditTrail_0.ErrorReset := FALSE; + IF NOT MpAuditTrailSys.Error THEN + MpAuditTrailSys.ErrorReset := FALSE; END_IF - // Assign MpLinks and HMI connections - MpAuditTrail_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrailConfig_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrail_CEvents.MpLink := ADR(gMpLinkCustomEvents); - MpAuditTrailUI_0.MpLink := ADR(gMpLinkAuditTrail); + // Assign MpLinks & address references + MpAuditTrailSys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailSys.DeviceName := ADR('mappAuditFiles'); + MpAuditTrailConfigSys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailConfigSys.Configuration := ADR(AuditTrailConfig); + MpAuditTrailCEvents.MpLink := ADR(gMpLinkCustomEvents); + MpAuditTrailUISys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailUISys.UIConnect := ADR(MpAuditTrailUIConnect); // Call function blocks - MpAuditTrail_0(); - MpAuditTrailConfig_0(); - MpAuditTrail_CEvents(); - MpAuditTrailUI_0(); + MpAuditTrailSys(); + MpAuditTrailConfigSys(); + MpAuditTrailCEvents(); + MpAuditTrailUISys(); - MpAuditTrail_CEvents_UI_0(); - MpAuditTrail_CEvents(); - MpAuditTrail_CEvents_UI_0(); + MpAuditTrailCEventsUI(); + MpAuditTrailCEvents(); + MpAuditTrailCEventsUI(); END_PROGRAM @@ -139,16 +142,16 @@ END_PROGRAM PROGRAM _EXIT // Disable the function blocks to unlink the MpLinks - MpAuditTrail_0.Enable := FALSE; - MpAuditTrailConfig_0.Enable := FALSE; - MpAuditTrail_CEvents.Enable := FALSE; - MpAuditTrailUI_0.Enable := FALSE; + MpAuditTrailSys.Enable := FALSE; + MpAuditTrailConfigSys.Enable := FALSE; + MpAuditTrailCEvents.Enable := FALSE; + MpAuditTrailUISys.Enable := FALSE; // Call function blocks - MpAuditTrail_0(); - MpAuditTrailConfig_0(); - MpAuditTrail_CEvents(); - MpAuditTrailUI_0(); + MpAuditTrailSys(); + MpAuditTrailConfigSys(); + MpAuditTrailCEvents(); + MpAuditTrailUISys(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/AuditMgr.var b/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/AuditMgr.var index 7e26ef22..30bfd66a 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/AuditMgr.var +++ b/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/AuditMgr.var @@ -1,12 +1,12 @@ (*Function Blocks*) VAR - DirCreate_0 : DirCreate; (*DirCreate instance*) - MpAuditTrail_0 : MpAuditTrail; (*AuditTrail for regular mapp events*) - MpAuditTrailConfig_0 : MpAuditTrailConfig; (*AuditTrail configuration*) - MpAuditTrail_CEvents : MpAuditTrail; (*AuditTrail for custom events*) - QueryUserEvents_0 : {REDUND_UNREPLICABLE} MpAuditQuery; (*MpAlarmXQuery instance*) - MpAuditTrailUI_0 : MpAuditTrailUI; (*AuditTrail UI interface*) - MpAuditTrail_CEvents_UI_0 : MpAuditTrailUI; (*AuditTrail UI interface*) + DirCreateAudit : DirCreate; (*DirCreate instance*) + MpAuditTrailSys : MpAuditTrail; (*AuditTrail for regular mapp events*) + MpAuditTrailConfigSys : MpAuditTrailConfig; (*AuditTrail configuration*) + MpAuditTrailCEvents : MpAuditTrail; (*AuditTrail for custom events*) + QueryUserEvents : {REDUND_UNREPLICABLE} MpAuditQuery; (*MpAlarmXQuery instance*) + MpAuditTrailUISys : MpAuditTrailUI; (*AuditTrail UI interface*) + MpAuditTrailCEventsUI : MpAuditTrailUI; (*AuditTrail UI interface*) END_VAR (*Constants*) VAR CONSTANT @@ -26,7 +26,7 @@ VAR RETAIN ArchiveSettingsRetain : AuditArchiveParType; (*Store settings in retain memory to be applied after boot*) END_VAR VAR - MpAuditTrail_CEvents_UIConnect : MpAuditTrailUIConnectType; (*MpAuditUI connection to the HMI*) + MpAuditTrailCEventsUIConnect : MpAuditTrailUIConnectType; (*MpAuditUI connection to the HMI*) END_VAR (*Variables*) VAR diff --git a/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/ChangeConfiguration.st b/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/ChangeConfiguration.st index 7ee6faac..1b91aae9 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/ChangeConfiguration.st +++ b/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/ChangeConfiguration.st @@ -1,30 +1,30 @@ ACTION ChangeConfiguration: - MpAuditTrailConfig_0.MpLink := ADR(gMpLinkAuditTrail); - MpAuditTrailConfig_0.Configuration := ADR(AuditTrailConfig); + MpAuditTrailConfigSys.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailConfigSys.Configuration := ADR(AuditTrailConfig); - IF (MpAuditTrailConfig_0.Error = TRUE) THEN - IF (MpAuditTrailConfig_0.StatusID = mpAUDIT_ERR_CONFIG_LOAD) THEN + IF (MpAuditTrailConfigSys.Error) THEN + IF (MpAuditTrailConfigSys.StatusID = mpAUDIT_ERR_CONFIG_LOAD) THEN LoadAuditConfiguration; END_IF - MpAuditTrailConfig_0.Load := FALSE; - MpAuditTrailConfig_0.Save := FALSE; - MpAuditTrailConfig_0.ErrorReset := TRUE; + MpAuditTrailConfigSys.Load := FALSE; + MpAuditTrailConfigSys.Save := FALSE; + MpAuditTrailConfigSys.ErrorReset := TRUE; END_IF - MpAuditTrailConfig_0(); - MpAuditTrailConfig_0.ErrorReset := FALSE; + MpAuditTrailConfigSys(); + MpAuditTrailConfigSys.ErrorReset := FALSE; - IF (MpAuditTrailConfig_0.CommandDone = TRUE) THEN - IF (MpAuditTrailConfig_0.Load = TRUE) THEN + IF (MpAuditTrailConfigSys.CommandDone) THEN + IF (MpAuditTrailConfigSys.Load) THEN LoadAuditConfiguration; END_IF - // After save the AuditTrail needs to restart - IF (MpAuditTrailConfig_0.Save = TRUE) THEN - MpAuditTrail_0.Enable := FALSE; + // after save the AuditTrail needs to restart + IF (MpAuditTrailConfigSys.Save) THEN + MpAuditTrailSys.Enable := FALSE; END_IF - MpAuditTrailConfig_0.Load := FALSE; - MpAuditTrailConfig_0.Save := FALSE; + MpAuditTrailConfigSys.Load := FALSE; + MpAuditTrailConfigSys.Save := FALSE; END_IF END_ACTION diff --git a/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/ExecuteQuery.st b/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/ExecuteQuery.st index af5e271b..98f53f87 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/ExecuteQuery.st +++ b/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/ExecuteQuery.st @@ -1,11 +1,11 @@ ACTION ExecuteQuery: // Initialize mapp function block - QueryUserEvents_0.MpLink := ADR(gMpLinkAuditTrail); - QueryUserEvents_0.Enable := TRUE; - QueryUserEvents_0.Name := ADR(HmiAudit.Status.Query.Name); - QueryUserEvents_0.Language := ADR('en'); - QueryUserEvents_0(); + QueryUserEvents.MpLink := ADR(gMpLinkAuditTrail); + QueryUserEvents.Enable := TRUE; + QueryUserEvents.Name := ADR(HmiAudit.Status.Query.Name); + QueryUserEvents.Language := ADR('en'); + QueryUserEvents(); CASE (AuditQuery.State) OF ACTIVE_AUDIT_WAIT: @@ -13,12 +13,12 @@ ACTION ExecuteQuery: // If you prefer that the query runs anytime new data is available, then uncomment line 15 and comment out line 16 and delete // the "Run query" button from the HMI. //IF (AuditQuery.LastUpdateCount <> AuditQuery.UpdateCount) THEN - IF (HmiAudit.Commands.RunQuery = TRUE) THEN + IF (HmiAudit.Commands.RunQuery) THEN // Call the custom event function when the query execution is triggered MpAuditCustomEvent(gMpLinkCustomEvents,CustomEvent[2].Type,CustomEvent[2].Msg,CustomEvent[2].Comment); brsmemset(ADR(AuditQuery.Audits[0]), 0, SIZEOF(AuditQuery.Audits)); AuditQuery.LastUpdateCount := AuditQuery.UpdateCount; - QueryUserEvents_0.Execute := TRUE; + QueryUserEvents.Execute := TRUE; HmiAudit.Commands.RunQuery := FALSE; IF (HmiAudit.Status.Query.Name = 'UserEvents') THEN HmiAudit.Status.Query.Option := 0; @@ -31,27 +31,27 @@ ACTION ExecuteQuery: ACTIVE_AUDIT_QUERY: // If the number of query results is less than MAX_QUERY_RESULTS, return to the wait state - IF ((QueryUserEvents_0.CommandDone = TRUE) AND (QueryUserEvents_0.Info.HasMoreRows = FALSE)) THEN + IF ((QueryUserEvents.CommandDone) AND (NOT QueryUserEvents.Info.HasMoreRows)) THEN // Call the custom event function when the query execution is done MpAuditCustomEvent(gMpLinkCustomEvents,"Cmd Done","Executing the query command has finished","For additional information check the logger."); - QueryUserEvents_0.Execute := FALSE; - QueryUserEvents_0.Next := FALSE; + QueryUserEvents.Execute := FALSE; + QueryUserEvents.Next := FALSE; AuditQuery.State := ACTIVE_AUDIT_WAIT; // If the number of query results is more than MAX_QUERY_RESULTS, then query the next set of results - ELSIF ((QueryUserEvents_0.CommandDone = TRUE) AND (QueryUserEvents_0.Info.HasMoreRows = TRUE)) THEN - QueryUserEvents_0.Next := FALSE; + ELSIF ((QueryUserEvents.CommandDone) AND (QueryUserEvents.Info.HasMoreRows)) THEN + QueryUserEvents.Next := FALSE; AuditQuery.State := ACTIVE_AUDIT_NEXT; END_IF ACTIVE_AUDIT_NEXT: - IF (AuditQuery.Next = TRUE) THEN + IF (AuditQuery.Next) THEN // By default, AuditQuery.Alarms has 20 elements, so it can hold 20 query results at a time (MAX_QUERY_RESULTS = 19). // If AuditQuery.Next is true, this means the query result is more than 20 alarms. // If you want to save the data for the first 20 alarms, add code here to copy AuditQuery.Alarms to another location. // Otherwise, the older alarms in the query will get overwritten with the newest entries here. brsmemset(ADR(AuditQuery.Audits[0]), 0, SIZEOF(AuditQuery.Audits)); AuditQuery.Next := FALSE; - QueryUserEvents_0.Next := TRUE; + QueryUserEvents.Next := TRUE; AuditQuery.State := ACTIVE_AUDIT_QUERY; END_IF END_CASE diff --git a/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/HMIActions.st index 08e1de32..0b61c012 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/VC4/Audit/AuditMgr/HMIActions.st @@ -1,11 +1,11 @@ ACTION ArchiveExport: // Assign variables to exchange with the HMI - MpAuditTrail_0.ExportArchive := HmiAudit.Commands.ExportArchives; - HmiAudit.Status.ArchiveAvailable := MpAuditTrail_0.ArchiveAvailable; - HmiAudit.Status.NumberOfArchives := MpAuditTrail_0.Info.NumberArchives; + MpAuditTrailSys.ExportArchive := HmiAudit.Commands.ExportArchives; + HmiAudit.Status.ArchiveAvailable := MpAuditTrailSys.ArchiveAvailable; + HmiAudit.Status.NumberOfArchives := MpAuditTrailSys.Info.NumberArchives; - IF (HmiAudit.Commands.ExportArchives AND MpAuditTrail_0.CommandDone) THEN + IF (HmiAudit.Commands.ExportArchives AND MpAuditTrailSys.CommandDone) THEN HmiAudit.Commands.ExportArchives := FALSE; END_IF @@ -14,15 +14,15 @@ END_ACTION ACTION ArchiveSettings: // Audit Trail Config implementation - IF (HmiAudit.Commands.SaveConfig = TRUE) THEN + IF (HmiAudit.Commands.SaveConfig) THEN HmiAudit.Commands.SaveConfig := FALSE; SaveAuditConfiguration; - MpAuditTrailConfig_0.Save := TRUE; + MpAuditTrailConfigSys.Save := TRUE; END_IF // After the configuration has been changed the AuditTrail is reset (disabled). This re-enables the component - IF MpAuditTrail_0.Active = FALSE THEN - MpAuditTrail_0.Enable := TRUE; + IF NOT MpAuditTrailSys.Active THEN + MpAuditTrailSys.Enable := TRUE; END_IF END_ACTION @@ -62,22 +62,22 @@ ACTION VC4_Cyclic: //English 0: - MpAuditTrail_0.Language := ADR('en'); - MpAuditTrailUI_0.Language := ADR('en'); - MpAuditTrail_CEvents.Language := ADR('en'); - MpAuditTrail_CEvents_UI_0.Language := ADR('en'); + MpAuditTrailSys.Language := ADR('en'); + MpAuditTrailUISys.Language := ADR('en'); + MpAuditTrailCEvents.Language := ADR('en'); + MpAuditTrailCEventsUI.Language := ADR('en'); // German 1: - MpAuditTrail_0.Language := ADR('de'); - MpAuditTrailUI_0.Language := ADR('de'); - MpAuditTrail_CEvents.Language := ADR('de'); - MpAuditTrail_CEvents_UI_0.Language := ADR('de'); + MpAuditTrailSys.Language := ADR('de'); + MpAuditTrailUISys.Language := ADR('de'); + MpAuditTrailCEvents.Language := ADR('de'); + MpAuditTrailCEventsUI.Language := ADR('de'); // Chinese 2: - MpAuditTrail_0.Language := ADR('zh'); - MpAuditTrailUI_0.Language := ADR('zh'); - MpAuditTrail_CEvents.Language := ADR('zh'); - MpAuditTrail_CEvents_UI_0.Language := ADR('zh'); + MpAuditTrailSys.Language := ADR('zh'); + MpAuditTrailUISys.Language := ADR('zh'); + MpAuditTrailCEvents.Language := ADR('zh'); + MpAuditTrailCEventsUI.Language := ADR('zh'); END_CASE diff --git a/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/BackupMgr.st b/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/BackupMgr.st index 52e80532..2aff5641 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/BackupMgr.st +++ b/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/BackupMgr.st @@ -8,30 +8,30 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappBackupFiles'), pName := ADR('/')); + DirCreateBackup(enable := TRUE, pDevice := ADR('mappBackupFiles'), pName := ADR('/')); // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreateBackup.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreateBackup(enable := FALSE); END_IF // Initialize mapp function blocks - MpBackupCore_0.MpLink := ADR(gMpLinkBackupCore); - MpBackupCore_0.Enable := TRUE; - MpBackupCore_0(); + MpBackupCoreSys.MpLink := ADR(gMpLinkBackupCore); + MpBackupCoreSys.Enable := TRUE; + MpBackupCoreSys(); - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIBackup); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0.Enable := TRUE; - MpFileManagerUI_0(); + MpFileManagerUIBackup.MpLink := ADR(gMpLinkFileManagerUIBackup); + MpFileManagerUIBackup.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIBackup.Enable := TRUE; + MpFileManagerUIBackup(); - MpBackupCoreConfig_0.Enable := TRUE; - MpBackupCoreConfig_0.MpLink := ADR(gMpLinkBackupCore); - MpBackupCoreConfig_0.Configuration := ADR(MpBackupConfiguration); + MpBackupCoreConfigSys.Enable := TRUE; + MpBackupCoreConfigSys.MpLink := ADR(gMpLinkBackupCore); + MpBackupCoreConfigSys.Configuration := ADR(MpBackupConfiguration); - MpBackupCoreConfig_0.Load := NOT(DiagCpuIsARsim() OR DiagCpuIsSimulated()); + MpBackupCoreConfigSys.Load := NOT(DiagCpuIsARsim() OR DiagCpuIsSimulated()); - MpBackupCoreConfig_0(); + MpBackupCoreConfigSys(); HmiBackup.Status.DeviceDataProviderVC4[0] := 'CF/PLC'; @@ -43,108 +43,110 @@ END_PROGRAM PROGRAM _CYCLIC CASE BackupState OF BACKUP_IDLE: - HmiBackup.Status.CreateAllowed := NOT(MpBackupCore_0.Info.Automatic.Backup.InProgress) AND NOT HmiBackup.Status.SimulationActive; + HmiBackup.Status.CreateAllowed := NOT(MpBackupCoreSys.Info.Automatic.Backup.InProgress) AND NOT HmiBackup.Status.SimulationActive; HmiBackup.Status.Busy := FALSE; - IF (MpBackupCore_0.Error = TRUE) THEN - MpBackupCore_0.ErrorReset := FALSE; + IF (MpBackupCoreSys.Error) THEN + MpBackupCoreSys.ErrorReset := FALSE; BackupState := BACKUP_ERROR; ELSIF DiagCpuIsARsim() OR DiagCpuIsSimulated() THEN HmiBackup.Status.CreateAllowed := FALSE; HmiBackup.Status.RestoreAllowed := FALSE; BackupState := BACKUP_SIM; - ELSIF (HmiBackup.Commands.Create = TRUE) THEN + ELSIF (HmiBackup.Commands.Create) THEN HmiBackup.Commands.Create := FALSE; - MpBackupCore_0.Create := TRUE; + MpBackupCoreSys.Create := TRUE; HmiBackup.Status.Busy := TRUE; HmiBackup.Status.CreateAllowed := FALSE; HmiBackup.Status.RestoreAllowed := FALSE; - MpBackupCore_0.Name := ADR(HmiBackup.Parameters.Name); + MpBackupCoreSys.Name := ADR(HmiBackup.Parameters.Name); BackupState := BACKUP_CREATING; - ELSIF MpBackupCore_0.Info.Automatic.Backup.InProgress THEN + ELSIF MpBackupCoreSys.Info.Automatic.Backup.InProgress THEN HmiBackup.Status.Busy := TRUE; HmiBackup.Status.CreateAllowed := FALSE; HmiBackup.Status.RestoreAllowed := FALSE; BackupState := BACKUP_AUTOCREATE; - ELSIF (HmiBackup.Commands.Restore = TRUE) THEN + ELSIF (HmiBackup.Commands.Restore) THEN HmiBackup.Commands.Restore := FALSE; - MpBackupCore_0.Install := TRUE; + MpBackupCoreSys.Install := TRUE; HmiBackup.Status.Busy := TRUE; HmiBackup.Status.CreateAllowed := FALSE; HmiBackup.Status.RestoreAllowed := FALSE; - MpBackupCore_0.Name := ADR(MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name); + MpBackupCoreSys.Name := ADR(MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name); BackupState := BACKUP_RESTORING; - ELSIF (HmiBackup.Commands.Update = TRUE) THEN + ELSIF (HmiBackup.Commands.Update) THEN HmiBackup.Commands.Update := FALSE; - MpBackupCore_0.Install := TRUE; + MpBackupCoreSys.Install := TRUE; HmiBackup.Status.Busy := TRUE; HmiBackup.Status.CreateAllowed := FALSE; HmiBackup.Status.RestoreAllowed := FALSE; - MpBackupCore_0.Name := ADR(MpBackupCore_0.Info.Automatic.Update.Name); + MpBackupCoreSys.Name := ADR(MpBackupCoreSys.Info.Automatic.Update.Name); BackupState := BACKUP_UPDATING; - ELSIF (HmiBackup.Commands.Delete = TRUE) THEN + ELSIF (HmiBackup.Commands.Delete) THEN MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].IsSelected := TRUE; HmiBackup.Commands.Delete := FALSE; MpFileManagerUIConnect.File.Delete := TRUE; BackupState := BACKUP_DELETING; - ELSIF (HmiBackup.Commands.SaveConfig = TRUE) THEN + ELSIF (HmiBackup.Commands.SaveConfig) THEN HmiBackup.Commands.SaveConfig := FALSE; SaveBackupConfiguration; - MpBackupCoreConfig_0.Save := TRUE; - ELSIF ((HmiBackup.Status.SelectedIndex <> HmiBackup.Status.LastSelectedIndex) AND (MpBackupCore_0.CommandBusy <> TRUE)) THEN + MpBackupCoreConfigSys.Save := TRUE; + ELSIF ((HmiBackup.Status.SelectedIndex <> HmiBackup.Status.LastSelectedIndex) AND (MpBackupCoreSys.CommandBusy <> TRUE)) THEN HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.SelectedIndex; - MpBackupCore_0.Name := ADR(MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name); - MpBackupCore_0.RequestInfo := TRUE; + MpBackupCoreSys.Name := ADR(MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name); + IF MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name <> '' THEN + MpBackupCoreSys.RequestInfo := TRUE; + END_IF END_IF BACKUP_CREATING: - IF (MpBackupCore_0.CommandDone = TRUE) THEN - MpBackupCore_0.Create := FALSE; - MpBackupCore_0.Install := FALSE; - MpBackupCore_0.RequestInfo := FALSE; + IF (MpBackupCoreSys.CommandDone) THEN + MpBackupCoreSys.Create := FALSE; + MpBackupCoreSys.Install := FALSE; + MpBackupCoreSys.RequestInfo := FALSE; MpFileManagerUIConnect.File.Refresh := TRUE; BackupState := BACKUP_REFRESHING_LIST; - ELSIF (MpBackupCore_0.Error = TRUE) THEN + ELSIF (MpBackupCoreSys.Error) THEN BackupState := BACKUP_ERROR; END_IF BACKUP_AUTOCREATE: - IF ( MpBackupCore_0.Info.Automatic.Backup.InProgress = FALSE) THEN - MpBackupCore_0.Install := FALSE; - MpBackupCore_0.RequestInfo := FALSE; + IF (NOT MpBackupCoreSys.Info.Automatic.Backup.InProgress) THEN + MpBackupCoreSys.Install := FALSE; + MpBackupCoreSys.RequestInfo := FALSE; MpFileManagerUIConnect.File.Refresh := TRUE; BackupState := BACKUP_REFRESHING_LIST; - ELSIF (MpBackupCore_0.Error = TRUE) THEN + ELSIF (MpBackupCoreSys.Error) THEN BackupState := BACKUP_ERROR; END_IF BACKUP_REFRESHING_LIST: IF MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_REFRESH THEN - // Wait for the list to be refreshed with the newly created backup file + // Wait for the list to be refreshed with the newly created backup file ELSIF MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE THEN HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.LastSelectedIndex + 1; BackupState := BACKUP_IDLE; - ELSIF (MpBackupCore_0.Error = TRUE) THEN + ELSIF (MpBackupCoreSys.Error) THEN BackupState := BACKUP_ERROR; END_IF BACKUP_RESTORING: - IF (MpBackupCore_0.CommandDone = TRUE) THEN - MpBackupCore_0.Create := FALSE; - MpBackupCore_0.Install := FALSE; - MpBackupCore_0.RequestInfo := FALSE; + IF (MpBackupCoreSys.CommandDone) THEN + MpBackupCoreSys.Create := FALSE; + MpBackupCoreSys.Install := FALSE; + MpBackupCoreSys.RequestInfo := FALSE; MpFileManagerUIConnect.File.Refresh := TRUE; BackupState := BACKUP_IDLE; - ELSIF (MpBackupCore_0.Error = TRUE) THEN + ELSIF (MpBackupCoreSys.Error) THEN BackupState := BACKUP_ERROR; END_IF BACKUP_UPDATING: - IF (MpBackupCore_0.CommandDone = TRUE) THEN - MpBackupCore_0.Create := FALSE; - MpBackupCore_0.Install := FALSE; - MpBackupCore_0.RequestInfo := FALSE; + IF (MpBackupCoreSys.CommandDone) THEN + MpBackupCoreSys.Create := FALSE; + MpBackupCoreSys.Install := FALSE; + MpBackupCoreSys.RequestInfo := FALSE; BackupState := BACKUP_IDLE; - ELSIF (MpBackupCore_0.Error = TRUE) THEN + ELSIF (MpBackupCoreSys.Error) THEN BackupState := BACKUP_ERROR; END_IF @@ -168,42 +170,42 @@ PROGRAM _CYCLIC HmiBackup.Status.SimulationActive := TRUE; BACKUP_ERROR: - MpBackupCore_0.Create := FALSE; - MpBackupCore_0.Install := FALSE; - IF MpBackupCore_0.Info.Diag.StatusID.ID <> 0 THEN + MpBackupCoreSys.Create := FALSE; + MpBackupCoreSys.Install := FALSE; + IF MpBackupCoreSys.Info.Diag.StatusID.ID <> 0 THEN //-1064159486 HmiBackup.Status.Error := TRUE; END_IF - IF HmiBackup.Commands.Reset OR (MpBackupCore_0.Info.Diag.StatusID.ID = -1064159486) THEN + IF HmiBackup.Commands.Reset OR (MpBackupCoreSys.Info.Diag.StatusID.ID = -1064159486) THEN HmiBackup.Commands.Reset := FALSE; - MpBackupCore_0.ErrorReset := TRUE; + MpBackupCoreSys.ErrorReset := TRUE; BackupState := BACKUP_IDLE; - ELSIF ((MpBackupCore_0.Info.Diag.StatusID.ID = 0) AND (MpBackupCore_0.Error = FALSE)) THEN + ELSIF ((MpBackupCoreSys.Info.Diag.StatusID.ID = 0) AND (NOT MpBackupCoreSys.Error)) THEN BackupState := BACKUP_IDLE; END_IF END_CASE // Reset any errors caused by requesting information - IF EDGEPOS((MpBackupCore_0.Error = TRUE) AND (MpBackupCore_0.RequestInfo = TRUE)) THEN - MpBackupCore_0.ErrorReset := TRUE; - MpBackupCore_0.RequestInfo := FALSE; + IF EDGEPOS((MpBackupCoreSys.Error) AND (MpBackupCoreSys.RequestInfo)) THEN + MpBackupCoreSys.ErrorReset := TRUE; + MpBackupCoreSys.RequestInfo := FALSE; brsmemset(ADR(HmiBackup.Status.Info), 0, SIZEOF(HmiBackup.Status.Info)); END_IF - MpBackupCore_0.MpLink := ADR(gMpLinkBackupCore); - MpBackupCore_0.DeviceName := ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[MpFileManagerUIConnect.DeviceList.SelectedIndex]); - MpBackupCore_0(); + MpBackupCoreSys.MpLink := ADR(gMpLinkBackupCore); + MpBackupCoreSys.DeviceName := ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[MpFileManagerUIConnect.DeviceList.SelectedIndex]); + MpBackupCoreSys(); - IF (MpBackupCore_0.CommandDone = TRUE) AND (MpBackupCore_0.RequestInfo = TRUE) THEN - MpBackupCore_0.RequestInfo := FALSE; - HmiBackup.Status.Info := MpBackupCore_0.Info.Project.Requested; + IF (MpBackupCoreSys.CommandDone) AND (MpBackupCoreSys.RequestInfo) THEN + MpBackupCoreSys.RequestInfo := FALSE; + HmiBackup.Status.Info := MpBackupCoreSys.Info.Project.Requested; END_IF - IF EDGEPOS(MpBackupCore_0.Error = FALSE) THEN - MpBackupCore_0.ErrorReset := FALSE; + IF EDGEPOS(NOT MpBackupCoreSys.Error) THEN + MpBackupCoreSys.ErrorReset := FALSE; HmiBackup.Status.Error := FALSE; END_IF - HmiBackup.Status.RestoreAllowed := (MpFileManagerUIConnect.File.PathInfo.FolderCount > 0) AND NOT(MpBackupCore_0.Info.Automatic.Backup.InProgress) AND NOT HmiBackup.Status.SimulationActive; - HmiBackup.Status.Update := MpBackupCore_0.Info.Automatic.Update; + HmiBackup.Status.RestoreAllowed := (MpFileManagerUIConnect.File.PathInfo.FolderCount > 0) AND NOT(MpBackupCoreSys.Info.Automatic.Backup.InProgress) AND NOT HmiBackup.Status.SimulationActive; + HmiBackup.Status.Update := MpBackupCoreSys.Info.Automatic.Update; HmiBackup.Status.BackupCtrlEnabled := (NOT HmiBackup.Status.SimulationActive); // Call all actions @@ -213,29 +215,31 @@ PROGRAM _CYCLIC ChangeConfiguration; END_IF - // Assign MpLinks - MpBackupCore_0.MpLink := ADR(gMpLinkBackupCore); - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIBackup); - MpBackupCoreConfig_0.MpLink := ADR(gMpLinkBackupCore); + // Assign MpLinks & address references + MpBackupCoreSys.MpLink := ADR(gMpLinkBackupCore); + MpFileManagerUIBackup.MpLink := ADR(gMpLinkFileManagerUIBackup); + MpFileManagerUIBackup.UIConnect := ADR(MpFileManagerUIConnect); + MpBackupCoreConfigSys.MpLink := ADR(gMpLinkBackupCore); + MpBackupCoreConfigSys.Configuration := ADR(MpBackupConfiguration); // Call function blocks - MpBackupCore_0(); - MpFileManagerUI_0(); - MpBackupCoreConfig_0(); + MpBackupCoreSys(); + MpFileManagerUIBackup(); + MpBackupCoreConfigSys(); END_PROGRAM PROGRAM _EXIT // Disable the function blocks to unlink the MpLinks - MpBackupCore_0.Enable := FALSE; - MpFileManagerUI_0.Enable := FALSE; - MpBackupCoreConfig_0.Enable := FALSE; + MpBackupCoreSys.Enable := FALSE; + MpFileManagerUIBackup.Enable := FALSE; + MpBackupCoreConfigSys.Enable := FALSE; // Call function blocks - MpBackupCore_0(); - MpFileManagerUI_0(); - MpBackupCoreConfig_0(); + MpBackupCoreSys(); + MpFileManagerUIBackup(); + MpBackupCoreConfigSys(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/BackupMgr.var b/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/BackupMgr.var index 1434b44b..93cb69f0 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/BackupMgr.var +++ b/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/BackupMgr.var @@ -1,9 +1,9 @@ (*Function Blocks*) VAR - MpBackupCore_0 : MpBackupCore; (*MpBackupCore instance*) - MpBackupCoreConfig_0 : MpBackupCoreConfig; (*MpBackupCoreConfig instance*) - MpFileManagerUI_0 : MpFileManagerUI := (UISetup:=(FileListSize:=50)); (*MpFileManagerUI instance*) - DirCreate_0 : DirCreate; (*DirCreate instance*) + MpBackupCoreSys : MpBackupCore; (*MpBackupCore instance*) + MpBackupCoreConfigSys : MpBackupCoreConfig; (*MpBackupCoreConfig instance*) + MpFileManagerUIBackup : MpFileManagerUI := (UISetup:=(FileListSize:=50)); (*MpFileManagerUI instance*) + DirCreateBackup : DirCreate; (*DirCreate instance*) END_VAR (*Constants*) VAR CONSTANT diff --git a/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/ChangeConfiguration.st b/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/ChangeConfiguration.st index 27fb4f8b..5735bd88 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/ChangeConfiguration.st +++ b/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/ChangeConfiguration.st @@ -1,28 +1,25 @@ ACTION ChangeConfiguration: - MpBackupCoreConfig_0.MpLink := ADR(gMpLinkBackupCore); - MpBackupCoreConfig_0.Configuration := ADR(MpBackupConfiguration); - - IF (MpBackupCoreConfig_0.Error = TRUE) THEN + MpBackupCoreConfigSys.MpLink := ADR(gMpLinkBackupCore); + MpBackupCoreConfigSys.Configuration := ADR(MpBackupConfiguration); + IF (MpBackupCoreConfigSys.Error) THEN // Loading currently always throws an error about failed to write Auditing.Type - IF (MpBackupCoreConfig_0.StatusID = mpBACKUP_ERR_CONFIG_LOAD) THEN + IF (MpBackupCoreConfigSys.StatusID = mpBACKUP_ERR_CONFIG_LOAD) THEN LoadBackupConfiguration; END_IF - MpBackupCoreConfig_0.Load := FALSE; - MpBackupCoreConfig_0.Save := FALSE; - MpBackupCoreConfig_0.ErrorReset := TRUE; + MpBackupCoreConfigSys.Load := FALSE; + MpBackupCoreConfigSys.Save := FALSE; + MpBackupCoreConfigSys.ErrorReset := TRUE; END_IF - - MpBackupCoreConfig_0(); - MpBackupCoreConfig_0.ErrorReset := FALSE; - - IF (MpBackupCoreConfig_0.CommandDone = TRUE) THEN - IF (MpBackupCoreConfig_0.Load = TRUE) THEN + MpBackupCoreConfigSys(); + MpBackupCoreConfigSys.ErrorReset := FALSE; + IF (MpBackupCoreConfigSys.CommandDone) THEN + IF (MpBackupCoreConfigSys.Load) THEN LoadBackupConfiguration; END_IF - MpBackupCoreConfig_0.Load := FALSE; - MpBackupCoreConfig_0.Save := FALSE; + MpBackupCoreConfigSys.Load := FALSE; + MpBackupCoreConfigSys.Save := FALSE; END_IF END_ACTION diff --git a/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/HMIActions.st index e10b1a2f..c3605248 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/VC4/Backup/BackupMgr/HMIActions.st @@ -72,10 +72,9 @@ END_ACTION ACTION FileManager: - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIBackup); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0(); - + MpFileManagerUIBackup.MpLink := ADR(gMpLinkFileManagerUIBackup); + MpFileManagerUIBackup.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIBackup(); FOR i := 0 TO ((SIZEOF(HmiBackup.Status.FileNames)/SIZEOF(HmiBackup.Status.FileNames[0])) - 1) DO HmiBackup.Status.FileNames[i] := MpFileManagerUIConnect.File.List.Items[i].Name; HmiBackup.Status.TimeStamps[i] := MpFileManagerUIConnect.File.List.Items[i].LastModified; diff --git a/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FIFOOperations.st b/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FIFOOperations.st index 8e73d681..199814b2 100644 --- a/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FIFOOperations.st +++ b/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FIFOOperations.st @@ -1,10 +1,10 @@ ACTION FIFOOperation: - R_TRIG_CheckStatus(CLK := (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_CHANGE_DIR) OR - (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_CHANGE_DEVICE) OR - (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_CREATE)); + CheckStatusTrigger(CLK := (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_CHANGE_DIR) OR + (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_CHANGE_DEVICE) OR + (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_CREATE)); - IF R_TRIG_CheckStatus.Q OR TON_ScanFolder.Q THEN + IF CheckStatusTrigger.Q OR ScanFolderTimer.Q THEN HmiFile.Commands.CheckFolder := HmiFile.Parameters.Fifo.Enable; END_IF @@ -24,7 +24,7 @@ ACTION FIFOOperation: // Autodelete oldest files based on scanning option CASE HmiFile.Status.DeleteStep OF FILE_DISABLED: - IF (HmiFile.Parameters.Fifo.Enable = TRUE) THEN + IF (HmiFile.Parameters.Fifo.Enable) THEN MpFileManagerUI_FIFO.Enable := TRUE; HmiFile.Status.DeleteStep := FILE_DELETE_WAIT; ELSE @@ -32,12 +32,12 @@ ACTION FIFOOperation: END_IF FILE_DELETE_WAIT: - IF (HmiFile.Parameters.Fifo.Enable = TRUE) THEN + IF (HmiFile.Parameters.Fifo.Enable) THEN // Wait for check the correct device selection - TON_ScanFolder.IN := TRUE; + ScanFolderTimer.IN := TRUE; HmiFile.Status.FifoConfigEnable := TRUE; - IF TON_ScanFolder.Q THEN - TON_ScanFolder.IN := FALSE; + IF ScanFolderTimer.Q THEN + ScanFolderTimer.IN := FALSE; HmiFile.Status.FifoConfigEnable := FALSE; Fifo_Count := 0; HmiFile.Status.DeleteStep := FILE_SCAN_FOLDER_WAIT; @@ -48,7 +48,7 @@ ACTION FIFOOperation: FILE_SCAN_FOLDER_WAIT: // Wait for check for old files command - IF (HmiFile.Commands.CheckFolder = TRUE) AND ((MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) OR (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_ERROR)) THEN + IF (HmiFile.Commands.CheckFolder) AND ((MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) OR (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_ERROR)) THEN HmiFile.Commands.CheckFolder := FALSE; HmiFile.Status.DeleteStep := FILE_SELECT_DEVICE; HmiFile.Parameters.OldSortOrder := MpFileManagerUIConnect_FIFO.File.SortOrder; @@ -71,7 +71,7 @@ ACTION FIFOOperation: END_IF FILE_REFRESH: - IF ((MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) AND (MpFileManagerUIConnect_FIFO.File.Refresh = FALSE)) THEN + IF ((MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) AND (NOT MpFileManagerUIConnect_FIFO.File.Refresh)) THEN HmiFile.Status.DeleteStep := FILE_SORT_BY_DATE; END_IF @@ -84,7 +84,7 @@ ACTION FIFOOperation: MpFileManagerUI_FIFO(); END_IF - IF (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_REFRESH) AND (MpFileManagerUIConnect_FIFO.File.Refresh = FALSE) THEN + IF (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_REFRESH) AND (NOT MpFileManagerUIConnect_FIFO.File.Refresh) THEN HmiFile.Status.DeleteStep := FILE_SORT_BY_DATE_WAIT; END_IF @@ -115,15 +115,15 @@ ACTION FIFOOperation: END_IF FILE_GO_TO_END_1: - TON_Wait.IN := (MpFileManagerUIConnect_FIFO.File.List.PageDown = FALSE); - TON_Wait.PT := T#200ms; - IF (TON_Wait.Q = TRUE) THEN - TON_Wait.IN := FALSE; + WaitTimer.IN := (NOT MpFileManagerUIConnect_FIFO.File.List.PageDown); + WaitTimer.PT := T#200ms; + IF (WaitTimer.Q) THEN + WaitTimer.IN := FALSE; Fifo_Count := Fifo_Count + 1; // In case we are stuck trying to get to the last page HmiFile.Status.DeleteStep := SEL(Fifo_Count > 10, FILE_GO_TO_END, FILE_DELETE_WAIT); END_IF - TON_Wait(); + WaitTimer(); FILE_CHECK_FOR_FILTER: // Check which delete filter is active @@ -181,15 +181,15 @@ ACTION FIFOOperation: IF (CurrentIndex = 0) THEN HmiFile.Status.FolderSize := 0; END_IF - DirRead_FolderSize.enable := TRUE; - DirRead_FolderSize.pDevice := ADR(HmiFile.Parameters.Fifo.DeviceName); - DirRead_FolderSize.pPath := 0; - DirRead_FolderSize.entry := CurrentIndex; - DirRead_FolderSize.option := fiFILE; - DirRead_FolderSize.pData := ADR(DirectoryData); - DirRead_FolderSize.data_len := SIZEOF(DirectoryData); - DirRead_FolderSize(); - IF ((DirRead_FolderSize.status = ERR_OK) OR (DirRead_FolderSize.status = fiERR_NO_MORE_ENTRIES)) THEN + DirReadFolderSize.enable := TRUE; + DirReadFolderSize.pDevice := ADR(HmiFile.Parameters.Fifo.DeviceName); + DirReadFolderSize.pPath := 0; + DirReadFolderSize.entry := CurrentIndex; + DirReadFolderSize.option := fiFILE; + DirReadFolderSize.pData := ADR(DirectoryData); + DirReadFolderSize.data_len := SIZEOF(DirectoryData); + DirReadFolderSize(); + IF ((DirReadFolderSize.status = ERR_OK) OR (DirReadFolderSize.status = fiERR_NO_MORE_ENTRIES)) THEN HmiFile.Status.FolderSize := HmiFile.Status.FolderSize + UDINT_TO_REAL(DirectoryData.Filelength); CurrentIndex := CurrentIndex + 1; IF (CurrentIndex >= MpFileManagerUIConnect_FIFO.File.PathInfo.FileCount) THEN @@ -284,7 +284,7 @@ ACTION FIFOOperation: FifoSettingsRetain := HmiFile.Parameters.Fifo; // Timer to scan file device in intervals - TON_ScanFolder(PT := DINT_TO_TIME(HmiFile.Parameters.Fifo.ScanInterval * 60000)); + ScanFolderTimer(PT := DINT_TO_TIME(HmiFile.Parameters.Fifo.ScanInterval * 60000)); MpFileManagerUIConnect_FIFO.DeviceList.DeviceNames[0] := HmiFile.Parameters.Fifo.DeviceName; MpFileManagerUI_FIFO.UIConnect := ADR(MpFileManagerUIConnect_FIFO); diff --git a/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FileMgr.st b/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FileMgr.st index d44319bd..d939fbfc 100644 --- a/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FileMgr.st +++ b/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FileMgr.st @@ -1,124 +1,120 @@ -//*********************************************************************** -// Copyright: B&R Industrial Automation GmbH -// Author: B&R Industrial Automation GmbH -// Created: April 12, 2022 -// Description: Task for file management with VC4 front-end. -//*********************************************************************** - -PROGRAM _INIT - - // Inititialize mapp function block - MpFileManagerUIConnect.DeviceList.DeviceNames[0] := 'mappRecipeFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[1] := 'mappAuditFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[2] := 'mappReportFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[3] := 'mappDataFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[4] := 'mappBackupFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[5] := 'mappAlarmXFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[6] := 'mappUserXFiles'; - MpFileManagerUI_0.Enable := TRUE; - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIFile); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); - MpFileManagerUI_0(); - - HmiFile.Status.DeleteStep := FILE_DISABLED; - - // Initialize FIFO feature - HmiFile.Status.FifoConfigEnable := TRUE; - IF HmiFile.Parameters.Fifo.DeviceName = '' THEN - HmiFile.Parameters.Fifo.DeviceName := 'mappDataFiles'; - END_IF - - // MaxFolderSize is in kB - IF HmiFile.Parameters.Fifo.MaxFolderSize = 0 THEN - HmiFile.Parameters.Fifo.MaxFolderSize := 1000; - END_IF - - IF HmiFile.Parameters.Fifo.MaxNumberOfFiles = 0 THEN - HmiFile.Parameters.Fifo.MaxNumberOfFiles := 20; - END_IF - - // ScanInterval is in minutes - IF HmiFile.Parameters.Fifo.ScanInterval = 0 THEN - HmiFile.Parameters.Fifo.ScanInterval := 60; - END_IF - - // Initialize which folders should exist - PathCheck.DeviceList := MpFileManagerUIConnect.DeviceList; - - PathCheck.PrgName[0] := 'RecipeMgr'; - PathCheck.PrgName[1] := 'AuditMgr'; - PathCheck.PrgName[2] := 'ReportMgr'; - PathCheck.PrgName[3] := 'DataMgr'; - PathCheck.PrgName[4] := 'BackupMgr'; - PathCheck.PrgName[5] := 'AlarmMgr'; - PathCheck.PrgName[6] := 'UserXMgr'; - PathCheck.PrgName[7] := 'UsbMgr'; - PathCheck.PrgName[8] := 'UsbMgr'; - - PathCheck.Folder[0] := 'Recipe'; - PathCheck.Folder[1] := 'Audit'; - PathCheck.Folder[2] := 'Report'; - PathCheck.Folder[3] := 'Data'; - PathCheck.Folder[4] := 'Backup'; - PathCheck.Folder[5] := 'AlarmX'; - PathCheck.Folder[6] := 'UserX'; - - HmiFile.Status.DeviceDataProvider[0] := 'mappRecipeFiles'; - HmiFile.Status.DeviceDataProvider[1] := 'mappAuditFiles'; - HmiFile.Status.DeviceDataProvider[2] := 'mappReportFiles'; - HmiFile.Status.DeviceDataProvider[3] := 'mappDataFiles'; - HmiFile.Status.DeviceDataProvider[4] := 'mappBackupFiles'; - HmiFile.Status.DeviceDataProvider[5] := 'mappAlarmXFiles'; - HmiFile.Status.DeviceDataProvider[6] := 'mappUserXFiles'; - - // Calculate offset for potential additional USB devices - FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames) / SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames[0])) - 1) DO - IF MpFileManagerUIConnect.DeviceList.DeviceNames[i] <> '' THEN - USBOffset := USBOffset + 1; - END_IF - END_FOR - - // Restored the retained values to the FIFO settings - HmiFile.Parameters.Fifo := FifoSettingsRetain; - - // Handle retained FIFO settings - VC4_Init; - -END_PROGRAM - -PROGRAM _CYCLIC - - // Call all actions - FormatDeviceDataProvider; - VC4_Cyclic; - FIFOOperation; - - // Error reset - IF NOT MpFileManagerUI_0.Error THEN - MpFileManagerUI_0.ErrorReset := FALSE; - END_IF - - // Assign MpLinks and address references - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIFile); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_FIFO.MpLink := ADR(gMpLinkFileManagerUIFile_FIFO); - - // Call function block - MpFileManagerUI_0(); - MpFileManagerUI_FIFO(); - -END_PROGRAM - -PROGRAM _EXIT - - // Disable the function blocls to unlink the MpLink - MpFileManagerUI_0.Enable := FALSE; - MpFileManagerUI_FIFO.Enable := FALSE; - - // Call function block - MpFileManagerUI_0(); - MpFileManagerUI_FIFO(); - -END_PROGRAM - +//*********************************************************************** +// Copyright: B&R Industrial Automation GmbH +// Author: B&R Industrial Automation GmbH +// Created: April 12, 2022 +// Description: Task for file management with VC4 front-end. +//*********************************************************************** + +PROGRAM _INIT + + // Inititialize mapp function block + MpFileManagerUIConnect.DeviceList.DeviceNames[0] := 'USER'; + MpFileManagerUIConnect.DeviceList.DeviceNames[1] := 'mappRecipeFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[2] := 'mappAuditFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[3] := 'mappReportFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[4] := 'mappBackupFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[5] := 'mappAlarmXFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[6] := 'mappUserXFiles'; + MpFileManagerUISys.Enable := TRUE; + MpFileManagerUISys.MpLink := ADR(gMpLinkFileManagerUIFile); + MpFileManagerUISys.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUISys.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); + MpFileManagerUISys(); + + HmiFile.Status.DeleteStep := FILE_DISABLED; + + // Restored the retained values to the FIFO settings + HmiFile.Parameters.Fifo := FifoSettingsRetain; + // If the FIFO is disabled and parameters are 0, set default values + IF NOT HmiFile.Parameters.Fifo.Enable THEN + IF HmiFile.Parameters.Fifo.MaxFolderSize = 0 THEN + HmiFile.Parameters.Fifo.MaxFolderSize := 1000; + END_IF + IF HmiFile.Parameters.Fifo.MaxNumberOfFiles = 0 THEN + HmiFile.Parameters.Fifo.MaxNumberOfFiles := 20; + END_IF + IF HmiFile.Parameters.Fifo.ScanInterval = 0 THEN + HmiFile.Parameters.Fifo.ScanInterval := 60; + END_IF + IF HmiFile.Parameters.Fifo.DeviceName = '' THEN + HmiFile.Parameters.Fifo.DeviceName := 'USER'; + END_IF + END_IF + + // enable the FIFO configuration, used to prevent the user from making changes while the FIFO is actively deleting files + HmiFile.Status.FifoConfigEnable := TRUE; + + // Initialize which folders should exist + PathCheck.DeviceList := MpFileManagerUIConnect.DeviceList; + + PathCheck.PrgName[0] := 'RecipeMgr'; + PathCheck.PrgName[1] := 'AuditMgr'; + PathCheck.PrgName[2] := 'ReportMgr'; + PathCheck.PrgName[3] := 'BackupMgr'; + PathCheck.PrgName[4] := 'AlarmMgr'; + PathCheck.PrgName[5] := 'UserXMgr'; + PathCheck.PrgName[6] := 'UsbMgr'; + PathCheck.PrgName[7] := 'UsbMgr'; + + PathCheck.Folder[0] := 'Recipe'; + PathCheck.Folder[1] := 'Audit'; + PathCheck.Folder[2] := 'Report'; + PathCheck.Folder[3] := 'Backup'; + PathCheck.Folder[4] := 'AlarmX'; + PathCheck.Folder[5] := 'UserX'; + + HmiFile.Status.DeviceDataProvider[0] := 'UserPath'; + HmiFile.Status.DeviceDataProvider[1] := 'mappRecipeFiles'; + HmiFile.Status.DeviceDataProvider[2] := 'mappAuditFiles'; + HmiFile.Status.DeviceDataProvider[3] := 'mappReportFiles'; + HmiFile.Status.DeviceDataProvider[4] := 'mappBackupFiles'; + HmiFile.Status.DeviceDataProvider[5] := 'mappAlarmXFiles'; + HmiFile.Status.DeviceDataProvider[6] := 'mappUserXFiles'; + + // Calculate offset for potential additional USB devices + FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames) / SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames[0])) - 1) DO + IF MpFileManagerUIConnect.DeviceList.DeviceNames[i] <> '' THEN + USBOffset := USBOffset + 1; + END_IF + END_FOR + + // Handle retained FIFO settings + VC4_Init; + +END_PROGRAM + +PROGRAM _CYCLIC + + // Call all actions + FormatDeviceDataProvider; + VC4_Cyclic; + FIFOOperation; + + // Error reset + IF NOT MpFileManagerUISys.Error THEN + MpFileManagerUISys.ErrorReset := FALSE; + END_IF + + // Assign MpLinks and address references + MpFileManagerUISys.MpLink := ADR(gMpLinkFileManagerUIFile); + MpFileManagerUISys.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUI_FIFO.MpLink := ADR(gMpLinkFileManagerUIFile_FIFO); + + // Call function blocks + MpFileManagerUISys(); + MpFileManagerUI_FIFO(); + +END_PROGRAM + +PROGRAM _EXIT + + // Disable the function blocks to unlink the MpLink + MpFileManagerUISys.Enable := FALSE; + MpFileManagerUI_FIFO.Enable := FALSE; + + // Call function blocks + MpFileManagerUISys(); + MpFileManagerUI_FIFO(); + +END_PROGRAM + diff --git a/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FileMgr.var b/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FileMgr.var index 1e29f30e..8bf65cab 100644 --- a/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FileMgr.var +++ b/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/FileMgr.var @@ -1,11 +1,11 @@ (*Function Blocks*) VAR - MpFileManagerUI_0 : MpFileManagerUI; (*MpFileManagerUI instance*) + MpFileManagerUISys : MpFileManagerUI; (*MpFileManagerUI instance*) MpFileManagerUI_FIFO : MpFileManagerUI; (*MpFileManagerUI instance*) - R_TRIG_CheckStatus : R_TRIG; (*Trigger function block*) - TON_Wait : TON; (*FIFO handling support*) - TON_ScanFolder : TON; (*Timer to scan for folder*) - DirRead_FolderSize : DirRead; (*FIFO handling support reading current folder size*) + CheckStatusTrigger : R_TRIG; (*Trigger function block*) + WaitTimer : TON; (*FIFO handling support*) + ScanFolderTimer : TON; (*Timer to scan for folder*) + DirReadFolderSize : DirRead; (*FIFO handling support reading current folder size*) END_VAR (*Constants*) VAR CONSTANT diff --git a/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/HMIActions.st index f76cb42b..b49514a4 100644 --- a/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/VC4/File/FileMgr/HMIActions.st @@ -11,9 +11,9 @@ END_ACTION ACTION VC4_Cyclic: - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIFile); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0(); + MpFileManagerUISys.MpLink := ADR(gMpLinkFileManagerUIFile); + MpFileManagerUISys.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUISys(); FOR i := 0 TO ((SIZEOF(HmiFile.Status.FileNames)/SIZEOF(HmiFile.Status.FileNames[0])) - 1) DO HmiFile.Status.FileNames[i] := MpFileManagerUIConnect.File.List.Items[i].Name; @@ -57,9 +57,9 @@ ACTION VC4_Cyclic: END_FOR // Mutli selection - IF (MpFileManagerUIConnect.File.MultiSelect = FALSE) THEN + IF (NOT MpFileManagerUIConnect.File.MultiSelect) THEN MpFileManagerUIConnect.File.List.Items[HmiFile.Status.SelectedIndex].IsSelected := TRUE; - ELSIF (MpFileManagerUIConnect.File.MultiSelect = TRUE) AND HmiFile.Commands.FileList.Clicked THEN + ELSIF (MpFileManagerUIConnect.File.MultiSelect) AND HmiFile.Commands.FileList.Clicked THEN MpFileManagerUIConnect.File.List.Items[HmiFile.Status.SelectedIndex].IsSelected := NOT MpFileManagerUIConnect.File.List.Items[HmiFile.Status.SelectedIndex].IsSelected; END_IF HmiFile.Commands.FileList.Clicked := FALSE; diff --git a/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/PackMLMgr.st b/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/PackMLMgr.st index 00fdd695..6d1d3a65 100644 --- a/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/PackMLMgr.st +++ b/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/PackMLMgr.st @@ -11,32 +11,32 @@ PROGRAM _INIT // For additional information, see "Required Modifications" in AS Mapp Framework Help. // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappPackMLFiles'), pName := ADR('/')); + DirCreatePackML(enable := TRUE, pDevice := ADR('mappPackMLFiles'), pName := ADR('/')); // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreatePackML.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreatePackML(enable := FALSE); END_IF // Initialize mapp function blocks - MpPackMLCore_0.MpLink := ADR(gMpLinkPackMLCore); - MpPackMLCore_0.Enable := TRUE; - MpPackMLCore_0(); + MpPackMLCoreMain.MpLink := ADR(gMpLinkPackMLCore); + MpPackMLCoreMain.Enable := TRUE; + MpPackMLCoreMain(); - MpPackMLMode_0.MpLink := ADR(gMpLinkPackMLCore); - MpPackMLMode_0.Enable := TRUE; - MpPackMLMode_0.ModeID := 1; - MpPackMLMode_0(); + MpPackMLModeMain.MpLink := ADR(gMpLinkPackMLCore); + MpPackMLModeMain.Enable := TRUE; + MpPackMLModeMain.ModeID := 1; + MpPackMLModeMain(); - MpPackMLBasicUI_0.MpLink := ADR(gMpLinkPackMLCore); - MpPackMLBasicUI_0.Enable := TRUE; - MpPackMLBasicUI_0.UIConnect := ADR(MpPackMLBasicUIConnect); - MpPackMLBasicUI_0(); + MpPackMLBasicUIMain.MpLink := ADR(gMpLinkPackMLCore); + MpPackMLBasicUIMain.Enable := TRUE; + MpPackMLBasicUIMain.UIConnect := ADR(MpPackMLBasicUIConnect); + MpPackMLBasicUIMain(); - MpPackMLStatisticsUI_0.MpLink := ADR(gMpLinkPackMLCore); - MpPackMLStatisticsUI_0.Enable := TRUE; - MpPackMLStatisticsUI_0.UIConnect := ADR(MpPackMLStatisticsUIConnect); - MpPackMLStatisticsUI_0(); + MpPackMLStatisticsUIMain.MpLink := ADR(gMpLinkPackMLCore); + MpPackMLStatisticsUIMain.Enable := TRUE; + MpPackMLStatisticsUIMain.UIConnect := ADR(MpPackMLStatisticsUIConnect); + MpPackMLStatisticsUIMain(); // Assign Production mode as selected Index since it's the start mode and preselected MpPackMLBasicUIConnect.ModeControl.SelectedIndex := 1; @@ -49,32 +49,32 @@ PROGRAM _CYCLIC StateMachine; // Assign MpLinks & UIConnects - MpPackMLCore_0.MpLink := ADR(gMpLinkPackMLCore); - MpPackMLMode_0.MpLink := ADR(gMpLinkPackMLCore); - MpPackMLBasicUI_0.MpLink := ADR(gMpLinkPackMLCore); - MpPackMLStatisticsUI_0.MpLink := ADR(gMpLinkPackMLCore); + MpPackMLCoreMain.MpLink := ADR(gMpLinkPackMLCore); + MpPackMLModeMain.MpLink := ADR(gMpLinkPackMLCore); + MpPackMLBasicUIMain.MpLink := ADR(gMpLinkPackMLCore); + MpPackMLStatisticsUIMain.MpLink := ADR(gMpLinkPackMLCore); // Call function blocks - MpPackMLCore_0(); - MpPackMLMode_0(); - MpPackMLBasicUI_0(); - MpPackMLStatisticsUI_0(); + MpPackMLCoreMain(); + MpPackMLModeMain(); + MpPackMLBasicUIMain(); + MpPackMLStatisticsUIMain(); END_PROGRAM PROGRAM _EXIT // Disable the function blocks to unlink the MpLinks - MpPackMLCore_0.Enable := FALSE; - MpPackMLMode_0.Enable := FALSE; - MpPackMLBasicUI_0.Enable := FALSE; - MpPackMLStatisticsUI_0.Enable := TRUE; + MpPackMLCoreMain.Enable := FALSE; + MpPackMLModeMain.Enable := FALSE; + MpPackMLBasicUIMain.Enable := FALSE; + MpPackMLStatisticsUIMain.Enable := TRUE; // Call function blocks - MpPackMLCore_0(); - MpPackMLMode_0(); - MpPackMLBasicUI_0(); - MpPackMLStatisticsUI_0(); + MpPackMLCoreMain(); + MpPackMLModeMain(); + MpPackMLBasicUIMain(); + MpPackMLStatisticsUIMain(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/PackMLMgr.var b/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/PackMLMgr.var index ecf95ec8..683fce96 100644 --- a/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/PackMLMgr.var +++ b/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/PackMLMgr.var @@ -1,10 +1,10 @@ (*Function Blocks*) VAR - DirCreate_0 : DirCreate; (*DirCreate instance*) - MpPackMLCore_0 : MpPackMLCore; - MpPackMLMode_0 : MpPackMLMode; - MpPackMLBasicUI_0 : MpPackMLBasicUI; - MpPackMLStatisticsUI_0 : MpPackMLStatisticsUI; + DirCreatePackML : DirCreate; (*DirCreate instance*) + MpPackMLCoreMain : MpPackMLCore; + MpPackMLModeMain : MpPackMLMode; + MpPackMLBasicUIMain : MpPackMLBasicUI; + MpPackMLStatisticsUIMain : MpPackMLStatisticsUI; END_VAR (*Constants*) (*Structure Types*) diff --git a/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/StateMachine.st b/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/StateMachine.st index 49e7e19b..b9c84c3e 100644 --- a/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/StateMachine.st +++ b/mappFramework/Logical/Infrastructure/VC4/PackML/PackMLMgr/StateMachine.st @@ -1,77 +1,77 @@ ACTION StateMachine: - CASE MpPackMLCore_0.StateCurrent OF + CASE MpPackMLCoreMain.StateCurrent OF mpPACKML_STATE_STOPPED: // Add STOPPED actions here - MpPackMLMode_0.StateComplete := FALSE; + MpPackMLModeMain.StateComplete := FALSE; mpPACKML_STATE_STARTING: // Add STARTING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; mpPACKML_STATE_IDLE: // Add IDLE actions here - MpPackMLMode_0.StateComplete := FALSE; + MpPackMLModeMain.StateComplete := FALSE; mpPACKML_STATE_SUSPENDING: // Add SUSPENDING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; mpPACKML_STATE_SUSPENDED: // Add SUSPENDED actions here - MpPackMLMode_0.StateComplete := FALSE; + MpPackMLModeMain.StateComplete := FALSE; mpPACKML_STATE_UNSUSPENDING: // Add UNSUSPENDING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; mpPACKML_STATE_EXECUTE: // Add EXECUTE actions here - MpPackMLMode_0.StateComplete := FALSE; + MpPackMLModeMain.StateComplete := FALSE; mpPACKML_STATE_STOPPING: // Add STOPPING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; mpPACKML_STATE_ABORTING: // Add ABORTING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; mpPACKML_STATE_ABORTED: // Add ABORTED actions here - MpPackMLMode_0.StateComplete := FALSE; + MpPackMLModeMain.StateComplete := FALSE; mpPACKML_STATE_HOLDING: // Add HOLDING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; mpPACKML_STATE_HELD: // Add HELD actions here - MpPackMLMode_0.StateComplete := FALSE; + MpPackMLModeMain.StateComplete := FALSE; mpPACKML_STATE_UNHOLDING: // Add UNHOLDING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; mpPACKML_STATE_COMPLETING: // Add COMPLETING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; // NOTE: To allow the state machine to move forward, the StateComplete command has been connected // to the HMI button. The user should change this to set StateComplete to TRUE upon COMPLETING actions. @@ -79,22 +79,22 @@ ACTION StateMachine: mpPACKML_STATE_COMPLETE: // Add COMPLETE actions here - MpPackMLMode_0.StateComplete := FALSE; + MpPackMLModeMain.StateComplete := FALSE; mpPACKML_STATE_RESETTING: // Add RESETTING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; mpPACKML_STATE_CLEARING: // Add CLEARING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; mpPACKML_STATE_UNDEFINED: // Add UNDEFINED actions here - MpPackMLMode_0.Activate := TRUE; + MpPackMLModeMain.Activate := TRUE; mpPACKML_STATE_DEACTIVATING: @@ -108,7 +108,7 @@ ACTION StateMachine: // Add ACTIVATING actions here - MpPackMLMode_0.StateComplete := TRUE; + MpPackMLModeMain.StateComplete := TRUE; END_CASE diff --git a/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/HMIActions.st index 63ffdad7..03a90d18 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/HMIActions.st @@ -37,7 +37,7 @@ ACTION LoadStatus: // Configure recipe actions HmiRecipe.Status.FilesAvailable := (MpRecipeUIConnect.Recipe.List.Names[0] <> ''); HmiRecipe.Status.LoadAllowed := HmiRecipe.Status.FilesAvailable AND NOT HmiRecipe.Status.InvalidRecipe; - HmiRecipe.Status.DeviceValid := (MpFileManagerUI_0.StatusID <> mpFILE_ERR_INVALID_FILE_DEV); + HmiRecipe.Status.DeviceValid := (MpFileManagerUIRecipe.StatusID <> mpFILE_ERR_INVALID_FILE_DEV); END_ACTION @@ -143,28 +143,28 @@ ACTION LoadPreview: END_IF; // Load preview when a recipe is selected - IF (MpRecipeUIConnect.Recipe.List.SelectedIndex <> HmiRecipe.Status.LastSelectedIndex) OR + IF ((MpRecipeUIConnect.Recipe.List.SelectedIndex <> HmiRecipe.Status.LastSelectedIndex) OR (HmiRecipe.Status.LastMaxSelection <> MpRecipeUIConnect.Recipe.List.MaxSelection) OR - EDGENEG(HmiRecipe.Status.LastStatus = mpRECIPE_UI_STATUS_CREATE) THEN + EDGENEG(HmiRecipe.Status.LastStatus = mpRECIPE_UI_STATUS_CREATE)) AND NOT MpRecipeUIConnect.Recipe.Load THEN // Check selected recipe name is not empty IF (brsstrlen(ADR(MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex])) > 0) THEN - MpRecipe_0.FileName := ADR(MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex]); - MpRecipe_0.Category := ADR(HmiRecipe.Parameters.Category); - MpRecipe_0.Load := TRUE; + MpRecipeSys.FileName := ADR(MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex]); + MpRecipeSys.Category := ADR(HmiRecipe.Parameters.Category); + MpRecipeSys.Load := TRUE; HmiRecipe.Status.LastSelectedIndex := MpRecipeUIConnect.Recipe.List.SelectedIndex; HmiRecipe.Status.LastMaxSelection := MpRecipeUIConnect.Recipe.List.MaxSelection; HmiRecipe.Status.InvalidRecipe := FALSE; END_IF END_IF - // Reset load command on MpRecipe_0 FUB - IF MpRecipe_0.StatusID <> 0 THEN + // Reset load command on MpRecipeSys FUB + IF MpRecipeSys.StatusID <> 0 THEN HmiRecipe.Status.InvalidRecipe := TRUE; HmiRecipe.Commands.ResetPreview := TRUE; END_IF; - IF ((MpRecipe_0.CommandDone = TRUE) OR (MpRecipe_0.Error = TRUE)) THEN - MpRecipe_0.Load := FALSE; + IF ((MpRecipeSys.CommandDone) OR (MpRecipeSys.Error)) THEN + MpRecipeSys.Load := FALSE; END_IF END_ACTION @@ -218,14 +218,14 @@ ACTION RecipeHMIcommands: END_IF Header.Name := MpRecipeUIConnect.New.FileName; - DTGetTime_0.enable := TRUE; + DTGetTimeRecipe.enable := TRUE; REPEAT - DTGetTime_0(); - UNTIL (DTGetTime_0.status = 0) + DTGetTimeRecipe(); + UNTIL (DTGetTimeRecipe.status = 0) END_REPEAT; - Header.DateTime := DTGetTime_0.DT1; - DTGetTime_0.enable := FALSE; - DTGetTime_0(); + Header.DateTime := DTGetTimeRecipe.DT1; + DTGetTimeRecipe.enable := FALSE; + DTGetTimeRecipe(); MpRecipeUIConnect.New.Create := TRUE; HmiRecipe.Status.HMIcommand := REC_HMI_WAIT; @@ -270,8 +270,8 @@ ACTION RecipeHMIcommands: END_IF IF (brsstrlen(ADR(HmiRecipe.Status.SelectedRecipe)) > 0) THEN - MpRecipe_0.FileName := ADR(HmiRecipe.Status.SelectedRecipe); - MpRecipe_0.Save := TRUE; + MpRecipeSys.FileName := ADR(HmiRecipe.Status.SelectedRecipe); + MpRecipeSys.Save := TRUE; END_IF HmiRecipe.Status.HMIcommand := REC_HMI_WAIT; @@ -314,9 +314,9 @@ ACTION RecipeHMIcommands: HmiRecipe.Status.LoadPreviewAfterPageOpened := FALSE; // Check selected recipe name is not empty IF (brsstrlen(ADR(MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex])) > 0) THEN - MpRecipe_0.FileName := ADR(MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex]); - MpRecipe_0.Category := ADR(HmiRecipe.Parameters.Category); - MpRecipe_0.Load := TRUE; + MpRecipeSys.FileName := ADR(MpRecipeUIConnect.Recipe.List.Names[MpRecipeUIConnect.Recipe.List.SelectedIndex]); + MpRecipeSys.Category := ADR(HmiRecipe.Parameters.Category); + MpRecipeSys.Load := TRUE; HmiRecipe.Status.LastSelectedIndex := MpRecipeUIConnect.Recipe.List.SelectedIndex; HmiRecipe.Status.LastMaxSelection := MpRecipeUIConnect.Recipe.List.MaxSelection; HmiRecipe.Status.InvalidRecipe := FALSE; diff --git a/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/RecipeMgr.st b/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/RecipeMgr.st index 8127c5ca..c4c6d4d4 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/RecipeMgr.st +++ b/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/RecipeMgr.st @@ -8,16 +8,16 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappRecipeFiles'), pName := ADR('/')); - + DirCreateRecipe(enable := TRUE, pDevice := ADR('mappRecipeFiles'), pName := ADR('/')); + // Wait for DirCreate_0 to complete. - WHILE (DirCreate_0.status = ERR_FUB_BUSY) DO - DirCreate_0(); + WHILE (DirCreateRecipe.status = ERR_FUB_BUSY) DO + DirCreateRecipe(); END_WHILE // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST OR (DirCreate_0.status = ERR_OK) THEN - DirCreate_0(enable := FALSE); + IF DirCreateRecipe.status = fiERR_DIR_ALREADY_EXIST OR (DirCreateRecipe.status = ERR_OK) THEN + DirCreateRecipe(enable := FALSE); END_IF // Initialize mapp function blocks @@ -29,25 +29,25 @@ PROGRAM _INIT MpRecipeUISetup.AutoLoadHeader := TRUE; MpRecipeUIConnect.New.FileName := 'newRecipe'; MpRecipeUIConnect.Recipe.Filter := '*par'; - MpRecipeUI_0.MpLink := ADR(gMpLinkRecipeXml); - MpRecipeUI_0.Enable := TRUE; - MpRecipeUI_0.UIConnect := ADR(MpRecipeUIConnect); - MpRecipeUI_0.UISetup := MpRecipeUISetup; - MpRecipeUI_0(); + MpRecipeUISys.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeUISys.Enable := TRUE; + MpRecipeUISys.UIConnect := ADR(MpRecipeUIConnect); + MpRecipeUISys.UISetup := MpRecipeUISetup; + MpRecipeUISys(); HmiRecipe.Parameters.Category := PARAMETERS_CATEGORY; HmiRecipe.Status.DeviceDataProvider[0] := '{"value":"mappRecipeFiles","text":"CF/PLC"}'; HmiRecipe.Parameters.DeviceName := 'mappRecipeFiles'; - MpRecipe_0.MpLink := ADR(gMpLinkRecipeXml); - MpRecipe_0.Enable := TRUE; - MpRecipe_0.Category := ADR(HmiRecipe.Parameters.Category); - MpRecipe_0.DeviceName := ADR(HmiRecipe.Parameters.DeviceName); - MpRecipe_0.FileName := ADR(HmiRecipe.Parameters.FileName); - MpRecipe_0.Header := ADR(Header); - - // Wait for MpRecipe_0 to activate. This must be active before you can call the RegPar function blocks, which is below. - WHILE NOT(MpRecipe_0.Active OR MpRecipe_0.Error) DO - MpRecipe_0(); + MpRecipeSys.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeSys.Enable := TRUE; + MpRecipeSys.Category := ADR(HmiRecipe.Parameters.Category); + MpRecipeSys.DeviceName := ADR(HmiRecipe.Parameters.DeviceName); + MpRecipeSys.FileName := ADR(HmiRecipe.Parameters.FileName); + MpRecipeSys.Header := ADR(Header); + + // Wait for MpRecipeSys to activate. This must be active before you can call the RegPar function blocks, which is below. + WHILE NOT(MpRecipeSys.Active OR MpRecipeSys.Error) DO + MpRecipeSys(); END_WHILE // Register the preview variables to the recipe. These preview variables are a buffer between the recipe system and the @@ -80,9 +80,9 @@ PROGRAM _INIT HmiRecipe.Parameters.Category := MACHINE_CONFIGURATION_CATEGORY; HmiRecipe.Parameters.FileName := DEFAULT_MACHINE_CONFIGURATION; brsstrcat(ADR(HmiRecipe.Parameters.FileName),ADR(MACHINE_CONFIG_FILE_EXTENSION)); - MpRecipe_0.Load := TRUE; - WHILE NOT(MpRecipe_0.CommandDone OR MpRecipe_0.Error) DO - MpRecipe_0(); + MpRecipeSys.Load := TRUE; + WHILE NOT(MpRecipeSys.CommandDone OR MpRecipeSys.Error) DO + MpRecipeSys(); END_WHILE MachineSettings := MachineSettingsPreview; HmiRecipe.Status.LastLoadedConfigRecipe := DEFAULT_MACHINE_CONFIGURATION; @@ -90,24 +90,24 @@ PROGRAM _INIT HmiRecipe.Status.ConfigRecipeLoaded := TRUE; // Check if the default machine settings recipe is missing - IF MpRecipe_0.Info.Diag.StatusID.ID = mpRECIPE_ERR_LOAD_DATA THEN + IF MpRecipeSys.Info.Diag.StatusID.ID = mpRECIPE_ERR_LOAD_DATA THEN HmiRecipe.Status.MachineSettingsRecipeMissing := TRUE; HmiRecipe.Status.LastLoadedConfigRecipe := ''; HmiRecipe.Status.ConfigRecipeLoaded := FALSE; END_IF - MpRecipe_0.ErrorReset := MpRecipe_0.Error; - MpRecipe_0.Load := FALSE; - MpRecipe_0(); + MpRecipeSys.ErrorReset := MpRecipeSys.Error; + MpRecipeSys.Load := FALSE; + MpRecipeSys(); // Load default Parameter recipe HmiRecipe.Parameters.Category := PARAMETERS_CATEGORY; HmiRecipe.Parameters.FileName := DEFAULT_PARAMETERS; brsstrcat(ADR(HmiRecipe.Parameters.FileName),ADR(PARAMETERS_FILE_EXTENSION)); HmiRecipe.Status.PreviousRecipe := DEFAULT_PARAMETERS; - MpRecipe_0.Load := TRUE; - WHILE NOT(MpRecipe_0.CommandDone OR MpRecipe_0.Error) DO - MpRecipe_0(); + MpRecipeSys.Load := TRUE; + WHILE NOT(MpRecipeSys.CommandDone OR MpRecipeSys.Error) DO + MpRecipeSys(); END_WHILE Parameters := ParametersPreview; HmiRecipe.Status.LastLoadedProductRecipe := DEFAULT_PARAMETERS; @@ -115,7 +115,7 @@ PROGRAM _INIT HmiRecipe.Status.ProductRecipeLoaded := TRUE; // Check if the default parameters recipe is missing - IF MpRecipe_0.Info.Diag.StatusID.ID = mpRECIPE_ERR_LOAD_DATA THEN + IF MpRecipeSys.Info.Diag.StatusID.ID = mpRECIPE_ERR_LOAD_DATA THEN HmiRecipe.Status.ParameterRecipeMissing := TRUE; HmiRecipe.Status.LastLoadedProductRecipe := ''; HmiRecipe.Status.ProductRecipeLoaded := FALSE; @@ -123,21 +123,21 @@ PROGRAM _INIT - MpRecipe_0.ErrorReset := MpRecipe_0.Error; - MpRecipe_0.Load := FALSE; - MpRecipe_0(); + MpRecipeSys.ErrorReset := MpRecipeSys.Error; + MpRecipeSys.Load := FALSE; + MpRecipeSys(); // Trigger update notification so that the initial parameters are copied to the process - MpRecipe_0.UpdateNotification := TRUE; + MpRecipeSys.UpdateNotification := TRUE; // Init Filemanager for exporting/importing files - MpFileManagerUI_0.Enable := TRUE; - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIRecipe); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); + MpFileManagerUIRecipe.Enable := TRUE; + MpFileManagerUIRecipe.MpLink := ADR(gMpLinkFileManagerUIRecipe); + MpFileManagerUIRecipe.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIRecipe.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); MpFileManagerUIConnect.DeviceList.DeviceNames[0] := 'mappRecipeFiles'; MpFileManagerUIConnect.DeviceList.DeviceNames[1] := ''; - MpFileManagerUI_0(); + MpFileManagerUIRecipe(); HmiRecipe.Status.HMIcommand := REC_HMI_WAIT; @@ -154,46 +154,46 @@ PROGRAM _CYCLIC LoadStatus; // Reset commands on MpRecipe FUB - IF MpRecipe_0.CommandDone THEN - MpRecipe_0.Load := FALSE; - MpRecipe_0.Save := FALSE; + IF MpRecipeSys.CommandDone THEN + MpRecipeSys.Load := FALSE; + MpRecipeSys.Save := FALSE; // Set update notification for machine category - IF ((brsstrcmp(ADR(HmiRecipe.Parameters.Category), ADR(MACHINE_CONFIGURATION_CATEGORY)) = 0) AND (MpRecipe_0.Save = TRUE)) THEN - MpRecipe_0.UpdateNotification := TRUE; + IF ((brsstrcmp(ADR(HmiRecipe.Parameters.Category), ADR(MACHINE_CONFIGURATION_CATEGORY)) = 0) AND (MpRecipeSys.Save)) THEN + MpRecipeSys.UpdateNotification := TRUE; ELSE - MpRecipe_0.UpdateNotification := FALSE; + MpRecipeSys.UpdateNotification := FALSE; END_IF END_IF // Error reset - IF NOT MpRecipe_0.Error THEN - MpRecipe_0.ErrorReset := FALSE; + IF NOT MpRecipeSys.Error THEN + MpRecipeSys.ErrorReset := FALSE; END_IF - IF NOT MpRecipeUI_0.Error THEN - MpRecipeUI_0.ErrorReset := FALSE; + IF NOT MpRecipeUISys.Error THEN + MpRecipeUISys.ErrorReset := FALSE; END_IF // Assign MpLinks & address references - MpRecipe_0.MpLink := ADR(gMpLinkRecipeXml); - MpRecipe_0.DeviceName := ADR(HmiRecipe.Parameters.DeviceName); - MpRecipe_0.Header := ADR(Header); - MpRecipeUI_0.MpLink := ADR(gMpLinkRecipeXml); - MpRecipeUI_0.UIConnect := ADR(MpRecipeUIConnect); - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIRecipe); + MpRecipeSys.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeSys.DeviceName := ADR(HmiRecipe.Parameters.DeviceName); + MpRecipeSys.Header := ADR(Header); + MpRecipeUISys.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeUISys.UIConnect := ADR(MpRecipeUIConnect); + MpFileManagerUIRecipe.MpLink := ADR(gMpLinkFileManagerUIRecipe); MpRecipeRegPar_PreviewPar.MpLink := ADR(gMpLinkRecipeXml); MpRecipeRegPar_PreviewPar.PVName := ADR('RecipeMgr:ParametersPreview'); MpRecipeRegPar_PreviewPar.Category := ADR(PARAMETERS_CATEGORY); MpRecipeRegPar_PreviewCfg.MpLink := ADR(gMpLinkRecipeXml); MpRecipeRegPar_PreviewCfg.PVName := ADR('RecipeMgr:MachineSettingsPreview'); MpRecipeRegPar_PreviewCfg.Category := ADR(MACHINE_CONFIGURATION_CATEGORY); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIRecipe.UIConnect := ADR(MpFileManagerUIConnect); // Call function blocks - MpRecipe_0(); - MpRecipeUI_0(); - MpFileManagerUI_0(); + MpRecipeSys(); + MpRecipeUISys(); + MpFileManagerUIRecipe(); MpRecipeRegPar_PreviewPar(); MpRecipeRegPar_PreviewCfg(); @@ -202,18 +202,18 @@ END_PROGRAM PROGRAM _EXIT // Disable the function blocls to unlink the MpLinks - MpRecipe_0.Enable := FALSE; - MpRecipeUI_0.Enable := FALSE; + MpRecipeSys.Enable := FALSE; + MpRecipeUISys.Enable := FALSE; MpRecipeRegPar_PreviewPar.Enable := FALSE; MpRecipeRegPar_PreviewCfg.Enable := FALSE; - MpFileManagerUI_0.Enable := FALSE; + MpFileManagerUIRecipe.Enable := FALSE; // Call function blocks - MpRecipe_0(); - MpRecipeUI_0(); + MpRecipeSys(); + MpRecipeUISys(); MpRecipeRegPar_PreviewPar(); MpRecipeRegPar_PreviewCfg(); - MpFileManagerUI_0(); + MpFileManagerUIRecipe(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/RecipeMgr.var b/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/RecipeMgr.var index 08301ef9..5a078bc4 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/RecipeMgr.var +++ b/mappFramework/Logical/Infrastructure/VC4/Recipe/RecipeMgr/RecipeMgr.var @@ -1,12 +1,12 @@ (*Function Blocks*) VAR - MpRecipe_0 : MpRecipeXml; (*MpRecipe instance*) + MpRecipeSys : MpRecipeXml; (*MpRecipe instance*) MpRecipeRegPar_PreviewPar : MpRecipeRegPar; (*MpRecipeRegPar instance for ParametersPreview variable*) MpRecipeRegPar_PreviewCfg : MpRecipeRegPar; (*MpRecipeRegPar instance for MachineSettingsPreview*) - MpRecipeUI_0 : MpRecipeUI; (*MpRecupeUI instance*) - MpFileManagerUI_0 : MpFileManagerUI; (*MpFileManagerUI instance*) - DTGetTime_0 : DTGetTime; (*DTGetTime instance*) - DirCreate_0 : DirCreate; (*DirCreate instance*) + MpRecipeUISys : MpRecipeUI; (*MpRecupeUI instance*) + MpFileManagerUIRecipe : MpFileManagerUI; (*MpFileManagerUI instance*) + DTGetTimeRecipe : DTGetTime; (*DTGetTime instance*) + DirCreateRecipe : DirCreate; (*DirCreate instance*) END_VAR (*Constants*) VAR CONSTANT diff --git a/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/HMIActions.st index f421ab30..882a0125 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/HMIActions.st @@ -2,17 +2,17 @@ ACTION ReportFormat: // If the current format and the selected format do not match, disable the function block for a cycle and make the change IF HmiReport.Parameters.UseAdvancedFormat AND (HmiReport.Status.CurrentFormat = FORMAT_SIMPLE) THEN - MpReportCore_0.Enable := FALSE; - MpReportCore_0.MpLink := ADR(gMpLinkAdvancedReport); + MpReportCoreSys.Enable := FALSE; + MpReportCoreSys.MpLink := ADR(gMpLinkAdvancedReport); HmiReport.Parameters.Name := 'AdvancedReport'; HmiReport.Status.CurrentFormat := FORMAT_ADVANCED; ELSIF NOT HmiReport.Parameters.UseAdvancedFormat AND (HmiReport.Status.CurrentFormat = FORMAT_ADVANCED) THEN - MpReportCore_0.Enable := FALSE; - MpReportCore_0.MpLink := ADR(gMpLinkSimpleReport); + MpReportCoreSys.Enable := FALSE; + MpReportCoreSys.MpLink := ADR(gMpLinkSimpleReport); HmiReport.Parameters.Name := 'SimpleReport'; HmiReport.Status.CurrentFormat := FORMAT_SIMPLE; ELSE - MpReportCore_0.Enable := TRUE; + MpReportCoreSys.Enable := TRUE; END_IF END_ACTION @@ -20,12 +20,12 @@ END_ACTION ACTION ReportFileExplorer: // Connections between the HMI structure and the report function block - HmiReport.Status.Busy := MpReportCore_0.CommandBusy; - HmiReport.Status.Error := MpReportCore_0.Error; - MpReportCore_0.Language := ADR(HmiReport.Parameters.SelectedLanguage); + HmiReport.Status.Busy := MpReportCoreSys.CommandBusy; + HmiReport.Status.Error := MpReportCoreSys.Error; + MpReportCoreSys.Language := ADR(HmiReport.Parameters.SelectedLanguage); // Set or reset bits based on when a report can be created, deleted, and/or viewed. - HmiReport.Status.CreateAllowed := NOT(MpReportCore_0.CommandBusy); + HmiReport.Status.CreateAllowed := NOT(MpReportCoreSys.CommandBusy); HmiReport.Status.ViewAllowed := (MpFileManagerUIConnect.File.List.Items[HmiReport.Status.SelectedIndex].ItemType = mpFILE_ITEM_TYPE_USER1); HmiReport.Status.DeleteAllowed := (MpFileManagerUIConnect.File.List.Items[HmiReport.Status.SelectedIndex].ItemType = mpFILE_ITEM_TYPE_USER1); @@ -83,7 +83,7 @@ ACTION ReportFileExplorer: HmiReport.Status.FileOverMax := ItemCount > 50; // Set file device to selected - MpReportCore_0.DeviceName := ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[MpFileManagerUIConnect.DeviceList.SelectedIndex]); + MpReportCoreSys.DeviceName := ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[MpFileManagerUIConnect.DeviceList.SelectedIndex]); // VC4 IF HmiReport.Status.Error THEN @@ -105,13 +105,13 @@ ACTION ReportFileExplorer: // English 0: - MpReportCore_0.Language := ADR('en'); + MpReportCoreSys.Language := ADR('en'); // German 1: - MpReportCore_0.Language := ADR('de'); + MpReportCoreSys.Language := ADR('de'); // Chinese 2: - MpReportCore_0.Language := ADR('zh'); + MpReportCoreSys.Language := ADR('zh'); END_CASE diff --git a/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.st b/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.st index 02a6d70d..340b179c 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.st +++ b/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.st @@ -8,27 +8,27 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappReportFiles'), pName := ADR('/')); + DirCreateReport(enable := TRUE, pDevice := ADR('mappReportFiles'), pName := ADR('/')); // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreateReport.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreateReport(enable := FALSE); END_IF - // Parameterize the report function block with the simple report - MpReportCore_0.Language := ADR('en'); - MpReportCore_0.DeviceName := ADR('mappReportFiles'); - MpReportCore_0.MpLink := ADR(gMpLinkSimpleReport); - MpReportCore_0.Name := ADR(HmiReport.Parameters.Name); + // Initialize mapp function blocks + MpReportCoreSys.Language := ADR('en'); + MpReportCoreSys.DeviceName := ADR('mappReportFiles'); + MpReportCoreSys.MpLink := ADR(gMpLinkSimpleReport); + MpReportCoreSys.Name := ADR(HmiReport.Parameters.Name); HmiReport.Parameters.Name := 'SimpleReport'; - MpReportCore_0(); + HmiReport.Parameters.SortType := 'NameAsc'; + MpReportCoreSys(); - // Parameterize the file mangement function block - MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIReport); - MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); - MpFileManagerUI_0.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); - MpFileManagerUI_0.Enable := TRUE; - MpFileManagerUI_0(); + MpFileManagerUIReport.MpLink := ADR(gMpLinkFileManagerUIReport); + MpFileManagerUIReport.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIReport.UISetup.FileListSize := SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0]); + MpFileManagerUIReport.Enable := TRUE; + MpFileManagerUIReport(); // Fill an array to create example data for the example report TimeIndex := 0; @@ -50,7 +50,7 @@ END_PROGRAM PROGRAM _CYCLIC // Once a report has been generated, clear the generate command - IF MpReportCore_0.CommandDone THEN + IF MpReportCoreSys.CommandDone THEN MpFileManagerUIConnect.File.Refresh := TRUE; HmiReport.Commands.Generate := FALSE; END_IF @@ -60,21 +60,29 @@ PROGRAM _CYCLIC ReportFileExplorer; // Generate command - MpReportCore_0.Generate := HmiReport.Commands.Generate; - MpReportCore_0.Name := ADR(HmiReport.Parameters.Name); + MpReportCoreSys.Generate := HmiReport.Commands.Generate; + MpReportCoreSys.Name := ADR(HmiReport.Parameters.Name); + + // Assign address references + MpFileManagerUIReport.UIConnect := ADR(MpFileManagerUIConnect); + MpFileManagerUIReport.MpLink := ADR(gMpLinkFileManagerUIReport); + MpFileManagerUIReport.UIConnect := ADR(MpFileManagerUIConnect); // Call function blocks - MpReportCore_0(); - MpFileManagerUI_0(); + MpReportCoreSys(); + MpFileManagerUIReport(); END_PROGRAM PROGRAM _EXIT - MpReportCore_0.Enable := FALSE; - MpFileManagerUI_0.Enable := FALSE; - MpReportCore_0(); - MpFileManagerUI_0(); + // Disable the function blocks to unlink the MpLinks + MpReportCoreSys.Enable := FALSE; + MpFileManagerUIReport.Enable := FALSE; + + // Call function blocks + MpReportCoreSys(); + MpFileManagerUIReport(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.typ b/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.typ index 3e02a1bd..d5048dba 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.typ +++ b/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.typ @@ -16,6 +16,7 @@ TYPE PathOfReportToView : STRING[255]; (*The file path of the selected report*) SelectedLanguage : STRING[10] := 'en'; (*Selected language*) Language : USINT; (*Current VC4 language*) + SortType : STRING[30]; (*How to sort reports for HMI*) END_STRUCT; ReportStatusType : STRUCT (*Structure to hold the status information from the HMI*) ViewAllowed : BOOL; (*Bit to indicate it is allowable to view a report right now*) diff --git a/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.var b/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.var index 79e14293..73aa77a6 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.var +++ b/mappFramework/Logical/Infrastructure/VC4/Report/ReportMgr/ReportMgr.var @@ -1,8 +1,8 @@ (*Function Blocks*) VAR - MpReportCore_0 : MpReportCore; (*MpReport instance*) - MpFileManagerUI_0 : MpFileManagerUI; (*MpFileManagerUI instance*) - DirCreate_0 : DirCreate; (*DirCreate instance*) + MpReportCoreSys : MpReportCore; (*MpReport instance*) + MpFileManagerUIReport : MpFileManagerUI; (*MpFileManagerUI instance*) + DirCreateReport : DirCreate; (*DirCreate instance*) END_VAR (*Constants*) VAR CONSTANT diff --git a/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/IEC.prg b/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/IEC.prg index 770085b7..471a697d 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/IEC.prg +++ b/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/IEC.prg @@ -3,7 +3,7 @@ UsbMgr.st - UsbMgr.typ - UsbMgr.var + UsbMgr.typ + UsbMgr.var \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/UsbMgr.st b/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/UsbMgr.st index a5de7ad2..62c7e246 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/UsbMgr.st +++ b/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/UsbMgr.st @@ -18,20 +18,20 @@ PROGRAM _CYCLIC // Refresh USB data every X seconds when enabled Node := 1; USB.Status := ERR_OK; - IF USB.Cmd.AutoScan = TRUE THEN - TON_01(IN := 1, PT := USB.Par.RefreshInterval); + IF USB.Cmd.AutoScan THEN + RefreshTimer(IN := 1, PT := USB.Par.RefreshInterval); // Get new USB data - IF(TON_01.Q) THEN - TON_01(IN := 0); + IF(RefreshTimer.Q) THEN + RefreshTimer(IN := 0); USB.Status := ERR_FUB_BUSY; - brsmemset(ADR(Usb_data), 0, SIZEOF(Usb_data)); + brsmemset(ADR(UsbData), 0, SIZEOF(UsbData)); StateMachine := USB_CREATE_NODE_ID_LIST; END_IF ELSE - TON_01(IN := 0); + RefreshTimer(IN := 0); END_IF // Refresh USB data every X seconds when enabled - IF USB.Cmd.ErrorReset = TRUE THEN + IF USB.Cmd.ErrorReset THEN StateMachine := USB_ERROR; END_IF @@ -43,23 +43,23 @@ PROGRAM _CYCLIC // Get USB device list // ----------------------------------------------------------------------------------------------------------- USB_CREATE_NODE_ID_LIST: - UsbNodeListGet_0.enable := 1; - UsbNodeListGet_0.pBuffer := ADR(Node_id_buffer); - UsbNodeListGet_0.bufferSize := SIZEOF(Node_id_buffer); - UsbNodeListGet_0.filterInterfaceClass := asusb_CLASS_MASS_STORAGE; - UsbNodeListGet_0.filterInterfaceSubClass := 0; - UsbNodeListGet_0; + GetUsbNodeList.enable := 1; + GetUsbNodeList.pBuffer := ADR(NodeIdBuffer); + GetUsbNodeList.bufferSize := SIZEOF(NodeIdBuffer); + GetUsbNodeList.filterInterfaceClass := asusb_CLASS_MASS_STORAGE; + GetUsbNodeList.filterInterfaceSubClass := 0; + GetUsbNodeList; // -------------------------------------------------------------------------------------------------------------------- // Success - IF UsbNodeListGet_0.status = 0 THEN + IF GetUsbNodeList.status = 0 THEN StateMachine := USB_READ_DEVICE_DATA; Node := 1; // No USB devices found - ELSIF UsbNodeListGet_0.status = asusbERR_USB_NOTFOUND THEN + ELSIF GetUsbNodeList.status = asusbERR_USB_NOTFOUND THEN // Unlink old device if it is gone now otherwise wait for next round FOR i:=1 TO MAX_IDX_USB_DEV_LIST DO - IF(USB.Par.IsConnected[i] = TRUE) THEN + IF(USB.Par.IsConnected[i]) THEN Node := 1; StateMachine := USB_CHECK_LINKED; RETURN; @@ -67,10 +67,10 @@ PROGRAM _CYCLIC END_FOR; StateMachine := USB_WAIT; // Error - ELSIF UsbNodeListGet_0.status <> ERR_FUB_BUSY THEN - USB.Status := UsbNodeListGet_0.status; + ELSIF GetUsbNodeList.status <> ERR_FUB_BUSY THEN + USB.Status := GetUsbNodeList.status; USB.Err.State := StateMachine; - IF UsbNodeListGet_0.status = asusbERR_BUFSIZE THEN + IF GetUsbNodeList.status = asusbERR_BUFSIZE THEN USB.Err.Text := 'maximum number of devices reached'; ELSE USB.Err.Text := 'error getting device list'; @@ -81,17 +81,17 @@ PROGRAM _CYCLIC // Get device information // ----------------------------------------------------------------------------------------------------------- USB_READ_DEVICE_DATA: - UsbNodeGet_0.enable := 1; - UsbNodeGet_0.nodeId := Node_id_buffer[Node]; - UsbNodeGet_0.pBuffer := ADR(Usb_data[Node]); - UsbNodeGet_0.bufferSize := SIZEOF (Usb_data[Node]); - UsbNodeGet_0; + GetUsbNode.enable := 1; + GetUsbNode.nodeId := NodeIdBuffer[Node]; + GetUsbNode.pBuffer := ADR(UsbData[Node]); + GetUsbNode.bufferSize := SIZEOF (UsbData[Node]); + GetUsbNode; // -------------------------------------------------------------------------------------------------------------------- // Success - IF UsbNodeGet_0.status = 0 THEN + IF GetUsbNode.status = 0 THEN // Make sure we have enough space to store USB data, proceed with next StateMachine when all devices are detetced - IF (Node = UsbNodeListGet_0.listNodes) OR (Node = MAX_IDX_USB_DEV_LIST) THEN + IF (Node = GetUsbNodeList.listNodes) OR (Node = MAX_IDX_USB_DEV_LIST) THEN Node := 1; StateMachine := USB_CHECK_LINKED; // Get next USB device @@ -99,8 +99,8 @@ PROGRAM _CYCLIC Node := Node + 1; END_IF; // Error - ELSIF UsbNodeGet_0.status <> ERR_FUB_BUSY THEN - USB.Status := UsbNodeGet_0.status; + ELSIF GetUsbNode.status <> ERR_FUB_BUSY THEN + USB.Status := GetUsbNode.status; USB.Err.State := StateMachine; USB.Err.Text := 'error getting device data'; StateMachine := USB_ERROR; @@ -118,27 +118,27 @@ PROGRAM _CYCLIC // ----------------------------------------------------------------------------------------------------------- // Check if device is still active - Is_linked := FALSE; + IsLinked := FALSE; FOR i:=1 TO MAX_IDX_USB_DEV_LIST DO // Compare old and new data - IF(brsmemcmp(ADR(Usb_data_old[Node]), ADR(Usb_data[i]), SIZEOF(Usb_data[i])) = 0) AND - (USB.Par.IgnoreDongle = FALSE OR (USB.Par.IgnoreDongle = TRUE AND Usb_data[i].productId <> BRproductId AND Usb_data[i].vendorId <> BRvendorId)) THEN + IF(brsmemcmp(ADR(UsbDataOld[Node]), ADR(UsbData[i]), SIZEOF(UsbData[i])) = 0) AND + ((NOT USB.Par.IgnoreDongle) OR (USB.Par.IgnoreDongle AND UsbData[i].productId <> BrProductId AND UsbData[i].vendorId <> BrVendorId)) THEN // Clear data, mark as linked and EXIT loop - brsmemset(ADR(Usb_data[i]), 0, SIZEOF(Usb_data[i])); - Is_linked := TRUE; + brsmemset(ADR(UsbData[i]), 0, SIZEOF(UsbData[i])); + IsLinked := TRUE; EXIT; END_IF END_FOR; // ----------------------------------------------------------------------------------------------------------- // Find next linked device - IF(Is_linked OR Usb_data_old[Node].interfaceClass = 0) THEN + IF(IsLinked OR UsbDataOld[Node].interfaceClass = 0) THEN IF(Node < MAX_IDX_USB_DEV_LIST) THEN Node := Node + 1; - WHILE(Node < MAX_IDX_USB_DEV_LIST AND Usb_data_old[Node].interfaceClass = 0) DO + WHILE(Node < MAX_IDX_USB_DEV_LIST AND UsbDataOld[Node].interfaceClass = 0) DO Node := Node + 1; END_WHILE; - IF(Node = MAX_IDX_USB_DEV_LIST AND Usb_data_old[Node].interfaceClass = 0) THEN + IF(Node = MAX_IDX_USB_DEV_LIST AND UsbDataOld[Node].interfaceClass = 0) THEN Node := Node + 1; END_IF ELSE @@ -160,8 +160,8 @@ PROGRAM _CYCLIC // ----------------------------------------------------------------------------------------------------------- // Find next new device - IF(Usb_data[Node].interfaceClass <> 0) THEN - IF(USB.Par.IgnoreDongle = FALSE OR (Usb_data[Node].productId <> BRproductId AND Usb_data[Node].vendorId <> BRvendorId)) THEN + IF(UsbData[Node].interfaceClass <> 0) THEN + IF((NOT USB.Par.IgnoreDongle) OR (UsbData[Node].productId <> BrProductId AND UsbData[Node].vendorId <> BrVendorId)) THEN StateMachine := USB_LINK_DEVICE; RETURN; END_IF @@ -173,12 +173,12 @@ PROGRAM _CYCLIC USB_LINK_DEVICE: // Find empty slot FOR i:=1 TO MAX_IDX_USB_DEV_LIST DO - IF(Usb_data_old[i].interfaceClass = 0) THEN + IF(UsbDataOld[i].interfaceClass = 0) THEN EXIT; END_IF END_FOR; // No more slot available - IF(i = MAX_IDX_USB_DEV_LIST AND Usb_data_old[i].interfaceClass <> 0) THEN + IF(i = MAX_IDX_USB_DEV_LIST AND UsbDataOld[i].interfaceClass <> 0) THEN USB.Status := ERR_MAX_DEVICE; USB.Err.State := StateMachine; USB.Err.Text := 'maximum number of device reached'; @@ -186,29 +186,29 @@ PROGRAM _CYCLIC RETURN; END_IF // Create device string - brsstrcpy(ADR(Device_param), ADR('/DEVICE=')); - brsstrcat(ADR(Device_param), ADR(Usb_data[Node].ifName)); - brsstrcpy(ADR(Device_name), ADR('USB')); + brsstrcpy(ADR(DevicePara), ADR('/DEVICE=')); + brsstrcat(ADR(DevicePara), ADR(UsbData[Node].ifName)); + brsstrcpy(ADR(DeviceName), ADR('USB')); brsitoa(i, ADR(tmpSTR)); - brsstrcat(ADR(Device_name), ADR(tmpSTR)); + brsstrcat(ADR(DeviceName), ADR(tmpSTR)); // Link device - DevLink_0.enable := 1; - DevLink_0.pDevice := ADR(Device_name); - DevLink_0.pParam := ADR(Device_param); - DevLink_0; + DevLinkSys.enable := 1; + DevLinkSys.pDevice := ADR(DeviceName); + DevLinkSys.pParam := ADR(DevicePara); + DevLinkSys; // -------------------------------------------------------------------------------------------------------------------- // Success - IF DevLink_0.status = 0 THEN + IF DevLinkSys.status = 0 THEN // Store data for new device - brsmemcpy(ADR(Usb_data_old[i]), ADR(Usb_data[Node]), SIZEOF(Usb_data[Node])); + brsmemcpy(ADR(UsbDataOld[i]), ADR(UsbData[Node]), SIZEOF(UsbData[Node])); USB.Par.IsConnected[i] := TRUE; - Link_handle[i] := DevLink_0.handle; + LinkHandle[i] := DevLinkSys.handle; Node := Node + 1; StateMachine := USB_LINK_NEW; // Error - ELSIF DevLink_0.status <> ERR_FUB_BUSY THEN - USB.Status := DevLink_0.status; + ELSIF DevLinkSys.status <> ERR_FUB_BUSY THEN + USB.Status := DevLinkSys.status; USB.Err.State := StateMachine; USB.Err.Text := 'error linking device'; StateMachine := USB_ERROR; @@ -217,34 +217,34 @@ PROGRAM _CYCLIC // UnLink device // ----------------------------------------------------------------------------------------------------------- USB_UNLINK_DEVICE: - DevUnlink_0.enable := 1; - DevUnlink_0.handle := Link_handle[Node]; - DevUnlink_0; + DevUnlinkSys.enable := 1; + DevUnlinkSys.handle := LinkHandle[Node]; + DevUnlinkSys; // -------------------------------------------------------------------------------------------------------------------- // Success - IF DevUnlink_0.status = 0 THEN + IF DevUnlinkSys.status = 0 THEN // Clear data - brsmemset(ADR(Usb_data_old[Node]), 0, SIZEOF(Usb_data_old[Node])); + brsmemset(ADR(UsbDataOld[Node]), 0, SIZEOF(UsbDataOld[Node])); USB.Par.IsConnected[Node] := FALSE; - Link_handle[Node] := 0; + LinkHandle[Node] := 0; // Find next linked device - WHILE(Node < MAX_IDX_USB_DEV_LIST AND Usb_data_old[Node].interfaceClass = 0) DO + WHILE(Node < MAX_IDX_USB_DEV_LIST AND UsbDataOld[Node].interfaceClass = 0) DO Node := Node + 1; END_WHILE; - IF(Node = MAX_IDX_USB_DEV_LIST AND Usb_data_old[Node].interfaceClass = 0) THEN + IF(Node = MAX_IDX_USB_DEV_LIST AND UsbDataOld[Node].interfaceClass = 0) THEN Node := Node + 1; END_IF StateMachine := USB_CHECK_LINKED; // Error - ELSIF DevUnlink_0.status <> ERR_FUB_BUSY THEN + ELSIF DevUnlinkSys.status <> ERR_FUB_BUSY THEN // Clear data - brsmemset(ADR(Usb_data_old[Node]), 0, SIZEOF(Usb_data_old[Node])); + brsmemset(ADR(UsbDataOld[Node]), 0, SIZEOF(UsbDataOld[Node])); USB.Par.IsConnected[Node] := FALSE; - Link_handle[Node] := 0; + LinkHandle[Node] := 0; brsitoa(Node, ADR(tmpSTR)); - USB.Status := DevUnlink_0.status; + USB.Status := DevUnlinkSys.status; USB.Err.State := StateMachine; USB.Err.Text := 'error unlinking device no '; brsstrcat(ADR(USB.Err.Text), ADR(tmpSTR)); @@ -261,13 +261,13 @@ PROGRAM _CYCLIC // Unlink device IF(USB.Err.State = USB_LINK_DEVICE) THEN - DevUnlink_0.enable := 1; - DevUnlink_0.handle := DevLink_0.handle; - DevUnlink_0; + DevUnlinkSys.enable := 1; + DevUnlinkSys.handle := DevLinkSys.handle; + DevUnlinkSys; END_IF // Reset error - IF(USB.Cmd.ErrorReset AND DevUnlink_0.status <> ERR_FUB_BUSY) THEN + IF(USB.Cmd.ErrorReset AND DevUnlinkSys.status <> ERR_FUB_BUSY) THEN USB.Cmd.ErrorReset := FALSE; brsmemset(ADR(USB.Err), 0, SIZEOF(USB.Err)); StateMachine := USB_WAIT; @@ -279,10 +279,10 @@ END_PROGRAM PROGRAM _EXIT FOR i:=1 TO MAX_IDX_USB_DEV_LIST DO REPEAT - DevUnlink_0.enable := 1; - DevUnlink_0.handle := Link_handle[i]; - DevUnlink_0; - UNTIL DevUnlink_0.status <> ERR_FUB_BUSY + DevUnlinkSys.enable := 1; + DevUnlinkSys.handle := LinkHandle[i]; + DevUnlinkSys; + UNTIL DevUnlinkSys.status <> ERR_FUB_BUSY END_REPEAT; END_FOR; END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/UsbMgr.var b/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/UsbMgr.var index f5c54709..93ea33bd 100644 --- a/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/UsbMgr.var +++ b/mappFramework/Logical/Infrastructure/VC4/Usb/UsbMgr/UsbMgr.var @@ -1,30 +1,30 @@ (*Function Blocks*) VAR - TON_01 : TON; - UsbNodeListGet_0 : UsbNodeListGet; (*Type of FUB UsbNodeListGet*) - UsbNodeGet_0 : UsbNodeGet; (*Type of FUB UsbNodeGet*) - DevLink_0 : DevLink; (*Type of FUB DevLink*) - DevUnlink_0 : DevUnlink; (*Type of FUB DevUnlink*) + RefreshTimer : TON; + GetUsbNodeList : UsbNodeListGet; (*Type of FUB UsbNodeListGet*) + GetUsbNode : UsbNodeGet; (*Type of FUB UsbNodeGet*) + DevLinkSys : DevLink; (*Type of FUB DevLink*) + DevUnlinkSys : DevUnlink; (*Type of FUB DevUnlink*) END_VAR (*Constants*) VAR CONSTANT - BRvendorId : UINT := 1615; (*B&R vendor id*) - BRproductId : UINT := 1001; (*B&R dongle product id*) + BrVendorId : UINT := 1615; (*B&R vendor id*) + BrProductId : UINT := 1001; (*B&R dongle product id*) END_VAR (*Structure Types*) VAR USB : UsbMainType; StateMachine : UsbStateEnum; (*State machine*) - Usb_data : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF usbNode_typ; (*Data of all available USB devices*) - Usb_data_old : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF usbNode_typ; (*Old data of all available USB devices*) + UsbData : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF usbNode_typ; (*Data of all available USB devices*) + UsbDataOld : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF usbNode_typ; (*Old data of all available USB devices*) END_VAR (*Variables*) VAR - Device_param : STRING[80]; (*Connection path of USB device*) - Device_name : STRING[40]; (*Connection path of USB device*) - Link_handle : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF UDINT; (*Link handle for USB device*) - Node_id_buffer : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF UDINT; (*Different nodeIDs saved in array-elements*) - Is_linked : BOOL; (*Helper variable that indicates that a USB stick is linked*) + DevicePara : STRING[80]; (*Connection path of USB device*) + DeviceName : STRING[40]; (*Connection path of USB device*) + LinkHandle : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF UDINT; (*Link handle for USB device*) + NodeIdBuffer : ARRAY[1..MAX_IDX_USB_DEV_LIST] OF UDINT; (*Different nodeIDs saved in array-elements*) + IsLinked : BOOL; (*Helper variable that indicates that a USB stick is linked*) Node : USINT; (*Node number*) i : USINT; tmpSTR : STRING[10]; diff --git a/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.st b/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.st index 932c1d8a..31a272c4 100644 --- a/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.st +++ b/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.st @@ -8,11 +8,11 @@ PROGRAM _INIT // Create folder for this component on the user file device - DirCreate_0(enable := TRUE, pDevice := ADR('mappUserXFiles'), pName := ADR('/')); + DirCreateUser(enable := TRUE, pDevice := ADR('mappUserXFiles'), pName := ADR('/')); // Check if folder already exist and if so disabled the function block call - IF DirCreate_0.status = fiERR_DIR_ALREADY_EXIST THEN - DirCreate_0(enable := FALSE); + IF DirCreateUser.status = fiERR_DIR_ALREADY_EXIST THEN + DirCreateUser(enable := FALSE); END_IF // Initial visibility setup @@ -28,19 +28,19 @@ PROGRAM _INIT UserXMgrUIConnect.User.List.MaxSelection := USER_LIST_MAX_SELECTION; UserXMgrUIConnect.User.List.RangeStart := USER_LIST_RANGE_START; UserXMgrUIConnect.User.List.RangeEnd := USER_LIST_RANGE_END; - MpUserXManagerUI_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXManagerUI_0.Enable := TRUE; - MpUserXManagerUI_0.UIConnect := ADR(UserXMgrUIConnect); - MpUserXManagerUI_0(); + MpUserXManagerUISys.MpLink := ADR(gMpLinkUserXLogin); + MpUserXManagerUISys.Enable := TRUE; + MpUserXManagerUISys.UIConnect := ADR(UserXMgrUIConnect); + MpUserXManagerUISys(); - MpUserXLoginUI_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXLoginUI_0.Enable := TRUE; - MpUserXLoginUI_0.UIConnect := ADR(UserXLoginUIConnect); - MpUserXLoginUI_0(); + MpUserXLoginUISys.MpLink := ADR(gMpLinkUserXLogin); + MpUserXLoginUISys.Enable := TRUE; + MpUserXLoginUISys.UIConnect := ADR(UserXLoginUIConnect); + MpUserXLoginUISys(); - MpUserXLogin_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXLogin_0.Enable := TRUE; - MpUserXLogin_0(); + MpUserXLoginSys.MpLink := ADR(gMpLinkUserXLogin); + MpUserXLoginSys.Enable := TRUE; + MpUserXLoginSys(); END_PROGRAM @@ -48,30 +48,32 @@ END_PROGRAM PROGRAM _CYCLIC // Error reset - IF NOT MpUserXManagerUI_0.Error THEN - MpUserXManagerUI_0.ErrorReset := FALSE; + IF NOT MpUserXManagerUISys.Error THEN + MpUserXManagerUISys.ErrorReset := FALSE; END_IF - IF NOT MpUserXLoginUI_0.Error THEN - MpUserXLoginUI_0.ErrorReset := FALSE; + IF NOT MpUserXLoginUISys.Error THEN + MpUserXLoginUISys.ErrorReset := FALSE; END_IF - IF NOT MpUserXLogin_0.Error THEN - MpUserXLogin_0.ErrorReset := FALSE; + IF NOT MpUserXLoginSys.Error THEN + MpUserXLoginSys.ErrorReset := FALSE; END_IF // Cyclic action calls VC4_Cylic; // Assign MpLinks - MpUserXManagerUI_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXLoginUI_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXLogin_0.MpLink := ADR(gMpLinkUserXLogin); + MpUserXManagerUISys.MpLink := ADR(gMpLinkUserXLogin); + MpUserXManagerUISys.UIConnect := ADR(UserXMgrUIConnect); + MpUserXLoginUISys.MpLink := ADR(gMpLinkUserXLogin); + MpUserXLoginUISys.UIConnect := ADR(UserXLoginUIConnect); + MpUserXLoginSys.MpLink := ADR(gMpLinkUserXLogin); // Call function blocks - MpUserXManagerUI_0(); - MpUserXLoginUI_0(); - MpUserXLogin_0(); + MpUserXManagerUISys(); + MpUserXLoginUISys(); + MpUserXLoginSys(); END_PROGRAM @@ -79,14 +81,14 @@ END_PROGRAM PROGRAM _EXIT // Disable the function blocls to unlink the MpLinks - MpUserXManagerUI_0.Enable := FALSE; - MpUserXLoginUI_0.Enable := FALSE; - MpUserXLogin_0.Enable := FALSE; + MpUserXManagerUISys.Enable := FALSE; + MpUserXLoginUISys.Enable := FALSE; + MpUserXLoginSys.Enable := FALSE; // Call function blocks - MpUserXManagerUI_0(); - MpUserXLoginUI_0(); - MpUserXLogin_0(); + MpUserXManagerUISys(); + MpUserXLoginUISys(); + MpUserXLoginSys(); END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.typ b/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.typ index f81e5112..bcad4a51 100644 --- a/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.typ +++ b/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.typ @@ -1,7 +1,7 @@ (*Structure types*) TYPE - HMIUser_Typ : STRUCT + UserXHmiInterfaceType : STRUCT NewFileName : STRING[255]; Export : BOOL; ConfirmOverwrite : BOOL; @@ -18,7 +18,7 @@ END_TYPE (*Enumerations*) TYPE - enumCheckState : + HmiStateEnum : ( USERX_START := 0, USERX_WAIT_FOR_DIALOG := 1, diff --git a/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.var b/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.var index fc47032d..364c7cba 100644 --- a/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.var +++ b/mappFramework/Logical/Infrastructure/VC4/UserX/UserXMgr/UserXMgr.var @@ -1,9 +1,9 @@ (*Function Blocks*) VAR - MpUserXLogin_0 : MpUserXLogin; (*MpUserXLogin instance*) - MpUserXManagerUI_0 : MpUserXManagerUI := (UISetup:=(FileDevice:='mappUserXFiles')); (*MpUserXManagerUI instance*) - MpUserXLoginUI_0 : MpUserXLoginUI; (*MpUserXLoginUI instance*) - DirCreate_0 : DirCreate; (*DirCreate instance*) + MpUserXLoginSys : MpUserXLogin; (*MpUserXLogin instance*) + MpUserXManagerUISys : MpUserXManagerUI := (UISetup:=(FileDevice:='mappUserXFiles')); (*MpUserXManagerUI instance*) + MpUserXLoginUISys : MpUserXLoginUI; (*MpUserXLoginUI instance*) + DirCreateUser : DirCreate; (*DirCreate instance*) END_VAR (*Constants*) VAR CONSTANT @@ -16,11 +16,11 @@ END_VAR VAR UserXMgrUIConnect : MpUserXMgrUIConnectType; (*UserX manager connection to the HMI*) UserXLoginUIConnect : MpUserXLoginUIConnectType; (*UserL login connection to the HMI*) - HmiUserX : HMIUser_Typ; + HmiUserX : UserXHmiInterfaceType; (*HMI interface structure *) END_VAR (*Enumerations*) VAR - UserXCheckState : enumCheckState; + UserXCheckState : HmiStateEnum; END_VAR (*Variables*) VAR diff --git a/mappFramework/Logical/Libraries/LoggingLib/AsLoggerFile.c b/mappFramework/Logical/Libraries/LoggingLib/AsLoggerFile.c index cb73e103..7401444b 100644 --- a/mappFramework/Logical/Libraries/LoggingLib/AsLoggerFile.c +++ b/mappFramework/Logical/Libraries/LoggingLib/AsLoggerFile.c @@ -1,463 +1,462 @@ -/******************************************************************** - * COPYRIGHT -- Bernecker + Rainer - ******************************************************************** - * Library: AsLogger - * File: AsLoggerFile.c - * Author: buchananw - * Created: August 21, 2009 - *******************************************************************/ - -#include -#include -#include -#include -#include "AsLoggerInternal.h" - -#ifdef __DEBUG_LOGGING_LIBRARY__ -#define transit(x, _state) \ -{ \ - x = _state; \ - logDebug("AsLoggerFile", "changing to state " #_state, NULL); \ -} -#else - -#define transit(x, _state) \ -{ \ - x = _state; \ -} - -#endif - - -#define disableAllFunctionBlocks \ -inst->internal.FileOpen_0.enable = false; \ -inst->internal.FileCreate_0.enable = false; \ -inst->internal.FileWrite_0.enable = false; \ -inst->internal.FileCopy_0.enable = false; \ -inst->internal.FileClose_0.enable = false; \ -inst->internal.FileDelete_0.enable = false; - -#define incrementFileNumber(x) x = (x+1) % inst->maxFiles -#define decrementFileNumber(x) x = (x > 0) ? x - 1 : inst->maxFiles - 1 - -void AsLoggerFile(struct AsLoggerFile* inst) -{ - LogStore_typ* logStore; - UDINT arguments[LOGGING_MAX_ARGUMENTS]; - USINT i, numberOfLinesWritten; - - if (inst == NULL) - { - logError("AsLoggerFile", "AsLoggerFile called with NULL instance", NULL); - return; - } - logStore = getLogStore(); - - if (logStore == NULL) - { - transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); -#ifdef __DEBUG_LOGGING_LIBRARY__ - logDebug("AsLoggerFile", "logStore is NULL", NULL); - logDebug("AsLoggerFile", "changing to ERROR state", NULL); -#endif - inst->status = ASLOGGER_INTERNAL_ERROR; - return; - } - - switch(inst->internal.state) - { - case AS_FILE_LOGGER_STATE_W_ENABLE: - if (inst->enable != true) - { - inst->status = ERR_FUB_ENABLE_FALSE; - return; - } - - if (strcmp(inst->device, "") == true) - { - logError("AsLoggerFile", "device name empty", NULL); - inst->status = ASLOGGER_ILLEGAL_DEVICENAME; - return; - } - if (strcmp(inst->fileName, "") == true) - { - logError("AsLoggerFile", "file name empty", NULL); - inst->status = ASLOGGER_ILLEGAL_FILENAME; - return; - } - - inst->internal.fileNumber = (inst->maxFiles > 1) ? inst->maxFiles - 1 : 0; - if (inst->internal.fileNumber <= 1) - { - snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0])) - 1, "%s.%s", inst->fileName, inst->fileExtension); - inst->internal.FileDelete_0.pDevice = (UDINT)&inst->device; - inst->internal.FileDelete_0.pName = (UDINT)&inst->internal.tempFileName; - inst->internal.FileDelete_0.enable = true; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_DELETE_OLD); - } - else - { - snprintf2(inst->internal.newFileName, (sizeof(inst->internal.newFileName) / sizeof(inst->internal.newFileName[0])) - 1, "%s%d.%s", inst->fileName, inst->internal.fileNumber, inst->fileExtension); - snprintf2(inst->internal.oldFileName, (sizeof(inst->internal.oldFileName) / sizeof(inst->internal.oldFileName[0])) - 1, "%s%d.%s", inst->fileName, --inst->internal.fileNumber, inst->fileExtension); - - inst->internal.FileCopy_0.enable = true; - inst->internal.FileCopy_0.option = fiOVERWRITE; - inst->internal.FileCopy_0.pSrc = (UDINT)&inst->internal.oldFileName; - inst->internal.FileCopy_0.pSrcDev = (UDINT)&inst->device; - inst->internal.FileCopy_0.pDest = (UDINT)&inst->internal.newFileName; - inst->internal.FileCopy_0.pDestDev = (UDINT)&inst->device; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_MOVE_FILES); - } - break; - - case AS_FILE_LOGGER_STATE_MOVE_FILES: - switch (inst->internal.FileCopy_0.status) - { - case 0: - case fiERR_FILE_NOT_FOUND: - inst->internal.FileCopy_0.enable = false; - if (inst->internal.fileNumber == 0) - { - snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0])) - 1, "%s.%s", inst->fileName, inst->fileExtension); - inst->internal.FileDelete_0.pDevice = (UDINT)&inst->device; - inst->internal.FileDelete_0.pName = (UDINT)&inst->internal.tempFileName; - inst->internal.FileDelete_0.enable = true; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_DELETE_OLD); - } - else - { - strcpy((char*)&inst->internal.newFileName, (char*)&inst->internal.oldFileName); - - if (inst->internal.fileNumber <= 1) - { - snprintf2(inst->internal.oldFileName, (sizeof(inst->internal.oldFileName) / sizeof(inst->internal.oldFileName[0])) - 1, "%s.%s", inst->fileName, inst->fileExtension); - inst->internal.fileNumber--; - } - else - { - snprintf2(inst->internal.oldFileName, (sizeof(inst->internal.oldFileName) / sizeof(inst->internal.oldFileName[0])) - 1, "%s%d.%s", inst->fileName, --inst->internal.fileNumber, inst->fileExtension); - } - inst->internal.FileCopy_0.option = fiOVERWRITE; - inst->internal.FileCopy_0.pSrc = (UDINT)&inst->internal.oldFileName; - inst->internal.FileCopy_0.pSrcDev = (UDINT)&inst->device; - inst->internal.FileCopy_0.pDest = (UDINT)&inst->internal.newFileName; - inst->internal.FileCopy_0.pDestDev = (UDINT)&inst->device; - /* no state transition here. */ - } - break; - - case ERR_FUB_ENABLE_FALSE: - inst->internal.FileCopy_0.enable = true; - break; - - case ERR_FUB_BUSY: - break; - - default: - disableAllFunctionBlocks; -#ifdef __DEBUG_LOGGING_LIBRARY__ - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "old file name %s", inst->internal.oldFileName); - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "new file name %s", inst->internal.newFileName); - //logDebug("AsLoggerFile", logString); - arguments[0] = (UDINT)inst->internal.oldFileName; - arguments[1] = (UDINT)inst->internal.newFileName; - logDebug("AsLoggerFile", "old file name is %s, new file name is %s", (UDINT)&arguments); - -#endif - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file copy error %d", inst->internal.FileCopy_0.status); - arguments[0] = (UDINT)&inst->internal.FileCopy_0.status; - logDebug("AsLoggerFile", "file copy error %d", (UDINT)&arguments); - logDebug("AsLoggerFile", "changing to ERROR state", NULL); - - transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); - break; - } - break; - - case AS_FILE_LOGGER_STATE_DELETE_OLD: - - switch (inst->internal.FileDelete_0.status) - { - case 0: - case fiERR_FILE_NOT_FOUND: - inst->internal.FileDelete_0.enable = false; - inst->internal.FileCreate_0.pDevice = (UDINT)&inst->device; - snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0]))- 1, "%s.%s", inst->fileName, inst->fileExtension); - inst->internal.FileCreate_0.pFile = (UDINT)&inst->internal.tempFileName; - inst->internal.FileCreate_0.enable = true; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_CREATE_FILE); - break; - - case ERR_FUB_ENABLE_FALSE: - inst->internal.FileDelete_0.enable = true; - break; - - case ERR_FUB_BUSY: - break; - - default: - disableAllFunctionBlocks; - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file delete error %d", inst->internal.FileDelete_0.status); - arguments[0] = (UDINT)&inst->internal.FileDelete_0.status; - logDebug("AsLoggerFile", "file delete error %d", (UDINT)&arguments); - logDebug("AsLoggerFile", "changing to ERROR state", NULL); - transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); - break; - } - break; - - case AS_FILE_LOGGER_STATE_CREATE_FILE: - switch (inst->internal.FileCreate_0.status) - { - case 0: - inst->internal.FileCreate_0.enable = false; - inst->internal.FileClose_0.ident = inst->internal.FileCreate_0.ident; - inst->internal.FileClose_0.enable = true; - inst->internal.fileOffset = 0; - inst->internal.writeBufferUsed = 0; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_CLOSE); - break; - - case ERR_FUB_ENABLE_FALSE: - inst->internal.FileCreate_0.enable = true; - break; - - case ERR_FUB_BUSY: - break; - - default: - disableAllFunctionBlocks; - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file create error %d", inst->internal.FileCreate_0.status); - arguments[0] = (UDINT)&inst->internal.FileCreate_0.status; - logDebug("AsLoggerFile", "file create error %d", (UDINT)&arguments); - logDebug("AsLoggerFile", "changing to ERROR state", NULL); - logDebug("AsLoggerFile", inst->internal.tempFileName, NULL); - transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); - inst->status = inst->internal.FileCreate_0.status; - } - break; - - case AS_FILE_LOGGER_STATE_MARSHALL: - memset(&inst->internal.writeBuffer, 0, sizeof(inst->internal.writeBuffer)); - inst->internal.writeBufferUsed = 0; - - numberOfLinesWritten = 0; - for (i=inst->internal.outputIndex; i != logStore->inputIndex; incrementIndex(i)) - { - if (logStore->messages[i].level >= inst->level) - { - memset(inst->internal.tempString, 0, sizeof(inst->internal.tempString)); - marchallLogMessageForFile(&logStore->messages[i], inst->delimiter, inst->internal.tempString, sizeof(inst->internal.tempString) / sizeof(inst->internal.tempString[0])); - if ((strlen(inst->internal.tempString) + inst->internal.writeBufferUsed) >= sizeof(inst->internal.writeBuffer)) - { - snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0])) - 1, "%s.%s", inst->fileName, inst->fileExtension); - inst->internal.FileOpen_0.enable = true; - inst->internal.FileOpen_0.mode = fiREAD_WRITE; - inst->internal.FileOpen_0.pDevice = (UDINT)&inst->device; - inst->internal.FileOpen_0.pFile = (UDINT)&inst->internal.tempFileName; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_OPEN); - return; - } - addStringToBuffer((char*)&inst->internal.writeBuffer, &inst->internal.writeBufferUsed, inst->internal.tempString); - } - incrementIndex(inst->internal.outputIndex); - } - if (inst->internal.writeBufferUsed > 0) - { - snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0]))- 1, "%s.%s", inst->fileName, inst->fileExtension); - inst->internal.FileOpen_0.enable = true; - inst->internal.FileOpen_0.mode = fiREAD_WRITE; - inst->internal.FileOpen_0.pDevice = (UDINT)&inst->device; - inst->internal.FileOpen_0.pFile = (UDINT)&inst->internal.tempFileName; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_OPEN); - } - break; - - case AS_FILE_LOGGER_STATE_OPEN: - switch (inst->internal.FileOpen_0.status) - { - case 0: - inst->internal.FileOpen_0.enable = false; - - inst->internal.FileWrite_0.enable = true; - inst->internal.FileWrite_0.ident = inst->internal.FileOpen_0.ident; - inst->internal.FileWrite_0.len = inst->internal.writeBufferUsed; - inst->internal.FileWrite_0.offset = inst->internal.fileOffset; - inst->internal.FileWrite_0.pSrc = (UDINT)inst->internal.writeBuffer; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_WRITE); - break; - - case ERR_FUB_ENABLE_FALSE: - inst->internal.FileOpen_0.enable = true; - break; - - case ERR_FUB_BUSY: - break; - - default: - disableAllFunctionBlocks; - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file open error %d", inst->internal.FileOpen_0.status); - arguments[0] = (UDINT)&inst->internal.FileOpen_0.status; - logDebug("AsLoggerFile", "file open error %d", (UDINT)&arguments); - logDebug("AsLoggerFile", "changing to ERROR state", NULL); - logDebug("AsLoggerFile", inst->internal.tempFileName, NULL); - transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); - inst->status = inst->internal.FileOpen_0.status; - } - break; - - case AS_FILE_LOGGER_STATE_WRITE: - switch (inst->internal.FileWrite_0.status) - { - case 0: - inst->internal.FileWrite_0.enable = false; - inst->internal.fileOffset += inst->internal.writeBufferUsed; - inst->internal.FileClose_0.enable = true; - inst->internal.FileClose_0.ident = inst->internal.FileWrite_0.ident; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_CLOSE); - break; - - case ERR_FUB_ENABLE_FALSE: - inst->internal.FileWrite_0.enable = true; - break; - - case ERR_FUB_BUSY: - break; - - default: - disableAllFunctionBlocks; - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file write error %d", inst->internal.FileWrite_0.status); - arguments[0] = (UDINT)&inst->internal.FileWrite_0.status; - logDebug("AsLoggerFile", "file write error %d", (UDINT)&arguments); - logDebug("AsLoggerFile", "changing to ERROR state", NULL); - logDebug("AsLoggerFile", inst->internal.tempFileName, NULL); - transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); - inst->status = inst->internal.FileWrite_0.status; - } - break; - - case AS_FILE_LOGGER_STATE_CLOSE: - switch (inst->internal.FileClose_0.status) - { - case 0: - inst->internal.FileClose_0.enable = false; - if (inst->internal.fileOffset >= inst->maxFileSize) - { - inst->internal.fileNumber = (inst->maxFiles > 1) ? inst->maxFiles - 1 : 0; - if (inst->internal.fileNumber <= 1) - { - snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0])) - 1, "%s.%s", inst->fileName, inst->fileExtension); - inst->internal.FileDelete_0.pDevice = (UDINT)&inst->device; - inst->internal.FileDelete_0.pName = (UDINT)&inst->internal.tempFileName; - inst->internal.FileDelete_0.enable = true; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_DELETE_OLD); - } - else - { - snprintf2(inst->internal.newFileName, (sizeof(inst->internal.newFileName) / sizeof(inst->internal.newFileName[0])) - 1, "%s%d.%s", inst->fileName, inst->internal.fileNumber, inst->fileExtension); - snprintf2(inst->internal.oldFileName, (sizeof(inst->internal.oldFileName) / sizeof(inst->internal.oldFileName[0])) - 1, "%s%d.%s", inst->fileName, --inst->internal.fileNumber, inst->fileExtension); - - inst->internal.FileCopy_0.enable = true; - inst->internal.FileCopy_0.option = fiOVERWRITE; - inst->internal.FileCopy_0.pSrc = (UDINT)&inst->internal.oldFileName; - inst->internal.FileCopy_0.pSrcDev = (UDINT)&inst->device; - inst->internal.FileCopy_0.pDest = (UDINT)&inst->internal.newFileName; - inst->internal.FileCopy_0.pDestDev = (UDINT)&inst->device; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_MOVE_FILES); - } - } - else - { - inst->internal.writeBufferUsed = 0; - transit(inst->internal.state, AS_FILE_LOGGER_STATE_MARSHALL); - } - break; - - case ERR_FUB_ENABLE_FALSE: - inst->internal.FileClose_0.enable = true; - break; - - case ERR_FUB_BUSY: - break; - - default: - disableAllFunctionBlocks; - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file close error %d", inst->internal.FileClose_0.status); - arguments[0] = (UDINT)&inst->internal.FileClose_0.status; - logDebug("AsLoggerFile", "file close error %d", (UDINT)&arguments); - logDebug("AsLoggerFile", "changing to ERROR state", NULL); - logDebug("AsLoggerFile", inst->internal.tempFileName, NULL); - transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); - inst->status = inst->internal.FileClose_0.status; - } - break; - - case AS_FILE_LOGGER_STATE_ERROR: - if (inst->enable != true) - { - transit(inst->internal.state, 0); - } - break; - - default: - break; - } - - if (inst->internal.state != AS_FILE_LOGGER_STATE_ERROR) - inst->status = ERR_FUB_BUSY; - - FileOpen(&inst->internal.FileOpen_0); - FileWrite(&inst->internal.FileWrite_0); - FileClose(&inst->internal.FileClose_0); - FileCreate(&inst->internal.FileCreate_0); - FileCopy(&inst->internal.FileCopy_0); - FileDelete(&inst->internal.FileDelete_0); -} - -void marchallLogMessageForFile(LogMessage_typ* message, char* delimiter, char* tempString, UDINT sizeOfTempString) -{ - DTStructure timeStamp; - char level[6]; - - if ((message == NULL) || (delimiter == NULL) || (tempString == NULL)) - return; - - DT_TO_DTStructure(message->timeStamp, (UDINT)&timeStamp); - timeStamp.millisec = message->timeStampMilliseconds; - - memset(&level, 0, sizeof(level)); - switch(message->level) - { - case LOG_LEVEL_DEBUG: - strcpy(level, "DEBUG"); - break; - case LOG_LEVEL_INFO: - strcpy(level, "INFO"); - break; - case LOG_LEVEL_WARN: - strcpy(level, "WARN"); - break; - case LOG_LEVEL_ERROR: - strcpy(level, "ERROR"); - break; - case LOG_LEVEL_FATAL: - strcpy(level, "FATAL"); - break; - } - - snprintf2(tempString, sizeOfTempString - 1, "%04d/%02d/%02d %02d:%02d:%02d.%03d%s %s%s %s%s %s\r\n", timeStamp.year, timeStamp.month, timeStamp.day, \ - timeStamp.hour, timeStamp.minute, timeStamp.second, timeStamp.millisec, delimiter, \ - level, delimiter, \ - message->name, delimiter, \ - message->message); -} - -void addStringToBuffer(char* buffer, UINT* bufferPos, char* newMessage) -{ - if ((buffer == NULL) || (bufferPos == NULL) || (newMessage == NULL)) - return; - - memcpy(buffer + *bufferPos, newMessage, strlen(newMessage)); - *bufferPos = *bufferPos + strlen(newMessage); -} - +/******************************************************************** + * COPYRIGHT -- Bernecker + Rainer + ******************************************************************** + * Library: AsLogger + * File: AsLoggerFile.c + * Author: buchananw + * Created: August 21, 2009 + *******************************************************************/ + +#include +#include +#include +#include +#include "AsLoggerInternal.h" + +#ifdef __DEBUG_LOGGING_LIBRARY__ +#define transit(x, _state) \ +{ \ + x = _state; \ + logDebug("AsLoggerFile", "changing to state " #_state, NULL); \ +} +#else + +#define transit(x, _state) \ +{ \ + x = _state; \ +} + +#endif + + +#define disableAllFunctionBlocks \ +inst->internal.FileOpen_0.enable = false; \ +inst->internal.FileCreate_0.enable = false; \ +inst->internal.FileWrite_0.enable = false; \ +inst->internal.FileCopy_0.enable = false; \ +inst->internal.FileClose_0.enable = false; \ +inst->internal.FileDelete_0.enable = false; + +#define incrementFileNumber(x) x = (x+1) % inst->maxFiles +#define decrementFileNumber(x) x = (x > 0) ? x - 1 : inst->maxFiles - 1 + +void AsLoggerFile(struct AsLoggerFile* inst) +{ + LogStore_typ* logStore; + UDINT arguments[LOGGING_MAX_ARGUMENTS]; + USINT i; + + if (inst == NULL) + { + logError("AsLoggerFile", "AsLoggerFile called with NULL instance", (UDINT)NULL); + return; + } + logStore = getLogStore(); + + if (logStore == NULL) + { + transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); +#ifdef __DEBUG_LOGGING_LIBRARY__ + logDebug("AsLoggerFile", "logStore is NULL", NULL); + logDebug("AsLoggerFile", "changing to ERROR state", NULL); +#endif + inst->status = ASLOGGER_INTERNAL_ERROR; + return; + } + + switch(inst->internal.state) + { + case AS_FILE_LOGGER_STATE_W_ENABLE: + if (inst->enable != true) + { + inst->status = ERR_FUB_ENABLE_FALSE; + return; + } + + if (strcmp(inst->device, "") == true) + { + logError("AsLoggerFile", "device name empty", (UDINT)NULL); + inst->status = ASLOGGER_ILLEGAL_DEVICENAME; + return; + } + if (strcmp(inst->fileName, "") == true) + { + logError("AsLoggerFile", "file name empty", (UDINT)NULL); + inst->status = ASLOGGER_ILLEGAL_FILENAME; + return; + } + + inst->internal.fileNumber = (inst->maxFiles > 1) ? inst->maxFiles - 1 : 0; + if (inst->internal.fileNumber <= 1) + { + snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0])) - 1, "%s.%s", inst->fileName, inst->fileExtension); + inst->internal.FileDelete_0.pDevice = (UDINT)&inst->device; + inst->internal.FileDelete_0.pName = (UDINT)&inst->internal.tempFileName; + inst->internal.FileDelete_0.enable = true; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_DELETE_OLD); + } + else + { + snprintf2(inst->internal.newFileName, (sizeof(inst->internal.newFileName) / sizeof(inst->internal.newFileName[0])) - 1, "%s%d.%s", inst->fileName, inst->internal.fileNumber, inst->fileExtension); + snprintf2(inst->internal.oldFileName, (sizeof(inst->internal.oldFileName) / sizeof(inst->internal.oldFileName[0])) - 1, "%s%d.%s", inst->fileName, --inst->internal.fileNumber, inst->fileExtension); + + inst->internal.FileCopy_0.enable = true; + inst->internal.FileCopy_0.option = fiOVERWRITE; + inst->internal.FileCopy_0.pSrc = (UDINT)&inst->internal.oldFileName; + inst->internal.FileCopy_0.pSrcDev = (UDINT)&inst->device; + inst->internal.FileCopy_0.pDest = (UDINT)&inst->internal.newFileName; + inst->internal.FileCopy_0.pDestDev = (UDINT)&inst->device; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_MOVE_FILES); + } + break; + + case AS_FILE_LOGGER_STATE_MOVE_FILES: + switch (inst->internal.FileCopy_0.status) + { + case 0: + case fiERR_FILE_NOT_FOUND: + inst->internal.FileCopy_0.enable = false; + if (inst->internal.fileNumber == 0) + { + snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0])) - 1, "%s.%s", inst->fileName, inst->fileExtension); + inst->internal.FileDelete_0.pDevice = (UDINT)&inst->device; + inst->internal.FileDelete_0.pName = (UDINT)&inst->internal.tempFileName; + inst->internal.FileDelete_0.enable = true; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_DELETE_OLD); + } + else + { + strcpy((char*)&inst->internal.newFileName, (char*)&inst->internal.oldFileName); + + if (inst->internal.fileNumber <= 1) + { + snprintf2(inst->internal.oldFileName, (sizeof(inst->internal.oldFileName) / sizeof(inst->internal.oldFileName[0])) - 1, "%s.%s", inst->fileName, inst->fileExtension); + inst->internal.fileNumber--; + } + else + { + snprintf2(inst->internal.oldFileName, (sizeof(inst->internal.oldFileName) / sizeof(inst->internal.oldFileName[0])) - 1, "%s%d.%s", inst->fileName, --inst->internal.fileNumber, inst->fileExtension); + } + inst->internal.FileCopy_0.option = fiOVERWRITE; + inst->internal.FileCopy_0.pSrc = (UDINT)&inst->internal.oldFileName; + inst->internal.FileCopy_0.pSrcDev = (UDINT)&inst->device; + inst->internal.FileCopy_0.pDest = (UDINT)&inst->internal.newFileName; + inst->internal.FileCopy_0.pDestDev = (UDINT)&inst->device; + /* no state transition here. */ + } + break; + + case ERR_FUB_ENABLE_FALSE: + inst->internal.FileCopy_0.enable = true; + break; + + case ERR_FUB_BUSY: + break; + + default: + disableAllFunctionBlocks; +#ifdef __DEBUG_LOGGING_LIBRARY__ + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "old file name %s", inst->internal.oldFileName); + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "new file name %s", inst->internal.newFileName); + //logDebug("AsLoggerFile", logString); + arguments[0] = (UDINT)inst->internal.oldFileName; + arguments[1] = (UDINT)inst->internal.newFileName; + logDebug("AsLoggerFile", "old file name is %s, new file name is %s", (UDINT)&arguments); + +#endif + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file copy error %d", inst->internal.FileCopy_0.status); + arguments[0] = (UDINT)&inst->internal.FileCopy_0.status; + logDebug("AsLoggerFile", "file copy error %d", (UDINT)&arguments); + logDebug("AsLoggerFile", "changing to ERROR state", (UDINT)NULL); + + transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); + break; + } + break; + + case AS_FILE_LOGGER_STATE_DELETE_OLD: + + switch (inst->internal.FileDelete_0.status) + { + case 0: + case fiERR_FILE_NOT_FOUND: + inst->internal.FileDelete_0.enable = false; + inst->internal.FileCreate_0.pDevice = (UDINT)&inst->device; + snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0]))- 1, "%s.%s", inst->fileName, inst->fileExtension); + inst->internal.FileCreate_0.pFile = (UDINT)&inst->internal.tempFileName; + inst->internal.FileCreate_0.enable = true; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_CREATE_FILE); + break; + + case ERR_FUB_ENABLE_FALSE: + inst->internal.FileDelete_0.enable = true; + break; + + case ERR_FUB_BUSY: + break; + + default: + disableAllFunctionBlocks; + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file delete error %d", inst->internal.FileDelete_0.status); + arguments[0] = (UDINT)&inst->internal.FileDelete_0.status; + logDebug("AsLoggerFile", "file delete error %d", (UDINT)&arguments); + logDebug("AsLoggerFile", "changing to ERROR state", (UDINT)NULL); + transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); + break; + } + break; + + case AS_FILE_LOGGER_STATE_CREATE_FILE: + switch (inst->internal.FileCreate_0.status) + { + case 0: + inst->internal.FileCreate_0.enable = false; + inst->internal.FileClose_0.ident = inst->internal.FileCreate_0.ident; + inst->internal.FileClose_0.enable = true; + inst->internal.fileOffset = 0; + inst->internal.writeBufferUsed = 0; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_CLOSE); + break; + + case ERR_FUB_ENABLE_FALSE: + inst->internal.FileCreate_0.enable = true; + break; + + case ERR_FUB_BUSY: + break; + + default: + disableAllFunctionBlocks; + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file create error %d", inst->internal.FileCreate_0.status); + arguments[0] = (UDINT)&inst->internal.FileCreate_0.status; + logDebug("AsLoggerFile", "file create error %d", (UDINT)&arguments); + logDebug("AsLoggerFile", "changing to ERROR state", (UDINT)NULL); + logDebug("AsLoggerFile", inst->internal.tempFileName, (UDINT)NULL); + transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); + inst->status = inst->internal.FileCreate_0.status; + } + break; + + case AS_FILE_LOGGER_STATE_MARSHALL: + memset(&inst->internal.writeBuffer, 0, sizeof(inst->internal.writeBuffer)); + inst->internal.writeBufferUsed = 0; + + for (i=inst->internal.outputIndex; i != logStore->inputIndex; incrementIndex(i)) + { + if (logStore->messages[i].level >= inst->level) + { + memset(inst->internal.tempString, 0, sizeof(inst->internal.tempString)); + marchallLogMessageForFile(&logStore->messages[i], inst->delimiter, inst->internal.tempString, sizeof(inst->internal.tempString) / sizeof(inst->internal.tempString[0])); + if ((strlen(inst->internal.tempString) + inst->internal.writeBufferUsed) >= sizeof(inst->internal.writeBuffer)) + { + snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0])) - 1, "%s.%s", inst->fileName, inst->fileExtension); + inst->internal.FileOpen_0.enable = true; + inst->internal.FileOpen_0.mode = fiREAD_WRITE; + inst->internal.FileOpen_0.pDevice = (UDINT)&inst->device; + inst->internal.FileOpen_0.pFile = (UDINT)&inst->internal.tempFileName; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_OPEN); + return; + } + addStringToBuffer((char*)&inst->internal.writeBuffer, &inst->internal.writeBufferUsed, inst->internal.tempString); + } + incrementIndex(inst->internal.outputIndex); + } + if (inst->internal.writeBufferUsed > 0) + { + snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0]))- 1, "%s.%s", inst->fileName, inst->fileExtension); + inst->internal.FileOpen_0.enable = true; + inst->internal.FileOpen_0.mode = fiREAD_WRITE; + inst->internal.FileOpen_0.pDevice = (UDINT)&inst->device; + inst->internal.FileOpen_0.pFile = (UDINT)&inst->internal.tempFileName; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_OPEN); + } + break; + + case AS_FILE_LOGGER_STATE_OPEN: + switch (inst->internal.FileOpen_0.status) + { + case 0: + inst->internal.FileOpen_0.enable = false; + + inst->internal.FileWrite_0.enable = true; + inst->internal.FileWrite_0.ident = inst->internal.FileOpen_0.ident; + inst->internal.FileWrite_0.len = inst->internal.writeBufferUsed; + inst->internal.FileWrite_0.offset = inst->internal.fileOffset; + inst->internal.FileWrite_0.pSrc = (UDINT)inst->internal.writeBuffer; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_WRITE); + break; + + case ERR_FUB_ENABLE_FALSE: + inst->internal.FileOpen_0.enable = true; + break; + + case ERR_FUB_BUSY: + break; + + default: + disableAllFunctionBlocks; + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file open error %d", inst->internal.FileOpen_0.status); + arguments[0] = (UDINT)&inst->internal.FileOpen_0.status; + logDebug("AsLoggerFile", "file open error %d", (UDINT)&arguments); + logDebug("AsLoggerFile", "changing to ERROR state", (UDINT)NULL); + logDebug("AsLoggerFile", inst->internal.tempFileName, (UDINT)NULL); + transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); + inst->status = inst->internal.FileOpen_0.status; + } + break; + + case AS_FILE_LOGGER_STATE_WRITE: + switch (inst->internal.FileWrite_0.status) + { + case 0: + inst->internal.FileWrite_0.enable = false; + inst->internal.fileOffset += inst->internal.writeBufferUsed; + inst->internal.FileClose_0.enable = true; + inst->internal.FileClose_0.ident = inst->internal.FileWrite_0.ident; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_CLOSE); + break; + + case ERR_FUB_ENABLE_FALSE: + inst->internal.FileWrite_0.enable = true; + break; + + case ERR_FUB_BUSY: + break; + + default: + disableAllFunctionBlocks; + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file write error %d", inst->internal.FileWrite_0.status); + arguments[0] = (UDINT)&inst->internal.FileWrite_0.status; + logDebug("AsLoggerFile", "file write error %d", (UDINT)&arguments); + logDebug("AsLoggerFile", "changing to ERROR state", (UDINT)NULL); + logDebug("AsLoggerFile", inst->internal.tempFileName, (UDINT)NULL); + transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); + inst->status = inst->internal.FileWrite_0.status; + } + break; + + case AS_FILE_LOGGER_STATE_CLOSE: + switch (inst->internal.FileClose_0.status) + { + case 0: + inst->internal.FileClose_0.enable = false; + if (inst->internal.fileOffset >= inst->maxFileSize) + { + inst->internal.fileNumber = (inst->maxFiles > 1) ? inst->maxFiles - 1 : 0; + if (inst->internal.fileNumber <= 1) + { + snprintf2(inst->internal.tempFileName, (sizeof(inst->internal.tempFileName) / sizeof(inst->internal.tempFileName[0])) - 1, "%s.%s", inst->fileName, inst->fileExtension); + inst->internal.FileDelete_0.pDevice = (UDINT)&inst->device; + inst->internal.FileDelete_0.pName = (UDINT)&inst->internal.tempFileName; + inst->internal.FileDelete_0.enable = true; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_DELETE_OLD); + } + else + { + snprintf2(inst->internal.newFileName, (sizeof(inst->internal.newFileName) / sizeof(inst->internal.newFileName[0])) - 1, "%s%d.%s", inst->fileName, inst->internal.fileNumber, inst->fileExtension); + snprintf2(inst->internal.oldFileName, (sizeof(inst->internal.oldFileName) / sizeof(inst->internal.oldFileName[0])) - 1, "%s%d.%s", inst->fileName, --inst->internal.fileNumber, inst->fileExtension); + + inst->internal.FileCopy_0.enable = true; + inst->internal.FileCopy_0.option = fiOVERWRITE; + inst->internal.FileCopy_0.pSrc = (UDINT)&inst->internal.oldFileName; + inst->internal.FileCopy_0.pSrcDev = (UDINT)&inst->device; + inst->internal.FileCopy_0.pDest = (UDINT)&inst->internal.newFileName; + inst->internal.FileCopy_0.pDestDev = (UDINT)&inst->device; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_MOVE_FILES); + } + } + else + { + inst->internal.writeBufferUsed = 0; + transit(inst->internal.state, AS_FILE_LOGGER_STATE_MARSHALL); + } + break; + + case ERR_FUB_ENABLE_FALSE: + inst->internal.FileClose_0.enable = true; + break; + + case ERR_FUB_BUSY: + break; + + default: + disableAllFunctionBlocks; + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "file close error %d", inst->internal.FileClose_0.status); + arguments[0] = (UDINT)&inst->internal.FileClose_0.status; + logDebug("AsLoggerFile", "file close error %d", (UDINT)&arguments); + logDebug("AsLoggerFile", "changing to ERROR state", (UDINT)NULL); + logDebug("AsLoggerFile", inst->internal.tempFileName, (UDINT)NULL); + transit(inst->internal.state, AS_FILE_LOGGER_STATE_ERROR); + inst->status = inst->internal.FileClose_0.status; + } + break; + + case AS_FILE_LOGGER_STATE_ERROR: + if (inst->enable != true) + { + transit(inst->internal.state, 0); + } + break; + + default: + break; + } + + if (inst->internal.state != AS_FILE_LOGGER_STATE_ERROR) + inst->status = ERR_FUB_BUSY; + + FileOpen(&inst->internal.FileOpen_0); + FileWrite(&inst->internal.FileWrite_0); + FileClose(&inst->internal.FileClose_0); + FileCreate(&inst->internal.FileCreate_0); + FileCopy(&inst->internal.FileCopy_0); + FileDelete(&inst->internal.FileDelete_0); +} + +void marchallLogMessageForFile(LogMessage_typ* message, char* delimiter, char* tempString, UDINT sizeOfTempString) +{ + DTStructure timeStamp; + char level[6]; + + if ((message == NULL) || (delimiter == NULL) || (tempString == NULL)) + return; + + DT_TO_DTStructure(message->timeStamp, (UDINT)&timeStamp); + timeStamp.millisec = message->timeStampMilliseconds; + + memset(&level, 0, sizeof(level)); + switch(message->level) + { + case LOG_LEVEL_DEBUG: + strcpy(level, "DEBUG"); + break; + case LOG_LEVEL_INFO: + strcpy(level, "INFO"); + break; + case LOG_LEVEL_WARN: + strcpy(level, "WARN"); + break; + case LOG_LEVEL_ERROR: + strcpy(level, "ERROR"); + break; + case LOG_LEVEL_FATAL: + strcpy(level, "FATAL"); + break; + } + + snprintf2(tempString, sizeOfTempString - 1, "%04d/%02d/%02d %02d:%02d:%02d.%03d%s %s%s %s%s %s\r\n", timeStamp.year, timeStamp.month, timeStamp.day, \ + timeStamp.hour, timeStamp.minute, timeStamp.second, timeStamp.millisec, delimiter, \ + level, delimiter, \ + message->name, delimiter, \ + message->message); +} + +void addStringToBuffer(char* buffer, UINT* bufferPos, char* newMessage) +{ + if ((buffer == NULL) || (bufferPos == NULL) || (newMessage == NULL)) + return; + + memcpy(buffer + *bufferPos, newMessage, strlen(newMessage)); + *bufferPos = *bufferPos + strlen(newMessage); +} + diff --git a/mappFramework/Logical/Libraries/LoggingLib/AsLoggerLogBook.c b/mappFramework/Logical/Libraries/LoggingLib/AsLoggerLogBook.c index 7b2df74f..c5c5a5fa 100644 --- a/mappFramework/Logical/Libraries/LoggingLib/AsLoggerLogBook.c +++ b/mappFramework/Logical/Libraries/LoggingLib/AsLoggerLogBook.c @@ -1,138 +1,138 @@ -/******************************************************************** - * COPYRIGHT -- Bernecker + Rainer - ******************************************************************** - * Library: LoggingLib - * File: AsLoggerLogBook.c - * Author: buchananw - * Created: April 19, 2010 - *******************************************************************/ - -#include -#include -#include -#include -#include "AsLoggerInternal.h" - -#define LOGBOOK_ERROR_STATE 255 - -#ifdef __DEBUG_LOGGING_LIBRARY__ -#define transit(x, y) \ -{ \ - x->internal.state = y; \ - logDebug("AsLoggerFile", "changing to state " #y, NULL); \ -} -#else -#define transit(x, y) \ -{ \ - x->internal.state = y; \ -} -#endif - -#define incrementFileNumber(x) x = (x+1) % inst->internal.maxFiles -#define decrementFileNumber(x) x = (x > 0) ? x - 1 : inst->internal.maxFiles - 1 - -void AsLoggerLogBook(struct AsLoggerLogBook* inst) -{ - LogStore_typ* logStore; -#ifdef __DEBUG_LOGGING_LIBRARY__ - UDINT arguments[LOGGING_MAX_ARGUMENTS]; -#endif - - if (inst == NULL) - { - logError("AsLoggerLogBook", "AsLoggerLogBook called with NULL instance", NULL); - return; - } - logStore = getLogStore(); - - if (logStore == NULL) - { -#ifdef __DEBUG_LOGGING_LIBRARY__ - logDebug("AsLoggerLogBook", "logStore is NULL", NULL); -#endif - inst->status = ASLOGGER_INTERNAL_ERROR; - return; - } - - if (inst->internal.outputIndexRegistered != true) - { - addNewOutputIndex(&inst->internal.outputIndex); - inst->internal.outputIndexRegistered = true; - } - - while ((inst->internal.outputIndex != logStore->inputIndex) && (logStore->messages[inst->internal.outputIndex].level < inst->level)) - { - incrementIndex(inst->internal.outputIndex); - } - - if (inst->internal.outputIndex != logStore->inputIndex) - { - if (inst->internal.ArEventLogWrite_0.Ident == 0) - { - inst->internal.ArEventLogGetIdent_0.Execute = true; - strcpy(inst->internal.ArEventLogGetIdent_0.Name, "$arlogusr"); - ArEventLogGetIdent(&inst->internal.ArEventLogGetIdent_0); - if (inst->internal.ArEventLogGetIdent_0.StatusID == 0) - inst->internal.ArEventLogWrite_0.Ident = inst->internal.ArEventLogGetIdent_0.Ident; - } - else - { - USINT _logBuffer[MAX_MESSAGE_LENGTH + MAX_NAME_LENGTH + 10]; - char _tempString[MAX_MESSAGE_LENGTH + MAX_NAME_LENGTH + 2]; - - memset(&_logBuffer, 0, sizeof(_logBuffer)); - inst->internal.ArEventLogWrite_0.Execute = true; - inst->internal.ArEventLogWrite_0.EventID = ArEventLogMakeEventID(convertToArLogLevel(&(logStore->messages[inst->internal.outputIndex])), 0, 0); - inst->internal.ArEventLogWrite_0.OriginRecordID = 0; - snprintf2(_tempString, (sizeof(_tempString) / sizeof(_tempString)) - 1, "%s: %s", logStore->messages[inst->internal.outputIndex].name, logStore->messages[inst->internal.outputIndex].message); - ArEventLogAddDataInit((UDINT)&_logBuffer, sizeof(_logBuffer), arEVENTLOG_ADDFORMAT_CODED); - ArEventLogAddDataString((UDINT)&_logBuffer, sizeof(_logBuffer), (UDINT)&_tempString); - inst->internal.ArEventLogWrite_0.AddData = (UDINT)&_logBuffer; - inst->internal.ArEventLogWrite_0.AddDataFormat = arEVENTLOG_ADDFORMAT_CODED; - inst->internal.ArEventLogWrite_0.AddDataSize = sizeof(_logBuffer); - - ArEventLogWrite(&inst->internal.ArEventLogWrite_0); - if (inst->internal.ArEventLogWrite_0.StatusID == 0) - { - incrementIndex(inst->internal.outputIndex); - - } -#ifdef __DEBUG_LOGGING_LIBRARY__ - else - { - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "AR log write error %d", inst->internal.AsArLogWrite_0.status); - arguments[0] = (UDINT)&inst->internal.ArEventLogWrite_0.StatusID; - logDebug("AsLoggerLogBook", "AR log write error %d", (UDINT)&arguments); - inst->status = inst->internal.ArEventLogWrite_0.StatusID; - } -#endif - inst->internal.ArEventLogWrite_0.Execute = false; - ArEventLogWrite(&inst->internal.ArEventLogWrite_0); - - } - - } -} - -USINT convertToArLogLevel(LogMessage_typ* message) -{ - if (message == NULL) - return arEVENTLOG_SEVERITY_INFO; - - switch(message->level) - { - case LOG_LEVEL_DEBUG: - case LOG_LEVEL_INFO: - return arEVENTLOG_SEVERITY_INFO; - break; - case LOG_LEVEL_WARN: - return arEVENTLOG_SEVERITY_WARNING; - break; - case LOG_LEVEL_ERROR: - case LOG_LEVEL_FATAL: - return arEVENTLOG_SEVERITY_ERROR; - return arEVENTLOG_SEVERITY_ERROR; - break; - } - return arEVENTLOG_SEVERITY_ERROR; -} +/******************************************************************** + * COPYRIGHT -- Bernecker + Rainer + ******************************************************************** + * Library: LoggingLib + * File: AsLoggerLogBook.c + * Author: buchananw + * Created: April 19, 2010 + *******************************************************************/ + +#include +#include +#include +#include +#include "AsLoggerInternal.h" + +#define LOGBOOK_ERROR_STATE 255 + +#ifdef __DEBUG_LOGGING_LIBRARY__ +#define transit(x, y) \ +{ \ + x->internal.state = y; \ + logDebug("AsLoggerFile", "changing to state " #y, NULL); \ +} +#else +#define transit(x, y) \ +{ \ + x->internal.state = y; \ +} +#endif + +#define incrementFileNumber(x) x = (x+1) % inst->internal.maxFiles +#define decrementFileNumber(x) x = (x > 0) ? x - 1 : inst->internal.maxFiles - 1 + +void AsLoggerLogBook(struct AsLoggerLogBook* inst) +{ + LogStore_typ* logStore; +#ifdef __DEBUG_LOGGING_LIBRARY__ + UDINT arguments[LOGGING_MAX_ARGUMENTS]; +#endif + + if (inst == NULL) + { + logError("AsLoggerLogBook", "AsLoggerLogBook called with NULL instance", (UDINT)NULL); + return; + } + logStore = getLogStore(); + + if (logStore == NULL) + { +#ifdef __DEBUG_LOGGING_LIBRARY__ + logDebug("AsLoggerLogBook", "logStore is NULL", NULL); +#endif + inst->status = ASLOGGER_INTERNAL_ERROR; + return; + } + + if (inst->internal.outputIndexRegistered != true) + { + addNewOutputIndex(&inst->internal.outputIndex); + inst->internal.outputIndexRegistered = true; + } + + while ((inst->internal.outputIndex != logStore->inputIndex) && (logStore->messages[inst->internal.outputIndex].level < inst->level)) + { + incrementIndex(inst->internal.outputIndex); + } + + if (inst->internal.outputIndex != logStore->inputIndex) + { + if (inst->internal.ArEventLogWrite_0.Ident == 0) + { + inst->internal.ArEventLogGetIdent_0.Execute = true; + strcpy(inst->internal.ArEventLogGetIdent_0.Name, "$arlogusr"); + ArEventLogGetIdent(&inst->internal.ArEventLogGetIdent_0); + if (inst->internal.ArEventLogGetIdent_0.StatusID == 0) + inst->internal.ArEventLogWrite_0.Ident = inst->internal.ArEventLogGetIdent_0.Ident; + } + else + { + USINT _logBuffer[MAX_MESSAGE_LENGTH + MAX_NAME_LENGTH + 10]; + char _tempString[MAX_MESSAGE_LENGTH + MAX_NAME_LENGTH + 2]; + + memset(&_logBuffer, 0, sizeof(_logBuffer)); + inst->internal.ArEventLogWrite_0.Execute = true; + inst->internal.ArEventLogWrite_0.EventID = ArEventLogMakeEventID(convertToArLogLevel(&(logStore->messages[inst->internal.outputIndex])), 0, 0); + inst->internal.ArEventLogWrite_0.OriginRecordID = 0; + snprintf2(_tempString, (sizeof(_tempString) / sizeof(_tempString)) - 1, "%s: %s", logStore->messages[inst->internal.outputIndex].name, logStore->messages[inst->internal.outputIndex].message); + ArEventLogAddDataInit((UDINT)&_logBuffer, sizeof(_logBuffer), arEVENTLOG_ADDFORMAT_CODED); + ArEventLogAddDataString((UDINT)&_logBuffer, sizeof(_logBuffer), (UDINT)&_tempString); + inst->internal.ArEventLogWrite_0.AddData = (UDINT)&_logBuffer; + inst->internal.ArEventLogWrite_0.AddDataFormat = arEVENTLOG_ADDFORMAT_CODED; + inst->internal.ArEventLogWrite_0.AddDataSize = sizeof(_logBuffer); + + ArEventLogWrite(&inst->internal.ArEventLogWrite_0); + if (inst->internal.ArEventLogWrite_0.StatusID == 0) + { + incrementIndex(inst->internal.outputIndex); + + } +#ifdef __DEBUG_LOGGING_LIBRARY__ + else + { + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "AR log write error %d", inst->internal.AsArLogWrite_0.status); + arguments[0] = (UDINT)&inst->internal.ArEventLogWrite_0.StatusID; + logDebug("AsLoggerLogBook", "AR log write error %d", (UDINT)&arguments); + inst->status = inst->internal.ArEventLogWrite_0.StatusID; + } +#endif + inst->internal.ArEventLogWrite_0.Execute = false; + ArEventLogWrite(&inst->internal.ArEventLogWrite_0); + + } + + } +} + +USINT convertToArLogLevel(LogMessage_typ* message) +{ + if (message == NULL) + return arEVENTLOG_SEVERITY_INFO; + + switch(message->level) + { + case LOG_LEVEL_DEBUG: + case LOG_LEVEL_INFO: + return arEVENTLOG_SEVERITY_INFO; + break; + case LOG_LEVEL_WARN: + return arEVENTLOG_SEVERITY_WARNING; + break; + case LOG_LEVEL_ERROR: + case LOG_LEVEL_FATAL: + return arEVENTLOG_SEVERITY_ERROR; + return arEVENTLOG_SEVERITY_ERROR; + break; + } + return arEVENTLOG_SEVERITY_ERROR; +} diff --git a/mappFramework/Logical/Libraries/LoggingLib/AsLoggerServer.c b/mappFramework/Logical/Libraries/LoggingLib/AsLoggerServer.c index d0600e98..9a43fd69 100644 --- a/mappFramework/Logical/Libraries/LoggingLib/AsLoggerServer.c +++ b/mappFramework/Logical/Libraries/LoggingLib/AsLoggerServer.c @@ -1,373 +1,373 @@ -/******************************************************************** - * COPYRIGHT -- Bernecker + Rainer - ******************************************************************** - * Library: AsLogger - * File: AsLoggerServer.c - * Author: buchananw - * Created: August 20, 2009 - *******************************************************************/ - -#include -#include -#include -#include -#include "AsLoggerInternal.h" - -#define XMLHEADER " " -#define XMLFOOTER "\r\n" -#define MAX_LOGS_AT_ONCE 5 - -void AsLoggerServer(struct AsLoggerServer* inst) -{ - LoggerClient_typ* newClient; - LogStore_typ* logStore; - BOOL clientStillActive = false; - USINT i; - UDINT arguments[LOGGING_MAX_ARGUMENTS]; - - inst->status = LOG_BUSY; - - if (inst == NULL) - { - logError("AsLoggerServer", "AsLoggerServer called with NULL instance", NULL); - return; - } - switch (inst->internal.state) - { - case 0 : - inst->internal.open.enable = true; - inst->internal.open.pIfAddr = NULL; - inst->internal.open.port = inst->port; - TcpOpen(&inst->internal.open); - inst->status = inst->internal.open.status; - if (inst->internal.open.status == 0) - { - addNewOutputIndex(&inst->internal.outputIndex); - inst->internal.ident = inst->internal.open.ident; - inst->internal.open.enable = false; - inst->internal.state = 10; - } - break; - - case 10: /* accept clients in this state */ - if (inst->disconnect == true) - { - inst->internal.state = 20; - return; - } - - if (inst->internal.clientsActive > 0) - { - logStore = getLogStore(); - if (logStore == NULL) - { - inst->status = 1; - return; - } - handleAllActiveClients(&inst->internal.clients[0], sizeof(inst->internal.clients)/sizeof(inst->internal.clients[0]), &inst->internal.clientsActive, (char*)&inst->internal.sendBuffer, &inst->internal.sendBufferUsed, &logStore->messages[0], inst->level, &inst->internal.outputIndex); - } - - newClient = getNextFreeClient(inst); - - if (newClient == NULL) - { - return; - } - - inst->internal.server.enable = true; - inst->internal.server.ident = inst->internal.ident; - inst->internal.server.pIpAddr = (UDINT)newClient->ipAddress; - - TcpServer(&inst->internal.server); - inst->status = inst->internal.server.status; - if (inst->internal.server.status == 0) - { - for (i=0;i<(sizeof(inst->internal.clients)/sizeof(inst->internal.clients[0]));i++) - { - if ((&inst->internal.clients[i] != newClient) && (strcmp(inst->internal.clients[i].ipAddress, newClient->ipAddress) == 0) && (inst->internal.clients[i].status != CLIENT_NOT_USED)) - { - freeClient(newClient); - return; - } - } - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "accepting new client %s", newClient->ipAddress); - arguments[0] = (UDINT)newClient->ipAddress; - logDebug("AsLoggerServer", "accepting new client %s", (UDINT)&arguments); - /* accept client */ - if (acceptClient(newClient, inst->internal.server.identclnt, inst->internal.server.portclnt) == true) - inst->internal.clientsActive++; - } - break; - - case 20: /* disconnect all clients */ - inst->status = LOG_BUSY; - clientStillActive = false; - for (i=0;i<(sizeof(inst->internal.clients)/sizeof(inst->internal.clients[0]));i++) - { - if (inst->internal.clients[i].status != CLIENT_NOT_USED) - { - clientStillActive |= dropClient(&inst->internal.clients[i]); - } - } - if (clientStillActive == false) - { - inst->internal.state = 22; - } - break; - - case 22: - inst->internal.close.enable = true; - inst->internal.close.how = 0; - inst->internal.close.ident = inst->internal.ident; - TcpClose(&inst->internal.close); - inst->status = inst->internal.close.status; - if (inst->internal.close.status != 65535) - { - inst->status = 0; - inst->internal.state = 0; - } - break; - - default : - /* do nothing */ - break; - } -} - -LoggerClient_typ* getNextFreeClient(struct AsLoggerServer* inst) -{ - USINT i; - for (i = 0; i < (sizeof(inst->internal.clients)/sizeof(inst->internal.clients[0])); i++) { - if (inst->internal.clients[i].status == CLIENT_NOT_USED) - { - return &inst->internal.clients[i]; - } - } - return NULL; -} - -BOOL acceptClient(LoggerClient_typ* newClient, UDINT clientIdent, UINT clientPort) -{ - if (newClient == NULL) - return false; - - newClient->status = CLIENT_PENDING; - newClient->ident = clientIdent; - newClient->port = clientPort; - memset(&newClient->send, 0, sizeof(newClient->send)); - memset(&newClient->close, 0, sizeof(newClient->close)); - return true; -} - -void sendToClient(LoggerClient_typ* client, char* buffer, UINT bufferLength) -{ - UDINT arguments[LOGGING_MAX_ARGUMENTS]; - - if ((client == NULL) || (client->status == CLIENT_NOT_USED)) - return; - - client->send.enable = true; - client->send.ident = client->ident; - client->send.datalen = bufferLength; - client->send.pData = (UDINT)buffer; - client->send.flags = 0; - - client->status = CLIENT_SENDING; - - TcpSend(&client->send); - - if (client->send.status == 0) - { - client->wouldBlockCount = 0; - client->status = CLIENT_DONE; - } - else if ((client->send.status == tcpERR_WOULDBLOCK) && (client->wouldBlockCount < MAX_WOULD_BLOCK)) - { - client->wouldBlockCount++; - } - else if (client->send.status == tcpERR_SENTLEN) - { - /* try to send data again */ - } - else if (client->send.status != 65535) - { - client->wouldBlockCount = 0; - /* an error occured so drop the client */ - //snprintf2(errorString, (sizeof(errorString) / sizeof(errorString[0])) - 1, "error received while sending %d", client->send.status); - arguments[0] = (UDINT)&client->send.status; - logDebug("AsLoggerServer", "error received while sending %d", (UDINT)&arguments); - client->status = CLIENT_DROPPING; - } -} - -BOOL dropClient(LoggerClient_typ* client) -{ - UDINT arguments[LOGGING_MAX_ARGUMENTS]; - if (client == NULL) - return false; - - client->close.enable = true; - client->close.ident = client->ident; - client->close.how = 0; - client->status = CLIENT_DROPPING; - - TcpClose(&client->close); - if (client->close.status == 0) - { - //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "dropped client %s", client->ipAddress); - arguments[0] = (UDINT)&client->ipAddress; - logDebug("AsLoggerServer", "dropped client %s", (UDINT)&arguments); - return freeClient(client); - } - return false; -} - -BOOL freeClient(LoggerClient_typ* client) -{ - if (client == NULL) - return false; - - memset(client, 0, sizeof(*client)); - client->status = CLIENT_NOT_USED; - return true; -} - -BOOL handleClient(LoggerClient_typ* client, char* sendBuffer, UINT sendBufferUsed) -{ - if (client == NULL) - return false; - - switch (client->status) - { - case CLIENT_NOT_USED: - break; - - case CLIENT_PENDING: - case CLIENT_SENDING: - sendToClient(client, sendBuffer, sendBufferUsed); - break; - - case CLIENT_DROPPING: - return dropClient(client); - break; - - case CLIENT_DONE: - /* wait until all clients are finished sending before transitting out of the done state */ - /* handled by handleAllActiveClients */ - break; - } - return false; -} - -void handleAllActiveClients(LoggerClient_typ* clients, USINT numberOfClients, USINT* activeClients, char* sendBuffer, UINT* sendBufferUsed, LogMessage_typ* messages, LogLevel level, UINT* outputIndex) -{ - USINT i; - BOOL allClientsFinishedSending = true; - - for (i=0;iinputIndex) && (numberOfLogs < MAX_LOGS_AT_ONCE); incrementIndex(i)) - { - if (messages[i].level >= level) - { - marchallLogMessageAsXML(buffer, bufferPos, &messages[i]); - } - incrementIndex(*outputIndex); - numberOfLogs++; - } - writeFooter(buffer, bufferPos); - -} - -BOOL writeHeader(char* buffer, UINT* bufferPos) -{ - if ((buffer == NULL) || (bufferPos == NULL)) - return 0; - - strcpy((char*)buffer, XMLHEADER); - *bufferPos = *bufferPos + strlen(XMLHEADER); - return true; -} - -BOOL writeFooter(char* buffer, UINT* bufferPos) -{ - strcpy((char*)(buffer + *bufferPos), XMLFOOTER); - *bufferPos = *bufferPos + strlen(XMLFOOTER); - return true; -} - -BOOL marchallLogMessageAsXML(char* buffer, UINT* bufferPos, LogMessage_typ* message) -{ - STRING level[6]; - STRING tempString[900]; - - if ((buffer == NULL) || (bufferPos == NULL) || (message == NULL)) - return false; - - switch(message->level) - { - case LOG_LEVEL_DEBUG: - strcpy(level, "DEBUG"); - break; - case LOG_LEVEL_INFO: - strcpy(level, "INFO"); - break; - case LOG_LEVEL_WARN: - strcpy(level, "WARN"); - break; - case LOG_LEVEL_ERROR: - strcpy(level, "ERROR"); - break; - case LOG_LEVEL_FATAL: - strcpy(level, "FATAL"); - break; - } - - snprintf2(tempString, (sizeof(tempString) / sizeof(tempString[0])) - 1, \ - "%s%u%u%s", \ - level, message->timeStamp, message->timeStampMilliseconds, message->name, message->message); - memcpy(buffer + *bufferPos, tempString, strlen(tempString)); - *bufferPos = *bufferPos + strlen(tempString); - return true; -} - +/******************************************************************** + * COPYRIGHT -- Bernecker + Rainer + ******************************************************************** + * Library: AsLogger + * File: AsLoggerServer.c + * Author: buchananw + * Created: August 20, 2009 + *******************************************************************/ + +#include +#include +#include +#include +#include "AsLoggerInternal.h" + +#define XMLHEADER " " +#define XMLFOOTER "\r\n" +#define MAX_LOGS_AT_ONCE 5 + +void AsLoggerServer(struct AsLoggerServer* inst) +{ + LoggerClient_typ* newClient; + LogStore_typ* logStore; + BOOL clientStillActive = false; + USINT i; + UDINT arguments[LOGGING_MAX_ARGUMENTS]; + + inst->status = LOG_BUSY; + + if (inst == NULL) + { + logError("AsLoggerServer", "AsLoggerServer called with NULL instance", (UDINT)NULL); + return; + } + switch (inst->internal.state) + { + case 0 : + inst->internal.open.enable = true; + inst->internal.open.pIfAddr = (UDINT)NULL; + inst->internal.open.port = inst->port; + TcpOpen(&inst->internal.open); + inst->status = inst->internal.open.status; + if (inst->internal.open.status == 0) + { + addNewOutputIndex(&inst->internal.outputIndex); + inst->internal.ident = inst->internal.open.ident; + inst->internal.open.enable = false; + inst->internal.state = 10; + } + break; + + case 10: /* accept clients in this state */ + if (inst->disconnect == true) + { + inst->internal.state = 20; + return; + } + + if (inst->internal.clientsActive > 0) + { + logStore = getLogStore(); + if (logStore == NULL) + { + inst->status = 1; + return; + } + handleAllActiveClients(&inst->internal.clients[0], sizeof(inst->internal.clients)/sizeof(inst->internal.clients[0]), &inst->internal.clientsActive, (char*)&inst->internal.sendBuffer, &inst->internal.sendBufferUsed, &logStore->messages[0], inst->level, &inst->internal.outputIndex); + } + + newClient = getNextFreeClient(inst); + + if (newClient == NULL) + { + return; + } + + inst->internal.server.enable = true; + inst->internal.server.ident = inst->internal.ident; + inst->internal.server.pIpAddr = (UDINT)newClient->ipAddress; + + TcpServer(&inst->internal.server); + inst->status = inst->internal.server.status; + if (inst->internal.server.status == 0) + { + for (i=0;i<(sizeof(inst->internal.clients)/sizeof(inst->internal.clients[0]));i++) + { + if ((&inst->internal.clients[i] != newClient) && (strcmp(inst->internal.clients[i].ipAddress, newClient->ipAddress) == 0) && (inst->internal.clients[i].status != CLIENT_NOT_USED)) + { + freeClient(newClient); + return; + } + } + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "accepting new client %s", newClient->ipAddress); + arguments[0] = (UDINT)newClient->ipAddress; + logDebug("AsLoggerServer", "accepting new client %s", (UDINT)&arguments); + /* accept client */ + if (acceptClient(newClient, inst->internal.server.identclnt, inst->internal.server.portclnt) == true) + inst->internal.clientsActive++; + } + break; + + case 20: /* disconnect all clients */ + inst->status = LOG_BUSY; + clientStillActive = false; + for (i=0;i<(sizeof(inst->internal.clients)/sizeof(inst->internal.clients[0]));i++) + { + if (inst->internal.clients[i].status != CLIENT_NOT_USED) + { + clientStillActive |= dropClient(&inst->internal.clients[i]); + } + } + if (clientStillActive == false) + { + inst->internal.state = 22; + } + break; + + case 22: + inst->internal.close.enable = true; + inst->internal.close.how = 0; + inst->internal.close.ident = inst->internal.ident; + TcpClose(&inst->internal.close); + inst->status = inst->internal.close.status; + if (inst->internal.close.status != 65535) + { + inst->status = 0; + inst->internal.state = 0; + } + break; + + default : + /* do nothing */ + break; + } +} + +LoggerClient_typ* getNextFreeClient(struct AsLoggerServer* inst) +{ + USINT i; + for (i = 0; i < (sizeof(inst->internal.clients)/sizeof(inst->internal.clients[0])); i++) { + if (inst->internal.clients[i].status == CLIENT_NOT_USED) + { + return &inst->internal.clients[i]; + } + } + return NULL; +} + +BOOL acceptClient(LoggerClient_typ* newClient, UDINT clientIdent, UINT clientPort) +{ + if (newClient == NULL) + return false; + + newClient->status = CLIENT_PENDING; + newClient->ident = clientIdent; + newClient->port = clientPort; + memset(&newClient->send, 0, sizeof(newClient->send)); + memset(&newClient->close, 0, sizeof(newClient->close)); + return true; +} + +void sendToClient(LoggerClient_typ* client, char* buffer, UINT bufferLength) +{ + UDINT arguments[LOGGING_MAX_ARGUMENTS]; + + if ((client == NULL) || (client->status == CLIENT_NOT_USED)) + return; + + client->send.enable = true; + client->send.ident = client->ident; + client->send.datalen = bufferLength; + client->send.pData = (UDINT)buffer; + client->send.flags = 0; + + client->status = CLIENT_SENDING; + + TcpSend(&client->send); + + if (client->send.status == 0) + { + client->wouldBlockCount = 0; + client->status = CLIENT_DONE; + } + else if ((client->send.status == tcpERR_WOULDBLOCK) && (client->wouldBlockCount < MAX_WOULD_BLOCK)) + { + client->wouldBlockCount++; + } + else if (client->send.status == tcpERR_SENTLEN) + { + /* try to send data again */ + } + else if (client->send.status != 65535) + { + client->wouldBlockCount = 0; + /* an error occured so drop the client */ + //snprintf2(errorString, (sizeof(errorString) / sizeof(errorString[0])) - 1, "error received while sending %d", client->send.status); + arguments[0] = (UDINT)&client->send.status; + logDebug("AsLoggerServer", "error received while sending %d", (UDINT)&arguments); + client->status = CLIENT_DROPPING; + } +} + +BOOL dropClient(LoggerClient_typ* client) +{ + UDINT arguments[LOGGING_MAX_ARGUMENTS]; + if (client == NULL) + return false; + + client->close.enable = true; + client->close.ident = client->ident; + client->close.how = 0; + client->status = CLIENT_DROPPING; + + TcpClose(&client->close); + if (client->close.status == 0) + { + //snprintf2(logString, (sizeof(logString) / sizeof(logString[0])) - 1, "dropped client %s", client->ipAddress); + arguments[0] = (UDINT)&client->ipAddress; + logDebug("AsLoggerServer", "dropped client %s", (UDINT)&arguments); + return freeClient(client); + } + return false; +} + +BOOL freeClient(LoggerClient_typ* client) +{ + if (client == NULL) + return false; + + memset(client, 0, sizeof(*client)); + client->status = CLIENT_NOT_USED; + return true; +} + +BOOL handleClient(LoggerClient_typ* client, char* sendBuffer, UINT sendBufferUsed) +{ + if (client == NULL) + return false; + + switch (client->status) + { + case CLIENT_NOT_USED: + break; + + case CLIENT_PENDING: + case CLIENT_SENDING: + sendToClient(client, sendBuffer, sendBufferUsed); + break; + + case CLIENT_DROPPING: + return dropClient(client); + break; + + case CLIENT_DONE: + /* wait until all clients are finished sending before transitting out of the done state */ + /* handled by handleAllActiveClients */ + break; + } + return false; +} + +void handleAllActiveClients(LoggerClient_typ* clients, USINT numberOfClients, USINT* activeClients, char* sendBuffer, UINT* sendBufferUsed, LogMessage_typ* messages, LogLevel level, UINT* outputIndex) +{ + USINT i; + BOOL allClientsFinishedSending = true; + + for (i=0;iinputIndex) && (numberOfLogs < MAX_LOGS_AT_ONCE); incrementIndex(i)) + { + if (messages[i].level >= level) + { + marchallLogMessageAsXML(buffer, bufferPos, &messages[i]); + } + incrementIndex(*outputIndex); + numberOfLogs++; + } + writeFooter(buffer, bufferPos); + +} + +BOOL writeHeader(char* buffer, UINT* bufferPos) +{ + if ((buffer == NULL) || (bufferPos == NULL)) + return 0; + + strcpy((char*)buffer, XMLHEADER); + *bufferPos = *bufferPos + strlen(XMLHEADER); + return true; +} + +BOOL writeFooter(char* buffer, UINT* bufferPos) +{ + strcpy((char*)(buffer + *bufferPos), XMLFOOTER); + *bufferPos = *bufferPos + strlen(XMLFOOTER); + return true; +} + +BOOL marchallLogMessageAsXML(char* buffer, UINT* bufferPos, LogMessage_typ* message) +{ + STRING level[6]; + STRING tempString[900]; + + if ((buffer == NULL) || (bufferPos == NULL) || (message == NULL)) + return false; + + switch(message->level) + { + case LOG_LEVEL_DEBUG: + strcpy(level, "DEBUG"); + break; + case LOG_LEVEL_INFO: + strcpy(level, "INFO"); + break; + case LOG_LEVEL_WARN: + strcpy(level, "WARN"); + break; + case LOG_LEVEL_ERROR: + strcpy(level, "ERROR"); + break; + case LOG_LEVEL_FATAL: + strcpy(level, "FATAL"); + break; + } + + snprintf2(tempString, (sizeof(tempString) / sizeof(tempString[0])) - 1, \ + "%s%u%u%s", \ + level, message->timeStamp, message->timeStampMilliseconds, message->name, message->message); + memcpy(buffer + *bufferPos, tempString, strlen(tempString)); + *bufferPos = *bufferPos + strlen(tempString); + return true; +} + diff --git a/mappFramework/Logical/Libraries/LoggingLib/LoggingLib.c b/mappFramework/Logical/Libraries/LoggingLib/LoggingLib.c index d6a1c73e..88060dab 100644 --- a/mappFramework/Logical/Libraries/LoggingLib/LoggingLib.c +++ b/mappFramework/Logical/Libraries/LoggingLib/LoggingLib.c @@ -1,290 +1,290 @@ -/******************************************************************** - * COPYRIGHT -- Bernecker + Rainer - ******************************************************************** - * Library: AsLogger - * File: AsLogger.c - * Author: buchananw - * Created: August 19, 2009 - *******************************************************************/ - -#include -#include -#include "AsLoggerInternal.h" -#include -#include - -static LogStore_typ LogStore; - -LogStatus logDebug(char* name, char* message, UDINT pMsgData) -{ - return logMessage(name, LOG_LEVEL_DEBUG, message, pMsgData); -} - -LogStatus logInfo(char* name, char* message, UDINT pMsgData) -{ - return logMessage(name, LOG_LEVEL_INFO, message, pMsgData); -} - -LogStatus logWarn(char* name, char* message, UDINT pMsgData) -{ - return logMessage(name, LOG_LEVEL_WARN, message, pMsgData); -} - -LogStatus logError(char* name, char* message, UDINT pMsgData) -{ - return logMessage(name, LOG_LEVEL_ERROR, message, pMsgData); -} - -LogStatus logFatal(char* name, char* message, UDINT pMsgData) -{ - return logMessage(name, LOG_LEVEL_FATAL, message, pMsgData); -} - -UDINT AsLoggerGetLastMessage(void) -{ - UINT lastMessage = LogStore.inputIndex; - - return (UDINT)&LogStore.messages[decrementIndex(lastMessage)].message; -} - -BOOL logLevelIsValid(LogLevel level) -{ - return ((level >= LOG_LEVEL_DEBUG) && (level <= LOG_LEVEL_FATAL)); -} - -BOOL isSameAsLastMessage(char* name, const char* message) -{ - unsigned int i = 0; - for (i=0; i +#include +#include "AsLoggerInternal.h" +#include +#include + +static LogStore_typ LogStore; + +LogStatus logDebug(char* name, char* message, UDINT pMsgData) +{ + return logMessage(name, LOG_LEVEL_DEBUG, message, pMsgData); +} + +LogStatus logInfo(char* name, char* message, UDINT pMsgData) +{ + return logMessage(name, LOG_LEVEL_INFO, message, pMsgData); +} + +LogStatus logWarn(char* name, char* message, UDINT pMsgData) +{ + return logMessage(name, LOG_LEVEL_WARN, message, pMsgData); +} + +LogStatus logError(char* name, char* message, UDINT pMsgData) +{ + return logMessage(name, LOG_LEVEL_ERROR, message, pMsgData); +} + +LogStatus logFatal(char* name, char* message, UDINT pMsgData) +{ + return logMessage(name, LOG_LEVEL_FATAL, message, pMsgData); +} + +UDINT AsLoggerGetLastMessage(void) +{ + UINT lastMessage = LogStore.inputIndex; + + return (UDINT)&LogStore.messages[decrementIndex(lastMessage)].message; +} + +BOOL logLevelIsValid(LogLevel level) +{ + return ((level >= LOG_LEVEL_DEBUG) && (level <= LOG_LEVEL_FATAL)); +} + +BOOL isSameAsLastMessage(char* name, const char* message) +{ + unsigned int i = 0; + for (i=0; i STATE_POWER_ON)) THEN + ELSIF ((NOT AxisControl.Command.Power) AND (State > STATE_POWER_ON)) THEN ResetAllAxisCommands; AxisControl.Status.Busy := TRUE; - MpAxisBasic_0.Power := FALSE; + MpAxisBasicAppAxis.Power := FALSE; State := STATE_POWER_ON; END_IF @@ -31,7 +33,7 @@ ACTION AxisStateMachine: AxisControl.Status.Status := 'Initializing'; ChangeConfiguration; ChangeParameter; - IF (((ConfigurationState = CONFIG_STATE_READY) OR (ConfigurationState = CONFIG_STATE_NOT_USED)) AND ((ParameterState = PAR_STATE_READY) OR (ParameterState = PAR_STATE_NOT_USED)) AND (MpAxisBasic_0.Active = TRUE)) THEN + IF (((ConfigurationState = CONFIG_STATE_READY) OR (ConfigurationState = CONFIG_STATE_NOT_USED)) AND ((ParameterState = PAR_STATE_READY) OR (ParameterState = PAR_STATE_NOT_USED)) AND (MpAxisBasicAppAxis.Active)) THEN AxisControl.Status.IsReady := TRUE; State := STATE_POWER_ON; @@ -40,12 +42,12 @@ ACTION AxisStateMachine: // Power on the axis STATE_POWER_ON: AxisControl.Status.Status := 'Waiting for power on'; - IF (MpAxisBasic_0.Info.ReadyToPowerOn = TRUE) THEN - MpAxisBasic_0.Power := AxisControl.Command.Power; + IF (MpAxisBasicAppAxis.Info.ReadyToPowerOn) THEN + MpAxisBasicAppAxis.Power := AxisControl.Command.Power; END_IF - AxisControl.Status.Busy := MpAxisBasic_0.Power; - IF (MpAxisBasic_0.PowerOn = TRUE) THEN + AxisControl.Status.Busy := MpAxisBasicAppAxis.Power; + IF (MpAxisBasicAppAxis.PowerOn) THEN AxisControl.Status.Busy := FALSE; State := STATE_HOME; ELSE @@ -55,12 +57,12 @@ ACTION AxisStateMachine: // Restore home position STATE_HOME: AxisControl.Status.Status := 'Waiting for home'; - IF ((MpAxisBasic_0.IsHomed = FALSE) AND (MpAxisBasic_0.PowerOn = TRUE)) THEN + IF ((NOT MpAxisBasicAppAxis.IsHomed) AND (MpAxisBasicAppAxis.PowerOn)) THEN AxisControl.Status.ReferenceRequired := TRUE; State := STATE_REFERENCE; END_IF - IF (MpAxisBasic_0.IsHomed = TRUE) THEN + IF (MpAxisBasicAppAxis.IsHomed) THEN AxisControl.Status.ReferenceRequired := FALSE; AxisControl.Status.Busy := FALSE; AxisControl.Command.Reference := FALSE; @@ -70,9 +72,9 @@ ACTION AxisStateMachine: // Create reference position STATE_REFERENCE: - IF (AxisControl.Command.Reference = TRUE) THEN + IF (AxisControl.Command.Reference) THEN AxisControl.Command.Reference := FALSE; - MpAxisBasic_0.Home := TRUE; + MpAxisBasicAppAxis.Home := TRUE; AxisControl.Status.Busy := TRUE; MpAxisParameters.Homing.Mode := mcHOMING_DIRECT; MpAxisParameters.Homing.Position := MachineSettings.ReferencePosition; @@ -89,10 +91,10 @@ ACTION AxisStateMachine: AxisControl.Status.Status := 'Moving to home position'; MpAxisParameters.Position := AxisControl.Parameters.HomePosition; MpAxisParameters.Direction := mcDIR_SHORTEST_WAY; - MpAxisBasic_0.MoveAbsolute := TRUE; + MpAxisBasicAppAxis.MoveAbsolute := TRUE; IF (InPositionEdgePos.Q = TRUE) THEN AxisControl.Status.Busy := FALSE; - MpAxisBasic_0.MoveAbsolute := FALSE; + MpAxisBasicAppAxis.MoveAbsolute := FALSE; MpAxisParameters.Direction := mcDIR_POSITIVE; State := STATE_READY; END_IF @@ -101,11 +103,11 @@ ACTION AxisStateMachine: STATE_READY: AxisControl.Status.Status := 'Ready'; AxisControl.Status.Busy := FALSE; - IF (ReferenceEdgePos.Q = TRUE) THEN + IF (ReferenceEdgePos.Q) THEN State := STATE_REFERENCE; - ELSIF ((MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'Warning') = FALSE) AND (AutomaticCommand(AxisControl.Command) = TRUE)) THEN + ELSIF ((NOT MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'Warning')) AND (AutomaticCommand(AxisControl.Command))) THEN State := STATE_AUTOMATIC_OPERATION; - ELSIF (ManualCommand(AxisControl.Command) = TRUE) THEN + ELSIF (ManualCommand(AxisControl.Command)) THEN State := STATE_MANUAL_OPERATION; END_IF @@ -130,10 +132,10 @@ ACTION AxisStateMachine: AxisControl.Status.Status := 'Stopping'; // Stop the axis if it is powered on - MpAxisBasic_0.Stop := MpAxisBasic_0.PowerOn; + MpAxisBasicAppAxis.Stop := MpAxisBasicAppAxis.PowerOn; MpAxisParameters.Stop.Deceleration := AxisControl.Parameters.StopDeceleration; - IF ((MpAxisBasic_0.PowerOn = FALSE) OR (MpAxisBasic_0.Stopped = TRUE)) THEN - MpAxisBasic_0.Stop := FALSE; + IF ((NOT MpAxisBasicAppAxis.PowerOn) OR (MpAxisBasicAppAxis.Stopped)) THEN + MpAxisBasicAppAxis.Stop := FALSE; State := STATE_STOPPED; END_IF @@ -144,13 +146,13 @@ ACTION AxisStateMachine: // In this State the module will bring the axis to a rapid stop STATE_ABORTING: MpAxisParameters.Stop.Deceleration := 0; - MpAxisBasic_0.Stop := MpAxisBasic_0.PowerOn; - IF ((MpAxisBasic_0.PowerOn = FALSE) OR (MpAxisBasic_0.Stopped = TRUE)) THEN - MpAxisBasic_0.Stop := FALSE; - IF (MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'SafetyError') = TRUE) THEN + MpAxisBasicAppAxis.Stop := MpAxisBasicAppAxis.PowerOn; + IF ((NOT MpAxisBasicAppAxis.PowerOn) OR (MpAxisBasicAppAxis.Stopped)) THEN + MpAxisBasicAppAxis.Stop := FALSE; + IF (MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'SafetyError')) THEN // Safety errors also power off the axis - MpAxisBasic_0.Power := FALSE; - IF (MpAxisBasic_0.PowerOn = FALSE) THEN + MpAxisBasicAppAxis.Power := FALSE; + IF (NOT MpAxisBasicAppAxis.PowerOn) THEN State := STATE_ABORTED; END_IF ELSE @@ -167,22 +169,22 @@ ACTION AxisStateMachine: // In this State the module attempts to clear any outstanding errors. No hazardous motion should occur in this State. STATE_RESETTING: ResetAllAxisCommands; - IF (AxisControl.Command.Reset = TRUE) OR ((MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'Error') = FALSE) AND EDGEPOS(MpAlarmXCore_0.PendingAlarms = 0)) THEN + IF (AxisControl.Command.Reset) OR ((NOT MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'Error')) AND ZeroPendingAlarmsEdgePos.Q) THEN AxisControl.Status.Busy := TRUE; AxisControl.Command.Reset := FALSE; - MpAxisBasic_0.ErrorReset := TRUE; + MpAxisBasicAppAxis.ErrorReset := TRUE; AxisReset; ManualState := MANUAL_STATE_IDLE; AutomaticState := AUTOMATIC_STATE_IDLE; ELSE - MpAxisBasic_0.ErrorReset := FALSE; + MpAxisBasicAppAxis.ErrorReset := FALSE; END_IF - IF ((MpAxisBasic_0.Error = FALSE) AND (MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'Error') = FALSE)) THEN + IF ((NOT MpAxisBasicAppAxis.Error) AND (NOT MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'Error'))) THEN AxisControl.Status.Busy := FALSE; - IF (MpAxisBasic_0.PowerOn = FALSE) THEN + IF (NOT MpAxisBasicAppAxis.PowerOn) THEN State := STATE_POWER_ON; - ELSIF (MpAxisBasic_0.IsHomed = TRUE) THEN + ELSIF (MpAxisBasicAppAxis.IsHomed) THEN State := STATE_READY; ELSE State := STATE_HOME; @@ -192,16 +194,16 @@ ACTION AxisStateMachine: END_CASE // Cyclic function block calls - MpAxisBasic_0.Parameters := ADR(MpAxisParameters); - MpAxisBasic_0(); + MpAxisBasicAppAxis.Parameters := ADR(MpAxisParameters); + MpAxisBasicAppAxis(); // Status assignments - AxisControl.Status.ErrorActive := MpAxisBasic_0.Error OR (MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'Error')); - AxisControl.Status.IsHomed := MpAxisBasic_0.IsHomed; - AxisControl.Status.IsPowered := MpAxisBasic_0.PowerOn; - AxisControl.Status.PLCopenState := MpAxisBasic_0.Info.PLCopenState; - AxisControl.Status.Position := MpAxisBasic_0.Position; - AxisControl.Status.Velocity := MpAxisBasic_0.Velocity; + AxisControl.Status.ErrorActive := MpAxisBasicAppAxis.Error OR (MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'Error')); + AxisControl.Status.IsHomed := MpAxisBasicAppAxis.IsHomed; + AxisControl.Status.IsPowered := MpAxisBasicAppAxis.PowerOn; + AxisControl.Status.PLCopenState := MpAxisBasicAppAxis.Info.PLCopenState; + AxisControl.Status.Position := MpAxisBasicAppAxis.Position; + AxisControl.Status.Velocity := MpAxisBasicAppAxis.Velocity; AxisControl.Status.ModeManual := (State <> STATE_AUTOMATIC_OPERATION); //VC4 related code AxisControl.Status.StatusPointControl[0].0 := NOT AxisControl.Status.StatusPointControl[1].0; @@ -212,13 +214,13 @@ END_ACTION ACTION ResetAllAxisCommands: - MpAxisBasic_0.MoveAbsolute := FALSE; - MpAxisBasic_0.MoveAdditive := FALSE; - MpAxisBasic_0.MoveVelocity := FALSE; - MpAxisBasic_0.ReleaseBrake := FALSE; - MpAxisBasic_0.ErrorReset := FALSE; - MpAxisBasic_0.JogPositive := FALSE; - MpAxisBasic_0.JogNegative := FALSE; - MpAxisBasic_0.Home := FALSE; + MpAxisBasicAppAxis.MoveAbsolute := FALSE; + MpAxisBasicAppAxis.MoveAdditive := FALSE; + MpAxisBasicAppAxis.MoveVelocity := FALSE; + MpAxisBasicAppAxis.ReleaseBrake := FALSE; + MpAxisBasicAppAxis.ErrorReset := FALSE; + MpAxisBasicAppAxis.JogPositive := FALSE; + MpAxisBasicAppAxis.JogNegative := FALSE; + MpAxisBasicAppAxis.Home := FALSE; END_ACTION \ No newline at end of file diff --git a/mappFramework/Logical/MachineControl/AxisReferencedFiles/ChangeConfiguration.st b/mappFramework/Logical/MachineControl/AxisReferencedFiles/ChangeConfiguration.st index a64647bb..0652410c 100644 --- a/mappFramework/Logical/MachineControl/AxisReferencedFiles/ChangeConfiguration.st +++ b/mappFramework/Logical/MachineControl/AxisReferencedFiles/ChangeConfiguration.st @@ -9,11 +9,11 @@ ACTION ConfigurationInit: END_WHILE AxisSettings.DriveConfiguration.PureVirtualAxis.AxisFeatures.FeatureReference.NumberOfElements := i; - MC_BR_ProcessConfig_AX.DataAddress := ADR(AxisSettings.BaseConfiguration); - MC_BR_ProcessConfig_AX.DataType := mcCFG_AX; + ProcessConfigAX.DataAddress := ADR(AxisSettings.BaseConfiguration); + ProcessConfigAX.DataType := mcCFG_AX; - MC_BR_ProcessConfig_ACP.DataAddress := ADR(AxisSettings.DriveConfiguration); - MC_BR_ProcessConfig_ACP.DataType := mcCFG_PURE_V_AX; + ProcessConfigACP.DataAddress := ADR(AxisSettings.DriveConfiguration); + ProcessConfigACP.DataType := mcCFG_PURE_V_AX; ConfigurationState := CONFIG_STATE_INIT; @@ -25,36 +25,36 @@ ACTION ChangeConfiguration: CONFIG_STATE_INIT: // Assign string for the name - MC_BR_ProcessConfig_ACP.Name := MpAxisBasic_0.Info.HardwareInfo.Axis.ConfigElementLocation; - MC_BR_ProcessConfig_AX.Name := MpAxisBasic_0.Info.HardwareInfo.Axis.AxisName; + ProcessConfigACP.Name := MpAxisBasicAppAxis.Info.HardwareInfo.Axis.ConfigElementLocation; + ProcessConfigAX.Name := MpAxisBasicAppAxis.Info.HardwareInfo.Axis.AxisName; - IF (MpAxisBasic_0.Active = TRUE) THEN + IF (MpAxisBasicAppAxis.Active) THEN ConfigurationState := CONFIG_STATE_READ; END_IF CONFIG_STATE_READ: // Read the current configuration - MC_BR_ProcessConfig_ACP.Mode := mcPCM_LOAD; - MC_BR_ProcessConfig_ACP.Execute := TRUE; - - MC_BR_ProcessConfig_AX.Mode := mcPCM_LOAD; - MC_BR_ProcessConfig_AX.Execute := TRUE; - IF (MC_BR_ProcessConfig_ACP.Done = TRUE) AND (MC_BR_ProcessConfig_AX.Done = TRUE) THEN - MC_BR_ProcessConfig_ACP.Execute := FALSE; - MC_BR_ProcessConfig_AX.Execute := FALSE; + ProcessConfigACP.Mode := mcPCM_LOAD; + ProcessConfigACP.Execute := TRUE; + + ProcessConfigAX.Mode := mcPCM_LOAD; + ProcessConfigAX.Execute := TRUE; + IF (ProcessConfigACP.Done) AND (ProcessConfigAX.Done) THEN + ProcessConfigACP.Execute := FALSE; + ProcessConfigAX.Execute := FALSE; ConfigurationState := CONFIG_STATE_READY; END_IF CONFIG_STATE_WRITE: // Write the configuration after changes - MC_BR_ProcessConfig_ACP.Mode := mcPCM_SAVE; - MC_BR_ProcessConfig_ACP.Execute := TRUE; - - MC_BR_ProcessConfig_AX.Mode := mcPCM_SAVE; - MC_BR_ProcessConfig_AX.Execute := TRUE; - IF (MC_BR_ProcessConfig_ACP.Done = TRUE) AND (MC_BR_ProcessConfig_AX.Done = TRUE) THEN - MC_BR_ProcessConfig_ACP.Execute := FALSE; - MC_BR_ProcessConfig_AX.Execute := FALSE; + ProcessConfigACP.Mode := mcPCM_SAVE; + ProcessConfigACP.Execute := TRUE; + + ProcessConfigAX.Mode := mcPCM_SAVE; + ProcessConfigAX.Execute := TRUE; + IF (ProcessConfigACP.Done) AND (ProcessConfigAX.Done) THEN + ProcessConfigACP.Execute := FALSE; + ProcessConfigAX.Execute := FALSE; ConfigurationState := CONFIG_STATE_READY; END_IF @@ -64,17 +64,17 @@ ACTION ChangeConfiguration: // Cyclic function block calls AxisSettings.DriveConfiguration.PureVirtualAxis.AxisFeatures.FeatureReference.DataAddress := ADR(AxisSettings.AxisFeatures); - MC_BR_ProcessConfig_AX.DataAddress := ADR(AxisSettings.BaseConfiguration); - MC_BR_ProcessConfig_ACP.DataAddress := ADR(AxisSettings.DriveConfiguration); - MC_BR_ProcessConfig_ACP(); - MC_BR_ProcessConfig_AX(); + ProcessConfigAX.DataAddress := ADR(AxisSettings.BaseConfiguration); + ProcessConfigACP.DataAddress := ADR(AxisSettings.DriveConfiguration); + ProcessConfigACP(); + ProcessConfigAX(); END_ACTION ACTION ParameterInit: // Initalize drive parameter - MC_BR_ProcessParam_AX.DataAddress := ADR(AxisSettings.BaseParam); - MC_BR_ProcessParam_AX.DataType := mcCFG_AX_MOVE_LIM; + ProcessParamAX.DataAddress := ADR(AxisSettings.BaseParam); + ProcessParamAX.DataType := mcCFG_AX_MOVE_LIM; ParameterState := PAR_STATE_INIT; @@ -85,29 +85,29 @@ ACTION ChangeParameter: CASE ParameterState OF PAR_STATE_INIT: // Wait state - MC_BR_ProcessParam_AX.Component := MpAxisBasic_0.MpLink; + ProcessParamAX.Component := MpAxisBasicAppAxis.MpLink; - IF (MpAxisBasic_0.Active = TRUE) THEN + IF (MpAxisBasicAppAxis.Active) THEN ParameterState := PAR_STATE_READ; END_IF PAR_STATE_READ: // Read current parameter values - MC_BR_ProcessParam_AX.Mode := mcPPM_READ; - MC_BR_ProcessParam_AX.Execute := TRUE; + ProcessParamAX.Mode := mcPPM_READ; + ProcessParamAX.Execute := TRUE; - IF (MC_BR_ProcessParam_AX.Done = TRUE) THEN - MC_BR_ProcessParam_AX.Execute := FALSE; + IF (ProcessParamAX.Done) THEN + ProcessParamAX.Execute := FALSE; ParameterState := PAR_STATE_READY; END_IF PAR_STATE_WRITE: // Write new parameter values - MC_BR_ProcessParam_AX.Mode := mcPPM_WRITE; - MC_BR_ProcessParam_AX.Execute := TRUE; + ProcessParamAX.Mode := mcPPM_WRITE; + ProcessParamAX.Execute := TRUE; - IF (MC_BR_ProcessParam_AX.Done = TRUE) THEN - MC_BR_ProcessParam_AX.Execute := FALSE; + IF (ProcessParamAX.Done) THEN + ProcessParamAX.Execute := FALSE; ParameterState := PAR_STATE_READY; END_IF @@ -115,7 +115,7 @@ ACTION ChangeParameter: END_CASE - MC_BR_ProcessParam_AX.DataAddress := ADR(AxisSettings.BaseParam); - MC_BR_ProcessParam_AX(); + ProcessParamAX.DataAddress := ADR(AxisSettings.BaseParam); + ProcessParamAX(); END_ACTION \ No newline at end of file diff --git a/mappFramework/Logical/MachineControl/AxisReferencedFiles/Recipe.st b/mappFramework/Logical/MachineControl/AxisReferencedFiles/Recipe.st index 5a0e67f8..0ba599a3 100644 --- a/mappFramework/Logical/MachineControl/AxisReferencedFiles/Recipe.st +++ b/mappFramework/Logical/MachineControl/AxisReferencedFiles/Recipe.st @@ -3,30 +3,30 @@ ACTION RecipeInit: // Register the variables with the recipe system AxisControl.Status.ProductSettingsName := AxisControl.Status.TaskName; brsstrcat(ADR(AxisControl.Status.ProductSettingsName), ADR(':ParametersPreview')); - MpRecipeRegPar_Par.MpLink := ADR(gMpLinkRecipeXml); - MpRecipeRegPar_Par.Enable := TRUE; - MpRecipeRegPar_Par.PVName := ADR(AxisControl.Status.ProductSettingsName); - MpRecipeRegPar_Par.Category := ADR(PARAMETERS_CATEGORY); - MpRecipeRegPar_Par(); + MpRecipeRegParPar.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeRegParPar.Enable := TRUE; + MpRecipeRegParPar.PVName := ADR(AxisControl.Status.ProductSettingsName); + MpRecipeRegParPar.Category := ADR(PARAMETERS_CATEGORY); + MpRecipeRegParPar(); ParametersPreview; ParametersEdit; AxisControl.Status.MachineSettingsName := AxisControl.Status.TaskName; brsstrcat(ADR(AxisControl.Status.MachineSettingsName), ADR(':MachineSettingsPreview')); - MpRecipeRegPar_Cfg.MpLink := ADR(gMpLinkRecipeXml); - MpRecipeRegPar_Cfg.Enable := TRUE; - MpRecipeRegPar_Cfg.PVName := ADR(AxisControl.Status.MachineSettingsName); - MpRecipeRegPar_Cfg.Category := ADR(MACHINE_CONFIGURATION_CATEGORY); - MpRecipeRegPar_Cfg(); + MpRecipeRegParCfg.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeRegParCfg.Enable := TRUE; + MpRecipeRegParCfg.PVName := ADR(AxisControl.Status.MachineSettingsName); + MpRecipeRegParCfg.Category := ADR(MACHINE_CONFIGURATION_CATEGORY); + MpRecipeRegParCfg(); MachineSettingsPreview; MachineSettingsEdit; // Activate RegPar FUBs - WHILE NOT(MpRecipeRegPar_Par.Active OR MpRecipeRegPar_Par.Error) DO - MpRecipeRegPar_Par(); + WHILE NOT(MpRecipeRegParPar.Active OR MpRecipeRegParPar.Error) DO + MpRecipeRegParPar(); END_WHILE - WHILE NOT(MpRecipeRegPar_Cfg.Active OR MpRecipeRegPar_Cfg.Error) DO - MpRecipeRegPar_Cfg(); + WHILE NOT(MpRecipeRegParCfg.Active OR MpRecipeRegParCfg.Error) DO + MpRecipeRegParCfg(); END_WHILE END_ACTION @@ -85,23 +85,23 @@ ACTION RecipeCyclic: END_CASE; // Cyclic function block calls - MpRecipeRegPar_Par.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeRegParPar.MpLink := ADR(gMpLinkRecipeXml); IF (AxisControl.Status.ProductSettingsName = '') THEN AxisControl.Status.ProductSettingsName := AxisControl.Status.TaskName; brsstrcat(ADR(AxisControl.Status.ProductSettingsName), ADR(':ParametersPreview')); END_IF - MpRecipeRegPar_Par.PVName := ADR(AxisControl.Status.ProductSettingsName); - MpRecipeRegPar_Par.Category := ADR(PARAMETERS_CATEGORY); - MpRecipeRegPar_Par(); + MpRecipeRegParPar.PVName := ADR(AxisControl.Status.ProductSettingsName); + MpRecipeRegParPar.Category := ADR(PARAMETERS_CATEGORY); + MpRecipeRegParPar(); - MpRecipeRegPar_Cfg.MpLink := ADR(gMpLinkRecipeXml); + MpRecipeRegParCfg.MpLink := ADR(gMpLinkRecipeXml); IF (AxisControl.Status.MachineSettingsName = '') THEN AxisControl.Status.MachineSettingsName := AxisControl.Status.TaskName; brsstrcat(ADR(AxisControl.Status.MachineSettingsName), ADR(':MachineSettingsPreview')); END_IF - - MpRecipeRegPar_Cfg.PVName := ADR(AxisControl.Status.MachineSettingsName); - MpRecipeRegPar_Cfg.Category := ADR(MACHINE_CONFIGURATION_CATEGORY); - MpRecipeRegPar_Cfg(); + + MpRecipeRegParCfg.PVName := ADR(AxisControl.Status.MachineSettingsName); + MpRecipeRegParCfg.Category := ADR(MACHINE_CONFIGURATION_CATEGORY); + MpRecipeRegParCfg(); END_ACTION \ No newline at end of file diff --git a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisControlModes.st b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisControlModes.st index bbf16684..6bb89f52 100644 --- a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisControlModes.st +++ b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisControlModes.st @@ -19,12 +19,12 @@ ACTION AxisManual: CASE ManualState OF // Wait state MANUAL_STATE_IDLE: - IF ((AxisControl.Command.JogNegative = TRUE) OR (AxisControl.Command.JogPositive = TRUE)) THEN + IF ((AxisControl.Command.JogNegative) OR (AxisControl.Command.JogPositive)) THEN ManualState := MANUAL_STATE_JOG; - ELSIF ((AxisControl.Command.MoveAbsolute = TRUE) OR (AxisControl.Command.MoveAdditive = TRUE) OR (AxisControl.Command.MoveVelocity = TRUE)) THEN - MpAxisBasic_0.MoveAbsolute := AxisControl.Command.MoveAbsolute; - MpAxisBasic_0.MoveAdditive := AxisControl.Command.MoveAdditive; - MpAxisBasic_0.MoveVelocity := AxisControl.Command.MoveVelocity; + ELSIF ((AxisControl.Command.MoveAbsolute) OR (AxisControl.Command.MoveAdditive) OR (AxisControl.Command.MoveVelocity)) THEN + MpAxisBasicAppAxis.MoveAbsolute := AxisControl.Command.MoveAbsolute; + MpAxisBasicAppAxis.MoveAdditive := AxisControl.Command.MoveAdditive; + MpAxisBasicAppAxis.MoveVelocity := AxisControl.Command.MoveVelocity; AxisControl.Command.MoveAbsolute := FALSE; AxisControl.Command.MoveAdditive := FALSE; ManualState := MANUAL_STATE_MOVE; @@ -33,51 +33,51 @@ ACTION AxisManual: END_IF // Jog state MANUAL_STATE_JOG: - MpAxisBasic_0.JogNegative := AxisControl.Command.JogNegative; - MpAxisBasic_0.JogPositive := AxisControl.Command.JogPositive; - IF (AxisControl.Command.Stop = TRUE) THEN + MpAxisBasicAppAxis.JogNegative := AxisControl.Command.JogNegative; + MpAxisBasicAppAxis.JogPositive := AxisControl.Command.JogPositive; + IF (AxisControl.Command.Stop) THEN AxisControl.Command.Stop := FALSE; - MpAxisBasic_0.Stop := TRUE; + MpAxisBasicAppAxis.Stop := TRUE; ManualState := MANUAL_STATE_STOPPING; - ELSIF ((AxisControl.Command.JogNegative = FALSE) AND (AxisControl.Command.JogPositive = FALSE)) THEN - MpAxisBasic_0.Stop := FALSE; - MpAxisBasic_0.JogPositive := FALSE; - MpAxisBasic_0.JogNegative := FALSE; + ELSIF ((NOT AxisControl.Command.JogNegative) AND (NOT AxisControl.Command.JogPositive)) THEN + MpAxisBasicAppAxis.Stop := FALSE; + MpAxisBasicAppAxis.JogPositive := FALSE; + MpAxisBasicAppAxis.JogNegative := FALSE; ManualState := MANUAL_STATE_STOPPING; END_IF // Direct move state MANUAL_STATE_MOVE: - IF (AxisControl.Command.Stop = TRUE) THEN - MpAxisBasic_0.MoveAbsolute := FALSE; - MpAxisBasic_0.MoveAdditive := FALSE; + IF (AxisControl.Command.Stop) THEN + MpAxisBasicAppAxis.MoveAbsolute := FALSE; + MpAxisBasicAppAxis.MoveAdditive := FALSE; AxisControl.Command.Stop := FALSE; - MpAxisBasic_0.Stop := TRUE; + MpAxisBasicAppAxis.Stop := TRUE; ManualState := MANUAL_STATE_STOPPING; - ELSIF (InPositionEdgePos.Q = TRUE) THEN - MpAxisBasic_0.MoveAbsolute := FALSE; - MpAxisBasic_0.MoveAdditive := FALSE; + ELSIF (InPositionEdgePos.Q) THEN + MpAxisBasicAppAxis.MoveAbsolute := FALSE; + MpAxisBasicAppAxis.MoveAdditive := FALSE; ManualState := MANUAL_STATE_IDLE; State := STATE_READY; - ELSIF (((AxisControl.Command.MoveVelocity = FALSE) AND (MpAxisBasic_0.MoveAbsolute = FALSE) AND (MpAxisBasic_0.MoveAdditive = FALSE)) OR AxisControl.Status.ErrorActive) THEN - MpAxisBasic_0.MoveVelocity := FALSE; + ELSIF (((NOT AxisControl.Command.MoveVelocity) AND (NOT MpAxisBasicAppAxis.MoveAbsolute) AND (NOT MpAxisBasicAppAxis.MoveAdditive)) OR AxisControl.Status.ErrorActive) THEN + MpAxisBasicAppAxis.MoveVelocity := FALSE; ManualState := MANUAL_STATE_STOPPING; - ELSIF ((AxisControl.Command.JogNegative = TRUE) OR (AxisControl.Command.JogPositive = TRUE)) THEN - MpAxisBasic_0.MoveAbsolute := FALSE; - MpAxisBasic_0.MoveAdditive := FALSE; + ELSIF ((AxisControl.Command.JogNegative) OR (AxisControl.Command.JogPositive)) THEN + MpAxisBasicAppAxis.MoveAbsolute := FALSE; + MpAxisBasicAppAxis.MoveAdditive := FALSE; ManualState := MANUAL_STATE_JOG; END_IF // Stopping active movements MANUAL_STATE_STOPPING: - MpAxisBasic_0.JogNegative := FALSE; - MpAxisBasic_0.JogPositive := FALSE; - MpAxisBasic_0.MoveAbsolute := FALSE; - MpAxisBasic_0.MoveAdditive := FALSE; + MpAxisBasicAppAxis.JogNegative := FALSE; + MpAxisBasicAppAxis.JogPositive := FALSE; + MpAxisBasicAppAxis.MoveAbsolute := FALSE; + MpAxisBasicAppAxis.MoveAdditive := FALSE; AxisControl.Command.MoveVelocity := FALSE; - MpAxisBasic_0.Stop := TRUE; + MpAxisBasicAppAxis.Stop := TRUE; - IF (MpAxisBasic_0.MoveActive = FALSE) THEN - MpAxisBasic_0.Stop := FALSE; - MpAxisBasic_0.MoveVelocity := FALSE; + IF (NOT MpAxisBasicAppAxis.MoveActive) THEN + MpAxisBasicAppAxis.Stop := FALSE; + MpAxisBasicAppAxis.MoveVelocity := FALSE; ManualState := MANUAL_STATE_IDLE; State := STATE_READY; END_IF @@ -89,12 +89,12 @@ ACTION AxisAutomatic: CASE AutomaticState OF AUTOMATIC_STATE_IDLE: - IF (AxisControl.Command.Start = TRUE) THEN + IF (AxisControl.Command.Start) THEN AutomaticState := AUTOMATIC_STATE_RUNNING; END_IF AUTOMATIC_STATE_RUNNING: - MpAxisBasic_0.MoveVelocity := TRUE; + MpAxisBasicAppAxis.MoveVelocity := TRUE; MpAxisParameters.Acceleration := AxisControl.Parameters.Acceleration; MpAxisParameters.Deceleration := AxisControl.Parameters.Deceleration; MpAxisParameters.Velocity := ABS(AxisControl.Parameters.Velocity); @@ -104,17 +104,17 @@ ACTION AxisAutomatic: MpAxisParameters.Direction := mcDIR_POSITIVE; END_IF - IF ((AxisControl.Command.Start = FALSE) OR (AxisControl.Command.Stop = TRUE)) THEN + IF ((NOT AxisControl.Command.Start) OR (AxisControl.Command.Stop)) THEN AxisControl.Command.Start := FALSE; AxisControl.Command.Stop := FALSE; - MpAxisBasic_0.MoveVelocity := FALSE; + MpAxisBasicAppAxis.MoveVelocity := FALSE; State := STATE_READY; AutomaticState := AUTOMATIC_STATE_IDLE; - ELSIF (AxisControl.Command.UpdateVelocity = TRUE) THEN + ELSIF (AxisControl.Command.UpdateVelocity) THEN AxisControl.Command.UpdateVelocity := FALSE; - MpAxisBasic_0.Update := TRUE; - ELSIF (MpAxisBasic_0.UpdateDone = TRUE) THEN - MpAxisBasic_0.Update := FALSE; + MpAxisBasicAppAxis.Update := TRUE; + ELSIF (MpAxisBasicAppAxis.UpdateDone) THEN + MpAxisBasicAppAxis.Update := FALSE; END_IF END_CASE diff --git a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.st b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.st index f46a998b..cce825b3 100644 --- a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.st +++ b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.st @@ -23,14 +23,14 @@ PROGRAM _INIT MpAxisParameters.Homing.Mode := mcHOMING_DEFAULT; // Enable mapp function blocks - MpAxisBasic_0.Enable := TRUE; + MpAxisBasicAppAxis.Enable := TRUE; MpAlarmXCore_0.Enable := TRUE; END_PROGRAM PROGRAM _CYCLIC - MpAxisBasic_0.MpLink := ADR(gAxisTemplate); + MpAxisBasicAppAxis.MpLink := ADR(gAxisTemplate); // Call all actions SimulationControl; diff --git a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/SimulationControl.st b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/SimulationControl.st index 06fa3aae..52ed6cc0 100644 --- a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/SimulationControl.st +++ b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/SimulationControl.st @@ -4,7 +4,7 @@ ACTION SimulationControl: RETURN; END_IF - IF ((MpAxisBasic_0.IsHomed = FALSE) AND (MpAxisBasic_0.Home = FALSE)) THEN + IF ((NOT MpAxisBasicAppAxis.IsHomed) AND (NOT MpAxisBasicAppAxis.Home)) THEN AxisControl.Command.Reference := TRUE; END_IF diff --git a/mappFramework/Logical/Package.pkg b/mappFramework/Logical/Package.pkg index 999db57b..37a89333 100644 --- a/mappFramework/Logical/Package.pkg +++ b/mappFramework/Logical/Package.pkg @@ -11,6 +11,7 @@ MachineControl UserPartition UnitTest + UnitTestVC4 VC4 \ No newline at end of file diff --git a/mappFramework/Logical/UnitTest/AlarmX/AlarmXUnitTest/Set_AlarmExamples.c b/mappFramework/Logical/UnitTest/AlarmX/AlarmXUnitTest/Set_AlarmExamples.c index d15e8146..02c3a4c0 100644 --- a/mappFramework/Logical/UnitTest/AlarmX/AlarmXUnitTest/Set_AlarmExamples.c +++ b/mappFramework/Logical/UnitTest/AlarmX/AlarmXUnitTest/Set_AlarmExamples.c @@ -8,146 +8,146 @@ #include #include -#define _RESET_ALARMS \ - AlarmExamples.LevelMonitoring = 50; \ - MpAlarmXAcknowledgeAll_0.Execute = true; \ - MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); \ - TEST_BUSY_CONDITION(MpAlarmXAcknowledgeAll_0.CommandDone == false); \ - MpAlarmXAcknowledgeAll_0.Execute = false; \ - TEST_BUSY_CONDITION(MpAlarmXAcknowledgeAll_0.Info.UnacknowledgedAlarms != 0); \ - TEST_BUSY_CONDITION(cycleCount < 25); +#define _RESET_ALARMS \ + AlarmExamples.LevelMonitoring = 50; \ + MpAlarmXAcknowledgeAll_0.Execute = true; \ + MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); \ + TEST_BUSY_CONDITION(MpAlarmXAcknowledgeAll_0.CommandDone == false); \ + MpAlarmXAcknowledgeAll_0.Execute = false; \ + TEST_BUSY_CONDITION(MpAlarmXAcknowledgeAll_0.Info.UnacknowledgedAlarms != 0); \ + TEST_BUSY_CONDITION(cycleCount < 25); _SETUP_SET(void) { - _RESET_ALARMS; + _RESET_ALARMS; TEST_DONE; } _TEARDOWN_SET(void) { - _RESET_ALARMS; + _RESET_ALARMS; TEST_DONE; } _SETUP_TEST(void) { - cycleCount = 0; - TEST_DONE; + cycleCount = 0; + TEST_DONE; } - + _CYCLIC_SET(void) { - MpAlarmXAcknowledgeAll_0.MpLink = &gMpLinkAlarmXCore; - MpAlarmXAcknowledgeAll_0.Enable = true; - MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); - - cycleCount++; - - TEST_ABORT_CONDITION(cycleCount == 254); + MpAlarmXAcknowledgeAll_0.MpLink = &gMpLinkAlarmXCore; + MpAlarmXAcknowledgeAll_0.Enable = true; + MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); + + cycleCount++; + + TEST_ABORT_CONDITION(cycleCount == 254); } bool AlarmIsActive(char* alarmName) { - for (USINT i = 0; i < (sizeof(MpAlarmXListUIConnect.AlarmList.Name)/sizeof(MpAlarmXListUIConnect.AlarmList.Name[0])); i++) - { - if ((strcmp(alarmName, MpAlarmXListUIConnect.AlarmList.Name[i]) == 0) && (MpAlarmXListUIConnect.AlarmList.StateActive[i] == true)) - return true; - } - return false; + for (USINT i = 0; i < (sizeof(MpAlarmXListUIConnect.AlarmList.Name)/sizeof(MpAlarmXListUIConnect.AlarmList.Name[0])); i++) + { + if ((strcmp(alarmName, MpAlarmXListUIConnect.AlarmList.Name[i]) == 0) && (MpAlarmXListUIConnect.AlarmList.StateActive[i] == true)) + return true; + } + return false; } // These tests must run sequentially, Arrange->Act->Assert // 3 "_TEST" function for each unit test _TEST Arrange_LevelMonitoringLow(void) { - StartingActiveAlarms = MpAlarmXCore_0.ActiveAlarms; - StartingPendingAlarms = MpAlarmXCore_0.PendingAlarms; - _RESET_ALARMS; - TEST_DONE; + StartingActiveAlarms = MpAlarmXCoreMain.ActiveAlarms; + StartingPendingAlarms = MpAlarmXCoreMain.PendingAlarms; + _RESET_ALARMS; + TEST_DONE; } _TEST Act_LevelMonitoringLow(void) { - AlarmExamples.LevelMonitoring = 19; - TEST_BUSY_CONDITION(cycleCount < 10); - TEST_DONE; + AlarmExamples.LevelMonitoring = 19; + TEST_BUSY_CONDITION(cycleCount < 10); + TEST_DONE; } _TEST Assert_LevelMonitoringLow(void) { - TEST_ASSERT_MESSAGE(MpAlarmXCore_0.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); - TEST_ASSERT_MESSAGE(MpAlarmXCore_0.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); - TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); - TEST_DONE; + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); + TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); + TEST_DONE; } _TEST Arrange_LevelMonitoringLowLow(void) { - StartingActiveAlarms = MpAlarmXCore_0.ActiveAlarms; - StartingPendingAlarms = MpAlarmXCore_0.PendingAlarms; - _RESET_ALARMS; - TEST_DONE; + StartingActiveAlarms = MpAlarmXCoreMain.ActiveAlarms; + StartingPendingAlarms = MpAlarmXCoreMain.PendingAlarms; + _RESET_ALARMS; + TEST_DONE; } _TEST Act_LevelMonitoringLowLow(void) { - AlarmExamples.LevelMonitoring = 9; - TEST_BUSY_CONDITION(cycleCount < 10); - TEST_DONE; + AlarmExamples.LevelMonitoring = 9; + TEST_BUSY_CONDITION(cycleCount < 10); + TEST_DONE; } _TEST Assert_LevelMonitoringLowLow(void) { - TEST_ASSERT_MESSAGE(MpAlarmXCore_0.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); - TEST_ASSERT_MESSAGE(MpAlarmXCore_0.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); - TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); - TEST_DONE; + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); + TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); + TEST_DONE; } _TEST Arrange_LevelMonitoringHigh(void) { - StartingActiveAlarms = MpAlarmXCore_0.ActiveAlarms; - StartingPendingAlarms = MpAlarmXCore_0.PendingAlarms; - _RESET_ALARMS; - TEST_DONE; + StartingActiveAlarms = MpAlarmXCoreMain.ActiveAlarms; + StartingPendingAlarms = MpAlarmXCoreMain.PendingAlarms; + _RESET_ALARMS; + TEST_DONE; } _TEST Act_LevelMonitoringHigh(void) { - AlarmExamples.LevelMonitoring = 81; - TEST_BUSY_CONDITION(cycleCount < 10); - TEST_DONE; + AlarmExamples.LevelMonitoring = 81; + TEST_BUSY_CONDITION(cycleCount < 10); + TEST_DONE; } _TEST Assert_LevelMonitoringHigh(void) { - TEST_ASSERT_MESSAGE(MpAlarmXCore_0.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); - TEST_ASSERT_MESSAGE(MpAlarmXCore_0.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); - TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); - TEST_DONE; + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); + TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); + TEST_DONE; } _TEST Arrange_LevelMonitoringHighHigh(void) { - StartingActiveAlarms = MpAlarmXCore_0.ActiveAlarms; - StartingPendingAlarms = MpAlarmXCore_0.PendingAlarms; - _RESET_ALARMS; - TEST_DONE; + StartingActiveAlarms = MpAlarmXCoreMain.ActiveAlarms; + StartingPendingAlarms = MpAlarmXCoreMain.PendingAlarms; + _RESET_ALARMS; + TEST_DONE; } _TEST Act_LevelMonitoringHighHigh(void) { - AlarmExamples.LevelMonitoring = 91; - TEST_BUSY_CONDITION(cycleCount < 10); - TEST_DONE; + AlarmExamples.LevelMonitoring = 91; + TEST_BUSY_CONDITION(cycleCount < 10); + TEST_DONE; } _TEST Assert_LevelMonitoringHighHigh(void) { - TEST_ASSERT_MESSAGE(MpAlarmXCore_0.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); - TEST_ASSERT_MESSAGE(MpAlarmXCore_0.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); - TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); - TEST_DONE; + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); + TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); + TEST_DONE; } diff --git a/mappFramework/Logical/UnitTest/AlarmX/AlarmXUnitTest/Set_AlarmMgr.c b/mappFramework/Logical/UnitTest/AlarmX/AlarmXUnitTest/Set_AlarmMgr.c index 765e116b..d8af04c8 100644 --- a/mappFramework/Logical/UnitTest/AlarmX/AlarmXUnitTest/Set_AlarmMgr.c +++ b/mappFramework/Logical/UnitTest/AlarmX/AlarmXUnitTest/Set_AlarmMgr.c @@ -1,52 +1,53 @@ -#include - -#ifdef _DEFAULT_INCLUDES -#include -#endif - -#include "UnitTest.h" -#include -#include - -_SETUP_SET(void) -{ - TEST_DONE; -} - -_TEARDOWN_SET(void) -{ - TEST_DONE; -} - - -_SETUP_TEST(void) -{ - TEST_DONE; -} - -_TEARDOWN_TEST(void) -{ - TEST_DONE; -} - - -_TEST CheckCommissioningModeActive(void) -{ - CommissioningModeActive = true; - TEST_ASSERT(Alarms[0] == false); -} - -/* -B+R UnitTest: This is generated code. -Do not edit! Do not move! -Description: UnitTest Testprogramm infrastructure (TestSet). -LastUpdated: 2023-01-30 14:31:38Z -By B+R UnitTest Helper Version: 2.0.1.59 -*/ -UNITTEST_FIXTURES(fixtures) -{ - new_TestFixture("CheckCommissioningModeActive", CheckCommissioningModeActive), -}; - -UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_AlarmMgr, "Set_AlarmMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, 0); - +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include + +_SETUP_SET(void) +{ + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + TEST_DONE; +} + + +_SETUP_TEST(void) +{ + TEST_DONE; +} + +_TEARDOWN_TEST(void) +{ + TEST_DONE; +} + + +_TEST CheckCommissioningModeActive(void) +{ + CommissioningModeActive = true; + TEST_ASSERT(Alarms[0] == false); + TEST_DONE; +} + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2023-01-30 14:31:38Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("CheckCommissioningModeActive", CheckCommissioningModeActive), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_AlarmMgr, "Set_AlarmMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, 0); + diff --git a/mappFramework/Logical/UnitTest/AppAxis_1/AppAxisUnitTest/Set_AutomaticTests.c b/mappFramework/Logical/UnitTest/AppAxis_1/AppAxisUnitTest/Set_AutomaticTests.c index e3af0456..851627d6 100644 --- a/mappFramework/Logical/UnitTest/AppAxis_1/AppAxisUnitTest/Set_AutomaticTests.c +++ b/mappFramework/Logical/UnitTest/AppAxis_1/AppAxisUnitTest/Set_AutomaticTests.c @@ -12,19 +12,19 @@ #define MAX(x, y) (((x) > (y)) ? (x) : (y)) -#define TIMEOUT_TEST_CASE \ - if (cycleCount >= 254) \ - { \ - char abortMessage[80]; \ - char substate[10]; \ - memset(abortMessage, 0, sizeof(abortMessage)); \ - memset(substate, 0, sizeof(substate)); \ - itoa(ActSubState, substate, 10); \ - strcpy(abortMessage, "Timeout in ActSubState = "); \ - strcat(abortMessage, substate); \ - TEST_FAIL(abortMessage); \ - TEST_DONE; \ - } +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 254) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(ActSubState, substate, 10); \ + strcpy(abortMessage, "Timeout in ActSubState = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } _SETUP_SET(void) @@ -39,172 +39,172 @@ _TEARDOWN_SET(void) _SETUP_TEST(void) { - cycleCount = 0; - ArrangeSubState = 0; - ActSubState = 0; - AssertSubState = 0; - TestState = TEST_ARRANGE; - - maxVelocity = 0.0; - TEST_DONE; + cycleCount = 0; + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + TestState = TEST_ARRANGE; + + maxVelocity = 0.0; + TEST_DONE; } _TEARDOWN_TEST(void) { - AxisControl.Command.JogNegative = false; - AxisControl.Command.JogPositive = false; - AxisControl.Command.Abort = false; - AxisControl.Command.LoadRecipeParameters = false; - AxisControl.Command.MoveAbsolute = false; - AxisControl.Command.MoveAdditive = false; - AxisControl.Command.MoveToStart = false; - AxisControl.Command.MoveVelocity = false; - AxisControl.Command.Reference = false; - AxisControl.Command.Reset = false; - AxisControl.Command.SaveRecipeParameters = false; - AxisControl.Command.Start = false; - AxisControl.Command.Stop = false; - AxisControl.Command.UpdatePreviewParameters = false; - AxisControl.Command.UpdateVelocity = false; - - if ((AxisControl.Status.ErrorActive == true) || (MpAlarmXCore_0.PendingAlarms > 0)) - { - AxisControl.Command.Reset = true; - MpAlarmXAcknowledgeAll_0.Execute = true; - } - TEST_BUSY_CONDITION(AxisControl.Status.ErrorActive); - AxisControl.Command.Reset = false; - if (abs(AxisControl.Status.Velocity) > 0.01) - AxisControl.Command.Stop = true; - TEST_BUSY_CONDITION(abs(AxisControl.Status.Velocity > 0.01)); - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - AxisControl.Command.Stop = false; - - TEST_DONE; + AxisControl.Command.JogNegative = false; + AxisControl.Command.JogPositive = false; + AxisControl.Command.Abort = false; + AxisControl.Command.LoadRecipeParameters = false; + AxisControl.Command.MoveAbsolute = false; + AxisControl.Command.MoveAdditive = false; + AxisControl.Command.MoveToStart = false; + AxisControl.Command.MoveVelocity = false; + AxisControl.Command.Reference = false; + AxisControl.Command.Reset = false; + AxisControl.Command.SaveRecipeParameters = false; + AxisControl.Command.Start = false; + AxisControl.Command.Stop = false; + AxisControl.Command.UpdatePreviewParameters = false; + AxisControl.Command.UpdateVelocity = false; + + if ((AxisControl.Status.ErrorActive == true) || (MpAlarmXCoreAxis.PendingAlarms > 0)) + { + AxisControl.Command.Reset = true; + MpAlarmXAcknowledgeAll_0.Execute = true; + } + TEST_BUSY_CONDITION(AxisControl.Status.ErrorActive); + AxisControl.Command.Reset = false; + if (abs(AxisControl.Status.Velocity) > 0.01) + AxisControl.Command.Stop = true; + TEST_BUSY_CONDITION(abs(AxisControl.Status.Velocity > 0.01)); + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + AxisControl.Command.Stop = false; + + TEST_DONE; } _CYCLIC_SET(void) { - cycleCount++; - MpAlarmXAcknowledgeAll_0.MpLink = &gMpLinkAlarmXCoreAppAxis_1; - MpAlarmXAcknowledgeAll_0.Enable = true; - MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); - MpAlarmXAcknowledgeAll_0.Execute = false; + cycleCount++; + MpAlarmXAcknowledgeAll_0.MpLink = &gMpLinkAlarmXCoreAppAxis_1; + MpAlarmXAcknowledgeAll_0.Enable = true; + MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); + MpAlarmXAcknowledgeAll_0.Execute = false; } _TEST Start(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Velocity = 40; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.Start = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - - case 1: - TEST_BUSY_CONDITION(cycleCount < 30); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 40; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.Start = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST UpdateVelocity(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Velocity = 40; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.Start = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - - case 1: - TEST_BUSY_CONDITION(cycleCount < 30); - TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); - AxisControl.Command.UpdateVelocity = true; - AxisControl.Parameters.Velocity = 60; - ActSubState = 2; - break; - - case 2: - TEST_BUSY_CONDITION(cycleCount < 60); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 60.0, maxVelocity); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 40; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.Start = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); + AxisControl.Command.UpdateVelocity = true; + AxisControl.Parameters.Velocity = 60; + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(cycleCount < 60); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 60.0, maxVelocity); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST ZeroVelocity(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Velocity = 0; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.Start = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - - case 1: - TEST_BUSY_CONDITION(cycleCount < 10); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT(AxisControl.Status.ErrorActive); - TEST_ASSERT_EQUAL_INT(1, MpAlarmXCore_0.PendingAlarms); - TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, maxVelocity); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 0; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.Start = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(cycleCount < 10); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(AxisControl.Status.ErrorActive); + TEST_ASSERT_EQUAL_INT(1, MpAlarmXCoreAxis.PendingAlarms); + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, maxVelocity); + TEST_DONE; + break; + } + TEST_BUSY; } /* diff --git a/mappFramework/Logical/UnitTest/AppAxis_1/AppAxisUnitTest/Set_ManualTests.c b/mappFramework/Logical/UnitTest/AppAxis_1/AppAxisUnitTest/Set_ManualTests.c index c3da2086..8f44925b 100644 --- a/mappFramework/Logical/UnitTest/AppAxis_1/AppAxisUnitTest/Set_ManualTests.c +++ b/mappFramework/Logical/UnitTest/AppAxis_1/AppAxisUnitTest/Set_ManualTests.c @@ -12,19 +12,19 @@ #define MAX(x, y) (((x) > (y)) ? (x) : (y)) -#define TIMEOUT_TEST_CASE \ - if (cycleCount >= 254) \ - { \ - char abortMessage[80]; \ - char substate[10]; \ - memset(abortMessage, 0, sizeof(abortMessage)); \ - memset(substate, 0, sizeof(substate)); \ - itoa(ActSubState, substate, 10); \ - strcpy(abortMessage, "Timeout in ActSubState = "); \ - strcat(abortMessage, substate); \ - TEST_FAIL(abortMessage); \ - TEST_DONE; \ - } +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 254) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(ActSubState, substate, 10); \ + strcpy(abortMessage, "Timeout in ActSubState = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } _SETUP_SET(void) { @@ -38,644 +38,644 @@ _TEARDOWN_SET(void) _SETUP_TEST(void) { - cycleCount = 0; - ArrangeSubState = 0; - ActSubState = 0; - AssertSubState = 0; - TestState = TEST_ARRANGE; + cycleCount = 0; + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + TestState = TEST_ARRANGE; - maxVelocity = 0.0; + maxVelocity = 0.0; - TEST_DONE; + TEST_DONE; } _TEARDOWN_TEST(void) { - AxisControl.Command.JogNegative = false; - AxisControl.Command.JogPositive = false; - AxisControl.Command.Abort = false; - AxisControl.Command.LoadRecipeParameters = false; - AxisControl.Command.MoveAbsolute = false; - AxisControl.Command.MoveAdditive = false; - AxisControl.Command.MoveToStart = false; - AxisControl.Command.MoveVelocity = false; - AxisControl.Command.Reference = false; - AxisControl.Command.Reset = false; - AxisControl.Command.SaveRecipeParameters = false; - AxisControl.Command.Start = false; - AxisControl.Command.Stop = false; - AxisControl.Command.UpdatePreviewParameters = false; - AxisControl.Command.UpdateVelocity = false; - - if ((AxisControl.Status.ErrorActive == true) || (MpAlarmXCore_0.PendingAlarms > 0)) - { - AxisControl.Command.Reset = true; - MpAlarmXAcknowledgeAll_0.Execute = true; - } - TEST_BUSY_CONDITION(AxisControl.Status.ErrorActive); - AxisControl.Command.Reset = false; - if (abs(AxisControl.Status.Velocity) > 0.01) - AxisControl.Command.Stop = true; - TEST_BUSY_CONDITION(abs(AxisControl.Status.Velocity > 0.01)); - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - AxisControl.Command.Stop = false; - - TEST_DONE; + AxisControl.Command.JogNegative = false; + AxisControl.Command.JogPositive = false; + AxisControl.Command.Abort = false; + AxisControl.Command.LoadRecipeParameters = false; + AxisControl.Command.MoveAbsolute = false; + AxisControl.Command.MoveAdditive = false; + AxisControl.Command.MoveToStart = false; + AxisControl.Command.MoveVelocity = false; + AxisControl.Command.Reference = false; + AxisControl.Command.Reset = false; + AxisControl.Command.SaveRecipeParameters = false; + AxisControl.Command.Start = false; + AxisControl.Command.Stop = false; + AxisControl.Command.UpdatePreviewParameters = false; + AxisControl.Command.UpdateVelocity = false; + + if ((AxisControl.Status.ErrorActive == true) || (MpAlarmXCoreAxis.PendingAlarms > 0)) + { + AxisControl.Command.Reset = true; + MpAlarmXAcknowledgeAll_0.Execute = true; + } + TEST_BUSY_CONDITION(AxisControl.Status.ErrorActive); + AxisControl.Command.Reset = false; + if (abs(AxisControl.Status.Velocity) > 0.01) + AxisControl.Command.Stop = true; + TEST_BUSY_CONDITION(abs(AxisControl.Status.Velocity > 0.01)); + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + AxisControl.Command.Stop = false; + + TEST_DONE; } _CYCLIC_SET(void) { - cycleCount++; - - MpAlarmXListUI_0.Enable = true; - MpAlarmXListUI_0.UIConnect = &MpAlarmXListUIConnect; - MpAlarmXListUI_0.MpLink = &gMpLinkAlarmXCoreAppAxis_1; - MpAlarmXListUI_0.UISetup.AlarmListScrollWindow = 10; - MpAlarmXListUI_0.UISetup.AlarmListSize = 50; - strcpy(MpAlarmXListUI_0.UISetup.TimeStampPattern, "%Y %m %d %H:%M:%S"); - MpAlarmXListUI(&MpAlarmXListUI_0); - - MpAlarmXAcknowledgeAll_0.MpLink = &gMpLinkAlarmXCoreAppAxis_1; - MpAlarmXAcknowledgeAll_0.Enable = true; - MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); - TEST_BUSY_CONDITION(MpAlarmXAcknowledgeAll_0.CommandBusy); - MpAlarmXAcknowledgeAll_0.Execute = false; + cycleCount++; + + MpAlarmXListUI_0.Enable = true; + MpAlarmXListUI_0.UIConnect = &MpAlarmXListUIConnect; + MpAlarmXListUI_0.MpLink = &gMpLinkAlarmXCoreAppAxis_1; + MpAlarmXListUI_0.UISetup.AlarmListScrollWindow = 10; + MpAlarmXListUI_0.UISetup.AlarmListSize = 50; + strcpy(MpAlarmXListUI_0.UISetup.TimeStampPattern, "%Y %m %d %H:%M:%S"); + MpAlarmXListUI(&MpAlarmXListUI_0); + + MpAlarmXAcknowledgeAll_0.MpLink = &gMpLinkAlarmXCoreAppAxis_1; + MpAlarmXAcknowledgeAll_0.Enable = true; + MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); + TEST_BUSY_CONDITION(MpAlarmXAcknowledgeAll_0.CommandBusy); + MpAlarmXAcknowledgeAll_0.Execute = false; } _TEST PowerOn(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - TestState = TEST_ACT; - break; - - case TEST_ACT: - switch (ActSubState) - { - case 0: - AxisControl.Command.Power = true; - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(AxisControl.Status.Busy == true); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT(AxisControl.Status.IsPowered); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + TestState = TEST_ACT; + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + AxisControl.Command.Power = true; + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.Busy == true); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(AxisControl.Status.IsPowered); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST Homing(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - TestState = TEST_ACT; - break; - - case TEST_ACT: - switch (ActSubState) - { - case 0: - AxisControl.Command.Reference = true; - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(AxisControl.Status.IsHomed == false); - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 2; - break; - - case 2: - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT(AxisControl.Status.IsHomed); - TEST_ASSERT_DOUBLE_WITHIN(0.0001, 0.0, AxisControl.Status.Position); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + TestState = TEST_ACT; + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + AxisControl.Command.Reference = true; + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.IsHomed == false); + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(AxisControl.Status.IsHomed); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 0.0, AxisControl.Status.Position); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST JogPositive(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - TestState = TEST_ACT; - break; - - case TEST_ACT: - switch (ActSubState) - { - case 0: - AxisControl.Command.JogPositive = true; - AxisControl.Parameters.JogVelocity = 50; - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(AxisControl.Status.Velocity <= 49.0); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 50.0, AxisControl.Status.Velocity); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + TestState = TEST_ACT; + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + AxisControl.Command.JogPositive = true; + AxisControl.Parameters.JogVelocity = 50; + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.Velocity <= 49.0); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 50.0, AxisControl.Status.Velocity); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST JogNegative(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - TestState = TEST_ACT; - break; - - case TEST_ACT: - switch (ActSubState) - { - case 0: - AxisControl.Command.JogNegative = true; - AxisControl.Parameters.JogVelocity = 50; - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(AxisControl.Status.Velocity >= -49.0); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, -50.0, AxisControl.Status.Velocity); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + TestState = TEST_ACT; + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + AxisControl.Command.JogNegative = true; + AxisControl.Parameters.JogVelocity = 50; + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.Velocity >= -49.0); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, -50.0, AxisControl.Status.Velocity); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST MoveAbsolute(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Position = 10; - AxisControl.Parameters.Velocity = 40; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.MoveAbsolute = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - AxisControl.Command.MoveAbsolute = false; - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); - TEST_ASSERT_FLOAT_WITHIN(0.01, 10.0, AxisControl.Status.Position); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Position = 10; + AxisControl.Parameters.Velocity = 40; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveAbsolute = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + AxisControl.Command.MoveAbsolute = false; + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); + TEST_ASSERT_FLOAT_WITHIN(0.01, 10.0, AxisControl.Status.Position); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST MoveAdditive(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Distance = 5; - AxisControl.Parameters.Velocity = 30; - StartPosition = AxisControl.Status.Position; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.MoveAdditive = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - AxisControl.Command.MoveAbsolute = false; - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 30.0, maxVelocity); - TEST_ASSERT_FLOAT_WITHIN(0.01, StartPosition + 5.0, AxisControl.Status.Position); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Distance = 5; + AxisControl.Parameters.Velocity = 30; + StartPosition = AxisControl.Status.Position; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveAdditive = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + AxisControl.Command.MoveAbsolute = false; + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 30.0, maxVelocity); + TEST_ASSERT_FLOAT_WITHIN(0.01, StartPosition + 5.0, AxisControl.Status.Position); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST MoveVelocity(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Velocity = 25; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.MoveVelocity = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(cycleCount < 30); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 25.0, maxVelocity); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 25; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveVelocity = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 25.0, maxVelocity); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST MoveJogPositiveStop(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.JogVelocity = 25; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.JogPositive = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(cycleCount < 30); - AxisControl.Command.JogPositive = false; - ActSubState = 2; - break; - case 2: - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.JogVelocity = 25; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.JogPositive = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + AxisControl.Command.JogPositive = false; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST MoveJogNegativeStop(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.JogVelocity = 25; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.JogNegative = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(cycleCount < 30); - AxisControl.Command.JogNegative = false; - ActSubState = 2; - break; - case 2: - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.JogVelocity = 25; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.JogNegative = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + AxisControl.Command.JogNegative = false; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST MoveAbsoluteStop(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Position = 1; - AxisControl.Parameters.Velocity = 25; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.MoveAbsolute = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(cycleCount < 30); - AxisControl.Command.MoveAbsolute = false; - AxisControl.Command.Stop = true; - ActSubState = 2; - break; - case 2: - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); - // check that we are not at the target position - TEST_ASSERT(fabs(1.0 - AxisControl.Status.Position) > 0.01); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Position = 1; + AxisControl.Parameters.Velocity = 25; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveAbsolute = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + AxisControl.Command.MoveAbsolute = false; + AxisControl.Command.Stop = true; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + // check that we are not at the target position + TEST_ASSERT(fabs(1.0 - AxisControl.Status.Position) > 0.01); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST MoveAdditiveStop(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Distance = 10; - AxisControl.Parameters.Velocity = 25; - StartPosition = AxisControl.Status.Position; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.MoveAdditive = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(cycleCount < 30); - AxisControl.Command.MoveAdditive = false; - AxisControl.Command.Stop = true; - ActSubState = 2; - break; - case 2: - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); - // check that we are not at the target position - TEST_ASSERT(fabs((StartPosition + 10.0) - AxisControl.Status.Position) > 0.01); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Distance = 10; + AxisControl.Parameters.Velocity = 25; + StartPosition = AxisControl.Status.Position; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveAdditive = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + AxisControl.Command.MoveAdditive = false; + AxisControl.Command.Stop = true; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + // check that we are not at the target position + TEST_ASSERT(fabs((StartPosition + 10.0) - AxisControl.Status.Position) > 0.01); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST MoveVelocityStop(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Velocity = 25; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.MoveVelocity = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(cycleCount < 30); - AxisControl.Command.MoveVelocity = false; - AxisControl.Command.Stop = true; - ActSubState = 2; - break; - case 2: - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 25; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveVelocity = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + AxisControl.Command.MoveVelocity = false; + AxisControl.Command.Stop = true; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST TriggerAlarm(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Velocity = 10001; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.MoveVelocity = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(cycleCount < 20); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); - TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, maxVelocity); - TEST_ASSERT(AxisControl.Status.ErrorActive); - TEST_ASSERT_EQUAL_INT(1, MpAlarmXCore_0.PendingAlarms); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 10001; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveVelocity = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 20); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, maxVelocity); + TEST_ASSERT(AxisControl.Status.ErrorActive); + TEST_ASSERT_EQUAL_INT(1, MpAlarmXCoreAxis.PendingAlarms); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST ResetAlarm(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Velocity = 10001; - StartingPendingAlarms = MpAlarmXCore_0.PendingAlarms; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.MoveVelocity = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(!AxisControl.Status.ErrorActive); - TEST_BUSY_CONDITION(MpAlarmXCore_0.PendingAlarms == StartingPendingAlarms); - AxisControl.Command.MoveVelocity = false; - ActSubState = 2; - break; - case 2: - // wait until the command is received by the axis task - TEST_BUSY_CONDITION(State != STATE_RESETTING); - AxisControl.Command.Reset = true; - MpAlarmXAcknowledgeAll_0.Execute = true; - ActSubState = 3; - break; - case 3: - TEST_BUSY_CONDITION(AxisControl.Status.Busy); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT(!AxisControl.Status.ErrorActive); - TEST_ASSERT_EQUAL_INT(0, MpAlarmXCore_0.PendingAlarms); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 10001; + StartingPendingAlarms = MpAlarmXCoreAxis.PendingAlarms; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveVelocity = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(!AxisControl.Status.ErrorActive); + TEST_BUSY_CONDITION(MpAlarmXCoreAxis.PendingAlarms == StartingPendingAlarms); + AxisControl.Command.MoveVelocity = false; + ActSubState = 2; + break; + case 2: + // wait until the command is received by the axis task + TEST_BUSY_CONDITION(State != STATE_RESETTING); + AxisControl.Command.Reset = true; + MpAlarmXAcknowledgeAll_0.Execute = true; + ActSubState = 3; + break; + case 3: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(!AxisControl.Status.ErrorActive); + TEST_ASSERT_EQUAL_INT(0, MpAlarmXCoreAxis.PendingAlarms); + TEST_DONE; + break; + } + TEST_BUSY; } _TEST UpdateVelocity(void) { - TIMEOUT_TEST_CASE - switch (TestState) - { - case TEST_ARRANGE: - AxisControl.Parameters.Velocity = 40; - TestState = TEST_ACT; - break; - - case TEST_ACT: - maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); - switch (ActSubState) - { - case 0: - AxisControl.Command.MoveVelocity = true; - TEST_BUSY_CONDITION(!AxisControl.Status.Busy); - ActSubState = 1; - break; - case 1: - TEST_BUSY_CONDITION(cycleCount < 30); - TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); - AxisControl.Command.UpdateVelocity = true; - AxisControl.Parameters.Velocity = 60; - ActSubState = 2; - break; - case 2: - TEST_BUSY_CONDITION(cycleCount < 60); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - // update velocity should not affect manual moves - TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); - TEST_DONE; - break; - } - TEST_BUSY; + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 40; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveVelocity = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); + AxisControl.Command.UpdateVelocity = true; + AxisControl.Parameters.Velocity = 60; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(cycleCount < 60); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + // update velocity should not affect manual moves + TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); + TEST_DONE; + break; + } + TEST_BUSY; } /* @@ -697,7 +697,7 @@ UNITTEST_FIXTURES(fixtures) new_TestFixture("MoveJogPositiveStop", MoveJogPositiveStop), new_TestFixture("MoveJogNegativeStop", MoveJogNegativeStop), new_TestFixture("MoveAbsoluteStop", MoveAbsoluteStop), - new_TestFixture("MoveAdditiveStop", MoveAdditiveStop), + new_TestFixture("MoveAdditiveStop", MoveAdditiveStop), new_TestFixture("MoveVelocityStop", MoveVelocityStop), new_TestFixture("TriggerAlarm", TriggerAlarm), new_TestFixture("ResetAlarm", ResetAlarm), diff --git a/mappFramework/Logical/UnitTest/Audit/AuditTest/Set_AuditMgr.c b/mappFramework/Logical/UnitTest/Audit/AuditTest/Set_AuditMgr.c index ff4cbf96..5d40acb2 100644 --- a/mappFramework/Logical/UnitTest/Audit/AuditTest/Set_AuditMgr.c +++ b/mappFramework/Logical/UnitTest/Audit/AuditTest/Set_AuditMgr.c @@ -1,211 +1,216 @@ -#include -#include - -#ifdef _DEFAULT_INCLUDES -#include -#endif - -#include "UnitTest.h" -#include -#include - -#define TIMEOUT_TEST_CASE \ - if (cycleCount >= 1000) \ - { \ - char abortMessage[80]; \ - char substate[10]; \ - memset(abortMessage, 0, sizeof(abortMessage)); \ - memset(substate, 0, sizeof(substate)); \ - itoa(TestState, substate, 10); \ - strcpy(abortMessage, "Timeout in State = "); \ - strcat(abortMessage, substate); \ - TEST_FAIL(abortMessage); \ - TEST_DONE; \ - } - -_SETUP_SET(void) -{ - cycleCount = 0; - - TEST_DONE; -} - -_TEARDOWN_SET(void) -{ - TEST_DONE; -} - - -_SETUP_TEST(void) -{ - ArrangeDelay = 0; - ActDelay = 0; - AssertDelay = 0; - ArrangeSubState = 0; - ActSubState = 0; - AssertSubState = 0; - SampleTemperature = 1; - TestComparisonNumber = 0; - TestState = TEST_ARRANGE; - cycleCount = 0; - - TEST_DONE; -} - -_TEARDOWN_TEST(void) -{ - ArrangeDelay = 0; - ActDelay = 0; - AssertDelay = 0; - SampleTemperature = 1; - TEST_DONE; -} - -_CYCLIC_SET(void) -{ - cycleCount++; -} - -_TEST ExportArchive(void) -{ - TIMEOUT_TEST_CASE; - - DirInfo_0.enable = 1; - DirInfo_0.pDevice = (UDINT) "mappAuditFiles"; - DirInfo_0.pPath = 0; - DirInfo(&DirInfo_0); - - switch (TestState) - { - case TEST_ARRANGE: - // Force an audit to be generated - switch (ArrangeSubState) - { - case 0: - SampleTemperature++; - TEST_BUSY_CONDITION(!HmiAudit.Status.ArchiveAvailable); - ArrangeSubState = 1; - break; - - case 1: - ArrangeDelay += 1; // This delay is compensating for the function block refreshing after finishing a command - TEST_BUSY_CONDITION(ArrangeDelay <= DelayCycles); - TestComparisonNumber = DirInfo_0.filenum; - TestState = TEST_ACT; - break; - } - break; - - case TEST_ACT: - // Archive audit - switch (ActSubState) - { - case 0: - HmiAudit.Commands.ExportArchives = 1; - TEST_ABORT_CONDITION(MpAuditTrailError); - TEST_BUSY_CONDITION(!MpAuditTrailCmdDone); - HmiAudit.Commands.ExportArchives = 0; - ActSubState = 1; - break; - - case 1: - ActDelay += 1; // This delay is compensating for the function block refreshing after finishing a command - TEST_BUSY_CONDITION(ActDelay <= DelayCycles); - TestState = TEST_ASSERT; - break; - } - break; - - case TEST_ASSERT: - TEST_ASSERT(TestComparisonNumber < DirInfo_0.filenum); - TEST_DONE; - break; - } -} - -_TEST AutomaticArchive(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case TEST_ARRANGE: - // Set automatic archive parameters prepare audit for generation - switch (ArrangeSubState) - { - case 0: - HmiAudit.Parameters.ArchiveSettings.Enable = 1; - HmiAudit.Parameters.ArchiveSettings.FileType = mpAUDIT_FILE_TYPE_XML; - HmiAudit.Parameters.ArchiveSettings.MaxSize = MAX_FILE_SIZE; - HmiAudit.Parameters.ArchiveSettings.Mode = mpAUDIT_ARCHIVE_DAILY; - HmiAudit.Parameters.ArchiveSettings.Hour = HOUR; - HmiAudit.Parameters.ArchiveSettings.Minute = MINUTE; - ArrangeSubState = 1; - break; - - case 1: - TestComparisonNumber = HmiAudit.Status.NumberOfArchives; - ArrangeSubState = 2; - break; - - case 2: - ArrangeDelay += 1; - TEST_BUSY_CONDITION(ArrangeDelay <= DelayCycles); - TestState = TEST_ACT; - break; - } - break; - - case TEST_ACT: - // Archive audit - switch (ActSubState) - { - case 0: - SampleTemperature = SAMPLE_TEMP_VALUE; - DTSetTime_0.DT1 = SET_TIME; - DTSetTime_0.enable = 1; - DTSetTime(&DTSetTime_0); - ActSubState = 1; - break; - - case 1: - TON_0.PT = TIMER_LENGTH; - TON_0.IN = 1; - TON(&TON_0); - if(TON_0.Q) - { - ActSubState = 2; - } - break; - - case 2: - TestState = TEST_ASSERT; - TON_0.IN = 0; - TON(&TON_0); - break; - } - break; - - case TEST_ASSERT: - // Check save location for archive - TEST_ASSERT(TestComparisonNumber + 1 <= HmiAudit.Status.NumberOfArchives); - TEST_DONE; - break; - } -} - -/* -B+R UnitTest: This is generated code. -Do not edit! Do not move! -Description: UnitTest Testprogramm infrastructure (TestSet). -LastUpdated: 2023-02-06 16:23:26Z -By B+R UnitTest Helper Version: 2.0.1.59 -*/ -UNITTEST_FIXTURES(fixtures) -{ - new_TestFixture("ExportArchive", ExportArchive), - new_TestFixture("AutomaticArchive", AutomaticArchive), -}; - -UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_AuditMgr, "Set_AuditMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, cyclicSetCaller); - +#include +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include +#include + +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 1000) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(TestState, substate, 10); \ + strcpy(abortMessage, "Timeout in State = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } + +_SETUP_SET(void) +{ + cycleCount = 0; + + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + TEST_DONE; +} + + +_SETUP_TEST(void) +{ + ArrangeDelay = 0; + ActDelay = 0; + AssertDelay = 0; + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + SampleTemperature = 1; + TestComparisonNumber = 0; + TestState = TEST_ARRANGE; + cycleCount = 0; + + TEST_DONE; +} + +_TEARDOWN_TEST(void) +{ + ArrangeDelay = 0; + ActDelay = 0; + AssertDelay = 0; + SampleTemperature = 1; + TEST_DONE; +} + +_CYCLIC_SET(void) +{ + cycleCount++; +} + +_TEST ExportArchive(void) +{ + TIMEOUT_TEST_CASE; + + DirInfo_0.enable = 1; + DirInfo_0.pDevice = (UDINT) "mappAuditFiles"; + DirInfo_0.pPath = 0; + DirInfo(&DirInfo_0); + + switch (TestState) + { + case TEST_ARRANGE: + // Force an audit to be generated + switch (ArrangeSubState) + { + case 0: + SampleTemperature++; + TEST_BUSY_CONDITION(!HmiAudit.Status.ArchiveAvailable); + ArrangeSubState = 1; + break; + + case 1: + ArrangeDelay += 1; // This delay is compensating for the function block refreshing after finishing a command + TEST_BUSY_CONDITION(ArrangeDelay <= DelayCycles); + TestComparisonNumber = DirInfo_0.filenum; + TestState = TEST_ACT; + break; + } + break; + + case TEST_ACT: + // Archive audit + switch (ActSubState) + { + case 0: + HmiAudit.Commands.ExportArchives = 1; + TEST_ABORT_CONDITION(MpAuditTrailError); + TEST_BUSY_CONDITION(!MpAuditTrailCmdDone); + HmiAudit.Commands.ExportArchives = 0; + ActSubState = 1; + break; + + case 1: + ActDelay += 1; // This delay is compensating for the function block refreshing after finishing a command + TEST_BUSY_CONDITION(ActDelay <= DelayCycles); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(TestComparisonNumber < DirInfo_0.filenum); + TEST_DONE; + break; + } + + TEST_BUSY; +} + +_TEST AutomaticArchive(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case TEST_ARRANGE: + // Set automatic archive parameters prepare audit for generation + switch (ArrangeSubState) + { + case 0: + HmiAudit.Parameters.ArchiveSettings.Enable = 1; + HmiAudit.Parameters.ArchiveSettings.FileType = mpAUDIT_FILE_TYPE_XML; + HmiAudit.Parameters.ArchiveSettings.MaxSize = MAX_FILE_SIZE; + HmiAudit.Parameters.ArchiveSettings.Mode = mpAUDIT_ARCHIVE_DAILY; + HmiAudit.Parameters.ArchiveSettings.Hour = HOUR; + HmiAudit.Parameters.ArchiveSettings.Minute = MINUTE; + ArrangeSubState = 1; + break; + + case 1: + TestComparisonNumber = HmiAudit.Status.NumberOfArchives; + ArrangeSubState = 2; + break; + + case 2: + ArrangeDelay += 1; + TEST_BUSY_CONDITION(ArrangeDelay <= DelayCycles); + TestState = TEST_ACT; + break; + } + break; + + case TEST_ACT: + // Archive audit + switch (ActSubState) + { + case 0: + SampleTemperature = SAMPLE_TEMP_VALUE; + DTSetTime_0.DT1 = SET_TIME; + DTSetTime_0.enable = 1; + DTSetTime(&DTSetTime_0); + ActSubState = 1; + break; + + case 1: + TON_0.PT = TIMER_LENGTH; + TON_0.IN = 1; + TON(&TON_0); + if(TON_0.Q) + { + ActSubState = 2; + } + break; + + case 2: + TestState = TEST_ASSERT; + TON_0.IN = 0; + TON(&TON_0); + break; + } + break; + + case TEST_ASSERT: + // Check save location for archive + TEST_ASSERT(TestComparisonNumber + 1 <= HmiAudit.Status.NumberOfArchives); + TEST_DONE; + break; + } + + TEST_BUSY; +} + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2023-02-06 16:23:26Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("ExportArchive", ExportArchive), + new_TestFixture("AutomaticArchive", AutomaticArchive), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_AuditMgr, "Set_AuditMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, cyclicSetCaller); + diff --git a/mappFramework/Logical/UnitTest/File/FileUnitTest/Set_FileMgr.c b/mappFramework/Logical/UnitTest/File/FileUnitTest/Set_FileMgr.c index 4cc063e0..73fe586a 100644 --- a/mappFramework/Logical/UnitTest/File/FileUnitTest/Set_FileMgr.c +++ b/mappFramework/Logical/UnitTest/File/FileUnitTest/Set_FileMgr.c @@ -1,2180 +1,2846 @@ -#include - -#ifdef _DEFAULT_INCLUDES -#include -#endif - -#include "UnitTest.h" -#include -#include - -#define TIMEOUT_TEST_CASE \ - if (cycleCount >= 1000) \ - { \ - char abortMessage[80]; \ - char substate[10]; \ - memset(abortMessage, 0, sizeof(abortMessage)); \ - memset(substate, 0, sizeof(substate)); \ - itoa(TestState, substate, 10); \ - strcpy(abortMessage, "Timeout in State = "); \ - strcat(abortMessage, substate); \ - TEST_FAIL(abortMessage); \ - TEST_DONE; \ - } - -_SETUP_SET(void) -{ - TestState = 0; - FileNumber = 0; - - HmiFile_UT.Parameters.Fifo.Enable = false; - HmiFile_UT.Parameters.Fifo.ScanInterval = 60; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - - switch (SetupState) - { - case 0: - TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep != FILE_DISABLED); - for (USINT i=0; i= NumberOfFiles) ? 100 : 1; - break; - - case 10: - TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect_FIFO.File.Refresh = true; - TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect_FIFO.File.Refresh = false; - SetupState = 11; - break; - - case 11: - TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status != mpFILE_UI_STATUS_IDLE); - SetupState = 100; - break; - - case 100: - TEST_DONE; - } - TEST_BUSY; -} - -_TEARDOWN_SET(void) -{ - /* TODO: add code running after test set here */ - TEST_DONE; -} - -bool FileIdleOrDisabled(void) { - return ((HmiFile_UT.Status.DeleteStep == FILE_DELETE_WAIT) || (HmiFile_UT.Status.DeleteStep == FILE_DISABLED)); -} - -_SETUP_TEST(void) { - TestState = 0; - ArrangeSubState = 0; - ActSubState = 0; - AssertSubState = 0; - FileNumber = 0; - cycleCount = 0; - NameMatch = 0; - InNewLocation = 0; - InOldLocation = 0; - MultiSelectDirCopy = 0; - MultiSelectFileCopy = 0; - HmiFile.Status.SelectedIndex = 0; - MpFileManagerUIConnect.File.Copy = 0; - MpFileManagerUIConnect.File.CreateFolder = 0; - MpFileManagerUIConnect.File.Cut = 0; - MpFileManagerUIConnect.File.Delete = 0; - MpFileManagerUIConnect.File.EnterFolder = 0; - MpFileManagerUIConnect.File.FolderUp = 0; - MpFileManagerUIConnect.File.MultiSelect = 0; - MpFileManagerUIConnect.File.Paste = 0; - MpFileManagerUIConnect.File.Refresh = 0; - MpFileManagerUIConnect.File.Rename = 0; - - HmiFile_UT.Parameters.Fifo.Enable = false; - HmiFile_UT.Parameters.Fifo.ScanInterval = 60; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - - switch (SetupState) - { - case 0: - TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep != FILE_DISABLED); - for (USINT i=0; i= NumberOfFiles) ? 100 : 1; - break; - - case 10: - TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect_FIFO.File.Refresh = true; - TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect_FIFO.File.Refresh = false; - SetupState = 11; - break; - - case 11: - TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status != mpFILE_UI_STATUS_IDLE); - SetupState = 100; - break; - - case 100: - TEST_DONE; - } - TEST_BUSY; -} - -_TEARDOWN_TEST(void) -{ - HmiFile_UT.Parameters.Fifo.Enable = false; - HmiFile_UT.Parameters.Fifo.ScanInterval = 60; - - TestState = 0; - ArrangeSubState = 0; - ActSubState = 0; - AssertSubState = 0; - cycleCount = 0; - NameMatch = 0; - InNewLocation = 0; - InOldLocation = 0; - MultiSelectDirCopy = 0; - MultiSelectFileCopy = 0; - HmiFile.Status.SelectedIndex = 0; - MpFileManagerUIConnect.File.Copy = 0; - MpFileManagerUIConnect.File.CreateFolder = 0; - MpFileManagerUIConnect.File.Cut = 0; - MpFileManagerUIConnect.File.Delete = 0; - MpFileManagerUIConnect.File.EnterFolder = 0; - MpFileManagerUIConnect.File.FolderUp = 0; - MpFileManagerUIConnect.File.MultiSelect = 0; - MpFileManagerUIConnect.File.Paste = 0; - MpFileManagerUIConnect.File.Refresh = 0; - MpFileManagerUIConnect.File.Rename = 0; - brsmemcpy(&MpFileManagerUIConnect.File.Filter, &"", sizeof(MpFileManagerUIConnect.File.Filter)); - - HmiFile.Commands.Delete = 0; - HmiFile.Commands.EnterFolder = 0; - HmiFile.Commands.FolderUp = 0; - HmiFile.Commands.MultiSelect = 0; - HmiFile.Status.SelectedIndex = 0; - - FileCreate_0.enable = 0; - FileClose_0.enable = 0; - FileCreate(&FileCreate_0); - FileClose(&FileClose_0); - - TEST_DONE; -} - -_CYCLIC_SET(void) -{ - cycleCount++; -} - -_TEST Create_Directory(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select Recipe file device and input directory name - switch (ArrangeSubState) - { - case 0: - MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; - brsmemcpy(&MpFileManagerUIConnect.File.NewName, &DirName, sizeof(MpFileManagerUIConnect.File.NewName)); - ArrangeSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.File.Refresh = 1; - ArrangeSubState = 2; - break; - - case 2: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != 0); - MpFileManagerUIConnect.File.Refresh = 0; - ArrangeSubState = 3; - break; - - case 3: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != 0); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &DirName) == 0) - { - TEST_ABORT_MSG("Directory with chosen name already exists"); - } - } - TestState = 1; - break; - } - break; - - case 1: - // Create directory - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.CreateFolder = 1; - ActSubState = 1; - break; - - case 1: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CREATE); - MpFileManagerUIConnect.File.CreateFolder = 0; - ActSubState = 2; - - case 2: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 3; - break; - - case 3: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 4; - break; - - case 4: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &DirName) == 0) - { - NameMatch = 1; - } - } - TestState = 2; - break; - } - break; - - case 2: - // Check save location for directory - TEST_ASSERT(NameMatch); - TEST_DONE; - break; - } -} - -_TEST Add_File(void) -{ - TIMEOUT_TEST_CASE; - - FileCreate(&FileCreate_0); - FileClose(&FileClose_0); - - switch (TestState) - { - case 0: - // Select Recipe file device and input file name - switch (ArrangeSubState) - { - case 0: - FileCreate_0.pDevice = (UDINT)&"mappRecipeFiles"; - FileCreate_0.pFile = (UDINT)&CreateFileName; - ArrangeSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.File.Refresh = 1; - ArrangeSubState = 2; - break; - - case 2: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Refresh = 0; - ArrangeSubState = 3; - break; - - case 3: // Check to make sure there isn't already a file by the specified name in the directory - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != 0); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CreateFileName) == 0) - { - TEST_ABORT_MSG("File with chosen name already exists"); - } - } - TestState = 1; - break; - } - break; - - case 1: - // Create file - switch (ActSubState) - { - case 0: - FileCreate_0.enable = 1; - ActSubState = 1; - break; - - case 1: - if((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) - { - TEST_ABORT_MSG("FileCreate function block has an error"); - } - TEST_BUSY_CONDITION(FileCreate_0.status != 0); - FileClose_0.ident = FileCreate_0.ident; - FileClose_0.enable = 1; - FileCreate_0.enable = 0; - ActSubState = 2; - break; - - case 2: - if((FileClose_0.status != 0) && (FileClose_0.status != 65535)) - { - TEST_ABORT_MSG("FileClose function block has an error"); - } - TEST_BUSY_CONDITION(FileClose_0.status != 0); - FileClose_0.enable = 0; - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 3; - break; - - case 3: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 4; - break; - - case 4: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - ActSubState = 5; - break; - - case 5: - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CreateFileName) == 0) - { - NameMatch = 1; - } - } - TestState = 2; - break; - } - break; - - case 2: - // Check save location for file - TEST_ASSERT(NameMatch); - TEST_DONE; - break; - } -} - -_TEST Copy_File(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select Recipe file device and input name of file to be copied - switch (ArrangeSubState) - { - case 0: - MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; - ArrangeSubState = 1; - break; - - case 1: - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CreateFileName) == 0) - HmiFile.Status.SelectedIndex = i; - } - TestState = 1; - break; - } - break; - - case 1: - // Copy/paste file - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.Copy = 1; - ActSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.File.Copy = 0; - MpFileManagerUIConnect.File.Paste = 1; - ActSubState = 2; - break; - - case 2: - MpFileManagerUIConnect.File.Paste = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_PASTE); - ActSubState = 3; - break; - - case 3: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 4; - break; - - case 4: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 5; - break; - - case 5: - // Check file list for copied file - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CopiedFileName) == 0) - { - NameMatch = 1; - } - } - TestState = 2; - break; - } - break; - - case 2: - // Check if copied file was found - TEST_ASSERT(NameMatch); - TEST_DONE; - break; - } -} - -_TEST Copy_Directory(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select Recipe file device and input name of directory to be copied - switch (ArrangeSubState) - { - case 0: - MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; - ArrangeSubState = 1; - break; - - case 1: - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &DirName) == 0) - HmiFile.Status.SelectedIndex = i; - } - TestState = 1; - break; - } - break; - - case 1: - // Copy/paste directory - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.Copy = 1; - ActSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.File.Copy = 0; - MpFileManagerUIConnect.File.Paste = 1; - ActSubState = 2; - break; - - case 2: - MpFileManagerUIConnect.File.Paste = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_PASTE); - ActSubState = 3; - break; - - case 3: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 4; - break; - - case 4: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 5; - break; - - case 5: - // Check file list for copied directory - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CopiedDirName) == 0) - { - NameMatch = 1; - } - } - TestState = 2; - break; - } - break; - - case 2: - // Check if copied directory was found - TEST_ASSERT(NameMatch); - TEST_DONE; - break; - } -} - -_TEST Rename_File(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select Recipe file device and input name of file to be renamed and new name - switch (ArrangeSubState) - { - case 0: - MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; - brsmemcpy(&MpFileManagerUIConnect.File.NewName, &NewFileName, sizeof(MpFileManagerUIConnect.File.NewName)); - ArrangeSubState = 1; - break; - - case 1: - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CopiedFileName) == 0) - HmiFile.Status.SelectedIndex = i; - } - TestState = 1; - break; - } - break; - - case 1: - // Rename file - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.Rename = 1; - ActSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.File.Rename = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 2; - break; - - case 2: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 3; - break; - - case 3: - // Check file list for renamed file - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &NewFileName) == 0) - { - NameMatch = 1; - } - } - TestState = 2; - break; - } - break; - - case 2: - // Check if renamed file was found - TEST_ASSERT(NameMatch); - TEST_DONE; - break; - } -} - -_TEST Rename_Directory(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select Recipe file device and input name of directory to be renamed and new name - switch (ArrangeSubState) - { - case 0: - MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; - brsmemcpy(&MpFileManagerUIConnect.File.NewName, &NewDirName, sizeof(MpFileManagerUIConnect.File.NewName)); - ArrangeSubState = 1; - break; - - case 1: - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CopiedDirName) == 0) - HmiFile.Status.SelectedIndex = i; - } - TestState = 1; - break; - } - break; - - case 1: - // Rename directory - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.Rename = 1; - ActSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.File.Rename = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 2; - break; - - case 2: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 3; - break; - - case 3: - // Check file list for renamed directory - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &NewDirName) == 0) - { - NameMatch = 1; - } - } - TestState = 2; - break; - } - break; - - case 2: - // Check if renamed directory was found - TEST_ASSERT(NameMatch); - TEST_DONE; - break; - } -} - -_TEST Cut_Paste_File(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select Recipe file device and input name of file to be cut - switch (ArrangeSubState) - { - case 0: - MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; - MpFileManagerUIConnect.File.Refresh = 1; - ArrangeSubState = 1; - break; - - case 1: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ArrangeSubState = 2; - break; - - case 2: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &NewFileName) == 0) - HmiFile.Status.SelectedIndex = i; - } - TestState = 1; - break; - } - break; - - case 1: - // Cut/paste file - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.Cut = 1; - ActSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.File.Cut = 0; - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &DirName) == 0) - HmiFile.Status.SelectedIndex = i; - } - ActSubState = 2; - break; - - case 2: - HmiFile.Commands.EnterFolder = 1; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); - HmiFile.Commands.EnterFolder = 0; - ActSubState = 3; - break; - - case 3: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Paste = 1; - ActSubState = 4; - break; - - case 4: - MpFileManagerUIConnect.File.Paste = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_PASTE); - ActSubState = 5; - break; - - case 5: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 6; - break; - - case 6: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 7; - break; - - case 7: - // Check paste location for cut file - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &NewFileName) == 0) - { - InNewLocation = 1; - } - } - HmiFile.Commands.FolderUp = 1; - ActSubState = 8; - break; - - case 8: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); - HmiFile.Commands.FolderUp = 0; - ActSubState = 9; - break; - - case 9: - // Check old location for cut file - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &NewFileName) == 0) - { - InOldLocation = 1; - } - } - TestState = 2; - break; - } - break; - - case 2: - // Check new and old locations for file - TEST_ASSERT(InNewLocation); - TEST_ASSERT(!InOldLocation); - TEST_DONE; - break; - } -} - -_TEST Cut_Paste_Directory(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select Recipe file device and input name of directory to be cut - switch (ArrangeSubState) - { - case 0: - MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; - ArrangeSubState = 1; - break; - - case 1: - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &NewDirName) == 0) - HmiFile.Status.SelectedIndex = i; - } - TestState = 1; - break; - } - break; - - case 1: - // Cut/paste directory - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.Cut = 1; - ActSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.File.Cut = 0; - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 2; - break; - - case 2: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 3; - break; - - case 3: - // Find folder to paste directory into - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &DirName) == 0) - HmiFile.Status.SelectedIndex = i; - } - ActSubState = 4; - break; - - case 4: - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 5; - break; - - case 5: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 6; - break; - - case 6: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - HmiFile.Commands.EnterFolder = 1; - ActSubState = 7; - break; - - case 7: - HmiFile.Commands.EnterFolder = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); - ActSubState = 8; - break; - - case 8: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Paste = 1; - ActSubState = 9; - break; - - case 9: - MpFileManagerUIConnect.File.Paste = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_PASTE); - ActSubState = 10; - break; - - case 10: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 11; - break; - - case 11: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 12; - break; - - case 12: - // Check new location for cut directory - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &NewDirName) == 0) - { - InNewLocation = 1; - } - } - HmiFile.Commands.FolderUp = 1; - ActSubState = 13; - break; - - case 13: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); - HmiFile.Commands.FolderUp = 0; - ActSubState = 14; - break; - - case 14: - // Check old location for cut directory - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &NewDirName) == 0) - { - InOldLocation = 1; - } - } - TestState = 2; - break; - } - break; - - case 2: - // Check new and old locations for directory - TEST_ASSERT(InNewLocation); - TEST_ASSERT(!InOldLocation); - TEST_DONE; - break; - } -} - -_TEST Multiselect(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select Recipe file device and navigate into directory with test files - switch (ArrangeSubState) - { - case 0: - MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; - ArrangeSubState = 1; - break; - - case 1: - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &DirName) == 0) - HmiFile.Status.SelectedIndex = i; - } - ArrangeSubState = 2; - break; - - case 2: - MpFileManagerUIConnect.File.Refresh = 1; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ArrangeSubState = 3; - break; - - case 3: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - HmiFile.Commands.EnterFolder = 1; - ArrangeSubState = 4; - break; - - case 4: - HmiFile.Commands.EnterFolder = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); - ArrangeSubState = 5; - break; - - case 5: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - TestState = 1; - break; - } - break; - - case 1: - // Select multiple files/directories and copy/paste - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.MultiSelect = 1; - ActSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.File.List.Items[0].IsSelected = 1; - MpFileManagerUIConnect.File.List.Items[1].IsSelected = 1; - ActSubState = 2; - break; - - case 2: - MpFileManagerUIConnect.File.Copy = 1; - ActSubState = 3; - break; - - case 3: - MpFileManagerUIConnect.File.Copy = 0; - MpFileManagerUIConnect.File.MultiSelect = 0; - MpFileManagerUIConnect.File.Paste = 1; - ActSubState = 4; - break; - - case 4: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_PASTE); - MpFileManagerUIConnect.File.Paste = 0; - ActSubState = 5; - break; - - case 5: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 6; - break; - - case 6: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 7; - break; - - case 7: - // Check for copied file - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CopiedNewFileName) == 0) - MultiSelectFileCopy = 1; - } - ActSubState = 8; - break; - - case 8: - // Check for copied directory - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CopiedNewDirName) == 0) - MultiSelectDirCopy = 1; - } - ActSubState = 9; - break; - - case 9: - HmiFile.Commands.FolderUp = 1; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); - HmiFile.Commands.FolderUp = 0; - ActSubState = 10; - break; - - case 10: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - TestState = 2; - break; - } - break; - - case 2: - // Check if copied file and directory were found - TEST_ASSERT(MultiSelectFileCopy); - TEST_ASSERT(MultiSelectDirCopy); - TEST_DONE; - break; - } -} - -_TEST Search(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Set filter value to name of file - MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; - brsmemcpy(&MpFileManagerUIConnect.File.Filter, &CreateFileName, sizeof(MpFileManagerUIConnect.File.Filter)); - TestState = 1; - break; - - case 1: - // Refresh MpFileManagerUIConnect - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 1; - break; - - case 1: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 2; - break; - - case 2: - // Check if the first item in the file list is the desired file - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[0].Name, &CreateFileName) == 0) - NameMatch = 1; - ActSubState = 3; - break; - - case 3: - // Reset filter - brsmemcpy(&MpFileManagerUIConnect.File.Filter, &"", sizeof(MpFileManagerUIConnect.File.Filter)); - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 4; - break; - - case 4: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 5; - break; - - case 5: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - TestState = 2; - break; - } - break; - - case 2: - // Check if filter worked - TEST_ASSERT(NameMatch); - TEST_DONE; - break; - } -} - -_TEST Enter_Folder(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select folder to enter - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &DirName) == 0) - HmiFile.Status.SelectedIndex = i; - } - TestState = 1; - break; - - case 1: - // Give HMI command to enter folder - switch (ActSubState) - { - case 0: - // Acts as a delay to let the folder selection make its way to FileMgr task - ActSubState = 1; - break; - - case 1: - HmiFile.Commands.EnterFolder = 1; - ActSubState = 2; - break; - - case 2: - HmiFile.Commands.EnterFolder = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); - ActSubState = 3; - break; - - case 3: - // Check if current directory matches what is expected - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - if(brsstrcmp(&MpFileManagerUIConnect.File.PathInfo.CurrentDir , &DirName) == 0) - NameMatch = 1; - ActSubState = 4; - break; - - case 4: - // Go back up to root folder - HmiFile.Commands.FolderUp = 1; - ActSubState = 5; - break; - - case 5: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); - HmiFile.Commands.FolderUp = 0; - ActSubState = 6; - break; - - case 6: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - TestState = 2; - break; - } - break; - - case 2: - TEST_ASSERT(NameMatch); - TEST_DONE; - break; - } -} - -_TEST Go_Up_Level(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select folder to enter - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &DirName) == 0) - HmiFile.Status.SelectedIndex = i; - } - TestState = 1; - break; - - case 1: - // Give HMI command to enter folder - switch (ActSubState) - { - case 0: - // Acts as a delay to let the folder selection make its way to FileMgr task - ActSubState = 1; - break; - - case 1: - HmiFile.Commands.EnterFolder = 1; - ActSubState = 2; - break; - - case 2: - HmiFile.Commands.EnterFolder = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); - ActSubState = 3; - break; - - case 3: - // Check if folder was successfully entered - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - if(brsstrcmp(&MpFileManagerUIConnect.File.PathInfo.CurrentDir , &DirName) != 0) - { - TEST_ABORT_MSG("Directory was not successfully entered"); - } - ActSubState = 4; - break; - - case 4: - // Go back up to root folder - HmiFile.Commands.FolderUp = 1; - ActSubState = 5; - break; - - case 5: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); - HmiFile.Commands.FolderUp = 0; - ActSubState = 6; - break; - - case 6: - // Check if folder level went back up to the root - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - if(brsstrcmp(&MpFileManagerUIConnect.File.PathInfo.CurrentDir , &"") == 0) - NameMatch = 1; - TestState = 2; - break; - } - break; - - case 2: - TEST_ASSERT(NameMatch); - TEST_DONE; - break; - } -} - -_TEST Change_Sort(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Change SortOrder value - MpFileManagerUIConnect.File.SortOrder = 5; - TestState = 1; - break; - - case 1: - switch (ActSubState) - { - case 0: - // Wait for sort to take effect - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_SORT); - ActSubState = 1; - break; - - case 1: - // Make sure sort worked correctly - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[0].Name, &DirName) == 0) - NameMatch = 1; - ActSubState = 2; - break; - - case 2: - MpFileManagerUIConnect.File.SortOrder = 0; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_SORT); - ActSubState = 3; - break; - - case 3: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - TestState = 2; - break; - } - break; - - case 2: - TEST_ASSERT(NameMatch); - TEST_DONE; - break; - } -} - -_TEST Delete_File(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select file to be deleted - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CreateFileName) == 0) - HmiFile.Status.SelectedIndex = i; - } - TestState = 1; - break; - - case 1: - // Delete file - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.Delete = 1; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_DELETE); - MpFileManagerUIConnect.File.Delete = 0; - ActSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.MessageBox.Confirm = 1; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.MessageBox.Confirm = 0; - ActSubState = 2; - break; - - case 2: - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 3; - break; - - case 3: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 4; - break; - - case 4: - // Check for file - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &CreateFileName) == 0) - NameMatch = 1; - } - TestState = 2; - break; - } - break; - - case 2: - // Check if file was deleted - TEST_ASSERT(!NameMatch); - TEST_DONE; - break; - } -} - -_TEST Delete_Directory(void) -{ - TIMEOUT_TEST_CASE; - - switch (TestState) - { - case 0: - // Select directory to be deleted - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &DirName) == 0) - HmiFile.Status.SelectedIndex = i; - } - TestState = 1; - break; - - case 1: - // Delete file - switch (ActSubState) - { - case 0: - MpFileManagerUIConnect.File.Delete = 1; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_DELETE); - MpFileManagerUIConnect.File.Delete = 0; - ActSubState = 1; - break; - - case 1: - MpFileManagerUIConnect.MessageBox.Confirm = 1; - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); - MpFileManagerUIConnect.MessageBox.Confirm = 0; - ActSubState = 2; - break; - break; - - case 2: - MpFileManagerUIConnect.File.Refresh = 1; - ActSubState = 3; - break; - - case 3: - TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); - MpFileManagerUIConnect.File.Refresh = 0; - ActSubState = 4; - break; - - case 4: - // Check for file - for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) - { - if(brsstrcmp(&MpFileManagerUIConnect.File.List.Items[i].Name, &DirName) == 0) - NameMatch = 1; - } - TestState = 2; - break; - } - break; - - case 2: - // Check if file was deleted - TEST_ASSERT(!NameMatch); - TEST_DONE; - break; - } -} - -_TEST FIFO_20(void) -{ - TEST_DONE; - switch (TestState) - { - // Arrange - case 0: - FileCreate_UT.enable = true; - FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; - snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); - FileCreate_UT.pFile = (UDINT)&FileName; - FileCreate(&FileCreate_UT); - - TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); - TEST_ABORT_CONDITION(FileCreate_UT.status != 0); - TestState = 1; - break; - - case 1: - FileClose_UT.enable = true; - FileClose_UT.ident = FileCreate_UT.ident; - FileClose(&FileClose_UT); - - TEST_BUSY_CONDITION(FileClose_UT.status == 65535); - TEST_ABORT_CONDITION(FileClose_UT.status != 0); - - FileNumber++; - TestState = (FileNumber >= 20) ? 10 : 0; - break; - - // Act - case 10: - HmiFile_UT.Parameters.Fifo.Enable = true; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; - HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 10; - HmiFile_UT.Parameters.Fifo.ScanInterval = 0; - TEST_BUSY_CONDITION(FileIdleOrDisabled()); - TestState = 100; - break; - - // Assert - case 100: - TEST_BUSY_CONDITION(!FileIdleOrDisabled()); - HmiFile_UT.Parameters.Fifo.Enable = false; - - DirInfo_UT.enable = true; - DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; - DirInfo_UT.pPath = (UDINT)&""; - DirInfo(&DirInfo_UT); - TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); - TEST_ABORT_CONDITION(DirInfo_UT.status != 0); - TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); - TEST_DONE; - break; - } - TEST_BUSY; -} - -_TEST FIFO_60(void) -{ - TEST_DONE; - switch (TestState) - { - // Arrange - case 0: - FileCreate_UT.enable = true; - FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; - snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); - FileCreate_UT.pFile = (UDINT)&FileName; - FileCreate(&FileCreate_UT); - - TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); - TEST_ABORT_CONDITION(FileCreate_UT.status != 0); - TestState = 1; - break; - - case 1: - FileClose_UT.enable = true; - FileClose_UT.ident = FileCreate_UT.ident; - FileClose(&FileClose_UT); - - TEST_BUSY_CONDITION(FileClose_UT.status == 65535); - TEST_ABORT_CONDITION(FileClose_UT.status != 0); - - FileNumber++; - TestState = (FileNumber >= 60) ? 10 : 0; - break; - - // Act - case 10: - HmiFile_UT.Parameters.Fifo.Enable = true; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; - HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 15; - HmiFile_UT.Parameters.Fifo.ScanInterval = 0; - TEST_BUSY_CONDITION(FileIdleOrDisabled()); - TestState = 100; - break; - - // Assert - case 100: - TEST_BUSY_CONDITION(!FileIdleOrDisabled()); - HmiFile_UT.Parameters.Fifo.Enable = false; - - DirInfo_UT.enable = true; - DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; - DirInfo_UT.pPath = (UDINT)&""; - DirInfo(&DirInfo_UT); - TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); - TEST_ABORT_CONDITION(DirInfo_UT.status != 0); - TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); - TEST_DONE; - break; - - } - TEST_BUSY; -} - -_TEST FIFO_140(void) -{ - TEST_DONE; - switch (TestState) - { - // Arrange - case 0: - FileCreate_UT.enable = true; - FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; - snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); - FileCreate_UT.pFile = (UDINT)&FileName; - FileCreate(&FileCreate_UT); - - TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); - TEST_ABORT_CONDITION(FileCreate_UT.status != 0); - TestState = 1; - break; - - case 1: - FileClose_UT.enable = true; - FileClose_UT.ident = FileCreate_UT.ident; - FileClose(&FileClose_UT); - - TEST_BUSY_CONDITION(FileClose_UT.status == 65535); - TEST_ABORT_CONDITION(FileClose_UT.status != 0); - - FileNumber++; - TestState = (FileNumber >= 140) ? 10 : 0; - break; - - // Act - case 10: - HmiFile_UT.Parameters.Fifo.Enable = true; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; - HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 15; - HmiFile_UT.Parameters.Fifo.ScanInterval = 0; - TEST_BUSY_CONDITION(FileIdleOrDisabled()); - TestState = 100; - break; - - // Assert - case 100: - TEST_BUSY_CONDITION(!FileIdleOrDisabled()); - HmiFile_UT.Parameters.Fifo.Enable = false; - - DirInfo_UT.enable = true; - DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; - DirInfo_UT.pPath = (UDINT)&""; - DirInfo(&DirInfo_UT); - TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); - TEST_ABORT_CONDITION(DirInfo_UT.status != 0); - TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); - TEST_DONE; - break; - - } - TEST_BUSY; -} - -_TEST FIFO_MaxFiles60(void) -{ - TEST_DONE; - switch (TestState) - { - // Arrange - case 0: - FileCreate_UT.enable = true; - FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; - snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); - FileCreate_UT.pFile = (UDINT)&FileName; - FileCreate(&FileCreate_UT); - - TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); - TEST_ABORT_CONDITION(FileCreate_UT.status != 0); - TestState = 1; - break; - - case 1: - FileClose_UT.enable = true; - FileClose_UT.ident = FileCreate_UT.ident; - FileClose(&FileClose_UT); - - TEST_BUSY_CONDITION(FileClose_UT.status == 65535); - TEST_ABORT_CONDITION(FileClose_UT.status != 0); - - FileNumber++; - TestState = (FileNumber >= 100) ? 10 : 0; - break; - - // Act - case 10: - HmiFile_UT.Parameters.Fifo.Enable = true; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; - HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 60; - HmiFile_UT.Parameters.Fifo.ScanInterval = 0; - TEST_BUSY_CONDITION(FileIdleOrDisabled()); - TestState = 100; - break; - - // Assert - case 100: - TEST_BUSY_CONDITION(!FileIdleOrDisabled()); - HmiFile_UT.Parameters.Fifo.Enable = false; - - DirInfo_UT.enable = true; - DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; - DirInfo_UT.pPath = (UDINT)&""; - DirInfo(&DirInfo_UT); - TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); - TEST_ABORT_CONDITION(DirInfo_UT.status != 0); - TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); - TEST_DONE; - break; - - } - TEST_BUSY; -} - -_TEST FIFO_MaxFiles120(void) -{ - TEST_DONE; - switch (TestState) - { - // Arrange - case 0: - FileCreate_UT.enable = true; - FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; - snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); - FileCreate_UT.pFile = (UDINT)&FileName; - FileCreate(&FileCreate_UT); - - TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); - TEST_ABORT_CONDITION(FileCreate_UT.status != 0); - TestState = 1; - break; - - case 1: - FileClose_UT.enable = true; - FileClose_UT.ident = FileCreate_UT.ident; - FileClose(&FileClose_UT); - - TEST_BUSY_CONDITION(FileClose_UT.status == 65535); - TEST_ABORT_CONDITION(FileClose_UT.status != 0); - - FileNumber++; - TestState = (FileNumber >= 200) ? 10 : 0; - break; - - // Act - case 10: - HmiFile_UT.Parameters.Fifo.Enable = true; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; - HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 120; - HmiFile_UT.Parameters.Fifo.ScanInterval = 0; - TEST_BUSY_CONDITION(FileIdleOrDisabled()); - TestState = 100; - break; - - // Assert - case 100: - TEST_BUSY_CONDITION(!FileIdleOrDisabled()); - HmiFile_UT.Parameters.Fifo.Enable = false; - - DirInfo_UT.enable = true; - DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; - DirInfo_UT.pPath = (UDINT)&""; - DirInfo(&DirInfo_UT); - TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); - TEST_ABORT_CONDITION(DirInfo_UT.status != 0); - TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); - TEST_DONE; - break; - - } - TEST_BUSY; -} - -_TEST FIFO_MaxFolderSize_30Files(void) -{ - TEST_DONE; - switch (TestState) - { - // Arrange - case 0: - FileCreate_UT.enable = true; - FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; - snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); - FileCreate_UT.pFile = (UDINT)&FileName; - FileCreate(&FileCreate_UT); - - TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); - TEST_ABORT_CONDITION(FileCreate_UT.status != 0); - TestState = 1; - break; - - case 1: - FileWrite_UT.enable = true; - FileWrite_UT.ident = FileCreate_UT.ident; - FileWrite_UT.offset = 0; - FileWrite_UT.pSrc = (UDINT)&testData; - FileWrite_UT.len = sizeof(testData); - FileWrite(&FileWrite_UT); - TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); - TEST_ABORT_CONDITION(FileWrite_UT.status != 0); - TestState = 2; - break; - - case 2: - FileClose_UT.enable = true; - FileClose_UT.ident = FileCreate_UT.ident; - FileClose(&FileClose_UT); - - TEST_BUSY_CONDITION(FileClose_UT.status == 65535); - TEST_ABORT_CONDITION(FileClose_UT.status != 0); - - FileNumber++; - TestState = (FileNumber >= 30) ? 10 : 0; - break; - - // Act - case 10: - HmiFile_UT.Parameters.Fifo.Enable = true; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; - HmiFile_UT.Parameters.Fifo.MaxFolderSize = 20; - HmiFile_UT.Parameters.Fifo.ScanInterval = 0; - TEST_BUSY_CONDITION(FileIdleOrDisabled()); - TestState = 100; - break; - - // Assert - case 100: - TEST_BUSY_CONDITION(!FileIdleOrDisabled()); - HmiFile_UT.Parameters.Fifo.Enable = false; - - DirInfo_UT.enable = true; - DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; - DirInfo_UT.pPath = (UDINT)&""; - DirInfo(&DirInfo_UT); - TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); - TEST_ABORT_CONDITION(DirInfo_UT.status != 0); - TEST_ASSERT_EQUAL_INT(20, DirInfo_UT.filenum); - TEST_DONE; - break; - - } - TEST_BUSY; -} - -_TEST FIFO_MaxFolderSize_60Files(void) -{ - TEST_DONE; - switch (TestState) - { - // Arrange - case 0: - FileCreate_UT.enable = true; - FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; - snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); - FileCreate_UT.pFile = (UDINT)&FileName; - FileCreate(&FileCreate_UT); - - TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); - TEST_ABORT_CONDITION(FileCreate_UT.status != 0); - TestState = 1; - break; - - case 1: - FileWrite_UT.enable = true; - FileWrite_UT.ident = FileCreate_UT.ident; - FileWrite_UT.offset = 0; - FileWrite_UT.pSrc = (UDINT)&testData; - FileWrite_UT.len = sizeof(testData); - FileWrite(&FileWrite_UT); - TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); - TEST_ABORT_CONDITION(FileWrite_UT.status != 0); - TestState = 2; - break; - - case 2: - FileClose_UT.enable = true; - FileClose_UT.ident = FileCreate_UT.ident; - FileClose(&FileClose_UT); - - TEST_BUSY_CONDITION(FileClose_UT.status == 65535); - TEST_ABORT_CONDITION(FileClose_UT.status != 0); - - FileNumber++; - TestState = (FileNumber >= 60) ? 10 : 0; - break; - - // Act - case 10: - HmiFile_UT.Parameters.Fifo.Enable = true; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; - HmiFile_UT.Parameters.Fifo.MaxFolderSize = 40; - HmiFile_UT.Parameters.Fifo.ScanInterval = 0; - TEST_BUSY_CONDITION(FileIdleOrDisabled()); - TestState = 100; - break; - - // Assert - case 100: - TEST_BUSY_CONDITION(!FileIdleOrDisabled()); - HmiFile_UT.Parameters.Fifo.Enable = false; - - DirInfo_UT.enable = true; - DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; - DirInfo_UT.pPath = (UDINT)&""; - DirInfo(&DirInfo_UT); - TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); - TEST_ABORT_CONDITION(DirInfo_UT.status != 0); - TEST_ASSERT_EQUAL_INT(40, DirInfo_UT.filenum); - TEST_DONE; - break; - - } - TEST_BUSY; -} - -_TEST FIFO_MaxFolderSize_Keep60Files(void) -{ - TEST_DONE; - switch (TestState) - { - // Arrange - case 0: - FileCreate_UT.enable = true; - FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; - snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); - FileCreate_UT.pFile = (UDINT)&FileName; - FileCreate(&FileCreate_UT); - - TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); - TEST_ABORT_CONDITION(FileCreate_UT.status != 0); - TestState = 1; - break; - - case 1: - FileWrite_UT.enable = true; - FileWrite_UT.ident = FileCreate_UT.ident; - FileWrite_UT.offset = 0; - FileWrite_UT.pSrc = (UDINT)&testData; - FileWrite_UT.len = sizeof(testData); - FileWrite(&FileWrite_UT); - TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); - TEST_ABORT_CONDITION(FileWrite_UT.status != 0); - TestState = 2; - break; - - case 2: - FileClose_UT.enable = true; - FileClose_UT.ident = FileCreate_UT.ident; - FileClose(&FileClose_UT); - - TEST_BUSY_CONDITION(FileClose_UT.status == 65535); - TEST_ABORT_CONDITION(FileClose_UT.status != 0); - - FileNumber++; - TestState = (FileNumber >= 90) ? 10 : 0; - break; - - // Act - case 10: - HmiFile_UT.Parameters.Fifo.Enable = true; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; - HmiFile_UT.Parameters.Fifo.MaxFolderSize = 60; - HmiFile_UT.Parameters.Fifo.ScanInterval = 0; - TEST_BUSY_CONDITION(FileIdleOrDisabled()); - TestState = 100; - break; - - // Assert - case 100: - TEST_BUSY_CONDITION(!FileIdleOrDisabled()); - HmiFile_UT.Parameters.Fifo.Enable = false; - - DirInfo_UT.enable = true; - DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; - DirInfo_UT.pPath = (UDINT)&""; - DirInfo(&DirInfo_UT); - TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); - TEST_ABORT_CONDITION(DirInfo_UT.status != 0); - TEST_ASSERT_EQUAL_INT(60, DirInfo_UT.filenum); - TEST_DONE; - break; - - } - TEST_BUSY; -} - -_TEST FIFO_MaxFolderSize_Keep120Files(void) -{ - TEST_DONE; - switch (TestState) - { - // Arrange - case 0: - FileCreate_UT.enable = true; - FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; - snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); - FileCreate_UT.pFile = (UDINT)&FileName; - FileCreate(&FileCreate_UT); - - TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); - TEST_ABORT_CONDITION(FileCreate_UT.status != 0); - TestState = 1; - break; - - case 1: - FileWrite_UT.enable = true; - FileWrite_UT.ident = FileCreate_UT.ident; - FileWrite_UT.offset = 0; - FileWrite_UT.pSrc = (UDINT)&testData; - FileWrite_UT.len = sizeof(testData); - FileWrite(&FileWrite_UT); - TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); - TEST_ABORT_CONDITION(FileWrite_UT.status != 0); - TestState = 2; - break; - - case 2: - FileClose_UT.enable = true; - FileClose_UT.ident = FileCreate_UT.ident; - FileClose(&FileClose_UT); - - TEST_BUSY_CONDITION(FileClose_UT.status == 65535); - TEST_ABORT_CONDITION(FileClose_UT.status != 0); - - FileNumber++; - TestState = (FileNumber >= 140) ? 10 : 0; - break; - - // Act - case 10: - HmiFile_UT.Parameters.Fifo.Enable = true; - strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); - HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; - HmiFile_UT.Parameters.Fifo.MaxFolderSize = 120; - HmiFile_UT.Parameters.Fifo.ScanInterval = 0; - TEST_BUSY_CONDITION(FileIdleOrDisabled()); - TestState = 100; - break; - - // Assert - case 100: - TEST_BUSY_CONDITION(!FileIdleOrDisabled()); - HmiFile_UT.Parameters.Fifo.Enable = false; - - DirInfo_UT.enable = true; - DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; - DirInfo_UT.pPath = (UDINT)&""; - DirInfo(&DirInfo_UT); - TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); - TEST_ABORT_CONDITION(DirInfo_UT.status != 0); - TEST_ASSERT_EQUAL_INT(120, DirInfo_UT.filenum); - TEST_DONE; - break; - - } - TEST_BUSY; -} -/* -B+R UnitTest: This is generated code. -Do not edit! Do not move! -Description: UnitTest Testprogramm infrastructure (TestSet). -LastUpdated: 2023-04-03 16:22:59Z -By B+R UnitTest Helper Version: 2.0.1.59 -*/ -UNITTEST_FIXTURES(fixtures) -{ - new_TestFixture("Create_Directory", Create_Directory), - new_TestFixture("Add_File", Add_File), - new_TestFixture("Copy_File", Copy_File), - new_TestFixture("Copy_Directory", Copy_Directory), - new_TestFixture("Rename_File", Rename_File), - new_TestFixture("Rename_Directory", Rename_Directory), - new_TestFixture("Cut_Paste_File", Cut_Paste_File), - new_TestFixture("Cut_Paste_Directory", Cut_Paste_Directory), - new_TestFixture("Multiselect", Multiselect), - new_TestFixture("Search", Search), - new_TestFixture("Enter_Folder", Enter_Folder), - new_TestFixture("Go_Up_Level", Go_Up_Level), - new_TestFixture("Change_Sort", Change_Sort), - new_TestFixture("Delete_File", Delete_File), - new_TestFixture("Delete_Directory", Delete_Directory), - new_TestFixture("FIFO_20", FIFO_20), - new_TestFixture("FIFO_60", FIFO_60), - new_TestFixture("FIFO_140", FIFO_140), - new_TestFixture("FIFO_MaxFiles60", FIFO_MaxFiles60), - new_TestFixture("FIFO_MaxFiles120", FIFO_MaxFiles120), - new_TestFixture("FIFO_MaxFolderSize_30Files", FIFO_MaxFolderSize_30Files), - new_TestFixture("FIFO_MaxFolderSize_60Files", FIFO_MaxFolderSize_60Files), - new_TestFixture("FIFO_MaxFolderSize_Keep60Files", FIFO_MaxFolderSize_Keep60Files), - new_TestFixture("FIFO_MaxFolderSize_Keep120Files", FIFO_MaxFolderSize_Keep120Files), -}; - -UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_FileMgr, "Set_FileMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, cyclicSetCaller); - +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include +#include + +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 1000) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(TestState, substate, 10); \ + strcpy(abortMessage, "Timeout in State = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } + +_SETUP_SET(void) +{ + TestState = 0; + FileNumber = 0; + + if (pMpFileManagerUIConnect == NULL) + { + TEST_ABORT_MSG("Failed to get address of MpFileManagerUIConnect"); + } + + HmiFile_UT.Parameters.Fifo.Enable = false; + HmiFile_UT.Parameters.Fifo.ScanInterval = 60; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + + switch (SetupState) + { + case 0: + TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep != FILE_DISABLED); + for (USINT i=0; i= NumberOfFiles) ? 10 : 1; + break; + + case 10: + if (brsstrcmp((UDINT)&pMpFileManagerUIConnect->DeviceList.DeviceNames[pMpFileManagerUIConnect->DeviceList.SelectedIndex], (UDINT)&HmiFile_UT.Parameters.Fifo.DeviceName) == 0) + { + SetupState = 100; + TEST_BUSY; + } + for (USINT i=0; iDeviceList.DeviceNames)/sizeof(pMpFileManagerUIConnect->DeviceList.DeviceNames[0]); i++) + { + if (brsstrcmp((UDINT)&pMpFileManagerUIConnect->DeviceList.DeviceNames[i], (UDINT)&HmiFile_UT.Parameters.Fifo.DeviceName) == 0) + { + pMpFileManagerUIConnect->DeviceList.SelectedIndex = i; + break; + } + } + SetupState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status == mpFILE_UI_STATUS_IDLE); + SetupState = 12; + break; + + case 12: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + SetupState = 100; + break; + + case 20: + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect_FIFO.File.Refresh = true; + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect_FIFO.File.Refresh = false; + SetupState = 21; + break; + + case 21: + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status != mpFILE_UI_STATUS_IDLE); + SetupState = 100; + break; + + case 100: + SetupState = 0; + TEST_DONE; + } + TEST_BUSY; +} + +_TEARDOWN_SET(void) +{ + /* TODO: add code running after test set here */ + TEST_DONE; +} + +bool FileIdleOrDisabled(void) { + return ((HmiFile_UT.Status.DeleteStep == FILE_DELETE_WAIT) || (HmiFile_UT.Status.DeleteStep == FILE_DISABLED)); +} + +_SETUP_TEST(void) { + TestState = 0; + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + FileNumber = 0; + cycleCount = 0; + NameMatch = 0; + InNewLocation = 0; + InOldLocation = 0; + MultiSelectDirCopy = 0; + MultiSelectFileCopy = 0; + HmiFile.Status.SelectedIndex = 0; + pMpFileManagerUIConnect->File.Copy = 0; + pMpFileManagerUIConnect->File.CreateFolder = 0; + pMpFileManagerUIConnect->File.Cut = 0; + pMpFileManagerUIConnect->File.Delete = 0; + pMpFileManagerUIConnect->File.EnterFolder = 0; + pMpFileManagerUIConnect->File.FolderUp = 0; + pMpFileManagerUIConnect->File.MultiSelect = 0; + pMpFileManagerUIConnect->File.Paste = 0; + pMpFileManagerUIConnect->File.Refresh = 0; + pMpFileManagerUIConnect->File.Rename = 0; + + HmiFile_UT.Parameters.Fifo.Enable = false; + HmiFile_UT.Parameters.Fifo.ScanInterval = 60; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + + switch (SetupState) + { + case 0: + TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep != FILE_DISABLED); + for (USINT i=0; i= NumberOfFiles) ? 3 : 1; + break; + + case 3: + DirRead_UT.enable = true; + DirRead_UT.pDevice = DirInfo_UT.pDevice; + DirRead_UT.entry = 2; + DirRead_UT.option = fiDIRECTORY; + DirRead_UT.pData = (UDINT)&fileInfo; + DirRead_UT.data_len = sizeof(fileInfo); + DirRead(&DirRead_UT); + TEST_BUSY_CONDITION(DirRead_UT.status == 65535); + if (DirRead_UT.status == fiERR_NO_MORE_ENTRIES) + { + SetupState = 10; + TEST_BUSY; + } + TEST_ABORT_CONDITION(DirRead_UT.status != 0); + SetupState = 4; + break; + + case 4: + DirDeleteEx_UT.enable = true; + DirDeleteEx_UT.pDevice = DirInfo_UT.pDevice; + DirDeleteEx_UT.pName = (UDINT)&fileInfo.Filename; + DirDeleteEx(&DirDeleteEx_UT); + TEST_BUSY_CONDITION(DirDeleteEx_UT.status == 65535); + TEST_ABORT_CONDITION(DirDeleteEx_UT.status != 0); + + CurrentDir++; + SetupState = (CurrentDir >= NumberOfDirs) ? 10 : 3; + break; + + case 10: + if (pMpFileManagerUIConnect->Status != 0) + { + pMpFileManagerUIConnect->DeviceList.SelectedIndex = 0; + TEST_BUSY; + } + if (brsstrcmp((UDINT)&pMpFileManagerUIConnect->DeviceList.DeviceNames[pMpFileManagerUIConnect->DeviceList.SelectedIndex], (UDINT)&HmiFile_UT.Parameters.Fifo.DeviceName) == 0) + { + SetupState = 100; + TEST_BUSY; + } + for (USINT i=0; iDeviceList.DeviceNames)/sizeof(pMpFileManagerUIConnect->DeviceList.DeviceNames[0]); i++) + { + if (brsstrcmp((UDINT)&pMpFileManagerUIConnect->DeviceList.DeviceNames[i], (UDINT)&HmiFile_UT.Parameters.Fifo.DeviceName) == 0) + { + pMpFileManagerUIConnect->DeviceList.SelectedIndex = i; + break; + } + } + SetupState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status == mpFILE_UI_STATUS_IDLE); + SetupState = 12; + break; + + case 12: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + SetupState = 100; + break; + + case 20: + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect_FIFO.File.Refresh = true; + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect_FIFO.File.Refresh = false; + SetupState = 21; + break; + + case 21: + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status != mpFILE_UI_STATUS_IDLE); + SetupState = 100; + break; + + case 100: + SetupState = 0; + TEST_DONE; + } + TEST_BUSY; +} + +_TEARDOWN_TEST(void) +{ + HmiFile_UT.Parameters.Fifo.Enable = false; + HmiFile_UT.Parameters.Fifo.ScanInterval = 60; + + TestState = 0; + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + SetupState = 0; + cycleCount = 0; + NameMatch = 0; + InNewLocation = 0; + InOldLocation = 0; + MultiSelectDirCopy = 0; + MultiSelectFileCopy = 0; + HmiFile.Status.SelectedIndex = 0; + pMpFileManagerUIConnect->File.Copy = 0; + pMpFileManagerUIConnect->File.CreateFolder = 0; + pMpFileManagerUIConnect->File.Cut = 0; + pMpFileManagerUIConnect->File.Delete = 0; + pMpFileManagerUIConnect->File.EnterFolder = 0; + pMpFileManagerUIConnect->File.FolderUp = 0; + pMpFileManagerUIConnect->File.MultiSelect = 0; + pMpFileManagerUIConnect->File.Paste = 0; + pMpFileManagerUIConnect->File.Refresh = 0; + pMpFileManagerUIConnect->File.Rename = 0; + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.Filter, (UDINT)&"", sizeof(pMpFileManagerUIConnect->File.Filter)); + + HmiFile.Commands.Delete = 0; + HmiFile.Commands.EnterFolder = 0; + HmiFile.Commands.FolderUp = 0; + HmiFile.Commands.MultiSelect = 0; + HmiFile.Status.SelectedIndex = 0; + + FileCreate_0.enable = 0; + FileClose_0.enable = 0; + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + + TEST_DONE; +} + +_CYCLIC_SET(void) +{ + cycleCount++; +} + +_TEST Create_Directory(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select UserX file device and input directory name + switch (ArrangeSubState) + { + case 0: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&DirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + ArrangeSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != 0); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != 0); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&DirName) == 0) + { + TEST_FAIL("Directory with chosen name already exists"); + TEST_DONE; + } + } + TestState = 1; + break; + } + break; + + case 1: + // Create directory + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.CreateFolder = 1; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CREATE); + pMpFileManagerUIConnect->File.CreateFolder = 0; + ActSubState = 2; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&DirName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check save location for directory + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Add_File(void) +{ + TIMEOUT_TEST_CASE; + + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + + switch (TestState) + { + case 0: + // Select UserX file device and input file name + switch (ArrangeSubState) + { + case 0: + FileCreate_0.pDevice = (UDINT)&"mappUserXFiles"; + FileCreate_0.pFile = (UDINT)&CreateFileName; + ArrangeSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 3; + break; + + case 3: // Check to make sure there isn't already a file by the specified name in the directory + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != 0); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + { + TEST_FAIL("File with chosen name already exists"); + TEST_DONE; + } + } + TestState = 1; + break; + } + break; + + case 1: + // Create file + switch (ActSubState) + { + case 0: + FileCreate_0.enable = 1; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileCreate_0.enable = 0; + if ((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileCreate_0.status); + TEST_DONE; + } + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + if ((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileClose_0.status); + TEST_DONE; + } + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + ActSubState = 5; + break; + + case 5: + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check save location for file + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Copy_File(void) +{ + TIMEOUT_TEST_CASE; + + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + + switch (TestState) + { + case 0: + // Select UserX file device and input name of file to be copied + switch (ArrangeSubState) + { + case 0: + FileCreate_0.pDevice = (UDINT)&"mappUserXFiles"; + FileCreate_0.pFile = (UDINT)&CreateFileName; + FileCreate_0.enable = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileCreate_0.enable = 0; + if ((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileCreate_0.status); + TEST_DONE; + } + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + if ((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileClose_0.status); + TEST_DONE; + } + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 10; + break; + + case 10: + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Copy/paste file + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.Copy = 1; + ActSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->File.Copy = 0; + pMpFileManagerUIConnect->File.Paste = 1; + ActSubState = 2; + break; + + case 2: + pMpFileManagerUIConnect->File.Paste = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_PASTE); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 5; + break; + + case 5: + // Check file list for copied file + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&CopiedFileName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check if copied file was found + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Copy_Directory(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select UserX file device and input name of directory to be copied + switch (ArrangeSubState) + { + case 0: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&DirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + pMpFileManagerUIConnect->File.CreateFolder = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CREATE); + pMpFileManagerUIConnect->File.CreateFolder = 0; + ArrangeSubState = 2; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 10; + break; + + case 10: + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Copy/paste directory + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.Copy = 1; + ActSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->File.Copy = 0; + pMpFileManagerUIConnect->File.Paste = 1; + ActSubState = 2; + break; + + case 2: + pMpFileManagerUIConnect->File.Paste = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_PASTE); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 5; + break; + + case 5: + // Check file list for copied directory + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&CopiedDirName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check if copied directory was found + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Rename_File(void) +{ + TIMEOUT_TEST_CASE; + + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + + switch (TestState) + { + case 0: + // Select UserX file device and input name of file to be renamed and new name + switch (ArrangeSubState) + { + case 0: + FileCreate_0.pDevice = (UDINT)&"mappUserXFiles"; + FileCreate_0.pFile = (UDINT)&CopiedFileName; + FileCreate_0.enable = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileCreate_0.enable = 0; + if ((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileCreate_0.status); + TEST_DONE; + } + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + if ((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileClose_0.status); + TEST_DONE; + } + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 10; + break; + + case 10: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 12; + break; + + case 12: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&NewFileName, sizeof(pMpFileManagerUIConnect->File.NewName)); + ArrangeSubState = 13; + break; + + case 13: + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&CopiedFileName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Rename file + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.Rename = 1; + ActSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->File.Rename = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 3; + break; + + case 3: + // Check file list for renamed file + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&NewFileName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check if renamed file was found + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Rename_Directory(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select UserX file device and input name of directory to be renamed and new name + switch (ArrangeSubState) + { + case 0: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&CopiedDirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + pMpFileManagerUIConnect->File.CreateFolder = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CREATE); + pMpFileManagerUIConnect->File.CreateFolder = 0; + ArrangeSubState = 2; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 10; + break; + + case 10: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&NewDirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + ArrangeSubState = 11; + break; + + case 11: + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&CopiedDirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Rename directory + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.Rename = 1; + ActSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->File.Rename = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 3; + break; + + case 3: + // Check file list for renamed directory + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&NewDirName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check if renamed directory was found + TEST_INFO("File list items are"); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + TEST_INFO(&pMpFileManagerUIConnect->File.List.Items[i].Name); + } + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Cut_Paste_File(void) +{ + TIMEOUT_TEST_CASE; + + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + switch (TestState) + { + case 0: + // Select UserX file device and input name of file to be cut + switch (ArrangeSubState) + { + case 0: + FileCreate_0.pDevice = (UDINT)&"mappUserXFiles"; + FileCreate_0.pFile = (UDINT)&NewFileName; + FileCreate_0.enable = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileCreate_0.enable = 0; + if ((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileCreate_0.status); + TEST_DONE; + } + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + if ((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileClose_0.status); + TEST_DONE; + } + ArrangeSubState = 10; + break; + + case 10: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&DirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + pMpFileManagerUIConnect->File.CreateFolder = 1; + ArrangeSubState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CREATE); + pMpFileManagerUIConnect->File.CreateFolder = 0; + ArrangeSubState = 12; + break; + + case 12: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 13; + break; + + case 13: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 20; + break; + + case 20: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&NewFileName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Cut/paste file + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.Cut = 1; + ActSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->File.Cut = 0; + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + ActSubState = 2; + break; + + case 2: + HmiFile.Commands.EnterFolder = 1; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.EnterFolder = 0; + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Paste = 1; + ActSubState = 4; + break; + + case 4: + pMpFileManagerUIConnect->File.Paste = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_PASTE); + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 6; + break; + + case 6: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 7; + break; + + case 7: + // Check paste location for cut file + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&NewFileName) == 0) + { + InNewLocation = 1; + } + } + HmiFile.Commands.FolderUp = 1; + ActSubState = 8; + break; + + case 8: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.FolderUp = 0; + ActSubState = 9; + break; + + case 9: + // Check old location for cut file + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&NewFileName) == 0) + { + InOldLocation = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check new and old locations for file + TEST_ASSERT(InNewLocation); + TEST_ASSERT(!InOldLocation); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Cut_Paste_Directory(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select UserX file device and input name of directory to be cut + switch (ArrangeSubState) + { + case 0: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&DirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + pMpFileManagerUIConnect->File.CreateFolder = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CREATE); + pMpFileManagerUIConnect->File.CreateFolder = 0; + ArrangeSubState = 2; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 10; + break; + + case 10: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&NewDirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + pMpFileManagerUIConnect->File.CreateFolder = 11; + ArrangeSubState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CREATE); + pMpFileManagerUIConnect->File.CreateFolder = 0; + ArrangeSubState = 12; + + case 12: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 13; + break; + + case 13: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 14; + break; + + case 14: + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&NewDirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Cut/paste directory + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.Cut = 1; + ActSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->File.Cut = 0; + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 3; + break; + + case 3: + // Find folder to paste directory into + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + ActSubState = 4; + break; + + case 4: + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 6; + break; + + case 6: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + HmiFile.Commands.EnterFolder = 1; + ActSubState = 7; + break; + + case 7: + HmiFile.Commands.EnterFolder = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CHANGE_DIR); + ActSubState = 8; + break; + + case 8: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Paste = 1; + ActSubState = 9; + break; + + case 9: + pMpFileManagerUIConnect->File.Paste = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_PASTE); + ActSubState = 10; + break; + + case 10: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 12; + break; + + case 12: + // Check new location for cut directory + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&NewDirName) == 0) + { + InNewLocation = 1; + } + } + HmiFile.Commands.FolderUp = 1; + ActSubState = 13; + break; + + case 13: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.FolderUp = 0; + ActSubState = 14; + break; + + case 14: + // Check old location for cut directory + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&NewDirName) == 0) + { + InOldLocation = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check new and old locations for directory + TEST_ASSERT(InNewLocation); + TEST_ASSERT(!InOldLocation); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Multiselect(void) +{ + TIMEOUT_TEST_CASE; + + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + switch (TestState) + { + case 0: + // Select UserX file device and navigate into directory with test files + switch (ArrangeSubState) + { + + case 0: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&NewDirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + pMpFileManagerUIConnect->File.CreateFolder = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CREATE); + pMpFileManagerUIConnect->File.CreateFolder = 0; + ArrangeSubState = 2; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 10; + break; + + case 10: + FileCreate_0.pDevice = (UDINT)&"mappUserXFiles"; + FileCreate_0.pFile = (UDINT)&CreateFileName; + FileCreate_0.enable = 1; + ArrangeSubState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileCreate_0.enable = 0; + if ((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileCreate_0.status); + TEST_DONE; + } + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + ArrangeSubState = 12; + break; + + case 12: + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + if ((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileClose_0.status); + TEST_DONE; + } + ArrangeSubState = 20; + break; + + case 20: + FileCreate_0.pDevice = (UDINT)&"mappUserXFiles"; + FileCreate_0.pFile = (UDINT)&NewFileName; + FileCreate_0.enable = 1; + ArrangeSubState = 21; + break; + + case 21: + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileCreate_0.enable = 0; + if ((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileCreate_0.status); + TEST_DONE; + } + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + ArrangeSubState = 22; + break; + + case 22: + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + if ((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileClose_0.status); + TEST_DONE; + } + ArrangeSubState = 30; + break; + + case 30: + pMpFileManagerUIConnect->File.Refresh = 1; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 31; + break; + + case 31: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + TestState = 1; + } + break; + + case 1: + // Select multiple files/directories and copy/paste + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.MultiSelect = 1; + ActSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->File.List.Items[0].IsSelected = 0; + pMpFileManagerUIConnect->File.List.Items[1].IsSelected = 1; + pMpFileManagerUIConnect->File.List.Items[2].IsSelected = 1; + ActSubState = 2; + break; + + case 2: + pMpFileManagerUIConnect->File.Copy = 1; + ActSubState = 3; + break; + + case 3: + pMpFileManagerUIConnect->File.Copy = 0; + pMpFileManagerUIConnect->File.MultiSelect = 0; + pMpFileManagerUIConnect->File.List.Items[0].IsSelected = 1; + pMpFileManagerUIConnect->File.List.Items[1].IsSelected = 0; + pMpFileManagerUIConnect->File.List.Items[2].IsSelected = 0; + ActSubState = 4; + break; + + case 4: + HmiFile.Commands.EnterFolder = 1; + ActSubState = 5; + break; + + case 5: + HmiFile.Commands.EnterFolder = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CHANGE_DIR); + ActSubState = 6; + break; + + case 6: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Paste = 1; + ActSubState = 7; + break; + + case 7: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_PASTE); + pMpFileManagerUIConnect->File.Paste = 0; + ActSubState = 8; + break; + + case 8: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 9; + break; + + case 9: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 10; + break; + + case 10: + // Check for copied file + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&NewFileName) == 0) + MultiSelectFileCopy = 1; + } + ActSubState = 11; + break; + + case 11: + // Check for copied directory + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + MultiSelectDirCopy = 1; + } + ActSubState = 12; + break; + + case 12: + HmiFile.Commands.FolderUp = 1; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.FolderUp = 0; + ActSubState = 13; + break; + + case 13: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + TestState = 2; + break; + } + break; + + case 2: + // Check if copied file and directory were found + TEST_ASSERT(MultiSelectFileCopy); + TEST_ASSERT(MultiSelectDirCopy); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Search(void) +{ + TIMEOUT_TEST_CASE; + + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + switch (TestState) + { + case 0: + switch (ArrangeSubState) + { + case 0: + FileCreate_0.pDevice = (UDINT)&"mappUserXFiles"; + FileCreate_0.pFile = (UDINT)&NewFileName; + FileCreate_0.enable = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileCreate_0.enable = 0; + if ((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileCreate_0.status); + TEST_DONE; + } + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + if ((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileClose_0.status); + TEST_DONE; + } + ArrangeSubState = 10; + break; + + case 10: + // Set filter value to name of file + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.Filter, (UDINT)&NewFileName, sizeof(pMpFileManagerUIConnect->File.Filter)); + TestState = 1; + break; + } + break; + + case 1: + // Refresh MpFileManagerUIConnect + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 2; + break; + + case 2: + // Check if the first item in the file list is the desired file + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[0].Name, (UDINT)&NewFileName) == 0) + NameMatch = 1; + ActSubState = 3; + break; + + case 3: + // Reset filter + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.Filter,(UDINT) &"", sizeof(pMpFileManagerUIConnect->File.Filter)); + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + TestState = 2; + break; + } + break; + + case 2: + // Check if filter worked + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Enter_Folder(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + + switch (ArrangeSubState) + { + case 0: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&DirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + pMpFileManagerUIConnect->File.CreateFolder = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CREATE); + pMpFileManagerUIConnect->File.CreateFolder = 0; + ArrangeSubState = 2; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 10; + break; + + case 10: + // Select folder to enter + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Give HMI command to enter folder + switch (ActSubState) + { + case 0: + // Acts as a delay to let the folder selection make its way to FileMgr task + ActSubState = 1; + break; + + case 1: + HmiFile.Commands.EnterFolder = 1; + ActSubState = 2; + break; + + case 2: + HmiFile.Commands.EnterFolder = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CHANGE_DIR); + ActSubState = 3; + break; + + case 3: + // Check if current directory matches what is expected + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.PathInfo.CurrentDir, (UDINT)&DirName) == 0) + NameMatch = 1; + ActSubState = 4; + break; + + case 4: + // Go back up to root folder + HmiFile.Commands.FolderUp = 1; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.FolderUp = 0; + ActSubState = 6; + break; + + case 6: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + TestState = 2; + break; + } + break; + + case 2: + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Go_Up_Level(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + switch (ArrangeSubState) + { + case 0: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&DirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + pMpFileManagerUIConnect->File.CreateFolder = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CREATE); + pMpFileManagerUIConnect->File.CreateFolder = 0; + ArrangeSubState = 2; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 10; + break; + + case 10: + // Select folder to enter + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Give HMI command to enter folder + switch (ActSubState) + { + case 0: + // Acts as a delay to let the folder selection make its way to FileMgr task + ActSubState = 1; + break; + + case 1: + HmiFile.Commands.EnterFolder = 1; + ActSubState = 2; + break; + + case 2: + HmiFile.Commands.EnterFolder = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CHANGE_DIR); + ActSubState = 3; + break; + + case 3: + // Check if folder was successfully entered + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.PathInfo.CurrentDir, (UDINT)&DirName) != 0) + { + TEST_FAIL("Directory was not successfully entered"); + TEST_DONE; + } + ActSubState = 4; + break; + + case 4: + // Go back up to root folder + HmiFile.Commands.FolderUp = 1; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.FolderUp = 0; + ActSubState = 6; + break; + + case 6: + // Check if folder level went back up to the root + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.PathInfo.CurrentDir, (UDINT)&"") == 0) + NameMatch = 1; + TestState = 2; + break; + } + break; + + case 2: + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Change_Sort(void) +{ + TIMEOUT_TEST_CASE; + + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + switch (TestState) + { + case 0: + switch (ArrangeSubState) + { + case 0: + FileCreate_0.pDevice = (UDINT)&"mappUserXFiles"; + FileCreate_0.pFile = (UDINT)&CreateFileName; + FileCreate_0.enable = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileCreate_0.enable = 0; + if ((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileCreate_0.status); + TEST_DONE; + } + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + if ((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileClose_0.status); + TEST_DONE; + } + ArrangeSubState = 3; + break; + + case 3: + FileCreate_0.pDevice = (UDINT)&"mappUserXFiles"; + FileCreate_0.pFile = (UDINT)&NewFileName; + FileCreate_0.enable = 1; + ArrangeSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileCreate_0.enable = 0; + if ((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileCreate_0.status); + TEST_DONE; + } + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + ArrangeSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + if ((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileClose_0.status); + TEST_DONE; + } + ArrangeSubState = 10; + break; + + case 10: + // Change SortOrder value + pMpFileManagerUIConnect->File.SortOrder = mpFILE_SORT_BY_MOD_TIME_DESC; + TestState = 1; + break; + } + break; + + case 1: + switch (ActSubState) + { + case 0: + // Wait for sort to take effect + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_SORT); + ActSubState = 1; + break; + + case 1: + // Make sure sort worked correctly + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[0].Name, (UDINT)&NewFileName) == 0) + NameMatch = 1; + ActSubState = 2; + break; + + case 2: + pMpFileManagerUIConnect->File.SortOrder = 0; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_SORT); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + TestState = 2; + break; + } + break; + + case 2: + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Delete_File(void) +{ + TIMEOUT_TEST_CASE; + + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + switch (TestState) + { + case 0: + switch (ArrangeSubState) + { + case 0: + FileCreate_0.pDevice = (UDINT)&"mappUserXFiles"; + FileCreate_0.pFile = (UDINT)&CreateFileName; + FileCreate_0.enable = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileCreate_0.enable = 0; + if ((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileCreate_0.status); + TEST_DONE; + } + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + if ((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_ASSERT_EQUAL_INT(0, FileClose_0.status); + TEST_DONE; + } + ArrangeSubState = 10; + break; + + case 10: + // Select file to be deleted + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Delete file + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.Delete = 1; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_DELETE); + pMpFileManagerUIConnect->File.Delete = 0; + ActSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->MessageBox.Confirm = 1; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->MessageBox.Confirm = 0; + ActSubState = 2; + break; + + case 2: + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 4; + break; + + case 4: + // Check for file + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + NameMatch = 1; + } + TestState = 2; + break; + } + break; + + case 2: + // Check if file was deleted + TEST_ASSERT(!NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Delete_Directory(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + switch (ArrangeSubState) + { + case 0: + brsmemcpy((UDINT)&pMpFileManagerUIConnect->File.NewName, (UDINT)&DirName, sizeof(pMpFileManagerUIConnect->File.NewName)); + pMpFileManagerUIConnect->File.CreateFolder = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_CREATE); + pMpFileManagerUIConnect->File.CreateFolder = 0; + ArrangeSubState = 2; + + case 2: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->File.Refresh = 1; + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ArrangeSubState = 10; + break; + + case 10: + // Select directory to be deleted + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Delete file + switch (ActSubState) + { + case 0: + pMpFileManagerUIConnect->File.Delete = 1; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_DELETE); + pMpFileManagerUIConnect->File.Delete = 0; + ActSubState = 1; + break; + + case 1: + pMpFileManagerUIConnect->MessageBox.Confirm = 1; + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_IDLE); + pMpFileManagerUIConnect->MessageBox.Confirm = 0; + ActSubState = 2; + break; + break; + + case 2: + pMpFileManagerUIConnect->File.Refresh = 1; + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(pMpFileManagerUIConnect->Status != mpFILE_UI_STATUS_REFRESH); + pMpFileManagerUIConnect->File.Refresh = 0; + ActSubState = 4; + break; + + case 4: + // Check for file + for(int i = 0; i < sizeof(pMpFileManagerUIConnect->File.List.Items)/sizeof(pMpFileManagerUIConnect->File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&pMpFileManagerUIConnect->File.List.Items[i].Name, (UDINT)&DirName) == 0) + NameMatch = 1; + } + TestState = 2; + break; + } + break; + + case 2: + // Check if file was deleted + TEST_ASSERT(!NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST FIFO_20(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 20) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; + HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 10; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST FIFO_60(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 60) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; + HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 15; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_140(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 140) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; + HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 15; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFiles60(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 100) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; + HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 60; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFiles120(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 200) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; + HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 120; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFolderSize_30Files(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileWrite_UT.enable = true; + FileWrite_UT.ident = FileCreate_UT.ident; + FileWrite_UT.offset = 0; + FileWrite_UT.pSrc = (UDINT)&testData; + FileWrite_UT.len = sizeof(testData); + FileWrite(&FileWrite_UT); + TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); + TEST_ABORT_CONDITION(FileWrite_UT.status != 0); + TestState = 2; + break; + + case 2: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 30) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; + HmiFile_UT.Parameters.Fifo.MaxFolderSize = 20; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(20, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFolderSize_60Files(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileWrite_UT.enable = true; + FileWrite_UT.ident = FileCreate_UT.ident; + FileWrite_UT.offset = 0; + FileWrite_UT.pSrc = (UDINT)&testData; + FileWrite_UT.len = sizeof(testData); + FileWrite(&FileWrite_UT); + TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); + TEST_ABORT_CONDITION(FileWrite_UT.status != 0); + TestState = 2; + break; + + case 2: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 60) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; + HmiFile_UT.Parameters.Fifo.MaxFolderSize = 40; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(40, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFolderSize_Keep60Files(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileWrite_UT.enable = true; + FileWrite_UT.ident = FileCreate_UT.ident; + FileWrite_UT.offset = 0; + FileWrite_UT.pSrc = (UDINT)&testData; + FileWrite_UT.len = sizeof(testData); + FileWrite(&FileWrite_UT); + TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); + TEST_ABORT_CONDITION(FileWrite_UT.status != 0); + TestState = 2; + break; + + case 2: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 90) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; + HmiFile_UT.Parameters.Fifo.MaxFolderSize = 60; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(60, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFolderSize_Keep120Files(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileWrite_UT.enable = true; + FileWrite_UT.ident = FileCreate_UT.ident; + FileWrite_UT.offset = 0; + FileWrite_UT.pSrc = (UDINT)&testData; + FileWrite_UT.len = sizeof(testData); + FileWrite(&FileWrite_UT); + TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); + TEST_ABORT_CONDITION(FileWrite_UT.status != 0); + TestState = 2; + break; + + case 2: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 140) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; + HmiFile_UT.Parameters.Fifo.MaxFolderSize = 120; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(120, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2023-04-03 16:22:59Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("Create_Directory", Create_Directory), + new_TestFixture("Add_File", Add_File), + new_TestFixture("Copy_File", Copy_File), + new_TestFixture("Copy_Directory", Copy_Directory), + new_TestFixture("Rename_File", Rename_File), + new_TestFixture("Rename_Directory", Rename_Directory), + new_TestFixture("Cut_Paste_File", Cut_Paste_File), + new_TestFixture("Cut_Paste_Directory", Cut_Paste_Directory), + new_TestFixture("Multiselect", Multiselect), + new_TestFixture("Search", Search), + new_TestFixture("Enter_Folder", Enter_Folder), + new_TestFixture("Go_Up_Level", Go_Up_Level), + new_TestFixture("Change_Sort", Change_Sort), + new_TestFixture("Delete_File", Delete_File), + new_TestFixture("Delete_Directory", Delete_Directory), + new_TestFixture("FIFO_20", FIFO_20), + new_TestFixture("FIFO_60", FIFO_60), + new_TestFixture("FIFO_140", FIFO_140), + new_TestFixture("FIFO_MaxFiles60", FIFO_MaxFiles60), + new_TestFixture("FIFO_MaxFiles120", FIFO_MaxFiles120), + new_TestFixture("FIFO_MaxFolderSize_30Files", FIFO_MaxFolderSize_30Files), + new_TestFixture("FIFO_MaxFolderSize_60Files", FIFO_MaxFolderSize_60Files), + new_TestFixture("FIFO_MaxFolderSize_Keep60Files", FIFO_MaxFolderSize_Keep60Files), + new_TestFixture("FIFO_MaxFolderSize_Keep120Files", FIFO_MaxFolderSize_Keep120Files), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_FileMgr, "Set_FileMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, cyclicSetCaller); + diff --git a/mappFramework/Logical/UnitTest/File/FileUnitTest/testSuite.c b/mappFramework/Logical/UnitTest/File/FileUnitTest/testSuite.c index 72a0a690..9d3cb072 100644 --- a/mappFramework/Logical/UnitTest/File/FileUnitTest/testSuite.c +++ b/mappFramework/Logical/UnitTest/File/FileUnitTest/testSuite.c @@ -1,51 +1,53 @@ -/******************************************************************** - * COPYRIGHT -- - ******************************************************************** - * Program: - - * Author: - * Created: - ******************************************************************** - * Test registration and handshake - ********************************************************************/ - -#include - -#ifdef _DEFAULT_INCLUDES -#include -#endif -#include - -#include "UnitTest.h" - - -void _INIT initTestSuite(void) -{ - Testsuite.Enable = 1; - utInit(&Testsuite); - - CommonTestsuite.Enable = 1; - utInit(&CommonTestsuite); - - strcpy((char*)&TextNameSpace, "mappFramework/File/Alarms"); - strcpy((char*)&TextID, "DeviceNotFound"); -} - - -void _CYCLIC cyclicWithTest(void) -{ - utCyclic(&Testsuite); - if (Testsuite.Informational.LastKnownPassedLocation.TestCaseName != 0) - strcpy((char*)&LastTestCase, (char*)Testsuite.Informational.LastKnownPassedLocation.TestCaseName); - if (Testsuite.Informational.LastKnownPassedLocation.TestSetName != 0) - strcpy((char*)&LastTestSet, (char*)Testsuite.Informational.LastKnownPassedLocation.TestSetName); - if (Testsuite.Informational.LastKnownPassedLocation.File != 0) - strcpy((char*)&LastTestFile, (char*)Testsuite.Informational.LastKnownPassedLocation.File); -} - - -void _EXIT exitTestSuite(void) -{ - utExit(&Testsuite); -} - - +/******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: - + * Author: + * Created: + ******************************************************************** + * Test registration and handshake + ********************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif +#include + +#include "UnitTest.h" + + +void _INIT initTestSuite(void) +{ + Testsuite.Enable = 1; + utInit(&Testsuite); + + CommonTestsuite.Enable = 1; + utInit(&CommonTestsuite); + + strcpy((char*)&TextNameSpace, "mappFramework/File/Alarms"); + strcpy((char*)&TextID, "DeviceNotFound"); + + PV_xgetadr("FileMgr:MpFileManagerUIConnect", (void*)&pMpFileManagerUIConnect, &MpFileManagerUIConnectSize); +} + + +void _CYCLIC cyclicWithTest(void) +{ + utCyclic(&Testsuite); + if (Testsuite.Informational.LastKnownPassedLocation.TestCaseName != 0) + strcpy((char*)&LastTestCase, (char*)Testsuite.Informational.LastKnownPassedLocation.TestCaseName); + if (Testsuite.Informational.LastKnownPassedLocation.TestSetName != 0) + strcpy((char*)&LastTestSet, (char*)Testsuite.Informational.LastKnownPassedLocation.TestSetName); + if (Testsuite.Informational.LastKnownPassedLocation.File != 0) + strcpy((char*)&LastTestFile, (char*)Testsuite.Informational.LastKnownPassedLocation.File); +} + + +void _EXIT exitTestSuite(void) +{ + utExit(&Testsuite); +} + + diff --git a/mappFramework/Logical/UnitTest/File/FileUnitTest/variables.var b/mappFramework/Logical/UnitTest/File/FileUnitTest/variables.var index e21e4bfc..9e410abd 100644 --- a/mappFramework/Logical/UnitTest/File/FileUnitTest/variables.var +++ b/mappFramework/Logical/UnitTest/File/FileUnitTest/variables.var @@ -1,47 +1,65 @@ -(******************************************************************** - * COPYRIGHT -- - ******************************************************************** - * Program: utTemplate_automated - * File: variables.var - * Author: - - * Created: - - ******************************************************************** - * Local variables of program utTemplate_automated - ********************************************************************) -(*Describe the test*) -VAR - Testsuite : UtMgrTestSuite := (Name:='FileMgr',Description:='FileMgr Unit Tests',Type:=utMgrTEST_TYPE_C,MetaInformation:='Meta'); -END_VAR -(*Variables used in the tests*) -VAR - cycleCount : {REDUND_UNREPLICABLE} UINT; - HmiFile_UT : FileHmiInterfaceType; (*HMI interface structure*) - FileName : STRING[24]; - FileNumber : USINT; - SetupState : USINT; - FileCreate_UT : FileCreate; - FileClose_UT : FileClose; - NumberOfFiles : UINT; - CurrentFile : UINT; - DirInfo_UT : DirInfo; - fileInfo : fiDIR_READ_DATA; - DirRead_UT : DirRead; - FileWrite_UT : FileWrite; - testData : {REDUND_UNREPLICABLE} STRING[1023] := 'testing data'; - FileDelete_UT : FileDelete; - NameMatch : BOOL; - DirName : STRING[255] := 'FileTestDir'; - CreateFileName : STRING[255] := 'FileTestFile.xml'; - FileCreate_0 : FileCreate; - FileClose_0 : FileClose; - CopiedFileName : STRING[255] := 'FileTestFile(1).xml'; - CopiedDirName : STRING[255] := 'FileTestDir(1)'; - NewFileName : STRING[255] := 'FileRename.xml'; - NewDirName : STRING[255] := 'DirRename'; - InNewLocation : BOOL; - InOldLocation : BOOL; - CopiedNewFileName : STRING[255] := 'FileRename(1).xml'; - CopiedNewDirName : STRING[255] := 'DirRename(1)'; - MultiSelectFileCopy : BOOL; - MultiSelectDirCopy : BOOL; -END_VAR +(******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: utTemplate_automated + * File: variables.var + * Author: - + * Created: - + ******************************************************************** + * Local variables of program utTemplate_automated + ********************************************************************) +(*Describe the test*) +VAR + Testsuite : UtMgrTestSuite := (Name:='FileMgr',Description:='FileMgr Unit Tests',Type:=utMgrTEST_TYPE_C,MetaInformation:='Meta'); +END_VAR +(*Variables used in the tests*) +VAR + cycleCount : {REDUND_UNREPLICABLE} UINT; + HmiFile_UT : FileHmiInterfaceType; (*HMI interface structure*) + FileName : STRING[24]; + FileNumber : USINT; + SetupState : USINT; + FileCreate_UT : FileCreate; + FileClose_UT : FileClose; + NumberOfDirs : UINT; + NumberOfFiles : UINT; + CurrentFile : UINT; + CurrentDir : UINT; + DirInfo_UT : DirInfo; + fileInfo : fiDIR_READ_DATA; + DirRead_UT : DirRead; + FileWrite_UT : FileWrite; + testData : {REDUND_UNREPLICABLE} STRING[1023] := 'testing data'; + FileDelete_UT : FileDelete; + DirDeleteEx_UT : DirDeleteEx; + NameMatch : BOOL; +END_VAR +VAR CONSTANT + DirName : STRING[255] := 'FileTestDir'; + CreateFileName : STRING[255] := 'FileTestFile.xml'; +END_VAR +VAR + FileCreate_0 : FileCreate; + FileClose_0 : FileClose; +END_VAR +VAR CONSTANT + CopiedFileName : STRING[255] := 'FileTestFile(1).xml'; + CopiedDirName : STRING[255] := 'FileTestDir(1)'; + NewFileName : STRING[255] := 'FileRename.xml'; + NewDirName : STRING[255] := 'DirRename'; +END_VAR +VAR + InNewLocation : BOOL; + InOldLocation : BOOL; +END_VAR +VAR CONSTANT + CopiedNewFileName : STRING[255] := 'FileRename(1).xml'; + CopiedNewDirName : STRING[255] := 'DirRename(1)'; +END_VAR +VAR + MultiSelectFileCopy : BOOL; + MultiSelectDirCopy : BOOL; + IsSelected : ARRAY[0..2] OF BOOL; + MpFileManagerUIConnectSize : UDINT; + pMpFileManagerUIConnect : REFERENCE TO MpFileManagerUIConnectType; (*File manager connection to the HMI*) +END_VAR diff --git a/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/ANSIC.prg b/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/ANSIC.prg index fd413d91..fd589518 100644 --- a/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/ANSIC.prg +++ b/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/ANSIC.prg @@ -1,16 +1,17 @@ - - - - - \Logical\Infrastructure\Recipe\RecipeMgr\RecipeMgr.typ - \Logical\Infrastructure\Recipe\RecipeMgr\RecipeMgr.var - \Logical\UnitTest\Common\CommonUT\CommonTypes.typ - \Logical\UnitTest\Common\CommonUT\CommonVariables.var - \Logical\UnitTest\Common\CommonUT\Set_Common.c - variables.var - testSuite.c - autoGeneratedFile.c - Set_RecipeParameters.c - Set_RecipeMachineSettings.c - + + + + + \Logical\Infrastructure\Recipe\RecipeMgr\RecipeMgr.typ + \Logical\Infrastructure\Recipe\RecipeMgr\RecipeMgr.var + \Logical\UnitTest\Common\CommonUT\CommonTypes.typ + \Logical\UnitTest\Common\CommonUT\CommonVariables.var + \Logical\UnitTest\Common\CommonUT\Set_Common.c + variables.var + testSuite.h + testSuite.c + autoGeneratedFile.c + Set_RecipeParameters.c + Set_RecipeMachineSettings.c + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/Set_RecipeMachineSettings.c b/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/Set_RecipeMachineSettings.c index d472ca45..96085d3e 100644 --- a/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/Set_RecipeMachineSettings.c +++ b/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/Set_RecipeMachineSettings.c @@ -301,9 +301,7 @@ _TEST Preview(void) case 4: TEST_BUSY_CONDITION(!SelectRecipe("preview.mcfg")); - MpRecipeUIConnect.Recipe.Load = true; - TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_LOAD); - MpRecipeUIConnect.Recipe.Load = false; + TEST_BUSY_CONDITION(MpRecipeSys.CommandDone != true); ActSubState = 5; break; @@ -430,10 +428,10 @@ _TEST Invalid(void) switch (ArrangeSubState) { case 0: FileCopy_UT.enable = true; - FileCopy_UT.pSrcDev = "mappRecipeFiles"; - FileCopy_UT.pSrc = "CSVformat\\Machine.mcfg"; - FileCopy_UT.pDestDev = "mappRecipeFiles"; - FileCopy_UT.pDest = "MachineInvalid.mcfg"; + FileCopy_UT.pSrcDev = (UDINT)&"mappRecipeFiles"; + FileCopy_UT.pSrc = (UDINT)&"CSVformat\\Machine.mcfg"; + FileCopy_UT.pDestDev = (UDINT)&"mappRecipeFiles"; + FileCopy_UT.pDest = (UDINT)&"MachineInvalid.mcfg"; FileCopy_UT.option= fiOVERWRITE; FileCopy(&FileCopy_UT); TEST_BUSY_CONDITION(FileCopy_UT.status == 65535); diff --git a/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/Set_RecipeParameters.c b/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/Set_RecipeParameters.c index 51691751..cf909e2f 100644 --- a/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/Set_RecipeParameters.c +++ b/mappFramework/Logical/UnitTest/Recipe/RecipeMgrUnitTest/Set_RecipeParameters.c @@ -301,9 +301,9 @@ _TEST PreviewShouldNotAffectActive(void) case 4: TEST_BUSY_CONDITION(!SelectRecipe("preview.par")); - MpRecipeUIConnect.Recipe.Load = true; - TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_LOAD); - MpRecipeUIConnect.Recipe.Load = false; + // MpRecipeUIConnect.Recipe.Load = true; + TEST_BUSY_CONDITION(MpRecipeSys.CommandDone != true); + // MpRecipeUIConnect.Recipe.Load = false; ActSubState = 5; break; @@ -342,6 +342,7 @@ _TEST Preview(void) strcpy(HmiRecipe.Parameters.FileName, "preview"); TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TEST_BUSY_CONDITION(MpRecipeSys.CommandDone != true); TestState = TEST_ACT; break; @@ -355,8 +356,8 @@ _TEST Preview(void) { case 0: HmiRecipe.Commands.CreateRecipe = true; - TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); - HmiRecipe.Commands.CreateRecipe = false; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); + HmiRecipe.Commands.CreateRecipe = false; ActSubState = 1; break; @@ -368,6 +369,7 @@ _TEST Preview(void) case 2: TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + TEST_BUSY_CONDITION(MpRecipeSys.CommandDone != true); ActSubState = 3; break; @@ -379,9 +381,7 @@ _TEST Preview(void) case 4: TEST_BUSY_CONDITION(!SelectRecipe("preview.par")); - MpRecipeUIConnect.Recipe.Load = true; - TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_LOAD); - MpRecipeUIConnect.Recipe.Load = false; + TEST_BUSY_CONDITION(MpRecipeSys.CommandDone != true); ActSubState = 5; break; @@ -417,6 +417,7 @@ _TEST Delete(void) strcpy(HmiRecipe.Parameters.FileName, "test"); TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TEST_INFO_POS(" "); ArrangeSubState = 1; break; @@ -424,29 +425,34 @@ _TEST Delete(void) HmiRecipe.Commands.CreateRecipe = true; TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); HmiRecipe.Commands.CreateRecipe = false; + TEST_INFO_POS(" "); ArrangeSubState = 2; break; case 2: TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + TEST_INFO_POS(" "); ArrangeSubState = 3; break; case 3: TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + TEST_INFO_POS(" "); ArrangeSubState = 4; break; case 4: TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_INFO_POS(" "); ArrangeSubState = 5; break; case 5: TEST_BUSY_CONDITION(!SelectRecipe("test.par")); TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); - TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TEST_BUSY_CONDITION(MpRecipeSys.CommandDone != true); + TEST_INFO_POS(" "); TestState = TEST_ACT; break; } @@ -508,10 +514,10 @@ _TEST Invalid(void) switch (ArrangeSubState) { case 0: FileCopy_UT.enable = true; - FileCopy_UT.pSrcDev = "mappRecipeFiles"; - FileCopy_UT.pSrc = "CSVformat\\Default.par"; - FileCopy_UT.pDestDev = "mappRecipeFiles"; - FileCopy_UT.pDest = "Invalid.par"; + FileCopy_UT.pSrcDev = (UDINT)&"mappRecipeFiles"; + FileCopy_UT.pSrc = (UDINT)&"CSVformat\\Default.par"; + FileCopy_UT.pDestDev = (UDINT)&"mappRecipeFiles"; + FileCopy_UT.pDest = (UDINT)&"Invalid.par"; FileCopy_UT.option= fiOVERWRITE; FileCopy(&FileCopy_UT); TEST_BUSY_CONDITION(FileCopy_UT.status == 65535); @@ -536,6 +542,7 @@ _TEST Invalid(void) TEST_BUSY_CONDITION(!SelectRecipe("Invalid.par")); TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TEST_BUSY_CONDITION(MpRecipeSys.CommandDone != true); TestState = TEST_ACT; break; } diff --git a/mappFramework/Logical/UnitTest/Samples/Framework_Features/SPL_Behavior/iHelperFunction.c b/mappFramework/Logical/UnitTest/Samples/Framework_Features/SPL_Behavior/iHelperFunction.c index d8a77d1d..760d8ce0 100644 --- a/mappFramework/Logical/UnitTest/Samples/Framework_Features/SPL_Behavior/iHelperFunction.c +++ b/mappFramework/Logical/UnitTest/Samples/Framework_Features/SPL_Behavior/iHelperFunction.c @@ -1,51 +1,51 @@ -/******************************************************************** - * COPYRIGHT -- Bernecker + Rainer - ******************************************************************** - * Program: SPL_Behavior - * File: iHelperFunction.c - * Author: B+R - *******************************************************************/ - -#include - -#ifdef _DEFAULT_INCLUDES -#include -#endif - -#include "UnitTest.h" -#include "AsBrStr.h" -#include "iPrototypes.h" - - -void resetDataForTestSet() -{ - brsstrcpy((UDINT)OutputString, (UDINT)""); - CounterInSet = 0; - CounterInSet_LastChecked = -1; - CounterToStringBuffer[0] = 0; -} - -void checkAndWriteCounterIfChanged( unsigned long line, const char *file) -{ - if(CounterInSet_LastChecked != CounterInSet) - { - addFailure((char*)OutputString, line, file); - - CounterInSet_LastChecked = CounterInSet; - brsitoa(CounterInSet + 1, (UDINT) CounterToStringBuffer); - - brsstrcpy((UDINT)OutputString, (UDINT)"( "); - brsstrcat((UDINT)OutputString, (UDINT)CounterToStringBuffer); - /* brsstrcat((UDINT)OutputString, (UDINT)". task cylce in TestSet) "); */ - brsstrcat((UDINT)OutputString, (UDINT)". cylce) "); - - addFailure((char*)OutputString, line, file); - - } - else if(OutputString[0]) - { - /* TEST_FAIL(OutputString);*/ - addFailure((char*)OutputString, line, file); - } - -} +/******************************************************************** + * COPYRIGHT -- Bernecker + Rainer + ******************************************************************** + * Program: SPL_Behavior + * File: iHelperFunction.c + * Author: B+R + *******************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include "AsBrStr.h" +#include "iPrototypes.h" + + +void resetDataForTestSet() +{ + brsstrcpy((UDINT)OutputString, (UDINT)""); + CounterInSet = 0; + CounterInSet_LastChecked = -1; + CounterToStringBuffer[0] = 0; +} + +void checkAndWriteCounterIfChanged( unsigned long line, const char *file) +{ + if(CounterInSet_LastChecked != CounterInSet) + { + addFailure((char*)OutputString, line, file); + + CounterInSet_LastChecked = CounterInSet; + brsitoa(CounterInSet + 1, (UDINT) CounterToStringBuffer); + + brsstrcpy((UDINT)OutputString, (UDINT)"( "); + brsstrcat((UDINT)OutputString, (UDINT)CounterToStringBuffer); + /* brsstrcat((UDINT)OutputString, (UDINT)". task cylce in TestSet) "); */ + brsstrcat((UDINT)OutputString, (UDINT)". cylce) "); + + addFailure((char*)OutputString, line, file); + + } + else if(OutputString[0]) + { + /* TEST_FAIL(OutputString);*/ + addFailure((char*)OutputString, line, file); + } + +} diff --git a/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/ANSIC.prg b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/ANSIC.prg new file mode 100644 index 00000000..0b591317 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/ANSIC.prg @@ -0,0 +1,15 @@ + + + + + \Logical\Infrastructure\VC4\AlarmX\AlarmMgr\AlarmMgr.typ + \Logical\Infrastructure\VC4\AlarmX\AlarmMgr\AlarmMgr.var + variables.var + testSuite.c + autoGeneratedFile.c + Set_AlarmExamples.c + Set_AlarmMgr.c + \Logical\UnitTestVC4\Common\CommonUT\CommonVariables.var + \Logical\UnitTestVC4\Common\CommonUT\Set_Common.c + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/Set_AlarmExamples.c b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/Set_AlarmExamples.c new file mode 100644 index 00000000..19d6c551 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/Set_AlarmExamples.c @@ -0,0 +1,193 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include + +#define _RESET_ALARMS \ + AlarmExamples.LevelMonitoring = 50; \ + MpAlarmXAcknowledgeAll_0.Execute = true; \ + MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); \ + TEST_BUSY_CONDITION(MpAlarmXAcknowledgeAll_0.CommandDone == false); \ + MpAlarmXAcknowledgeAll_0.Execute = false; \ + TEST_BUSY_CONDITION(MpAlarmXAcknowledgeAll_0.Info.UnacknowledgedAlarms != 0); \ + TEST_BUSY_CONDITION(cycleCount < 25); + +_SETUP_SET(void) +{ + _RESET_ALARMS; + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + _RESET_ALARMS; + TEST_DONE; +} + +_SETUP_TEST(void) +{ + cycleCount = 0; + TEST_DONE; +} + +_CYCLIC_SET(void) +{ + MpAlarmXAcknowledgeAll_0.MpLink = &gMpLinkAlarmXCore; + MpAlarmXAcknowledgeAll_0.Enable = true; + MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); + + cycleCount++; + + TEST_ABORT_CONDITION(cycleCount == 254); +} + +bool AlarmIsActive(char* alarmName) +{ + for (USINT i = 0; i < (sizeof(MpAlarmXListUIConnect.AlarmList.Name)/sizeof(MpAlarmXListUIConnect.AlarmList.Name[0])); i++) + { + if ((strcmp(alarmName, MpAlarmXListUIConnect.AlarmList.Name[i]) == 0) && (MpAlarmXListUIConnect.AlarmList.StateActive[i] == true)) + return true; + } + return false; +} + +void LogActiveAlarms(void) +{ + for (USINT i = 0; i < (sizeof(MpAlarmXListUIConnect.AlarmList.Name)/sizeof(MpAlarmXListUIConnect.AlarmList.Name[0])); i++) + { + if (strcmp(&"", MpAlarmXListUIConnect.AlarmList.Name[i]) != 0) + { + TEST_INFO(MpAlarmXListUIConnect.AlarmList.Name[i]) + } + } +} + +// These tests must run sequentially, Arrange->Act->Assert +// 3 "_TEST" function for each unit test +_TEST Arrange_LevelMonitoringLow(void) +{ + StartingActiveAlarms = MpAlarmXCoreMain.ActiveAlarms; + StartingPendingAlarms = MpAlarmXCoreMain.PendingAlarms; + _RESET_ALARMS; + TEST_DONE; +} + +_TEST Act_LevelMonitoringLow(void) +{ + AlarmExamples.LevelMonitoring = 19; + TEST_BUSY_CONDITION(cycleCount < 10); + TEST_DONE; +} + +_TEST Assert_LevelMonitoringLow(void) +{ + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); + TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); + LogActiveAlarms(); + TEST_DONE; +} + +_TEST Arrange_LevelMonitoringLowLow(void) +{ + StartingActiveAlarms = MpAlarmXCoreMain.ActiveAlarms; + StartingPendingAlarms = MpAlarmXCoreMain.PendingAlarms; + _RESET_ALARMS; + TEST_DONE; +} + +_TEST Act_LevelMonitoringLowLow(void) +{ + AlarmExamples.LevelMonitoring = 9; + TEST_BUSY_CONDITION(cycleCount < 15); + TEST_DONE; +} + +_TEST Assert_LevelMonitoringLowLow(void) +{ + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); + TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); + LogActiveAlarms(); + TEST_DONE; +} + +_TEST Arrange_LevelMonitoringHigh(void) +{ + StartingActiveAlarms = MpAlarmXCoreMain.ActiveAlarms; + StartingPendingAlarms = MpAlarmXCoreMain.PendingAlarms; + _RESET_ALARMS; + TEST_DONE; +} + +_TEST Act_LevelMonitoringHigh(void) +{ + AlarmExamples.LevelMonitoring = 81; + TEST_BUSY_CONDITION(cycleCount < 15); + TEST_DONE; +} + +_TEST Assert_LevelMonitoringHigh(void) +{ + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); + TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); + LogActiveAlarms(); + TEST_DONE; +} + +_TEST Arrange_LevelMonitoringHighHigh(void) +{ + StartingActiveAlarms = MpAlarmXCoreMain.ActiveAlarms; + StartingPendingAlarms = MpAlarmXCoreMain.PendingAlarms; + _RESET_ALARMS; + TEST_DONE; +} + +_TEST Act_LevelMonitoringHighHigh(void) +{ + AlarmExamples.LevelMonitoring = 91; + TEST_BUSY_CONDITION(cycleCount < 15); + TEST_DONE; +} + +_TEST Assert_LevelMonitoringHighHigh(void) +{ + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.PendingAlarms > StartingPendingAlarms, "Pending Alarms did not increase"); + TEST_ASSERT_MESSAGE(MpAlarmXCoreMain.ActiveAlarms > StartingActiveAlarms, "Active Alarms did not increase"); + TEST_ASSERT(AlarmIsActive("LevelMonitoringExample")); + LogActiveAlarms(); + TEST_DONE; +} + + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2022-11-03 17:18:35Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("Arrange_LevelMonitoringLow", Arrange_LevelMonitoringLow), + new_TestFixture("Act_LevelMonitoringLow", Act_LevelMonitoringLow), + new_TestFixture("Assert_LevelMonitoringLow", Assert_LevelMonitoringLow), + new_TestFixture("Arrange_LevelMonitoringLowLow", Arrange_LevelMonitoringLowLow), + new_TestFixture("Act_LevelMonitoringLowLow", Act_LevelMonitoringLowLow), + new_TestFixture("Assert_LevelMonitoringLowLow", Assert_LevelMonitoringLowLow), + new_TestFixture("Arrange_LevelMonitoringHigh", Arrange_LevelMonitoringHigh), + new_TestFixture("Act_LevelMonitoringHigh", Act_LevelMonitoringHigh), + new_TestFixture("Assert_LevelMonitoringHigh", Assert_LevelMonitoringHigh), + new_TestFixture("Arrange_LevelMonitoringHighHigh", Arrange_LevelMonitoringHighHigh), + new_TestFixture("Act_LevelMonitoringHighHigh", Act_LevelMonitoringHighHigh), + new_TestFixture("Assert_LevelMonitoringHighHigh", Assert_LevelMonitoringHighHigh), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_AlarmExamples, "Set_AlarmExamples", setupTest, 0, fixtures, setupSet, teardownSet, cyclicSetCaller); + diff --git a/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/Set_AlarmMgr.c b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/Set_AlarmMgr.c new file mode 100644 index 00000000..d8af04c8 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/Set_AlarmMgr.c @@ -0,0 +1,53 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include + +_SETUP_SET(void) +{ + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + TEST_DONE; +} + + +_SETUP_TEST(void) +{ + TEST_DONE; +} + +_TEARDOWN_TEST(void) +{ + TEST_DONE; +} + + +_TEST CheckCommissioningModeActive(void) +{ + CommissioningModeActive = true; + TEST_ASSERT(Alarms[0] == false); + TEST_DONE; +} + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2023-01-30 14:31:38Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("CheckCommissioningModeActive", CheckCommissioningModeActive), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_AlarmMgr, "Set_AlarmMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, 0); + diff --git a/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/autoGeneratedFile.c b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/autoGeneratedFile.c new file mode 100644 index 00000000..55b662b7 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/autoGeneratedFile.c @@ -0,0 +1,25 @@ +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (List of TestSets). +LastUpdated: 2022-11-23 14:37:56Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +#include "UnitTest.h" + + + +UNITTEST_TESTSET_DECLARATION Set_AlarmExamples; +UNITTEST_TESTSET_DECLARATION Set_AlarmMgr; +UNITTEST_TESTSET_DECLARATION Set_Common; + + + +UNITTEST_TESTSET_FIXTURES(utTestSets) +{ + new_TestSet(Set_AlarmExamples), + new_TestSet(Set_AlarmMgr), + new_TestSet(Set_Common), +}; +UNTITTEST_TESTSET_HANDLER(); + diff --git a/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/testSuite.c b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/testSuite.c new file mode 100644 index 00000000..89de1cef --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/testSuite.c @@ -0,0 +1,46 @@ +/******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: - + * Author: + * Created: + ******************************************************************** + * Test registration and handshake + ********************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include + +void _INIT initTestSuite(void) +{ + Testsuite.Enable = 1; + utInit(&Testsuite); + + CommonTestsuite.Enable = 1; + utInit(&CommonTestsuite); + + strcpy((char*)&FileDeviceName, "mappAlarmXFiles"); + strcpy((char*)&TextNameSpace, "mappFramework/AlarmX/Alarms"); + strcpy((char*)&TextID, "EmergencyStop.0"); +} + + +void _CYCLIC cyclicWithTest(void) +{ + utCyclic(&Testsuite); +} + + +void _EXIT exitTestSuite(void) +{ + utExit(&Testsuite); +} + + diff --git a/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/variables.var b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/variables.var new file mode 100644 index 00000000..b7c18565 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AlarmX/AlarmXUnitTest/variables.var @@ -0,0 +1,21 @@ +(******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: utTemplate_automated + * File: variables.var + * Author: - + * Created: - + ******************************************************************** + * Local variables of program utTemplate_automated + ********************************************************************) +(*Describe the test*) +VAR + Testsuite : UtMgrTestSuite := (Name:='AlarmMgrVC4',Description:='AlarmMgr VC4 Unit Tests',MetaInformation:='Meta'); +END_VAR +(*Variables used in the tests*) +VAR + MpAlarmXAcknowledgeAll_0 : MpAlarmXAcknowledgeAll; + StartingActiveAlarms : UDINT; + StartingPendingAlarms : UDINT; + cycleCount : USINT; +END_VAR diff --git a/mappFramework/Logical/UnitTestVC4/AlarmX/Package.pkg b/mappFramework/Logical/UnitTestVC4/AlarmX/Package.pkg new file mode 100644 index 00000000..0ad502d4 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AlarmX/Package.pkg @@ -0,0 +1,7 @@ + + + + + AlarmXUnitTest + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/ANSIC.prg b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/ANSIC.prg new file mode 100644 index 00000000..8e1559ca --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/ANSIC.prg @@ -0,0 +1,16 @@ + + + + + \Logical\UnitTest\Common\CommonUT\CommonTypes.typ + \Logical\UnitTest\Common\CommonUT\CommonVariables.var + \Logical\UnitTest\Common\CommonUT\Set_Common.c + \Logical\MachineControl\AxisReferencedFiles\AxisMgr.typ + variables.var + testSuite.c + autoGeneratedFile.c + Set_ManualTests.c + Set_AutomaticTests.c + \Logical\MachineControl\AxisReferencedFiles\AxisMgr.var + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/Set_AutomaticTests.c b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/Set_AutomaticTests.c new file mode 100644 index 00000000..851627d6 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/Set_AutomaticTests.c @@ -0,0 +1,225 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include +#include +#include + +#define MAX(x, y) (((x) > (y)) ? (x) : (y)) + +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 254) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(ActSubState, substate, 10); \ + strcpy(abortMessage, "Timeout in ActSubState = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } + + +_SETUP_SET(void) +{ + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + TEST_DONE; +} + +_SETUP_TEST(void) +{ + cycleCount = 0; + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + TestState = TEST_ARRANGE; + + maxVelocity = 0.0; + TEST_DONE; +} + +_TEARDOWN_TEST(void) +{ + AxisControl.Command.JogNegative = false; + AxisControl.Command.JogPositive = false; + AxisControl.Command.Abort = false; + AxisControl.Command.LoadRecipeParameters = false; + AxisControl.Command.MoveAbsolute = false; + AxisControl.Command.MoveAdditive = false; + AxisControl.Command.MoveToStart = false; + AxisControl.Command.MoveVelocity = false; + AxisControl.Command.Reference = false; + AxisControl.Command.Reset = false; + AxisControl.Command.SaveRecipeParameters = false; + AxisControl.Command.Start = false; + AxisControl.Command.Stop = false; + AxisControl.Command.UpdatePreviewParameters = false; + AxisControl.Command.UpdateVelocity = false; + + if ((AxisControl.Status.ErrorActive == true) || (MpAlarmXCoreAxis.PendingAlarms > 0)) + { + AxisControl.Command.Reset = true; + MpAlarmXAcknowledgeAll_0.Execute = true; + } + TEST_BUSY_CONDITION(AxisControl.Status.ErrorActive); + AxisControl.Command.Reset = false; + if (abs(AxisControl.Status.Velocity) > 0.01) + AxisControl.Command.Stop = true; + TEST_BUSY_CONDITION(abs(AxisControl.Status.Velocity > 0.01)); + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + AxisControl.Command.Stop = false; + + TEST_DONE; +} + +_CYCLIC_SET(void) +{ + cycleCount++; + MpAlarmXAcknowledgeAll_0.MpLink = &gMpLinkAlarmXCoreAppAxis_1; + MpAlarmXAcknowledgeAll_0.Enable = true; + MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); + MpAlarmXAcknowledgeAll_0.Execute = false; +} + +_TEST Start(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 40; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.Start = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST UpdateVelocity(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 40; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.Start = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); + AxisControl.Command.UpdateVelocity = true; + AxisControl.Parameters.Velocity = 60; + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(cycleCount < 60); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 60.0, maxVelocity); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST ZeroVelocity(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 0; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.Start = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(cycleCount < 10); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(AxisControl.Status.ErrorActive); + TEST_ASSERT_EQUAL_INT(1, MpAlarmXCoreAxis.PendingAlarms); + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, maxVelocity); + TEST_DONE; + break; + } + TEST_BUSY; +} + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2022-11-08 14:33:54Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("Start", Start), + new_TestFixture("UpdateVelocity", UpdateVelocity), + new_TestFixture("ZeroVelocity", ZeroVelocity), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_AutomaticTests, "Set_AutomaticTests", setupTest, teardownTest, fixtures, setupSet, teardownSet, cyclicSetCaller); + diff --git a/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/Set_ManualTests.c b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/Set_ManualTests.c new file mode 100644 index 00000000..8f44925b --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/Set_ManualTests.c @@ -0,0 +1,708 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include +#include +#include + +#define MAX(x, y) (((x) > (y)) ? (x) : (y)) + +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 254) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(ActSubState, substate, 10); \ + strcpy(abortMessage, "Timeout in ActSubState = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } + +_SETUP_SET(void) +{ + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + TEST_DONE; +} + +_SETUP_TEST(void) +{ + cycleCount = 0; + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + TestState = TEST_ARRANGE; + + maxVelocity = 0.0; + + TEST_DONE; +} + +_TEARDOWN_TEST(void) +{ + AxisControl.Command.JogNegative = false; + AxisControl.Command.JogPositive = false; + AxisControl.Command.Abort = false; + AxisControl.Command.LoadRecipeParameters = false; + AxisControl.Command.MoveAbsolute = false; + AxisControl.Command.MoveAdditive = false; + AxisControl.Command.MoveToStart = false; + AxisControl.Command.MoveVelocity = false; + AxisControl.Command.Reference = false; + AxisControl.Command.Reset = false; + AxisControl.Command.SaveRecipeParameters = false; + AxisControl.Command.Start = false; + AxisControl.Command.Stop = false; + AxisControl.Command.UpdatePreviewParameters = false; + AxisControl.Command.UpdateVelocity = false; + + if ((AxisControl.Status.ErrorActive == true) || (MpAlarmXCoreAxis.PendingAlarms > 0)) + { + AxisControl.Command.Reset = true; + MpAlarmXAcknowledgeAll_0.Execute = true; + } + TEST_BUSY_CONDITION(AxisControl.Status.ErrorActive); + AxisControl.Command.Reset = false; + if (abs(AxisControl.Status.Velocity) > 0.01) + AxisControl.Command.Stop = true; + TEST_BUSY_CONDITION(abs(AxisControl.Status.Velocity > 0.01)); + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + AxisControl.Command.Stop = false; + + TEST_DONE; +} + +_CYCLIC_SET(void) +{ + cycleCount++; + + MpAlarmXListUI_0.Enable = true; + MpAlarmXListUI_0.UIConnect = &MpAlarmXListUIConnect; + MpAlarmXListUI_0.MpLink = &gMpLinkAlarmXCoreAppAxis_1; + MpAlarmXListUI_0.UISetup.AlarmListScrollWindow = 10; + MpAlarmXListUI_0.UISetup.AlarmListSize = 50; + strcpy(MpAlarmXListUI_0.UISetup.TimeStampPattern, "%Y %m %d %H:%M:%S"); + MpAlarmXListUI(&MpAlarmXListUI_0); + + MpAlarmXAcknowledgeAll_0.MpLink = &gMpLinkAlarmXCoreAppAxis_1; + MpAlarmXAcknowledgeAll_0.Enable = true; + MpAlarmXAcknowledgeAll(&MpAlarmXAcknowledgeAll_0); + TEST_BUSY_CONDITION(MpAlarmXAcknowledgeAll_0.CommandBusy); + MpAlarmXAcknowledgeAll_0.Execute = false; + +} + +_TEST PowerOn(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + TestState = TEST_ACT; + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + AxisControl.Command.Power = true; + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.Busy == true); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(AxisControl.Status.IsPowered); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Homing(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + TestState = TEST_ACT; + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + AxisControl.Command.Reference = true; + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.IsHomed == false); + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(AxisControl.Status.IsHomed); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 0.0, AxisControl.Status.Position); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST JogPositive(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + TestState = TEST_ACT; + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + AxisControl.Command.JogPositive = true; + AxisControl.Parameters.JogVelocity = 50; + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.Velocity <= 49.0); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 50.0, AxisControl.Status.Velocity); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST JogNegative(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + TestState = TEST_ACT; + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + AxisControl.Command.JogNegative = true; + AxisControl.Parameters.JogVelocity = 50; + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.Velocity >= -49.0); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, -50.0, AxisControl.Status.Velocity); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST MoveAbsolute(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Position = 10; + AxisControl.Parameters.Velocity = 40; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveAbsolute = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + AxisControl.Command.MoveAbsolute = false; + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); + TEST_ASSERT_FLOAT_WITHIN(0.01, 10.0, AxisControl.Status.Position); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST MoveAdditive(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Distance = 5; + AxisControl.Parameters.Velocity = 30; + StartPosition = AxisControl.Status.Position; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveAdditive = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + AxisControl.Command.MoveAbsolute = false; + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 30.0, maxVelocity); + TEST_ASSERT_FLOAT_WITHIN(0.01, StartPosition + 5.0, AxisControl.Status.Position); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST MoveVelocity(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 25; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveVelocity = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 25.0, maxVelocity); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST MoveJogPositiveStop(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.JogVelocity = 25; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.JogPositive = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + AxisControl.Command.JogPositive = false; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST MoveJogNegativeStop(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.JogVelocity = 25; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.JogNegative = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + AxisControl.Command.JogNegative = false; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST MoveAbsoluteStop(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Position = 1; + AxisControl.Parameters.Velocity = 25; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveAbsolute = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + AxisControl.Command.MoveAbsolute = false; + AxisControl.Command.Stop = true; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + // check that we are not at the target position + TEST_ASSERT(fabs(1.0 - AxisControl.Status.Position) > 0.01); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST MoveAdditiveStop(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Distance = 10; + AxisControl.Parameters.Velocity = 25; + StartPosition = AxisControl.Status.Position; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveAdditive = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + AxisControl.Command.MoveAdditive = false; + AxisControl.Command.Stop = true; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + // check that we are not at the target position + TEST_ASSERT(fabs((StartPosition + 10.0) - AxisControl.Status.Position) > 0.01); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST MoveVelocityStop(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 25; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveVelocity = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + AxisControl.Command.MoveVelocity = false; + AxisControl.Command.Stop = true; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST TriggerAlarm(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 10001; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveVelocity = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 20); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, AxisControl.Status.Velocity); + TEST_ASSERT_FLOAT_WITHIN(0.1, 0.0, maxVelocity); + TEST_ASSERT(AxisControl.Status.ErrorActive); + TEST_ASSERT_EQUAL_INT(1, MpAlarmXCoreAxis.PendingAlarms); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST ResetAlarm(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 10001; + StartingPendingAlarms = MpAlarmXCoreAxis.PendingAlarms; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveVelocity = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(!AxisControl.Status.ErrorActive); + TEST_BUSY_CONDITION(MpAlarmXCoreAxis.PendingAlarms == StartingPendingAlarms); + AxisControl.Command.MoveVelocity = false; + ActSubState = 2; + break; + case 2: + // wait until the command is received by the axis task + TEST_BUSY_CONDITION(State != STATE_RESETTING); + AxisControl.Command.Reset = true; + MpAlarmXAcknowledgeAll_0.Execute = true; + ActSubState = 3; + break; + case 3: + TEST_BUSY_CONDITION(AxisControl.Status.Busy); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(!AxisControl.Status.ErrorActive); + TEST_ASSERT_EQUAL_INT(0, MpAlarmXCoreAxis.PendingAlarms); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST UpdateVelocity(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + AxisControl.Parameters.Velocity = 40; + TestState = TEST_ACT; + break; + + case TEST_ACT: + maxVelocity = MAX(AxisControl.Status.Velocity, maxVelocity); + switch (ActSubState) + { + case 0: + AxisControl.Command.MoveVelocity = true; + TEST_BUSY_CONDITION(!AxisControl.Status.Busy); + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(cycleCount < 30); + TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); + AxisControl.Command.UpdateVelocity = true; + AxisControl.Parameters.Velocity = 60; + ActSubState = 2; + break; + case 2: + TEST_BUSY_CONDITION(cycleCount < 60); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + // update velocity should not affect manual moves + TEST_ASSERT_FLOAT_WITHIN(0.1, 40.0, maxVelocity); + TEST_DONE; + break; + } + TEST_BUSY; +} + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2022-11-15 16:02:39Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("PowerOn", PowerOn), + new_TestFixture("Homing", Homing), + new_TestFixture("JogPositive", JogPositive), + new_TestFixture("JogNegative", JogNegative), + new_TestFixture("MoveAbsolute", MoveAbsolute), + new_TestFixture("MoveAdditive", MoveAdditive), + new_TestFixture("MoveVelocity", MoveVelocity), + new_TestFixture("MoveJogPositiveStop", MoveJogPositiveStop), + new_TestFixture("MoveJogNegativeStop", MoveJogNegativeStop), + new_TestFixture("MoveAbsoluteStop", MoveAbsoluteStop), + new_TestFixture("MoveAdditiveStop", MoveAdditiveStop), + new_TestFixture("MoveVelocityStop", MoveVelocityStop), + new_TestFixture("TriggerAlarm", TriggerAlarm), + new_TestFixture("ResetAlarm", ResetAlarm), + new_TestFixture("UpdateVelocity", UpdateVelocity), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_ManualTests, "Set_ManualTests", setupTest, teardownTest, fixtures, setupSet, teardownSet, cyclicSetCaller); + diff --git a/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/autoGeneratedFile.c b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/autoGeneratedFile.c new file mode 100644 index 00000000..5171cf06 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/autoGeneratedFile.c @@ -0,0 +1,25 @@ +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (List of TestSets). +LastUpdated: 2022-11-08 14:30:25Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +#include "UnitTest.h" + + + +UNITTEST_TESTSET_DECLARATION Set_Common; +UNITTEST_TESTSET_DECLARATION Set_ManualTests; +UNITTEST_TESTSET_DECLARATION Set_AutomaticTests; + + + +UNITTEST_TESTSET_FIXTURES(utTestSets) +{ + new_TestSet(Set_Common), + new_TestSet(Set_ManualTests), + new_TestSet(Set_AutomaticTests), +}; +UNTITTEST_TESTSET_HANDLER(); + diff --git a/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/testSuite.c b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/testSuite.c new file mode 100644 index 00000000..296474d7 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/testSuite.c @@ -0,0 +1,51 @@ +/******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: - + * Author: + * Created: + ******************************************************************** + * Test registration and handshake + ********************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include + +void _INIT initTestSuite(void) +{ + Testsuite.Enable = 1; + utInit(&Testsuite); + + CommonTestsuite.Enable = 1; + utInit(&CommonTestsuite); + + strcpy((char*)&FileDeviceName, ""); + strcpy((char*)&TextNameSpace, "Axis/Alarms"); + strcpy((char*)&TextID, "ReferenceRequired"); +} + +void _CYCLIC cyclicWithTest(void) +{ + utCyclic(&Testsuite); + + if (Testsuite.Informational.LastKnownPassedLocation.TestCaseName != 0) + strcpy((char*)&LastTestCase, (char*)Testsuite.Informational.LastKnownPassedLocation.TestCaseName); + if (Testsuite.Informational.LastKnownPassedLocation.TestSetName != 0) + strcpy((char*)&LastTestSet, (char*)Testsuite.Informational.LastKnownPassedLocation.TestSetName); + if (Testsuite.Informational.LastKnownPassedLocation.File != 0) + strcpy((char*)&LastTestFile, (char*)Testsuite.Informational.LastKnownPassedLocation.File); +} + +void _EXIT exitTestSuite(void) +{ + utExit(&Testsuite); +} + + diff --git a/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/variables.var b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/variables.var new file mode 100644 index 00000000..68f4ecd5 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AppAxis_1/AppAxisUnitTest/variables.var @@ -0,0 +1,25 @@ +(******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: utTemplate_automated + * File: variables.var + * Author: - + * Created: - + ******************************************************************** + * Local variables of program utTemplate_automated + ********************************************************************) +(*Describe the test*) +VAR + Testsuite : UtMgrTestSuite := (Name:='AppAxis_1VC4',Description:='AppAxis_1 VC4 Unit Tests',MetaInformation:='Meta'); +END_VAR +(*Variables used in the tests*) +VAR + MpAlarmXListUIConnect : MpAlarmXListUIConnectType := (0); (*AlarmX list connection to the UI*) + MpAlarmXListUI_0 : MpAlarmXListUI; (*MpAlarmXList instance*) + MpAlarmXAcknowledgeAll_0 : MpAlarmXAcknowledgeAll; + StartingActiveAlarms : UDINT; + StartingPendingAlarms : UDINT; + cycleCount : USINT; + StartPosition : LREAL; + maxVelocity : REAL; +END_VAR diff --git a/mappFramework/Logical/UnitTestVC4/AppAxis_1/Package.pkg b/mappFramework/Logical/UnitTestVC4/AppAxis_1/Package.pkg new file mode 100644 index 00000000..209cc035 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/AppAxis_1/Package.pkg @@ -0,0 +1,7 @@ + + + + + AppAxisUnitTest + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/ANSIC.prg b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/ANSIC.prg new file mode 100644 index 00000000..fcb75771 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/ANSIC.prg @@ -0,0 +1,15 @@ + + + + + \Logical\Infrastructure\VC4\Audit\AuditMgr\AuditMgr.typ + \Logical\Infrastructure\VC4\Audit\AuditMgr\AuditMgr.var + Types.typ + variables.var + testSuite.c + autoGeneratedFile.c + Set_AuditMgr.c + \Logical\UnitTestVC4\Common\CommonUT\CommonVariables.var + \Logical\UnitTestVC4\Common\CommonUT\Set_Common.c + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/Set_AuditMgr.c b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/Set_AuditMgr.c new file mode 100644 index 00000000..ef599fb2 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/Set_AuditMgr.c @@ -0,0 +1,215 @@ +#include +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include +#include + +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 1000) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(TestState, substate, 10); \ + strcpy(abortMessage, "Timeout in State = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } + +_SETUP_SET(void) +{ + cycleCount = 0; + + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + TEST_DONE; +} + + +_SETUP_TEST(void) +{ + ArrangeDelay = 0; + ActDelay = 0; + AssertDelay = 0; + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + SampleTemperature = 1; + TestComparisonNumber = 0; + TestState = TEST_ARRANGE; + cycleCount = 0; + + TEST_DONE; +} + +_TEARDOWN_TEST(void) +{ + ArrangeDelay = 0; + ActDelay = 0; + AssertDelay = 0; + SampleTemperature = 1; + TEST_DONE; +} + +_CYCLIC_SET(void) +{ + cycleCount++; +} + +_TEST ExportArchive(void) +{ + TIMEOUT_TEST_CASE; + + DirInfo_0.enable = 1; + DirInfo_0.pDevice = (UDINT) "mappAuditFiles"; + DirInfo_0.pPath = 0; + DirInfo(&DirInfo_0); + + switch (TestState) + { + case TEST_ARRANGE: + // Force an audit to be generated + switch (ArrangeSubState) + { + case 0: + SampleTemperature++; + TEST_BUSY_CONDITION(!HmiAudit.Status.ArchiveAvailable); + ArrangeSubState = 1; + break; + + case 1: + ArrangeDelay += 1; // This delay is compensating for the function block refreshing after finishing a command + TEST_BUSY_CONDITION(ArrangeDelay <= DelayCycles); + TestComparisonNumber = DirInfo_0.filenum; + TestState = TEST_ACT; + break; + } + break; + + case TEST_ACT: + // Archive audit + switch (ActSubState) + { + case 0: + HmiAudit.Commands.ExportArchives = 1; + TEST_ABORT_CONDITION(MpAuditTrailError); + TEST_BUSY_CONDITION(!MpAuditTrailCmdDone); + HmiAudit.Commands.ExportArchives = 0; + ActSubState = 1; + break; + + case 1: + ActDelay += 1; // This delay is compensating for the function block refreshing after finishing a command + TEST_BUSY_CONDITION(ActDelay <= DelayCycles); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(TestComparisonNumber < DirInfo_0.filenum); + TEST_DONE; + break; + } + + TEST_BUSY; +} + +_TEST AutomaticArchive(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case TEST_ARRANGE: + // Set automatic archive parameters prepare audit for generation + switch (ArrangeSubState) + { + case 0: + HmiAudit.Parameters.ArchiveSettings.Enable = 1; + HmiAudit.Parameters.ArchiveSettings.FileType = mpAUDIT_FILE_TYPE_XML; + HmiAudit.Parameters.ArchiveSettings.MaxSize = MAX_FILE_SIZE; + HmiAudit.Parameters.ArchiveSettings.Mode = mpAUDIT_ARCHIVE_DAILY; + HmiAudit.Parameters.ArchiveSettings.Hour = HOUR; + HmiAudit.Parameters.ArchiveSettings.Minute = MINUTE; + ArrangeSubState = 1; + break; + + case 1: + TestComparisonNumber = HmiAudit.Status.NumberOfArchives; + ArrangeSubState = 2; + break; + + case 2: + ArrangeDelay += 1; + TEST_BUSY_CONDITION(ArrangeDelay <= DelayCycles); + TestState = TEST_ACT; + break; + } + break; + + case TEST_ACT: + // Archive audit + switch (ActSubState) + { + case 0: + SampleTemperature = SAMPLE_TEMP_VALUE; + DTSetTime_0.DT1 = SET_TIME; + DTSetTime_0.enable = 1; + DTSetTime(&DTSetTime_0); + ActSubState = 1; + break; + + case 1: + TON_0.PT = TIMER_LENGTH; + TON_0.IN = 1; + TON(&TON_0); + if(TON_0.Q) + { + ActSubState = 2; + } + break; + + case 2: + TestState = TEST_ASSERT; + TON_0.IN = 0; + TON(&TON_0); + break; + } + break; + + case TEST_ASSERT: + // Check save location for archive + TEST_ASSERT(TestComparisonNumber + 1 <= HmiAudit.Status.NumberOfArchives); + TEST_DONE; + break; + } + TEST_BUSY; +} + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2023-02-06 16:23:26Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("ExportArchive", ExportArchive), + new_TestFixture("AutomaticArchive", AutomaticArchive), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_AuditMgr, "Set_AuditMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, cyclicSetCaller); + diff --git a/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/Types.typ b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/Types.typ new file mode 100644 index 00000000..333a1267 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/Types.typ @@ -0,0 +1,81 @@ + +TYPE + TestStateEnum : + ( + TEST_ARRANGE := 10, + TEST_ACT := 20, + TEST_ASSERT := 30 + ); +END_TYPE + +(*UserX control*) + +TYPE + UserXLogin_type : STRUCT + Commands : UserXLoginCommands_type; + Status : UserXLoginStatus_type; + Parameters : UserXLoginParameters_type; + END_STRUCT; + UserXLoginCommands_type : STRUCT + Enable : BOOL; + Login : BOOL; + Logout : BOOL; + END_STRUCT; + UserXLoginStatus_type : STRUCT + CommandDone : BOOL; + CurrentUser : WSTRING[50]; + Error : BOOL; + END_STRUCT; + UserXLoginParameters_type : STRUCT + UserName : STRING[50]; + Password : UDINT; + END_STRUCT; +END_TYPE + +(*HMIAudit control*) + +TYPE + HMIAuditInterface_type : STRUCT + Commands : HMIAuditInterfaceCommands_type; + Status : HMIAuditInterfaceStatus_type; + Parameters : HMIAuditInterfaceParameters_type; + END_STRUCT; + HMIAuditInterfaceCommands_type : STRUCT + ExportArchives : BOOL; + END_STRUCT; + HMIAuditInterfaceStatus_type : STRUCT + AuditTrailCmdDone : BOOL; + AuditTrailArchiveAvailable : BOOL; + NumberOfArchives : UINT; + END_STRUCT; + HMIAuditInterfaceParameters_type : STRUCT + ArchiveSettings : HMIAuditArchiveParType; + END_STRUCT; + HMIAuditArchiveParType : STRUCT + Enable : BOOL; + MaxSize : UDINT; + Mode : MpAuditArchiveModeEnum; + Hour : USINT; + Minute : USINT; + FileType : MpAuditFileTypeEnum; + END_STRUCT; +END_TYPE + +(*MpRecipe control*) + +TYPE + MpRecipeUIConnect_type : STRUCT + Parameters : MpRecipeUIConnectParameters_type; + Commands : MpRecipeUIConnectCommands_type; + Status : MpRecipeUIConnectStatus_type; + END_STRUCT; + MpRecipeUIConnectParameters_type : STRUCT + FileName : USINT; + END_STRUCT; + MpRecipeUIConnectCommands_type : STRUCT + New_Member : USINT; + END_STRUCT; + MpRecipeUIConnectStatus_type : STRUCT + New_Member : USINT; + END_STRUCT; +END_TYPE diff --git a/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/autoGeneratedFile.c b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/autoGeneratedFile.c new file mode 100644 index 00000000..0b184d54 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/autoGeneratedFile.c @@ -0,0 +1,23 @@ +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (List of TestSets). +LastUpdated: 2022-09-26 13:08:18Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +#include "UnitTest.h" + + + +UNITTEST_TESTSET_DECLARATION Set_AuditMgr; +UNITTEST_TESTSET_DECLARATION Set_Common; + + + +UNITTEST_TESTSET_FIXTURES(utTestSets) +{ + new_TestSet(Set_AuditMgr), + new_TestSet(Set_Common), +}; +UNTITTEST_TESTSET_HANDLER(); + diff --git a/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/testSuite.c b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/testSuite.c new file mode 100644 index 00000000..4c01a75b --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/testSuite.c @@ -0,0 +1,46 @@ +/******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: - + * Author: + * Created: + ******************************************************************** + * Test registration and handshake + ********************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include + + +void _INIT initTestSuite(void) +{ + Testsuite.Enable = 1; + utInit(&Testsuite); + + CommonTestsuite.Enable = 1; + utInit(&CommonTestsuite); + + strcpy((char*)&FileDeviceName, "mappAuditFiles"); + strcpy((char*)&TextNameSpace, "mappFramework/Audit/Alarms"); + strcpy((char*)&TextID, "ArchiveAvailable"); +} + + +void _CYCLIC cyclicWithTest(void) +{ + utCyclic(&Testsuite); +} + + +void _EXIT exitTestSuite(void) +{ + utExit(&Testsuite); +} + + diff --git a/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/variables.var b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/variables.var new file mode 100644 index 00000000..056f3e8a --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Audit/AuditTest/variables.var @@ -0,0 +1,36 @@ +(******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: utTemplate_automated + * File: variables.var + * Author: - + * Created: - + ******************************************************************** + * Local variables of program utTemplate_automated + ********************************************************************) +(*Describe the test*) +VAR + Testsuite : UtMgrTestSuite := (Name:='AuditMgrVC4',Description:='AuditMgr VC4 Unit Tests',MetaInformation:='Meta'); +END_VAR +(*Variables used in the tests*) +VAR + cycleCount : {REDUND_UNREPLICABLE} UINT; + SampleTemperature : REAL; + DirInfo_0 : DirInfo; + TestComparisonNumber : USINT; + ActDelay : USINT; + ArrangeDelay : USINT; + AssertDelay : USINT; + DTSetTime_0 : DTSetTime; + HOUR : USINT := 16; + MINUTE : USINT := 0; + SET_TIME : DATE_AND_TIME := DT#2023-01-01-15:59:59; + MAX_FILE_SIZE : UDINT := 100; (*Maximum file size for automatic archiving (Kb)*) + SAMPLE_TEMP_VALUE : REAL := 5; + DEFAULT_TEMP_VALUE : REAL := 6; + TON_0 : TON; + TIMER_LENGTH : TIME := T#2s; + MpAuditTrailCmdDone : BOOL; + MpAuditTrailError : BOOL; + DelayCycles : USINT := 10; +END_VAR diff --git a/mappFramework/Logical/UnitTestVC4/Audit/Package.pkg b/mappFramework/Logical/UnitTestVC4/Audit/Package.pkg new file mode 100644 index 00000000..60a8921d --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Audit/Package.pkg @@ -0,0 +1,7 @@ + + + + + AuditTest + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/ANSIC.prg b/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/ANSIC.prg new file mode 100644 index 00000000..25a95fdb --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/ANSIC.prg @@ -0,0 +1,14 @@ + + + + + \Logical\Infrastructure\VC4\Backup\BackupMgr\BackupMgr.typ + \Logical\Infrastructure\VC4\Backup\BackupMgr\BackupMgr.var + variables.var + testSuite.c + autoGeneratedFile.c + Set_BackupMgr.c + \Logical\UnitTestVC4\Common\CommonUT\CommonVariables.var + \Logical\UnitTestVC4\Common\CommonUT\Set_Common.c + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/Set_BackupMgr.c b/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/Set_BackupMgr.c new file mode 100644 index 00000000..5b9f2bcb --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/Set_BackupMgr.c @@ -0,0 +1,60 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include + +_SETUP_SET(void) +{ + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + TEST_DONE; +} + + +_SETUP_TEST(void) +{ + TEST_DONE; +} + +_TEARDOWN_TEST(void) +{ + TEST_DONE; +} + +_TEST createNotAllowedInSim(void) +{ + TEST_ABORT_CONDITION(!HmiBackup.Status.SimulationActive); + TEST_ASSERT(!HmiBackup.Status.CreateAllowed); + TEST_DONE; +} + +_TEST restoreNotAllowedInSim(void) +{ + TEST_ABORT_CONDITION(!HmiBackup.Status.SimulationActive); + TEST_ASSERT(!HmiBackup.Status.RestoreAllowed); + TEST_DONE; +} + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2023-09-05 18:15:00Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("createNotAllowedInSim", createNotAllowedInSim), + new_TestFixture("restoreNotAllowedInSim", restoreNotAllowedInSim), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_BackupMgr, "Set_BackupMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, 0); + diff --git a/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/autoGeneratedFile.c b/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/autoGeneratedFile.c new file mode 100644 index 00000000..2fbff9f7 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/autoGeneratedFile.c @@ -0,0 +1,23 @@ +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (List of TestSets). +LastUpdated: 2022-09-22 14:29:52Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +#include "UnitTest.h" + + + +UNITTEST_TESTSET_DECLARATION Set_BackupMgr; +UNITTEST_TESTSET_DECLARATION Set_Common; + + + +UNITTEST_TESTSET_FIXTURES(utTestSets) +{ + new_TestSet(Set_BackupMgr), + new_TestSet(Set_Common), +}; +UNTITTEST_TESTSET_HANDLER(); + diff --git a/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/testSuite.c b/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/testSuite.c new file mode 100644 index 00000000..f4b43d14 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/testSuite.c @@ -0,0 +1,47 @@ +/******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: - + * Author: + * Created: + ******************************************************************** + * Test registration and handshake + ********************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include + + +void _INIT initTestSuite(void) +{ + Testsuite.Enable = 1; + utInit(&Testsuite); + + CommonTestsuite.Enable = 1; + utInit(&CommonTestsuite); + + strcpy((char*)&FileDeviceName, "mappBackupFiles"); + strcpy((char*)&TextNameSpace, "mappFramework/Backup/Alarms"); + strcpy((char*)&TextID, "CreateFailed"); + +} + + +void _CYCLIC cyclicWithTest(void) +{ + utCyclic(&Testsuite); +} + + +void _EXIT exitTestSuite(void) +{ + utExit(&Testsuite); +} + + diff --git a/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/variables.var b/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/variables.var new file mode 100644 index 00000000..286c7ad1 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Backup/BackupUnitTest/variables.var @@ -0,0 +1,15 @@ +(******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: utTemplate_automated + * File: variables.var + * Author: - + * Created: - + ******************************************************************** + * Local variables of program utTemplate_automated + ********************************************************************) +(*Describe the test*) +VAR + Testsuite : UtMgrTestSuite := (Name:='BackupMgrVC4',Description:='BackupMgr VC4 Unit Tests',MetaInformation:='Meta'); +END_VAR +(*Variables used in the tests*) diff --git a/mappFramework/Logical/UnitTestVC4/Backup/Package.pkg b/mappFramework/Logical/UnitTestVC4/Backup/Package.pkg new file mode 100644 index 00000000..d0f0051b --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Backup/Package.pkg @@ -0,0 +1,7 @@ + + + + + BackupUnitTest + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Common/CommonUT/ANSIC.prg b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/ANSIC.prg new file mode 100644 index 00000000..edc2d91b --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/ANSIC.prg @@ -0,0 +1,11 @@ + + + + + CommonTypes.typ + CommonVariables.var + testSuite.c + autoGeneratedFile.c + Set_Common.c + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Common/CommonUT/CommonTypes.typ b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/CommonTypes.typ new file mode 100644 index 00000000..2558f6b1 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/CommonTypes.typ @@ -0,0 +1,9 @@ + +TYPE + TestCaseEnum : + ( + TEST_ARRANGE, + TEST_ACT, + TEST_ASSERT + ); +END_TYPE diff --git a/mappFramework/Logical/UnitTestVC4/Common/CommonUT/CommonVariables.var b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/CommonVariables.var new file mode 100644 index 00000000..9245eea4 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/CommonVariables.var @@ -0,0 +1,31 @@ +(******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: utTemplate_automated + * File: variables.var + * Author: - + * Created: - + ******************************************************************** + * Local variables of program utTemplate_automated + ********************************************************************) +(*Describe the test*) +VAR + ArrangeSubState : USINT; + ActSubState : USINT; + AssertSubState : USINT; + TestState : USINT; + CommonTestsuite : UtMgrTestSuite := (Name:='Common Unit Tests',Description:='Common Unit Tests',Type:=utMgrTEST_TYPE_C,MetaInformation:='Meta'); +END_VAR +(*Variables used in the tests*) +VAR + FileDeviceName : STRING[80]; + MpBlockStatus : ARRAY[0..9] OF DINT; + DirInfoCommon_UT : DirInfo; + TextNameSpace : STRING[80]; + TextID : STRING[80]; + Text : STRING[80]; + ArTextSysGetTextComon_UT : ArTextSysGetText; + LastTestCase : STRING[80]; + LastTestSet : STRING[80]; + LastTestFile : STRING[255]; +END_VAR diff --git a/mappFramework/Logical/UnitTestVC4/Common/CommonUT/Set_Common.c b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/Set_Common.c new file mode 100644 index 00000000..ed01356e --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/Set_Common.c @@ -0,0 +1,99 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include + +_SETUP_SET(void) +{ + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + TEST_DONE; +} + + +_SETUP_TEST(void) +{ + TEST_DONE; +} + +_TEARDOWN_TEST(void) +{ + + TEST_DONE; +} + +_TEST FileDeviceExists(void) +{ + if (strcmp((char*)&FileDeviceName, "") == 0) + { + TEST_INFO_POS("FileDeviceName is empty"); + TEST_DONE; + } + DirInfoCommon_UT.enable = true; + DirInfoCommon_UT.pDevice = (UDINT)&FileDeviceName; + DirInfoCommon_UT.pPath = (UDINT)&""; + DirInfo(&DirInfoCommon_UT); + TEST_BUSY_CONDITION(DirInfoCommon_UT.status == 65535); + TEST_ASSERT_EQUAL_INT(0, DirInfoCommon_UT.status); + TEST_DONE; +} + +_TEST NoFunctionBlockErrors(void) +{ + + for (USINT i=0; i<(sizeof(MpBlockStatus)/sizeof(MpBlockStatus[0]));i++) + { + TEST_ASSERT_EQUAL_INT(0, MpBlockStatus[i]); + } + TEST_DONE; +} + +_TEST TextFileConfirmation(void) +{ + // Arrange + TEST_ABORT_CONDITION(strcmp(TextNameSpace, "") == 0); + TEST_ABORT_CONDITION(strcmp(TextID, "") == 0); + + ArTextSysGetTextComon_UT.Execute = true; + ArTextSysGetTextComon_UT.Namespace = (UDINT)&TextNameSpace; + ArTextSysGetTextComon_UT.TextID = (UDINT)&TextID; + strcpy((char*)&ArTextSysGetTextComon_UT.LanguageCode, "en"); + ArTextSysGetTextComon_UT.TextBuffer = (UDINT)&Text; + ArTextSysGetTextComon_UT.TextBufferSize = sizeof(Text)/sizeof(Text[0]); + + // Act + ArTextSysGetText(&ArTextSysGetTextComon_UT); + TEST_BUSY_CONDITION(ArTextSysGetTextComon_UT.Busy); + + // Assert + TEST_ASSERT(ArTextSysGetTextComon_UT.Error == false); + TEST_ASSERT_EQUAL_INT(0, ArTextSysGetTextComon_UT.StatusID); + TEST_ASSERT_MESSAGE(strcmp(Text, "") != 0, "Text is empty"); + TEST_DONE; +} + + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2022-09-22 14:29:52Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("FileDeviceExists", FileDeviceExists), + new_TestFixture("NoFunctionBlockErrors", NoFunctionBlockErrors), + new_TestFixture("TextFileConfirmation", TextFileConfirmation), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_Common, "Set_Common", setupTest, teardownTest, fixtures, setupSet, teardownSet, 0); + diff --git a/mappFramework/Logical/UnitTestVC4/Common/CommonUT/autoGeneratedFile.c b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/autoGeneratedFile.c new file mode 100644 index 00000000..94b2dfec --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/autoGeneratedFile.c @@ -0,0 +1,21 @@ +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (List of TestSets). +LastUpdated: 2022-09-22 11:55:24Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +#include "UnitTest.h" + + + +UNITTEST_TESTSET_DECLARATION Set_Common; + + + +UNITTEST_TESTSET_FIXTURES(utTestSets) +{ + new_TestSet(Set_Common), +}; +UNTITTEST_TESTSET_HANDLER(); + diff --git a/mappFramework/Logical/UnitTestVC4/Common/CommonUT/testSuite.c b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/testSuite.c new file mode 100644 index 00000000..71d6c461 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Common/CommonUT/testSuite.c @@ -0,0 +1,39 @@ +/******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: - + * Author: + * Created: + ******************************************************************** + * Test registration and handshake + ********************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" + + + +void _INIT initTestSuite(void) +{ + Testsuite.Enable = 1; + utInit(&Testsuite); +} + + +void _CYCLIC cyclicWithTest(void) +{ + utCyclic(&Testsuite); +} + + +void _EXIT exitTestSuite(void) +{ + utExit(&Testsuite); +} + + diff --git a/mappFramework/Logical/UnitTestVC4/Common/Package.pkg b/mappFramework/Logical/UnitTestVC4/Common/Package.pkg new file mode 100644 index 00000000..0762486e --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Common/Package.pkg @@ -0,0 +1,7 @@ + + + + + CommonUT + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/ANSIC.prg b/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/ANSIC.prg new file mode 100644 index 00000000..44231619 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/ANSIC.prg @@ -0,0 +1,14 @@ + + + + + \Logical\Infrastructure\VC4\File\FileMgr\FileMgr.typ + \Logical\Infrastructure\VC4\File\FileMgr\FileMgr.var + \Logical\UnitTestVC4\Common\CommonUT\CommonVariables.var + \Logical\UnitTestVC4\Common\CommonUT\Set_Common.c + variables.var + testSuite.c + autoGeneratedFile.c + Set_FileMgr.c + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/Set_FileMgr.c b/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/Set_FileMgr.c new file mode 100644 index 00000000..152d9aab --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/Set_FileMgr.c @@ -0,0 +1,2225 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include +#include + +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 1000) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(TestState, substate, 10); \ + strcpy(abortMessage, "Timeout in State = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } + +_SETUP_SET(void) +{ + TestState = 0; + FileNumber = 0; + + HmiFile_UT.Parameters.Fifo.Enable = false; + HmiFile_UT.Parameters.Fifo.ScanInterval = 60; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + + switch (SetupState) + { + case 0: + TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep != FILE_DISABLED); + for (USINT i=0; i= NumberOfFiles) ? 100 : 1; + break; + + case 10: + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect_FIFO.File.Refresh = true; + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect_FIFO.File.Refresh = false; + SetupState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status != mpFILE_UI_STATUS_IDLE); + SetupState = 100; + break; + + case 100: + TEST_DONE; + } + TEST_BUSY; +} + +_TEARDOWN_SET(void) +{ + /* TODO: add code running after test set here */ + TEST_DONE; +} + +bool FileIdleOrDisabled(void) { + return ((HmiFile_UT.Status.DeleteStep == FILE_DELETE_WAIT) || (HmiFile_UT.Status.DeleteStep == FILE_DISABLED)); +} + +_SETUP_TEST(void) { + TestState = 0; + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + FileNumber = 0; + cycleCount = 0; + NameMatch = 0; + InNewLocation = 0; + InOldLocation = 0; + MultiSelectDirCopy = 0; + MultiSelectFileCopy = 0; + HmiFile.Status.SelectedIndex = 0; + MpFileManagerUIConnect.File.Copy = 0; + MpFileManagerUIConnect.File.CreateFolder = 0; + MpFileManagerUIConnect.File.Cut = 0; + MpFileManagerUIConnect.File.Delete = 0; + MpFileManagerUIConnect.File.EnterFolder = 0; + MpFileManagerUIConnect.File.FolderUp = 0; + MpFileManagerUIConnect.File.MultiSelect = 0; + MpFileManagerUIConnect.File.Paste = 0; + MpFileManagerUIConnect.File.Refresh = 0; + MpFileManagerUIConnect.File.Rename = 0; + + HmiFile_UT.Parameters.Fifo.Enable = false; + HmiFile_UT.Parameters.Fifo.ScanInterval = 60; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + + switch (SetupState) + { + case 0: + TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep != FILE_DISABLED); + for (USINT i=0; i= NumberOfFiles) ? 100 : 1; + break; + + case 10: + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect_FIFO.File.Refresh = true; + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status == mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect_FIFO.File.Refresh = false; + SetupState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(MpFileManagerUIConnect_FIFO.Status != mpFILE_UI_STATUS_IDLE); + SetupState = 100; + break; + + case 100: + TEST_DONE; + } + TEST_BUSY; +} + +_TEARDOWN_TEST(void) +{ + HmiFile_UT.Parameters.Fifo.Enable = false; + HmiFile_UT.Parameters.Fifo.ScanInterval = 60; + + TestState = 0; + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + cycleCount = 0; + NameMatch = 0; + InNewLocation = 0; + InOldLocation = 0; + MultiSelectDirCopy = 0; + MultiSelectFileCopy = 0; + HmiFile.Status.SelectedIndex = 0; + MpFileManagerUIConnect.File.Copy = 0; + MpFileManagerUIConnect.File.CreateFolder = 0; + MpFileManagerUIConnect.File.Cut = 0; + MpFileManagerUIConnect.File.Delete = 0; + MpFileManagerUIConnect.File.EnterFolder = 0; + MpFileManagerUIConnect.File.FolderUp = 0; + MpFileManagerUIConnect.File.MultiSelect = 0; + MpFileManagerUIConnect.File.Paste = 0; + MpFileManagerUIConnect.File.Refresh = 0; + MpFileManagerUIConnect.File.Rename = 0; + brsmemcpy((UDINT)&MpFileManagerUIConnect.File.Filter, (UDINT)&"", sizeof(MpFileManagerUIConnect.File.Filter)); + + HmiFile.Commands.Delete = 0; + HmiFile.Commands.EnterFolder = 0; + HmiFile.Commands.FolderUp = 0; + HmiFile.Status.SelectedIndex = 0; + + FileCreate_0.enable = 0; + FileClose_0.enable = 0; + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + + TEST_DONE; +} + +_CYCLIC_SET(void) +{ + cycleCount++; +} + +void addNames(bool NameMatch) +{ + if (NameMatch == false) + { + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&"") != 0) + { + TEST_INFO(&MpFileManagerUIConnect.File.List.Items[i].Name); + } + } + } +} + +_TEST Create_Directory(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select Recipe file device and input directory name + switch (ArrangeSubState) + { + case 0: + MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; + brsmemcpy((UDINT)&MpFileManagerUIConnect.File.NewName, (UDINT)&DirName, sizeof(MpFileManagerUIConnect.File.NewName)); + ArrangeSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.File.Refresh = 1; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != 0); + MpFileManagerUIConnect.File.Refresh = 0; + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != 0); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&DirName) == 0) + { + TEST_FAIL("Directory with chosen name already exists"); + TEST_DONE; + } + } + TestState = 1; + break; + } + break; + + case 1: + // Create directory + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.CreateFolder = 1; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CREATE); + MpFileManagerUIConnect.File.CreateFolder = 0; + ActSubState = 2; + + case 2: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&DirName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check save location for directory + TEST_ASSERT(NameMatch); + addNames(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Add_File(void) +{ + TIMEOUT_TEST_CASE; + + FileCreate(&FileCreate_0); + FileClose(&FileClose_0); + + switch (TestState) + { + case 0: + // Select Recipe file device and input file name + switch (ArrangeSubState) + { + case 0: + FileCreate_0.pDevice = (UDINT)&"USER"; + FileCreate_0.pFile = (UDINT)&CreateFileName; + ArrangeSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.File.Refresh = 1; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Refresh = 0; + ArrangeSubState = 3; + break; + + case 3: // Check to make sure there isn't already a file by the specified name in the directory + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != 0); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + { + TEST_FAIL("File with chosen name already exists"); + TEST_DONE; + } + } + TestState = 1; + break; + } + break; + + case 1: + // Create file + switch (ActSubState) + { + case 0: + FileCreate_0.enable = 1; + ActSubState = 1; + break; + + case 1: + if((FileCreate_0.status != 0) && (FileCreate_0.status != 65535)) + { + TEST_FAIL("FileCreate function block has an error"); + TEST_DONE; + } + TEST_BUSY_CONDITION(FileCreate_0.status != 0); + FileClose_0.ident = FileCreate_0.ident; + FileClose_0.enable = 1; + FileCreate_0.enable = 0; + ActSubState = 2; + break; + + case 2: + if((FileClose_0.status != 0) && (FileClose_0.status != 65535)) + { + TEST_FAIL("FileClose function block has an error"); + TEST_DONE; + } + TEST_BUSY_CONDITION(FileClose_0.status != 0); + FileClose_0.enable = 0; + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + ActSubState = 5; + break; + + case 5: + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check save location for file + TEST_ASSERT(NameMatch); + addNames(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Copy_File(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select Recipe file device and input name of file to be copied + switch (ArrangeSubState) + { + case 0: + MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; + ArrangeSubState = 1; + break; + + case 1: + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Copy/paste file + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.Copy = 1; + ActSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.File.Copy = 0; + MpFileManagerUIConnect.File.Paste = 1; + ActSubState = 2; + break; + + case 2: + MpFileManagerUIConnect.File.Paste = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_PASTE); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 5; + break; + + case 5: + // Check file list for copied file + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CopiedFileName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check if copied file was found + TEST_ASSERT(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Copy_Directory(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select Recipe file device and input name of directory to be copied + switch (ArrangeSubState) + { + case 0: + MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; + ArrangeSubState = 1; + break; + + case 1: + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Copy/paste directory + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.Copy = 1; + ActSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.File.Copy = 0; + MpFileManagerUIConnect.File.Paste = 1; + ActSubState = 2; + break; + + case 2: + MpFileManagerUIConnect.File.Paste = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_PASTE); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 5; + break; + + case 5: + // Check file list for copied directory + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CopiedDirName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check if copied directory was found + TEST_ASSERT(NameMatch); + addNames(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Rename_File(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select Recipe file device and input name of file to be renamed and new name + switch (ArrangeSubState) + { + case 0: + MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; + brsmemcpy((UDINT)&MpFileManagerUIConnect.File.NewName, (UDINT)&NewFileName, sizeof(MpFileManagerUIConnect.File.NewName)); + ArrangeSubState = 1; + break; + + case 1: + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CopiedFileName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Rename file + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.Rename = 1; + ActSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.File.Rename = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 3; + break; + + case 3: + // Check file list for renamed file + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&NewFileName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check if renamed file was found + TEST_ASSERT(NameMatch); + addNames(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Rename_Directory(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select Recipe file device and input name of directory to be renamed and new name + switch (ArrangeSubState) + { + case 0: + MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; + brsmemcpy((UDINT)&MpFileManagerUIConnect.File.NewName, (UDINT)&NewDirName, sizeof(MpFileManagerUIConnect.File.NewName)); + ArrangeSubState = 1; + break; + + case 1: + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CopiedDirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Rename directory + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.Rename = 1; + ActSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.File.Rename = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 3; + break; + + case 3: + // Check file list for renamed directory + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&NewDirName) == 0) + { + NameMatch = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check if renamed directory was found + TEST_ASSERT(NameMatch); + addNames(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Cut_Paste_File(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select Recipe file device and input name of file to be cut + switch (ArrangeSubState) + { + case 0: + MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; + MpFileManagerUIConnect.File.Refresh = 1; + ArrangeSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&NewFileName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Cut/paste file + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.Cut = 1; + ActSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.File.Cut = 0; + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + ActSubState = 2; + break; + + case 2: + HmiFile.Commands.EnterFolder = 1; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.EnterFolder = 0; + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Paste = 1; + ActSubState = 4; + break; + + case 4: + MpFileManagerUIConnect.File.Paste = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_PASTE); + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 6; + break; + + case 6: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 7; + break; + + case 7: + // Check paste location for cut file + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&NewFileName) == 0) + { + InNewLocation = 1; + } + } + HmiFile.Commands.FolderUp = 1; + ActSubState = 8; + break; + + case 8: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.FolderUp = 0; + ActSubState = 9; + break; + + case 9: + // Check old location for cut file + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&NewFileName) == 0) + { + InOldLocation = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check new and old locations for file + TEST_ASSERT(InNewLocation); + TEST_ASSERT(!InOldLocation); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Cut_Paste_Directory(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select Recipe file device and input name of directory to be cut + switch (ArrangeSubState) + { + case 0: + MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; + ArrangeSubState = 1; + break; + + case 1: + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&NewDirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + } + break; + + case 1: + // Cut/paste directory + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.Cut = 1; + ActSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.File.Cut = 0; + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 3; + break; + + case 3: + // Find folder to paste directory into + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + ActSubState = 4; + break; + + case 4: + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 6; + break; + + case 6: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + HmiFile.Commands.EnterFolder = 1; + ActSubState = 7; + break; + + case 7: + HmiFile.Commands.EnterFolder = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); + ActSubState = 8; + break; + + case 8: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Paste = 1; + ActSubState = 9; + break; + + case 9: + MpFileManagerUIConnect.File.Paste = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_PASTE); + ActSubState = 10; + break; + + case 10: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 12; + break; + + case 12: + // Check new location for cut directory + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&NewDirName) == 0) + { + InNewLocation = 1; + } + } + HmiFile.Commands.FolderUp = 1; + ActSubState = 13; + break; + + case 13: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.FolderUp = 0; + ActSubState = 14; + break; + + case 14: + // Check old location for cut directory + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&NewDirName) == 0) + { + InOldLocation = 1; + } + } + TestState = 2; + break; + } + break; + + case 2: + // Check new and old locations for directory + TEST_ASSERT(InNewLocation); + TEST_ASSERT(!InOldLocation); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Multiselect(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select Recipe file device and navigate into directory with test files + switch (ArrangeSubState) + { + case 0: + MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; + ArrangeSubState = 1; + break; + + case 1: + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + ArrangeSubState = 2; + break; + + case 2: + MpFileManagerUIConnect.File.Refresh = 1; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + HmiFile.Commands.EnterFolder = 1; + ArrangeSubState = 4; + break; + + case 4: + HmiFile.Commands.EnterFolder = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); + ArrangeSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + TestState = 1; + break; + } + break; + + case 1: + // Select multiple files/directories and copy/paste + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.MultiSelect = 1; + ActSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.File.List.Items[0].IsSelected = 1; + MpFileManagerUIConnect.File.List.Items[1].IsSelected = 1; + ActSubState = 2; + break; + + case 2: + MpFileManagerUIConnect.File.Copy = 1; + ActSubState = 3; + break; + + case 3: + MpFileManagerUIConnect.File.Copy = 0; + MpFileManagerUIConnect.File.MultiSelect = 0; + MpFileManagerUIConnect.File.Paste = 1; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_PASTE); + MpFileManagerUIConnect.File.Paste = 0; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 6; + break; + + case 6: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 7; + break; + + case 7: + // Check for copied file + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CopiedNewFileName) == 0) + MultiSelectFileCopy = 1; + } + ActSubState = 8; + break; + + case 8: + // Check for copied directory + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CopiedNewDirName) == 0) + MultiSelectDirCopy = 1; + } + ActSubState = 9; + break; + + case 9: + HmiFile.Commands.FolderUp = 1; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.FolderUp = 0; + ActSubState = 10; + break; + + case 10: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + TestState = 2; + break; + } + break; + + case 2: + // Check if copied file and directory were found + TEST_ASSERT(MultiSelectFileCopy); + TEST_ASSERT(MultiSelectDirCopy); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Search(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Set filter value to name of file + MpFileManagerUIConnect.DeviceList.SelectedIndex = 0; + brsmemcpy((UDINT)&MpFileManagerUIConnect.File.Filter, (UDINT)&CreateFileName, sizeof(MpFileManagerUIConnect.File.Filter)); + TestState = 1; + break; + + case 1: + // Refresh MpFileManagerUIConnect + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 2; + break; + + case 2: + // Check if the first item in the file list is the desired file + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[0].Name, (UDINT)&CreateFileName) == 0) + NameMatch = 1; + ActSubState = 3; + break; + + case 3: + // Reset filter + brsmemcpy((UDINT)&MpFileManagerUIConnect.File.Filter, (UDINT)&"", sizeof(MpFileManagerUIConnect.File.Filter)); + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + TestState = 2; + break; + } + break; + + case 2: + // Check if filter worked + TEST_ASSERT(NameMatch); + addNames(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Enter_Folder(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select folder to enter + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + + case 1: + // Give HMI command to enter folder + switch (ActSubState) + { + case 0: + // Acts as a delay to let the folder selection make its way to FileMgr task + ActSubState = 1; + break; + + case 1: + HmiFile.Commands.EnterFolder = 1; + ActSubState = 2; + break; + + case 2: + HmiFile.Commands.EnterFolder = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); + ActSubState = 3; + break; + + case 3: + // Check if current directory matches what is expected + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.PathInfo.CurrentDir , (UDINT)&DirName) == 0) + NameMatch = 1; + ActSubState = 4; + break; + + case 4: + // Go back up to root folder + HmiFile.Commands.FolderUp = 1; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.FolderUp = 0; + ActSubState = 6; + break; + + case 6: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + TestState = 2; + break; + } + break; + + case 2: + TEST_ASSERT(NameMatch); + addNames(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Go_Up_Level(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select folder to enter + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + + case 1: + // Give HMI command to enter folder + switch (ActSubState) + { + case 0: + // Acts as a delay to let the folder selection make its way to FileMgr task + ActSubState = 1; + break; + + case 1: + HmiFile.Commands.EnterFolder = 1; + ActSubState = 2; + break; + + case 2: + HmiFile.Commands.EnterFolder = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); + ActSubState = 3; + break; + + case 3: + // Check if folder was successfully entered + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.PathInfo.CurrentDir , (UDINT)&DirName) != 0) + { + TEST_FAIL("Directory was not successfully entered"); + TEST_DONE; + } + ActSubState = 4; + break; + + case 4: + // Go back up to root folder + HmiFile.Commands.FolderUp = 1; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_CHANGE_DIR); + HmiFile.Commands.FolderUp = 0; + ActSubState = 6; + break; + + case 6: + // Check if folder level went back up to the root + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.PathInfo.CurrentDir , (UDINT)&"") == 0) + NameMatch = 1; + TestState = 2; + break; + } + break; + + case 2: + TEST_ASSERT(NameMatch); + addNames(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Change_Sort(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Change SortOrder value + MpFileManagerUIConnect.File.SortOrder = 5; + TestState = 1; + break; + + case 1: + switch (ActSubState) + { + case 0: + // Wait for sort to take effect + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_SORT); + ActSubState = 1; + break; + + case 1: + // Make sure sort worked correctly + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[0].Name, (UDINT)&DirName) == 0) + NameMatch = 1; + ActSubState = 2; + break; + + case 2: + MpFileManagerUIConnect.File.SortOrder = 0; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_SORT); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + TestState = 2; + break; + } + break; + + case 2: + TEST_ASSERT(NameMatch); + addNames(NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Delete_File(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select file to be deleted + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + + case 1: + // Delete file + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.Delete = 1; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_DELETE); + MpFileManagerUIConnect.File.Delete = 0; + ActSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.MessageBox.Confirm = 1; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.MessageBox.Confirm = 0; + ActSubState = 2; + break; + + case 2: + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 4; + break; + + case 4: + // Check for file + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&CreateFileName) == 0) + NameMatch = 1; + } + TestState = 2; + break; + } + break; + + case 2: + // Check if file was deleted + TEST_ASSERT(!NameMatch); + addNames(!NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Delete_Directory(void) +{ + TIMEOUT_TEST_CASE; + + switch (TestState) + { + case 0: + // Select directory to be deleted + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&DirName) == 0) + HmiFile.Status.SelectedIndex = i; + } + TestState = 1; + break; + + case 1: + // Delete file + switch (ActSubState) + { + case 0: + MpFileManagerUIConnect.File.Delete = 1; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_DELETE); + MpFileManagerUIConnect.File.Delete = 0; + ActSubState = 1; + break; + + case 1: + MpFileManagerUIConnect.MessageBox.Confirm = 1; + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_IDLE); + MpFileManagerUIConnect.MessageBox.Confirm = 0; + ActSubState = 2; + break; + break; + + case 2: + MpFileManagerUIConnect.File.Refresh = 1; + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpFileManagerUIConnect.Status != mpFILE_UI_STATUS_REFRESH); + MpFileManagerUIConnect.File.Refresh = 0; + ActSubState = 4; + break; + + case 4: + // Check for file + for(int i = 0; i < sizeof(MpFileManagerUIConnect.File.List.Items)/sizeof(MpFileManagerUIConnect.File.List.Items[0]); i++) + { + if(brsstrcmp((UDINT)&MpFileManagerUIConnect.File.List.Items[i].Name, (UDINT)&DirName) == 0) + NameMatch = 1; + } + TestState = 2; + break; + } + break; + + case 2: + // Check if file was deleted + TEST_ASSERT(!NameMatch); + addNames(!NameMatch); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST FIFO_20(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 20) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; + HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 10; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST FIFO_60(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 60) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; + HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 15; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_140(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 140) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; + HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 15; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFiles60(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 100) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; + HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 60; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFiles120(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 200) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_NUM_OF_FILES; + HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles = 120; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(HmiFile_UT.Parameters.Fifo.MaxNumberOfFiles, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFolderSize_30Files(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileWrite_UT.enable = true; + FileWrite_UT.ident = FileCreate_UT.ident; + FileWrite_UT.offset = 0; + FileWrite_UT.pSrc = (UDINT)&testData; + FileWrite_UT.len = sizeof(testData); + FileWrite(&FileWrite_UT); + TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); + TEST_ABORT_CONDITION(FileWrite_UT.status != 0); + TestState = 2; + break; + + case 2: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 30) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; + HmiFile_UT.Parameters.Fifo.MaxFolderSize = 20; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(20, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFolderSize_60Files(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileWrite_UT.enable = true; + FileWrite_UT.ident = FileCreate_UT.ident; + FileWrite_UT.offset = 0; + FileWrite_UT.pSrc = (UDINT)&testData; + FileWrite_UT.len = sizeof(testData); + FileWrite(&FileWrite_UT); + TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); + TEST_ABORT_CONDITION(FileWrite_UT.status != 0); + TestState = 2; + break; + + case 2: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 60) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; + HmiFile_UT.Parameters.Fifo.MaxFolderSize = 40; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(40, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFolderSize_Keep60Files(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileWrite_UT.enable = true; + FileWrite_UT.ident = FileCreate_UT.ident; + FileWrite_UT.offset = 0; + FileWrite_UT.pSrc = (UDINT)&testData; + FileWrite_UT.len = sizeof(testData); + FileWrite(&FileWrite_UT); + TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); + TEST_ABORT_CONDITION(FileWrite_UT.status != 0); + TestState = 2; + break; + + case 2: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 90) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; + HmiFile_UT.Parameters.Fifo.MaxFolderSize = 60; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(60, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} + +_TEST FIFO_MaxFolderSize_Keep120Files(void) +{ + TEST_DONE; + switch (TestState) + { + // Arrange + case 0: + FileCreate_UT.enable = true; + FileCreate_UT.pDevice = (UDINT)&"mappUserXFiles"; + snprintf2(FileName, sizeof(FileName), "TestFile%d.txt", FileNumber); + FileCreate_UT.pFile = (UDINT)&FileName; + FileCreate(&FileCreate_UT); + + TEST_BUSY_CONDITION(FileCreate_UT.status == 65535); + TEST_ABORT_CONDITION(FileCreate_UT.status != 0); + TestState = 1; + break; + + case 1: + FileWrite_UT.enable = true; + FileWrite_UT.ident = FileCreate_UT.ident; + FileWrite_UT.offset = 0; + FileWrite_UT.pSrc = (UDINT)&testData; + FileWrite_UT.len = sizeof(testData); + FileWrite(&FileWrite_UT); + TEST_BUSY_CONDITION(FileWrite_UT.status == 65535); + TEST_ABORT_CONDITION(FileWrite_UT.status != 0); + TestState = 2; + break; + + case 2: + FileClose_UT.enable = true; + FileClose_UT.ident = FileCreate_UT.ident; + FileClose(&FileClose_UT); + + TEST_BUSY_CONDITION(FileClose_UT.status == 65535); + TEST_ABORT_CONDITION(FileClose_UT.status != 0); + + FileNumber++; + TestState = (FileNumber >= 140) ? 10 : 0; + break; + + // Act + case 10: + HmiFile_UT.Parameters.Fifo.Enable = true; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); + HmiFile_UT.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER; + HmiFile_UT.Parameters.Fifo.MaxFolderSize = 120; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(FileIdleOrDisabled()); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(!FileIdleOrDisabled()); + HmiFile_UT.Parameters.Fifo.Enable = false; + + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappUserXFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + TEST_ASSERT_EQUAL_INT(120, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2023-04-03 16:22:59Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("Create_Directory", Create_Directory), + new_TestFixture("Add_File", Add_File), + new_TestFixture("Copy_File", Copy_File), + new_TestFixture("Copy_Directory", Copy_Directory), + new_TestFixture("Rename_File", Rename_File), + new_TestFixture("Rename_Directory", Rename_Directory), + new_TestFixture("Cut_Paste_File", Cut_Paste_File), + new_TestFixture("Cut_Paste_Directory", Cut_Paste_Directory), + new_TestFixture("Multiselect", Multiselect), + new_TestFixture("Search", Search), + new_TestFixture("Enter_Folder", Enter_Folder), + new_TestFixture("Go_Up_Level", Go_Up_Level), + new_TestFixture("Change_Sort", Change_Sort), + new_TestFixture("Delete_File", Delete_File), + new_TestFixture("Delete_Directory", Delete_Directory), + new_TestFixture("FIFO_20", FIFO_20), + new_TestFixture("FIFO_60", FIFO_60), + new_TestFixture("FIFO_140", FIFO_140), + new_TestFixture("FIFO_MaxFiles60", FIFO_MaxFiles60), + new_TestFixture("FIFO_MaxFiles120", FIFO_MaxFiles120), + new_TestFixture("FIFO_MaxFolderSize_30Files", FIFO_MaxFolderSize_30Files), + new_TestFixture("FIFO_MaxFolderSize_60Files", FIFO_MaxFolderSize_60Files), + new_TestFixture("FIFO_MaxFolderSize_Keep60Files", FIFO_MaxFolderSize_Keep60Files), + new_TestFixture("FIFO_MaxFolderSize_Keep120Files", FIFO_MaxFolderSize_Keep120Files), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_FileMgr, "Set_FileMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, cyclicSetCaller); + diff --git a/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/autoGeneratedFile.c b/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/autoGeneratedFile.c new file mode 100644 index 00000000..82321a00 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/autoGeneratedFile.c @@ -0,0 +1,23 @@ +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (List of TestSets). +LastUpdated: 2022-11-11 18:35:22Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +#include "UnitTest.h" + + + +UNITTEST_TESTSET_DECLARATION Set_Common; +UNITTEST_TESTSET_DECLARATION Set_FileMgr; + + + +UNITTEST_TESTSET_FIXTURES(utTestSets) +{ + new_TestSet(Set_Common), + new_TestSet(Set_FileMgr), +}; +UNTITTEST_TESTSET_HANDLER(); + diff --git a/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/testSuite.c b/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/testSuite.c new file mode 100644 index 00000000..2007c038 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/testSuite.c @@ -0,0 +1,52 @@ +/******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: - + * Author: + * Created: + ******************************************************************** + * Test registration and handshake + ********************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif +#include + +#include "UnitTest.h" + + +void _INIT initTestSuite(void) +{ + Testsuite.Enable = 1; + utInit(&Testsuite); + + CommonTestsuite.Enable = 1; + utInit(&CommonTestsuite); + + strcpy((char*)&TextNameSpace, "mappFramework/File/Alarms"); + strcpy((char*)&TextID, "DeviceNotFound"); + strcpy(FileDeviceName, "mappUserXFiles"); +} + + +void _CYCLIC cyclicWithTest(void) +{ + utCyclic(&Testsuite); + if (Testsuite.Informational.LastKnownPassedLocation.TestCaseName != 0) + strcpy((char*)&LastTestCase, (char*)Testsuite.Informational.LastKnownPassedLocation.TestCaseName); + if (Testsuite.Informational.LastKnownPassedLocation.TestSetName != 0) + strcpy((char*)&LastTestSet, (char*)Testsuite.Informational.LastKnownPassedLocation.TestSetName); + if (Testsuite.Informational.LastKnownPassedLocation.File != 0) + strcpy((char*)&LastTestFile, (char*)Testsuite.Informational.LastKnownPassedLocation.File); +} + + +void _EXIT exitTestSuite(void) +{ + utExit(&Testsuite); +} + + diff --git a/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/variables.var b/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/variables.var new file mode 100644 index 00000000..247af469 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/File/FileUnitTest/variables.var @@ -0,0 +1,47 @@ +(******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: utTemplate_automated + * File: variables.var + * Author: - + * Created: - + ******************************************************************** + * Local variables of program utTemplate_automated + ********************************************************************) +(*Describe the test*) +VAR + Testsuite : UtMgrTestSuite := (Name:='FileMgrVC4',Description:='FileMgr VC4 Unit Tests',Type:=utMgrTEST_TYPE_C,MetaInformation:='Meta'); +END_VAR +(*Variables used in the tests*) +VAR + cycleCount : {REDUND_UNREPLICABLE} UINT; + HmiFile_UT : FileHmiInterfaceType; (*HMI interface structure*) + FileName : STRING[24]; + FileNumber : USINT; + SetupState : USINT; + FileCreate_UT : FileCreate; + FileClose_UT : FileClose; + NumberOfFiles : UINT; + CurrentFile : UINT; + DirInfo_UT : DirInfo; + fileInfo : fiDIR_READ_DATA; + DirRead_UT : DirRead; + FileWrite_UT : FileWrite; + testData : {REDUND_UNREPLICABLE} STRING[1023] := 'testing data'; + FileDelete_UT : FileDelete; + NameMatch : BOOL; + DirName : STRING[255] := 'FileTestDir'; + CreateFileName : STRING[255] := 'FileTestFile.xml'; + FileCreate_0 : FileCreate; + FileClose_0 : FileClose; + CopiedFileName : STRING[255] := 'FileTestFile(1).xml'; + CopiedDirName : STRING[255] := 'FileTestDir(1)'; + NewFileName : STRING[255] := 'FileRename.xml'; + NewDirName : STRING[255] := 'DirRename'; + InNewLocation : BOOL; + InOldLocation : BOOL; + CopiedNewFileName : STRING[255] := 'FileRename(1).xml'; + CopiedNewDirName : STRING[255] := 'DirRename(1)'; + MultiSelectFileCopy : BOOL; + MultiSelectDirCopy : BOOL; +END_VAR diff --git a/mappFramework/Logical/UnitTestVC4/File/Package.pkg b/mappFramework/Logical/UnitTestVC4/File/Package.pkg new file mode 100644 index 00000000..df0f3d82 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/File/Package.pkg @@ -0,0 +1,7 @@ + + + + + FileUnitTest + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Package.pkg b/mappFramework/Logical/UnitTestVC4/Package.pkg new file mode 100644 index 00000000..be4b6575 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Package.pkg @@ -0,0 +1,25 @@ + + + + + Update_TestPrograms_in_current_location.bat + AlarmX + Audit + AppAxis_1 + Backup + File + Usb + Recipe + UserX + Report + Common + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Recipe/Package.pkg b/mappFramework/Logical/UnitTestVC4/Recipe/Package.pkg new file mode 100644 index 00000000..cdd98aef --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Recipe/Package.pkg @@ -0,0 +1,7 @@ + + + + + RecipeMgrUnitTest + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/ANSIC.prg b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/ANSIC.prg new file mode 100644 index 00000000..8c819f8f --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/ANSIC.prg @@ -0,0 +1,17 @@ + + + + + \Logical\Infrastructure\VC4\Recipe\RecipeMgr\RecipeMgr.typ + \Logical\Infrastructure\VC4\Recipe\RecipeMgr\RecipeMgr.var + \Logical\UnitTest\Common\CommonUT\CommonTypes.typ + \Logical\UnitTestVC4\Common\CommonUT\CommonVariables.var + \Logical\UnitTestVC4\Common\CommonUT\Set_Common.c + variables.var + testSuite.h + testSuite.c + autoGeneratedFile.c + Set_RecipeParameters.c + Set_RecipeMachineSettings.c + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/Set_RecipeMachineSettings.c b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/Set_RecipeMachineSettings.c new file mode 100644 index 00000000..80af5e51 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/Set_RecipeMachineSettings.c @@ -0,0 +1,511 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include +#include +#include "testSuite.h" + +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 254) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(ActSubState, substate, 10); \ + strcpy(abortMessage, "Timeout in ActSubState = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } + +_SETUP_SET(void) +{ + return RemoveNonDefaultFiles(MACH_CONFIG_CATEGORY_INDEX, "Machine.mcfg", MACHINE_CONFIGURATION_CATEGORY); +} + +_TEARDOWN_SET(void) +{ + SetupState = 0; + TEST_DONE; +} + +_SETUP_TEST(void) +{ + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + return RemoveNonDefaultFiles(MACH_CONFIG_CATEGORY_INDEX, "Machine.mcfg", MACHINE_CONFIGURATION_CATEGORY); +} + +_TEARDOWN_TEST(void) +{ + memset(&HmiRecipe.Commands, 0, sizeof(HmiRecipe.Commands)); + MpRecipeUIConnect.Recipe.Load = false; + TEST_BUSY_CONDITION(!SelectRecipe("Machine.mcfg")); + + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + MpRecipeUIConnect.Recipe.Refresh = true; + } + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE) + MpRecipeUIConnect.Recipe.Refresh = false; + + TEST_DONE; +} + +_CYCLIC_SET(void) +{ + cycleCount++; +} + +_TEST DefaultValues(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + // set MachineSettings through the pointer + memset(pMachineSettings, 0, sizeof(*pMachineSettings)); + TEST_BUSY_CONDITION(!SelectRecipe("Machine.mcfg")); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + TEST_FAIL("MpRecipeUIConnect in error state"); + TEST_DONE; + } + switch (ActSubState) + { + case 0: + MpRecipeUIConnect.Recipe.Load = true; + HmiRecipe.Commands.LoadRecipe = true; + TEST_BUSY_CONDITION(HmiRecipe.Status.ConfigRecipeLoaded == true); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand == REC_HMI_WAIT); + HmiRecipe.Commands.LoadRecipe = false; + MpRecipeUIConnect.Recipe.Load = false; + ActSubState = 1; + break; + case 1: + TEST_BUSY_CONDITION(HmiRecipe.Status.ConfigRecipeLoaded == false); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_LOAD); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_EQUAL_INT(11, MachineSettings.AddMachineSettingsHere1); + TEST_ASSERT_EQUAL_INT(22, MachineSettings.AddMachineSettingsHere2); + TEST_ASSERT_EQUAL_INT(true, MachineSettings.AddMachineSettingsHere3); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 3.2999999, MachineSettings.AddMachineSettingsHere4); + TEST_ASSERT_EQUAL_INT(44, MachineSettings.AddMachineSettingsHere5); + TEST_DONE; + break; + } + TEST_BUSY; + + + TEST_DONE; +} +_TEST CreateNew(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + strcpy(HmiRecipe.Parameters.FileName, "test"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + TEST_FAIL("MpRecipeUIConnect in error state"); + TEST_DONE; + } + switch (ActSubState) + { + case 0: + HmiRecipe.Commands.CreateRecipe = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); + HmiRecipe.Commands.CreateRecipe = false; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(RecipeExists("test.mcfg")); + TEST_DONE; + break; + } + TEST_BUSY; + +} + +_TEST CreateExisting(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + strcpy(HmiRecipe.Parameters.FileName, "Machine"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + TestState = TEST_ASSERT; + break; + + case TEST_ASSERT: + HmiRecipe.Commands.CreateRecipe = false; + TEST_ASSERT(HmiRecipe.Status.FileDuplicate); + TEST_ASSERT(RecipeExists("Machine.mcfg")); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST CreateNonExisting(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + strcpy(HmiRecipe.Parameters.FileName, "test2"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + TestState = TEST_ASSERT; + break; + + case TEST_ASSERT: + HmiRecipe.Commands.CreateRecipe = false; + TEST_ASSERT(!HmiRecipe.Status.FileDuplicate); + TEST_ASSERT(!RecipeExists("test2.mcfg")); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST CreateActive(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + strcpy(HmiRecipe.Parameters.FileName, strtok(HmiRecipe.Status.LastLoadedConfigRecipe, ".")); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + TestState = TEST_ASSERT; + break; + + case TEST_ASSERT: + HmiRecipe.Commands.CreateRecipe = false; + TEST_ASSERT(HmiRecipe.Status.FileDuplicate); + TEST_ASSERT(RecipeExists(HmiRecipe.Status.LastLoadedConfigRecipe)); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Preview(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + MachineSettings.AddMachineSettingsHere1 = 157; + MachineSettings.AddMachineSettingsHere2 = 43956; + MachineSettings.AddMachineSettingsHere3 = true; + MachineSettings.AddMachineSettingsHere4 = 134.876; + MachineSettings.AddMachineSettingsHere5 = 4373; + strcpy(HmiRecipe.Parameters.FileName, "preview"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + TEST_FAIL("MpRecipeUIConnect in error state"); + TEST_DONE; + } + switch (ActSubState) + { + case 0: + HmiRecipe.Commands.CreateRecipe = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); + HmiRecipe.Commands.CreateRecipe = false; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(!SelectRecipe("preview.mcfg")); + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(!SelectRecipe("preview.mcfg")); + MpRecipeUIConnect.Recipe.Load = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_LOAD); + MpRecipeUIConnect.Recipe.Load = false; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_EQUAL_INT(11, MachineSettings.AddMachineSettingsHere1); + TEST_ASSERT_EQUAL_INT(22, MachineSettings.AddMachineSettingsHere2); + TEST_ASSERT_EQUAL_INT(true, MachineSettings.AddMachineSettingsHere3); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 3.2999999, MachineSettings.AddMachineSettingsHere4); + TEST_ASSERT_EQUAL_INT(44, MachineSettings.AddMachineSettingsHere5); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Delete(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + switch (ArrangeSubState) + { + case 0: + strcpy(HmiRecipe.Parameters.FileName, "test"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + ArrangeSubState = 1; + break; + + case 1: + HmiRecipe.Commands.CreateRecipe = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); + HmiRecipe.Commands.CreateRecipe = false; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ArrangeSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + ArrangeSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(!SelectRecipe("test.mcfg")); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + } + break; + + case TEST_ACT: + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + TEST_FAIL("MpRecipeUIConnect in error state"); + TEST_DONE; + } + switch (ActSubState) + { + case 0: + MpRecipeUIConnect.Recipe.Delete = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.MessageBox.LayerStatus != 0); + MpRecipeUIConnect.Recipe.Delete = false; + MpRecipeUIConnect.MessageBox.Confirm = true; + ActSubState = 1; + break; + + case 1: + MpRecipeUIConnect.MessageBox.Confirm = false; + TEST_BUSY_CONDITION(MpRecipeUIConnect.MessageBox.LayerStatus == 0) + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_IDLE); + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(!RecipeExists("test.mcfg")); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Invalid(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + switch (ArrangeSubState) { + case 0: + FileCopy_UT.enable = true; + FileCopy_UT.pSrcDev = (UDINT)&"mappRecipeFiles"; + FileCopy_UT.pSrc = (UDINT)&"CSVformat\\Machine.mcfg"; + FileCopy_UT.pDestDev = (UDINT)&"mappRecipeFiles"; + FileCopy_UT.pDest = (UDINT)&"MachineInvalid.mcfg"; + FileCopy_UT.option= fiOVERWRITE; + FileCopy(&FileCopy_UT); + TEST_BUSY_CONDITION(FileCopy_UT.status == 65535); + FileCopy_UT.enable = false; + FileCopy(&FileCopy_UT); + ArrangeSubState = 1; + break; + + case 1: + MpRecipeUIConnect.Recipe.Refresh = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_IDLE); + MpRecipeUIConnect.Recipe.Refresh = false; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(!SelectRecipe("MachineInvalid.mcfg")); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + } + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + MpRecipeUIConnect.Recipe.Load = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_LOAD); + MpRecipeUIConnect.Recipe.Load = false; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_LOAD); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_EQUAL_INT(mpRECIPE_UI_STATUS_ERROR, MpRecipeUIConnect.Status); + TEST_DONE; + break; + } + TEST_BUSY; +} + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2023-08-25 18:59:10Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("DefaultValues", DefaultValues), + new_TestFixture("CreateNew", CreateNew), + new_TestFixture("CreateExisting", CreateExisting), + new_TestFixture("CreateNonExisting", CreateNonExisting), + new_TestFixture("CreateActive", CreateActive), + new_TestFixture("Preview", Preview), + new_TestFixture("Delete", Delete), + new_TestFixture("Invalid", Invalid), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_RecipeMachineSettings, "Set_RecipeMachineSettings", setupTest, teardownTest, fixtures, setupSet, teardownSet, cyclicSetCaller); + diff --git a/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/Set_RecipeParameters.c b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/Set_RecipeParameters.c new file mode 100644 index 00000000..33848614 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/Set_RecipeParameters.c @@ -0,0 +1,698 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include +#include +#include "testSuite.h" + +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 254) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(ActSubState, substate, 10); \ + strcpy(abortMessage, "Timeout in ActSubState = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } + +_SETUP_SET(void) +{ + return RemoveNonDefaultFiles(PARAMETERS_CATEGORY_INDEX, "Default.par", PARAMETERS_CATEGORY); +} + +_TEARDOWN_SET(void) +{ + SetupState = 0; + TEST_DONE; +} + +_SETUP_TEST(void) +{ + ArrangeSubState = 0; + ActSubState = 0; + AssertSubState = 0; + return RemoveNonDefaultFiles(PARAMETERS_CATEGORY_INDEX, "Default.par", PARAMETERS_CATEGORY); +} + +_TEARDOWN_TEST(void) +{ + memset(&HmiRecipe.Commands, 0, sizeof(HmiRecipe.Commands)); + MpRecipeUIConnect.Recipe.Load = false; + TEST_BUSY_CONDITION(!SelectRecipe("Default.par")); + + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + MpRecipeUIConnect.Recipe.Refresh = true; + } + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE) + MpRecipeUIConnect.Recipe.Refresh = false; + + TEST_DONE; +} + +_CYCLIC_SET(void) +{ + cycleCount++; +} + +_TEST DefaultValues(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + // set MachineSettings through the pointer + memset(pParameters, 0, sizeof(*pParameters)); + TEST_BUSY_CONDITION(!SelectRecipe("Default.par")); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + MpRecipeUIConnect.Recipe.Load = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_LOAD); + MpRecipeUIConnect.Recipe.Load = false; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + HmiRecipe.Commands.LoadRecipe = true; + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == true); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand == REC_HMI_WAIT); + HmiRecipe.Commands.LoadRecipe = false; + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(Parameters.AddParametersHere1); + TEST_ASSERT_EQUAL_STRING("two", Parameters.AddParametersHere2); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 3.3, Parameters.AddParametersHere3); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 4.4, Parameters.AddParametersHere4); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 5.5, Parameters.AddParametersHere5); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST CreateNew(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + strcpy(HmiRecipe.Parameters.FileName, "test"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + TEST_FAIL("MpRecipeUIConnect in error state"); + } + switch (ActSubState) + { + case 0: + HmiRecipe.Commands.CreateRecipe = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); + HmiRecipe.Commands.CreateRecipe = false; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(RecipeExists("test.par")); + TEST_DONE; + break; + } + + TEST_BUSY; +} + +_TEST CreateExisting(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + strcpy(HmiRecipe.Parameters.FileName, "Default"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + TestState = TEST_ASSERT; + break; + + case TEST_ASSERT: + HmiRecipe.Commands.CreateRecipe = false; + TEST_ASSERT(HmiRecipe.Status.FileDuplicate); + TEST_ASSERT(RecipeExists("Default.par")); + TEST_DONE; + break; + } + + TEST_BUSY; +} + +_TEST CreateNonExisting(void) +{ + TIMEOUT_TEST_CASE + + switch (TestState) + { + case TEST_ARRANGE: + strcpy(HmiRecipe.Parameters.FileName, "test2"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + TestState = TEST_ASSERT; + break; + + case TEST_ASSERT: + HmiRecipe.Commands.CreateRecipe = false; + TEST_ASSERT(!HmiRecipe.Status.FileDuplicate); + TEST_ASSERT(!RecipeExists("test2.par")); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST CreateActive(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + strcpy(HmiRecipe.Parameters.FileName, strtok(HmiRecipe.Status.LastLoadedProductRecipe, ".")); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + TestState = TEST_ASSERT; + break; + + case TEST_ASSERT: + HmiRecipe.Commands.CreateRecipe = false; + TEST_ASSERT(HmiRecipe.Status.FileDuplicate); + TEST_ASSERT(RecipeExists(HmiRecipe.Status.LastLoadedProductRecipe)); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST PreviewShouldNotAffectActive(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + ParametersEdit.AddParametersHere1 = false; + strcpy(ParametersEdit.AddParametersHere2, "testing preview"); + ParametersEdit.AddParametersHere3 = 12.56; + ParametersEdit.AddParametersHere4 = 134.876; + ParametersEdit.AddParametersHere5 = 87.4567; + strcpy(HmiRecipe.Parameters.FileName, "preview"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + TEST_FAIL("MpRecipeUIConnect in error state"); + TEST_DONE; + } + switch (ActSubState) + { + case 0: + HmiRecipe.Commands.CreateRecipe = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); + HmiRecipe.Commands.CreateRecipe = false; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(!SelectRecipe("preview.par")); + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpRecipeSys.Load == true); + TEST_BUSY_CONDITION(!SelectRecipe("preview.par")); + MpRecipeUIConnect.Recipe.Load = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_LOAD); + MpRecipeUIConnect.Recipe.Load = false; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + // check if preview affects the active parameters + TEST_ASSERT(Parameters.AddParametersHere1); + TEST_ASSERT_EQUAL_STRING("two", Parameters.AddParametersHere2); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 3.3, Parameters.AddParametersHere3); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 4.4, Parameters.AddParametersHere4); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 5.5, Parameters.AddParametersHere5); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Preview(void) +{ + TIMEOUT_TEST_CASE + + switch (TestState) + { + case TEST_ARRANGE: + ParametersEdit.AddParametersHere1 = false; + strcpy(ParametersEdit.AddParametersHere2, "testing preview"); + ParametersEdit.AddParametersHere3 = 12.56; + ParametersEdit.AddParametersHere4 = 134.876; + ParametersEdit.AddParametersHere5 = 87.4567; + strcpy(HmiRecipe.Parameters.FileName, "preview"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + + case TEST_ACT: + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + TEST_FAIL("MpRecipeUIConnect in error state"); + TEST_DONE; + } + switch (ActSubState) + { + case 0: + HmiRecipe.Commands.CreateRecipe = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); + HmiRecipe.Commands.CreateRecipe = false; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(!SelectRecipe("preview.par")); + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpRecipeSys.Load == true); + TEST_BUSY_CONDITION(!SelectRecipe("preview.par")); + MpRecipeUIConnect.Recipe.Load = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_LOAD); + MpRecipeUIConnect.Recipe.Load = false; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(!ParametersPreview.AddParametersHere1); + TEST_ASSERT_EQUAL_STRING("testing preview", ParametersPreview.AddParametersHere2); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 12.56, ParametersPreview.AddParametersHere3); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 134.876, ParametersPreview.AddParametersHere4); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 87.4567, ParametersPreview.AddParametersHere5); + + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Delete(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + switch (ArrangeSubState) + { + case 0: + strcpy(HmiRecipe.Parameters.FileName, "test"); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TEST_INFO_POS(" "); + ArrangeSubState = 1; + break; + + case 1: + HmiRecipe.Commands.CreateRecipe = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); + HmiRecipe.Commands.CreateRecipe = false; + TEST_INFO_POS(" "); + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + TEST_INFO_POS(" "); + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + TEST_INFO_POS(" "); + ArrangeSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_INFO_POS(" "); + ArrangeSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(!SelectRecipe("test.par")); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TEST_INFO_POS(" "); + TestState = TEST_ACT; + break; + } + break; + + case TEST_ACT: + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + TEST_FAIL("MpRecipeUIConnect in error state"); + TEST_DONE; + } + switch (ActSubState) { + case 0: + MpRecipeUIConnect.Recipe.Delete = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.MessageBox.LayerStatus != 0); + MpRecipeUIConnect.Recipe.Delete = false; + MpRecipeUIConnect.MessageBox.Confirm = true; + ActSubState = 1; + break; + + case 1: + MpRecipeUIConnect.MessageBox.Confirm = false; + TEST_BUSY_CONDITION(MpRecipeUIConnect.MessageBox.LayerStatus == 0) + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_IDLE); + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ActSubState = 4; + break; + + case 4: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(!RecipeExists("test.par")); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST Invalid(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + switch (ArrangeSubState) { + case 0: + FileCopy_UT.enable = true; + FileCopy_UT.pSrcDev = (UDINT)&"mappRecipeFiles"; + FileCopy_UT.pSrc = (UDINT)&"CSVformat\\Default.par"; + FileCopy_UT.pDestDev = (UDINT)&"mappRecipeFiles"; + FileCopy_UT.pDest = (UDINT)&"Invalid.par"; + FileCopy_UT.option= fiOVERWRITE; + FileCopy(&FileCopy_UT); + TEST_BUSY_CONDITION(FileCopy_UT.status == 65535); + FileCopy_UT.enable = false; + FileCopy(&FileCopy_UT); + ArrangeSubState = 1; + break; + + case 1: + MpRecipeUIConnect.Recipe.Refresh = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_IDLE); + MpRecipeUIConnect.Recipe.Refresh = false; + ArrangeSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ArrangeSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(!SelectRecipe("Invalid.par")); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TestState = TEST_ACT; + break; + } + break; + + case TEST_ACT: + switch (ActSubState) + { + case 0: + MpRecipeUIConnect.Recipe.Load = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_LOAD); + MpRecipeUIConnect.Recipe.Load = false; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_LOAD); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT_EQUAL_INT(mpRECIPE_UI_STATUS_ERROR, MpRecipeUIConnect.Status); + TEST_DONE; + break; + } + TEST_BUSY; +} + +SKIP_TEST EditActive(void) +{ + TIMEOUT_TEST_CASE + switch (TestState) + { + case TEST_ARRANGE: + TEST_BUSY_CONDITION(!SelectRecipe("Default.par")); + LastSelectedIndex++; + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + + ParametersEdit.AddParametersHere1 = false; + strcpy(ParametersEdit.AddParametersHere2, "testing editing active"); + ParametersEdit.AddParametersHere3 = 12.56; + ParametersEdit.AddParametersHere4 = 134.876; + ParametersEdit.AddParametersHere5 = 87.4567; + strcpy(HmiRecipe.Parameters.FileName, "editActive"); + TestState = TEST_ACT; + break; + + case TEST_ACT: + if (MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_ERROR) + { + TEST_FAIL("MpRecipeUIConnect in error state"); + TEST_DONE; + } + switch (ActSubState) + { + case 0: + HmiRecipe.Commands.CreateRecipe = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_CREATE); + HmiRecipe.Commands.CreateRecipe = false; + ActSubState = 1; + break; + + case 1: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + ActSubState = 2; + break; + + case 2: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status == mpRECIPE_UI_STATUS_REFRESH); + ActSubState = 3; + break; + + case 3: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TEST_BUSY_CONDITION(HmiRecipe.Status.ProductRecipeLoaded == false); + TEST_BUSY_CONDITION(!SelectRecipe("editActive.par")); + ActSubState = 4; + break; + + case 4: + MpRecipeUIConnect.Recipe.Load = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_LOAD); + MpRecipeUIConnect.Recipe.Load = false; + ActSubState = 5; + break; + + case 5: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + ParametersEdit.AddParametersHere1 = true; + strcpy(ParametersEdit.AddParametersHere2, "edited active"); + ParametersEdit.AddParametersHere3 = 52.56; + ParametersEdit.AddParametersHere4 = 184.876; + ParametersEdit.AddParametersHere5 = 587.4567; + ActSubState = 6; + break; + + case 6: + HmiRecipe.Commands.SaveSelectedRecipe = true; + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand == REC_HMI_WAIT); + HmiRecipe.Commands.SaveSelectedRecipe = false; + ActSubState = 7; + break; + + case 7: + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT); + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE); + TestState = TEST_ASSERT; + break; + } + break; + + case TEST_ASSERT: + TEST_ASSERT(Parameters.AddParametersHere1); + TEST_ASSERT_EQUAL_STRING("edited active", Parameters.AddParametersHere2); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 52.56, Parameters.AddParametersHere3); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 184.876, Parameters.AddParametersHere4); + TEST_ASSERT_DOUBLE_WITHIN(0.0001, 587.4567, Parameters.AddParametersHere5); + + TEST_DONE; + break; + } + TEST_BUSY; +} + + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2023-08-25 18:59:10Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("DefaultValues", DefaultValues), + new_TestFixture("CreateNew", CreateNew), + new_TestFixture("CreateExisting", CreateExisting), + new_TestFixture("CreateNonExisting", CreateNonExisting), + new_TestFixture("CreateActive", CreateActive), + new_TestFixture("PreviewShouldNotAffectActive", PreviewShouldNotAffectActive), + new_TestFixture("Preview", Preview), + new_TestFixture("Delete", Delete), + new_TestFixture("Invalid", Invalid), + skipTestFixture("EditActive", EditActive), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_RecipeParameters, "Set_RecipeParameters", setupTest, teardownTest, fixtures, setupSet, teardownSet, cyclicSetCaller); + diff --git a/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/autoGeneratedFile.c b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/autoGeneratedFile.c new file mode 100644 index 00000000..221d8945 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/autoGeneratedFile.c @@ -0,0 +1,25 @@ +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (List of TestSets). +LastUpdated: 2022-11-02 11:34:44Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +#include "UnitTest.h" + + + +UNITTEST_TESTSET_DECLARATION Set_Common; +UNITTEST_TESTSET_DECLARATION Set_RecipeParameters; +UNITTEST_TESTSET_DECLARATION Set_RecipeMachineSettings; + + + +UNITTEST_TESTSET_FIXTURES(utTestSets) +{ + new_TestSet(Set_Common), + new_TestSet(Set_RecipeParameters), + new_TestSet(Set_RecipeMachineSettings), +}; +UNTITTEST_TESTSET_HANDLER(); + diff --git a/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/testSuite.c b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/testSuite.c new file mode 100644 index 00000000..6c052b1f --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/testSuite.c @@ -0,0 +1,154 @@ +/******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: - + * Author: + * Created: + ******************************************************************** + * Test registration and handshake + ********************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include + +void _INIT initTestSuite(void) +{ + Testsuite.Enable = 1; + utInit(&Testsuite); + + CommonTestsuite.Enable = 1; + utInit(&CommonTestsuite); + + strcpy((char*)&FileDeviceName, "mappRecipeFiles"); + strcpy((char*)&TextNameSpace, "mappFramework/Recipe/Alarms"); + strcpy((char*)&TextID, "SaveFailed"); + strcpy((char*)&HmiRecipe.Parameters.DeviceName, "mappRecipeFiles"); + + PV_xgetadr("RecipeMgr:MachineSettings", (void*)&pMachineSettings, &MachineSettingsSize); + PV_xgetadr("RecipeMgr:Parameters", (void*)&pParameters, &ParameterSize); + + LastSelectedIndex++; +} + +void _CYCLIC cyclicWithTest(void) +{ + utCyclic(&Testsuite); + if (Testsuite.Informational.LastKnownPassedLocation.TestCaseName != 0) + strcpy((char*)&LastTestCase, (char*)Testsuite.Informational.LastKnownPassedLocation.TestCaseName); + if (Testsuite.Informational.LastKnownPassedLocation.TestSetName != 0) + strcpy((char*)&LastTestSet, (char*)Testsuite.Informational.LastKnownPassedLocation.TestSetName); + if (Testsuite.Informational.LastKnownPassedLocation.File != 0) + strcpy((char*)&LastTestFile, (char*)Testsuite.Informational.LastKnownPassedLocation.File); +} + +void _EXIT exitTestSuite(void) +{ + utExit(&Testsuite); +} + +bool RecipeExists(char* recipeName) +{ + for (USINT i = 0; i<(sizeof(MpRecipeUIConnect.Recipe.List.Names)/sizeof(MpRecipeUIConnect.Recipe.List.Names[0])); i++) + { + if (strcmp(recipeName, MpRecipeUIConnect.Recipe.List.Names[i]) == 0) + { + return true; + } + } + return false; +} + +bool SelectRecipe(char* wantedRecipe) +{ + if (((MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE) && (MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_ERROR)) && + (strcmp(wantedRecipe, HmiRecipe.Status.SelectedRecipe) != 0)) return false; + + for (USINT i=0; i <= MpRecipeUIConnect.Recipe.List.MaxSelection; i++) + { + if (strcmp(wantedRecipe, MpRecipeUIConnect.Recipe.List.Names[i]) == 0) + MpRecipeUIConnect.Recipe.List.SelectedIndex = i; + } + + return (strcmp(wantedRecipe, HmiRecipe.Status.SelectedRecipe) == 0); +} + +testStatusEnum RemoveNonDefaultFiles(USINT categoryIndex, char* selectFile, const char* category) +{ + switch (SetupState) + { + case 0: + DirInfo_UT.enable = true; + DirInfo_UT.pDevice = (UDINT)&"mappRecipeFiles"; + DirInfo_UT.pPath = (UDINT)&""; + DirInfo(&DirInfo_UT); + TEST_BUSY_CONDITION(DirInfo_UT.status == 65535); + TEST_ABORT_CONDITION(DirInfo_UT.status != 0); + NumberOfFiles = DirInfo_UT.filenum; + CurrentFile = 0; + SetupState = (NumberOfFiles == 0) ? 100 : 1; + break; + + case 1: + DirRead_UT.enable = true; + DirRead_UT.pDevice = DirInfo_UT.pDevice; + DirRead_UT.entry = CurrentFile; + DirRead_UT.option = fiFILE; + DirRead_UT.pData = (UDINT)&fileInfo; + DirRead_UT.data_len = sizeof(fileInfo); + DirRead(&DirRead_UT); + TEST_BUSY_CONDITION(DirRead_UT.status == 65535); + TEST_ABORT_CONDITION(DirRead_UT.status != 0); + SetupState = 2; + break; + + case 2: + if ((strcmp("Default.par", (char*)fileInfo.Filename) == 0) || + (strcmp("Machine.mcfg", (char*)fileInfo.Filename) == 0)) + { + CurrentFile++; + SetupState = (CurrentFile >= NumberOfFiles) ? 10 : 1; + break; + } + FileDelete_UT.enable = true; + FileDelete_UT.pDevice = DirInfo_UT.pDevice; + FileDelete_UT.pName = (UDINT)&fileInfo.Filename; + FileDelete(&FileDelete_UT); + TEST_BUSY_CONDITION(FileDelete_UT.status == 65535); + TEST_ABORT_CONDITION(FileDelete_UT.status != 0); + + NumberOfFiles--; + SetupState = (CurrentFile >= NumberOfFiles) ? 10 : 1; + break; + + case 10: + strcpy((char*)&HmiRecipe.Parameters.DeviceName, "mappRecipeFiles"); + HmiRecipe.Parameters.CategoryIndex = categoryIndex; + MpRecipeUIConnect.Recipe.Refresh = true; + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_REFRESH) + MpRecipeUIConnect.Recipe.Refresh = false; + SetupState = 11; + break; + + case 11: + TEST_BUSY_CONDITION(MpRecipeUIConnect.Status != mpRECIPE_UI_STATUS_IDLE) + TEST_BUSY_CONDITION(!RecipeExists(selectFile)); + TEST_BUSY_CONDITION(HmiRecipe.Status.HMIcommand != REC_HMI_WAIT) + TEST_ABORT_CONDITION(pParameters == NULL); + SetupState = 100; + break; + + case 100: + cycleCount = 0; + TestState = TEST_ARRANGE; + SetupState = 0; + TEST_DONE; + } + TEST_BUSY; +} \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/testSuite.h b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/testSuite.h new file mode 100644 index 00000000..612a0fdb --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/testSuite.h @@ -0,0 +1,8 @@ +#ifndef __TEST_SUITE_H__ +#define __TEST_SUITE_H__ + +bool RecipeExists(char* recipeName); +bool SelectRecipe(char* wantedRecipe); +testStatusEnum RemoveNonDefaultFiles(USINT categoryIndex, char* selectFile, const char* category); + +#endif diff --git a/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/variables.var b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/variables.var new file mode 100644 index 00000000..26468274 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Recipe/RecipeMgrUnitTest/variables.var @@ -0,0 +1,32 @@ +(******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: utTemplate_automated + * File: variables.var + * Author: - + * Created: - + ******************************************************************** + * Local variables of program utTemplate_automated + ********************************************************************) +(*Describe the test*) +VAR + Testsuite : UtMgrTestSuite := (Name:='RecipeMgrVC4',Description:='RecipeMgr VC4 Unit Tests',MetaInformation:='Meta'); +END_VAR +(*Variables used in the tests*) +VAR + cycleCount : {REDUND_UNREPLICABLE} USINT; + pMachineSettings : REFERENCE TO MachineSettingsType; + MachineSettingsSize : {REDUND_UNREPLICABLE} UDINT; + pParameters : REFERENCE TO ParametersType; + ParameterSize : {REDUND_UNREPLICABLE} UDINT; + LastSelectedIndex : UDINT; + SetupState : USINT; + FileName : STRING[24]; + NumberOfFiles : UINT; + CurrentFile : UINT; + fileInfo : fiDIR_READ_DATA; + DirInfo_UT : DirInfo; + DirRead_UT : DirRead; + FileDelete_UT : FileDelete; + FileCopy_UT : FileCopy; +END_VAR diff --git a/mappFramework/Logical/UnitTestVC4/Report/Package.pkg b/mappFramework/Logical/UnitTestVC4/Report/Package.pkg new file mode 100644 index 00000000..e5dff860 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Report/Package.pkg @@ -0,0 +1,7 @@ + + + + + ReportUnitTest + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/ANSIC.prg b/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/ANSIC.prg new file mode 100644 index 00000000..026dab41 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/ANSIC.prg @@ -0,0 +1,15 @@ + + + + + \Logical\Infrastructure\VC4\Report\ReportMgr\ReportMgr.typ + \Logical\Infrastructure\VC4\Report\ReportMgr\ReportMgr.var + variables.var + testSuite.c + autoGeneratedFile.c + Set_ReportMgr.c + \Logical\UnitTestVC4\Common\CommonUT\CommonVariables.var + \Logical\UnitTestVC4\Common\CommonUT\CommonTypes.typ + \Logical\UnitTestVC4\Common\CommonUT\Set_Common.c + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/Set_ReportMgr.c b/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/Set_ReportMgr.c new file mode 100644 index 00000000..8f2efc85 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/Set_ReportMgr.c @@ -0,0 +1,105 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include + +_SETUP_SET(void) +{ + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + TEST_DONE; +} + + +_SETUP_TEST(void) +{ + TEST_DONE; +} + +_TEARDOWN_TEST(void) +{ + TEST_DONE; +} + +_TEST CreateAdvReport(void) +{ + switch (TestState) + { + case TEST_ARRANGE: + HmiReport_UT.Parameters.UseAdvancedFormat = true; + TEST_BUSY_CONDITION(CoreInfoActive == true); + TEST_ABORT_CONDITION(HmiReport_UT.Status.Error == true); + TestState = TEST_ACT; + break; + + case TEST_ACT: + TEST_BUSY_CONDITION(CoreInfoActive == false); + HmiReport_UT.Commands.Generate = true; + TEST_BUSY_CONDITION(HmiReport_UT.Status.Busy == false); + TestState = TEST_ASSERT; + break; + + case TEST_ASSERT: + HmiReport_UT.Commands.Generate = false; + TEST_BUSY_CONDITION(HmiReport_UT.Status.Busy == true); + TEST_ASSERT(HmiReport_UT.Status.Error == false); + TEST_ASSERT_EQUAL_INT(1, CoreInfo_UT.NumberOfReports); + TEST_DONE; + break; + } + TEST_BUSY; +} + +_TEST CreateSimpleReport(void) +{ + switch (TestState) + { + case TEST_ARRANGE: + HmiReport_UT.Parameters.UseAdvancedFormat = false; + TEST_BUSY_CONDITION(CoreInfoActive == true); + TEST_ABORT_CONDITION(HmiReport_UT.Status.Error == true); + TestState = TEST_ACT; + break; + + case TEST_ACT: + TEST_BUSY_CONDITION(CoreInfoActive == false); + HmiReport_UT.Commands.Generate = true; + TEST_BUSY_CONDITION(HmiReport_UT.Status.Busy == false); + TestState = TEST_ASSERT; + break; + + case TEST_ASSERT: + HmiReport_UT.Commands.Generate = false; + TEST_BUSY_CONDITION(HmiReport_UT.Status.Busy == true); + TEST_ASSERT(HmiReport_UT.Status.Error == false); + TEST_ASSERT_EQUAL_INT(1, CoreInfo_UT.NumberOfReports); + TEST_DONE; + break; + } + TEST_BUSY; +} + + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2022-11-15 21:58:19Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("CreateAdvReport", CreateAdvReport), + new_TestFixture("CreateSimpleReport", CreateSimpleReport), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_ReportMgr, "Set_ReportMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, 0); + diff --git a/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/autoGeneratedFile.c b/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/autoGeneratedFile.c new file mode 100644 index 00000000..e2dc6ed2 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/autoGeneratedFile.c @@ -0,0 +1,23 @@ +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (List of TestSets). +LastUpdated: 2022-11-14 19:41:10Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +#include "UnitTest.h" + + + +UNITTEST_TESTSET_DECLARATION Set_ReportMgr; +UNITTEST_TESTSET_DECLARATION Set_Common; + + + +UNITTEST_TESTSET_FIXTURES(utTestSets) +{ + new_TestSet(Set_ReportMgr), + new_TestSet(Set_Common), +}; +UNTITTEST_TESTSET_HANDLER(); + diff --git a/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/testSuite.c b/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/testSuite.c new file mode 100644 index 00000000..f8ad4db9 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/testSuite.c @@ -0,0 +1,47 @@ +/******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: - + * Author: + * Created: + ******************************************************************** + * Test registration and handshake + ********************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include + + +void _INIT initTestSuite(void) +{ + Testsuite.Enable = 1; + utInit(&Testsuite); + + CommonTestsuite.Enable = 1; + utInit(&CommonTestsuite); + + strcpy((char*)&FileDeviceName, "mappReportFiles"); + strcpy((char*)&TextNameSpace, "mappFramework/Report/Alarms"); + strcpy((char*)&TextID, "GenerateFailed"); + +} + + +void _CYCLIC cyclicWithTest(void) +{ + utCyclic(&Testsuite); +} + + +void _EXIT exitTestSuite(void) +{ + utExit(&Testsuite); +} + + diff --git a/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/variables.var b/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/variables.var new file mode 100644 index 00000000..c9513070 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Report/ReportUnitTest/variables.var @@ -0,0 +1,21 @@ +(******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: utTemplate_automated + * File: variables.var + * Author: - + * Created: - + ******************************************************************** + * Local variables of program utTemplate_automated + ********************************************************************) +(*Describe the test*) +VAR + Testsuite : UtMgrTestSuite := (Name:='ReportMgrVC4',Description:='ReportMgr VC4 Unit Tests',MetaInformation:='Meta'); +END_VAR +(*Variables used in the tests*) +VAR + HmiReport_UT : ReportHmiInterfaceType; (*HMI interface structure*) + CoreInfo_UT : MpReportCoreInfoType; + CoreInfoActive : BOOL; + CoreCmdDone : BOOL; +END_VAR diff --git a/mappFramework/Logical/UnitTestVC4/Update_TestPrograms_in_current_location.bat b/mappFramework/Logical/UnitTestVC4/Update_TestPrograms_in_current_location.bat new file mode 100644 index 00000000..75e01ae7 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Update_TestPrograms_in_current_location.bat @@ -0,0 +1,30 @@ +@@echo off + +set tool=%cd%\..\AS\TS_UnitTest\UnitTest_TestProgram_Helper.exe + + + +REM switch to project context +chdir /d %~dp0 +set currDirPackage=%cd%\package.pkg + + + +REM execute helper on all test programs in this package +"%tool%" "%currDirPackage%" + +SETLOCAL EnableDelayedExpansion +for /d %%d in (*.*) do ( + "%tool%" "%cd%\%%d\package.pkg" +) + +REM eval result +if errorLevel 1 goto echoErrorLevel +goto End + +:echoErrorLevel +echo errorLevel: %errorLevel% + + +:End +rem pause diff --git a/mappFramework/Logical/UnitTestVC4/Usb/Package.pkg b/mappFramework/Logical/UnitTestVC4/Usb/Package.pkg new file mode 100644 index 00000000..129ebead --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/Usb/Package.pkg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/UserX/Package.pkg b/mappFramework/Logical/UnitTestVC4/UserX/Package.pkg new file mode 100644 index 00000000..0406bdd2 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/UserX/Package.pkg @@ -0,0 +1,7 @@ + + + + + UserXUnitTest + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/ANSIC.prg b/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/ANSIC.prg new file mode 100644 index 00000000..2d2eb05e --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/ANSIC.prg @@ -0,0 +1,14 @@ + + + + + \Logical\Infrastructure\VC4\UserX\UserXMgr\UserXMgr.typ + \Logical\Infrastructure\VC4\UserX\UserXMgr\UserXMgr.var + variables.var + testSuite.c + autoGeneratedFile.c + Set_UserXMgr.c + \Logical\UnitTestVC4\Common\CommonUT\CommonVariables.var + \Logical\UnitTestVC4\Common\CommonUT\Set_Common.c + + \ No newline at end of file diff --git a/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/Set_UserXMgr.c b/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/Set_UserXMgr.c new file mode 100644 index 00000000..92bf45ce --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/Set_UserXMgr.c @@ -0,0 +1,229 @@ +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif + +#include "UnitTest.h" +#include +#include + +#define TIMEOUT_TEST_CASE \ + if (cycleCount >= 254) \ + { \ + char abortMessage[80]; \ + char substate[10]; \ + memset(abortMessage, 0, sizeof(abortMessage)); \ + memset(substate, 0, sizeof(substate)); \ + itoa(ActSubState, substate, 10); \ + strcpy(abortMessage, "Timeout in ActSubState = "); \ + strcat(abortMessage, substate); \ + TEST_FAIL(abortMessage); \ + TEST_DONE; \ + } + +_SETUP_SET(void) +{ + TestStep = 0; + cycleCount = 0; + TEST_DONE; +} + +_TEARDOWN_SET(void) +{ + TEST_DONE; +} + + +_SETUP_TEST(void) +{ +// TODO: Fix issue with variable mapping or removal of UserX MpUserXLogin_0 from framework as it is not used. +// switch (TestStep) +// { +// case 0: +// TEST_ABORT_CONDITION(MpUserXLogin_0.MpLink == 0); +// MpUserXLogin_0.Enable = 1; +// brwcscpy((UDINT)&UT_Username, (UDINT)&UT_UserList[0]); +// MpUserXLogin_0.UserName = (UDINT)&UT_Username; +// MpUserXLogin_0.Password = (UDINT)&UT_Password; +// MpUserXLogin_0.Login = 1; +// MpUserXLogin(&MpUserXLogin_0); +// UT_Compare = brwcscmp((UDINT)&MpUserXLogin_0.CurrentUser, (UDINT)&UT_Username); +// TEST_BUSY_CONDITION(UT_Compare != 0); +// if (UT_Compare == 0){ +// TEST_ABORT_CONDITION(UserXLoginUIConnect.Status == mpUSERX_UI_STATUS_ERROR); +// MpUserXLogin_0.Login = 0; +// TestStep = 1; +// } +// break; +// case 1: +// UT_Compare = brwcscmp((UDINT)&MpUserXLogin_0.CurrentUser, (UDINT)&UT_Username); +// TEST_ABORT_CONDITION(UT_Compare != 0); +// TestStep = 0; +// TEST_DONE; +// break; +// } +// TEST_BUSY; + TEST_DONE; // Temporary +} + +_TEST USERX_ROLES_CHECK(void) +{ +// See Note in setup +// switch (TestStep){ +// case 0: +// UT_Compare = brwcscmp((UDINT)&MpUserXLogin_0.CurrentUser, (UDINT)&UT_Username); +// TEST_ABORT_CONDITION(UT_Compare != 0); // Check to make sure role is admin so all users / roles can be seen +// for (UT_i = 0; UT_i < (sizeof(UT_RoleList) / sizeof(UT_RoleList[0]) - 1); UT_i++) +// { +// for (UT_j = 0; UT_j < (sizeof(UserXMgrUIConnect.Role.List.Names) / sizeof(UserXMgrUIConnect.Role.List.Names[0]) - 1); UT_j++) +// { +// UT_Compare = brwcscmp((UDINT)&UserXMgrUIConnect.Role.List.Names[UT_j], (UDINT)&UT_RoleList[UT_i]); +// if (UT_Compare == 0) +// { +// +// break; +// } +// } +// if (UT_RoleList[UT_i] != "") +// { +// TEST_ASSERT(UT_Compare == 0); +// } +// } +// TestStep = 1; +// break; +// case 1: +// TestStep = 0; +// TEST_DONE; +// break; +// } +// TEST_BUSY; + TEST_DONE; // Temporary +} + +_TEST USERX_USER_CHECK(void) +{ +// See Note in setup +// +// switch (TestStep){ +// case 0: // Ensure Admin has Admin Role +// UT_Compare = brwcscmp((UDINT)&MpUserXLogin_0.CurrentUser, (UDINT)&UT_Username); +// TEST_ABORT_CONDITION(UT_Compare != 0); +// TEST_ABORT_CONDITION(MpUserXLogin_0.MpLink == 0); +// TestStep = 1; +// break; +// case 1: +// TEST_ABORT_CONDITION(MpUserXLogin_0.MpLink == 0); +// brwcscpy((UDINT)&UT_Username, (UDINT)&UT_UserList[1]); +// MpUserXLogin_0.Enable = 1; +// MpUserXLogin_0.UserName = (UDINT)&UT_Username; +// MpUserXLogin_0.Password = (UDINT)&UT_Password; +// MpUserXLogin_0.Login = 1; +// MpUserXLogin(&MpUserXLogin_0); +// while (MpUserXLogin_0.CommandBusy == 1){ +// MpUserXLogin(&MpUserXLogin_0); +// } +// UT_Compare = brwcscmp((UDINT)&MpUserXLogin_0.CurrentUser, (UDINT)&UT_Username); +// TEST_ASSERT(UT_Compare == 0); +// if (UT_Compare == 0){ +// MpUserXLogin_0.Login = 0; +// // TODO: UIConnect does not update on user change this may require that the password be reset as required by the configuration +// //UT_Compare = brwcscmp((UDINT)&UT_RoleList[1], (UDINT)&UserXMgrUIConnect.Role.Info.Name); +// //TEST_ASSERT(UT_Compare == 0); +// TestStep = 2; +// } +// break; +// +// case 2: +// TEST_ABORT_CONDITION(MpUserXLogin_0.MpLink == 0); +// brwcscpy((UDINT)&UT_Username, (UDINT)&UT_UserList[2]); +// MpUserXLogin_0.Enable = 1; +// MpUserXLogin_0.UserName = (UDINT)&UT_Username; +// MpUserXLogin_0.Password = (UDINT)&UT_Password; +// MpUserXLogin_0.Login = 1; +// MpUserXLogin(&MpUserXLogin_0); +// while (MpUserXLogin_0.CommandBusy == 1){ +// MpUserXLogin(&MpUserXLogin_0); +// } +// UT_Compare = brwcscmp((UDINT)&MpUserXLogin_0.CurrentUser, (UDINT)&UT_Username); +// TEST_ASSERT(UT_Compare == 0); +// if (UT_Compare == 0){ +// MpUserXLogin_0.Login = 0; +//// TODO: UIConnect does not update on user change this may require that the password be reset as required by the configuration +//// UT_Compare = brwcscmp((UDINT)&UT_RoleList[2], (UDINT)&UserXMgrUIConnect.Role.Info.Name); +//// TEST_ASSERT(UT_Compare == 0); +// TestStep = 3; +// } +// break; +// case 3: +// TEST_ABORT_CONDITION(MpUserXLogin_0.MpLink == 0); +// brwcscpy((UDINT)&UT_Username, (UDINT)&UT_UserList[0]); +// MpUserXLogin_0.Enable = 1; +// MpUserXLogin_0.UserName = (UDINT)&UT_Username; +// MpUserXLogin_0.Password = (UDINT)&UT_Password; +// MpUserXLogin_0.Login = 1; +// MpUserXLogin(&MpUserXLogin_0); +// while (MpUserXLogin_0.CommandBusy == 1){ +// MpUserXLogin(&MpUserXLogin_0); +// } +// UT_Compare = brwcscmp((UDINT)&MpUserXLogin_0.CurrentUser, (UDINT)&UT_Username); +// TEST_ASSERT(UT_Compare == 0); +// if (UT_Compare == 0){ +// MpUserXLogin_0.Login = 0; +// TestStep = 4; +// } +// break; +// case 4: +// TestStep = 0; +// TEST_DONE; +// break; +// } +// TEST_BUSY; + TEST_DONE; // Temporary +} + +_TEST USERX_LOGOUT(void){ + // See Note in setup +// switch (TestStep){ +// case 0: +// TEST_ABORT_CONDITION(MpUserXLogin_0.MpLink == 0); +// MpUserXLogin_0.Enable = 1; +// MpUserXLogin_0.Logout = 1; +// MpUserXLogin(&MpUserXLogin_0); +// while (MpUserXLogin_0.CommandBusy == 1){ +// MpUserXLogin(&MpUserXLogin_0); +// } +// TestStep = 1; +// break; +// case 1: +// TEST_ASSERT(MpUserXLogin_0.CurrentLevel != 0); +// TestStep = 2; +// break; +// case 2: +// TestStep = 0; +// TEST_DONE; +// break; +// } + TEST_DONE; // Temporary +} +_TEARDOWN_TEST(void) +{ + TEST_DONE; +} + +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (TestSet). +LastUpdated: 2022-11-23 14:37:57Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +UNITTEST_FIXTURES(fixtures) +{ + new_TestFixture("USERX_ROLES_CHECK", USERX_ROLES_CHECK), + new_TestFixture("USERX_USER_CHECK", USERX_USER_CHECK), + new_TestFixture("USERX_LOGOUT", USERX_LOGOUT), +}; + +UNITTEST_CALLER_COMPLETE_EXPLICIT(Set_UserXMgr, "Set_UserXMgr", setupTest, teardownTest, fixtures, setupSet, teardownSet, 0); + diff --git a/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/autoGeneratedFile.c b/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/autoGeneratedFile.c new file mode 100644 index 00000000..367b71c2 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/autoGeneratedFile.c @@ -0,0 +1,23 @@ +/* +B+R UnitTest: This is generated code. +Do not edit! Do not move! +Description: UnitTest Testprogramm infrastructure (List of TestSets). +LastUpdated: 2022-09-22 14:29:53Z +By B+R UnitTest Helper Version: 2.0.1.59 +*/ +#include "UnitTest.h" + + + +UNITTEST_TESTSET_DECLARATION Set_UserXMgr; +UNITTEST_TESTSET_DECLARATION Set_Common; + + + +UNITTEST_TESTSET_FIXTURES(utTestSets) +{ + new_TestSet(Set_UserXMgr), + new_TestSet(Set_Common), +}; +UNTITTEST_TESTSET_HANDLER(); + diff --git a/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/testSuite.c b/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/testSuite.c new file mode 100644 index 00000000..e040d560 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/testSuite.c @@ -0,0 +1,46 @@ +/******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: - + * Author: + * Created: + ******************************************************************** + * Test registration and handshake + ********************************************************************/ + +#include + +#ifdef _DEFAULT_INCLUDES +#include +#endif +#include + +#include "UnitTest.h" + +void _INIT initTestSuite(void) +{ + Testsuite.Enable = 1; + utInit(&Testsuite); + + CommonTestsuite.Enable = 1; + utInit(&CommonTestsuite); + + strcpy((char*)&FileDeviceName, "mappUserXFiles"); + strcpy((char*)&TextNameSpace, "mappFramework/UserX/Alarms"); + strcpy((char*)&TextID, "UserLocked"); + +} + + +void _CYCLIC cyclicWithTest(void) +{ + utCyclic(&Testsuite); +} + + +void _EXIT exitTestSuite(void) +{ + utExit(&Testsuite); +} + + diff --git a/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/variables.var b/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/variables.var new file mode 100644 index 00000000..69db9542 --- /dev/null +++ b/mappFramework/Logical/UnitTestVC4/UserX/UserXUnitTest/variables.var @@ -0,0 +1,27 @@ +(******************************************************************** + * COPYRIGHT -- + ******************************************************************** + * Program: utTemplate_automated + * File: variables.var + * Author: - + * Created: - + ******************************************************************** + * Local variables of program utTemplate_automated + ********************************************************************) +(*Describe the test*) +VAR + TestStep : USINT; + Testsuite : UtMgrTestSuite := (Name:='UserMgrVC4',Description:='UserMgr VC4 Unit Tests',MetaInformation:='Meta'); +END_VAR +(*Variables used in the tests*) +VAR + cycleCount : USINT; + UT_Password : WSTRING[80] := "123ABc"; (*Unit test password login request*) + UT_Username : WSTRING[80] := "Admin"; (*Unit test username login request *) + UT_Compare : DINT; (*Unit test string compare PV holder*) + UT_Message : STRING[80]; (*Unit test message variable*) + UT_j : USINT; (*index for FOR loops*) + UT_i : USINT; (*index for FOR loops*) + UT_RoleList : ARRAY[0..4] OF WSTRING[50] := ["Administrators","Operators","Service",2("")]; (*Unit test role list for checking against user list*) + UT_UserList : ARRAY[0..4] OF WSTRING[50] := ["Admin","Operator","Service_Tech",2("")]; (*Unit test user list for checking against user list*) +END_VAR diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo.bminfo b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo.bminfo deleted file mode 100644 index 89cfcdcb..00000000 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo.bminfo +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo.png b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo.png deleted file mode 100644 index 3a7699b4..00000000 Binary files a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo.png and /dev/null differ diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo_0.bminfo b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo_0.bminfo deleted file mode 100644 index 10173134..00000000 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo_0.bminfo +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo_0.png b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo_0.png deleted file mode 100644 index 3a7699b4..00000000 Binary files a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundVGA_Logo_0.png and /dev/null differ diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundWVGA_Logo.png b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundWVGA_Logo.png deleted file mode 100644 index 031a5017..00000000 Binary files a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundWVGA_Logo.png and /dev/null differ diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundWVGA_Logo.bminfo b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/WhiteBackground.bminfo similarity index 67% rename from mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundWVGA_Logo.bminfo rename to mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/WhiteBackground.bminfo index 53bba8e5..e54760d9 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/MpBackgroundWVGA_Logo.bminfo +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/WhiteBackground.bminfo @@ -1,8 +1,8 @@ - - + + - + @@ -10,6 +10,6 @@ - + \ No newline at end of file diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/WhiteBackground.png b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/WhiteBackground.png new file mode 100644 index 00000000..9b42d92e Binary files /dev/null and b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/WhiteBackground.png differ diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogo.bminfo b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogo.bminfo new file mode 100644 index 00000000..28bfaa98 --- /dev/null +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogo.bminfo @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogo.png b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogo.png new file mode 100644 index 00000000..096a79f7 Binary files /dev/null and b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogo.png differ diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogoLarge.bminfo b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogoLarge.bminfo new file mode 100644 index 00000000..747ce5f0 --- /dev/null +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogoLarge.bminfo @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogoLarge.png b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogoLarge.png new file mode 100644 index 00000000..029cb11e Binary files /dev/null and b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_NewLogoLarge.png differ diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_logo.bminfo b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_logo.bminfo index 08e68552..e57d636d 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_logo.bminfo +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappFramework_logo.bminfo @@ -1,5 +1,5 @@ - + @@ -10,6 +10,6 @@ - + \ No newline at end of file diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappTechnology_NewLogo.bminfo b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappTechnology_NewLogo.bminfo new file mode 100644 index 00000000..1cc1799c --- /dev/null +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappTechnology_NewLogo.bminfo @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappTechnology_NewLogo.png b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappTechnology_NewLogo.png new file mode 100644 index 00000000..7fe446a1 Binary files /dev/null and b/mappFramework/Logical/VC4/mappFrameworkVisu/Bitmaps/mappTechnology_NewLogo.png differ diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/CheckBox_checked.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/CheckBox_checked.bdr index df5e28d4..c919f7fa 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/CheckBox_checked.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/CheckBox_checked.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/CheckBox_small_checked.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/CheckBox_small_checked.bdr index b08734d1..9350c314 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/CheckBox_small_checked.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/CheckBox_small_checked.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_AttentionOff.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_AttentionOff.bdr index 3364459f..a737030a 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_AttentionOff.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_AttentionOff.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_AttentionOn.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_AttentionOn.bdr index 81b01c5f..78153d3c 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_AttentionOn.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_AttentionOn.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_BitmapFrame.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_BitmapFrame.bdr index 7678681f..d76e17c8 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_BitmapFrame.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_BitmapFrame.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button.bdr index daa034ab..de8afdc0 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Control.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Control.bdr index 7924a897..1b46a88d 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Control.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Control.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Control_pressed.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Control_pressed.bdr index ed446c2c..5c1eb32a 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Control_pressed.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Control_pressed.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Device_Select_Left.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Device_Select_Left.bdr index d06c55f6..64cf660f 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Device_Select_Left.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Device_Select_Left.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Device_Unselect_Left.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Device_Unselect_Left.bdr index 40a2be33..0e880be3 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Device_Unselect_Left.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Device_Unselect_Left.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_KeyRingOff.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_KeyRingOff.bdr index 7f08c71f..5f643b3f 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_KeyRingOff.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_KeyRingOff.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_KeyRingOn.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_KeyRingOn.bdr index 0ccc8c84..05e6f589 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_KeyRingOn.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_KeyRingOn.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Down.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Down.bdr index 29303810..dc6adba8 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Down.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Down.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Dwn_press.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Dwn_press.bdr index 84977485..008a36c8 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Dwn_press.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Dwn_press.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Up.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Up.bdr index 76b59db1..ced3db3c 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Up.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Up.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Up_press.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Up_press.bdr index 5a28f03f..176fe196 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Up_press.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Multi_Scroll_Up_press.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Safety_ACK_off.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Safety_ACK_off.bdr index 32da758d..6a076c1f 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Safety_ACK_off.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Safety_ACK_off.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Safety_ACK_on.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Safety_ACK_on.bdr index 5b5726c4..24c15f78 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Safety_ACK_on.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Safety_ACK_on.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scoll_Up.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scoll_Up.bdr index 0c7a7703..d16564db 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scoll_Up.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scoll_Up.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scoll_Up_pressed.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scoll_Up_pressed.bdr index 2ee12a33..64976381 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scoll_Up_pressed.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scoll_Up_pressed.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Down.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Down.bdr index a7e1bbad..48aeab96 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Down.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Down.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Down_pressed.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Down_pressed.bdr index 7ca1ec12..d1875e09 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Down_pressed.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Down_pressed.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left.bdr index bdece365..2153a9a7 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_Multi.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_Multi.bdr index 6f458f89..0fa8137d 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_Multi.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_Multi.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_Multi_pres.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_Multi_pres.bdr index be6dd5db..98c5edd4 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_Multi_pres.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_Multi_pres.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_pressed.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_pressed.bdr index 50e3706f..c3bc76f5 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_pressed.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Left_pressed.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right.bdr index 528ffb2c..f43026ce 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_Multi.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_Multi.bdr index aad77720..51e1c7a8 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_Multi.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_Multi.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_Multi_pr.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_Multi_pr.bdr index 12d3c25a..cdcd0a3f 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_Multi_pr.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_Multi_pr.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_pressed.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_pressed.bdr index 617786ff..e049584a 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_pressed.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_Scroll_Right_pressed.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_pressed.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_pressed.bdr index b5f4c27d..84022bab 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_pressed.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Button_pressed.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_CheckBox_checked.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_CheckBox_checked.bdr index dcc2f205..c28d3220 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_CheckBox_checked.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_CheckBox_checked.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataDevBorder.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataDevBorder.bdr index f09490c5..8adcac58 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataDevBorder.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataDevBorder.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMaxBorder.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMaxBorder.bdr index 3fce10b3..0384059f 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMaxBorder.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMaxBorder.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMeanBorder.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMeanBorder.bdr index 41c43054..24afc80a 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMeanBorder.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMeanBorder.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMinBorder.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMinBorder.bdr index a3d02c0c..adcdc838 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMinBorder.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataMinBorder.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataNameFrame.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataNameFrame.bdr index 16a16701..7ca97883 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataNameFrame.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataNameFrame.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataRangeBorder.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataRangeBorder.bdr index 2c90fa0c..a53dd37f 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataRangeBorder.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_DataRangeBorder.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Flat_grey.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Flat_grey.bdr index da4d224c..ff02bcb0 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Flat_grey.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_Flat_grey.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_FrameInvisible.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_FrameInvisible.bdr index ba89734f..eba8001a 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_FrameInvisible.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_FrameInvisible.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_GroupControl.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_GroupControl.bdr index d8153748..d9bd26d6 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_GroupControl.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_GroupControl.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_InputBorder.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_InputBorder.bdr index 20e4df3b..c2572441 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_InputBorder.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_InputBorder.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_InputBorderInactive.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_InputBorderInactive.bdr index abfa90d8..5f7d083f 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_InputBorderInactive.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_InputBorderInactive.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorder.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorder.bdr index 8d3a1961..534a712c 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorder.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorder.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorderDown.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorderDown.bdr index 4a63d258..f79ab282 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorderDown.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorderDown.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorderSlim.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorderSlim.bdr index 4706ef0b..af0c2f5b 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorderSlim.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorderSlim.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorder_Orange.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorder_Orange.bdr index f743062b..d8a5685b 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorder_Orange.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_LabelBorder_Orange.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxCenter.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxCenter.bdr index 0ed59b8d..7ebfca5a 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxCenter.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxCenter.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxLeft.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxLeft.bdr index e47443bc..f69736aa 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxLeft.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxLeft.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxRight.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxRight.bdr index a8b0c405..6f5bba4b 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxRight.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_ListBoxRight.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_MoveOff.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_MoveOff.bdr index e7aa05c3..fb8e134c 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_MoveOff.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_MoveOff.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_MoveOn.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_MoveOn.bdr index 5d4d3949..75faa195 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_MoveOn.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_MoveOn.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_OutputBorder.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_OutputBorder.bdr index ac55a465..bfff6c54 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_OutputBorder.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_OutputBorder.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_PackML_States.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_PackML_States.bdr index 9852a12e..670aa891 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_PackML_States.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_PackML_States.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_RangeBar.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_RangeBar.bdr index 26268ea5..e6bb46ab 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_RangeBar.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_RangeBar.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SliderBorder09.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SliderBorder09.bdr index fa400860..ac327028 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SliderBorder09.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SliderBorder09.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SunkenNG.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SunkenNG.bdr index 193596e5..11a521d2 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SunkenNG.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SunkenNG.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SunkenNGgray.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SunkenNGgray.bdr index 937e079d..3d614ecc 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SunkenNGgray.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_SunkenNGgray.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabActive.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabActive.bdr index a3217c90..d44f2e8c 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabActive.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabActive.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabSelect.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabSelect.bdr index dfbea32b..3dfc3e7d 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabSelect.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabSelect.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabUnSelect.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabUnSelect.bdr index 51a19583..a5e18541 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabUnSelect.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TabUnSelect.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointSelected.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointSelected.bdr index f0ccd0b0..dccac2cd 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointSelected.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointSelected.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointUnselectedEven.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointUnselectedEven.bdr index b594ab05..338dc7a4 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointUnselectedEven.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointUnselectedEven.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointUnselectedOdd.bdr b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointUnselectedOdd.bdr index 3605b2c3..38f5ca73 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointUnselectedOdd.bdr +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Borders/Mp_TeachPointUnselectedOdd.bdr @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Layers/MpBackground.layer b/mappFramework/Logical/VC4/mappFrameworkVisu/Layers/MpBackground.layer index f18ce7b4..7c652c06 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Layers/MpBackground.layer +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Layers/MpBackground.layer @@ -1,5 +1,5 @@ - + @@ -16,7 +16,7 @@ - + @@ -100,6 +100,20 @@ + + + + + + + + + + + + + + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Package.vcp b/mappFramework/Logical/VC4/mappFrameworkVisu/Package.vcp index 2deae931..e3b7e65b 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Package.vcp +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Package.vcp @@ -60,7 +60,6 @@ - @@ -329,7 +328,6 @@ - @@ -344,7 +342,6 @@ - @@ -385,6 +382,10 @@ + + + + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXHistory.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXHistory.page index b550c40b..ac6a661b 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXHistory.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXHistory.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXList.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXList.page index f099afd1..ac3463d2 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXList.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXList.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXListUI_Backtrace.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXListUI_Backtrace.page index 275a5ae7..82a41f9f 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXListUI_Backtrace.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXListUI_Backtrace.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXQuery.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXQuery.page index 49905b80..3aade496 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXQuery.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAlarmXQuery.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditCustomEventsUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditCustomEventsUI.page index a5a6dcb9..76966747 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditCustomEventsUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditCustomEventsUI.page @@ -1,1266 +1,1266 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditQueryUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditQueryUI.page index 571a7489..58d3ca51 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditQueryUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditQueryUI.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditTrailUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditTrailUI.page index c6edfe16..8160bb8f 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditTrailUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAuditTrailUI.page @@ -1,1970 +1,1998 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAxisBasic.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAxisBasic.page index cb37445d..43d131fb 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAxisBasic.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpAxisBasic.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpBackup.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpBackup.page index 0c8409c9..0a444696 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpBackup.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpBackup.page @@ -1299,9 +1299,9 @@ - + - + @@ -1319,9 +1319,9 @@ - + - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpDataStatisticsUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpDataStatisticsUI.page index 5940f5c6..d5b9524e 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpDataStatisticsUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpDataStatisticsUI.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpDataTableUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpDataTableUI.page index d4f96cf4..84c5883e 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpDataTableUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpDataTableUI.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpFileManagerUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpFileManagerUI.page index 57bd3549..b022cda2 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpFileManagerUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpFileManagerUI.page @@ -1,5 +1,5 @@ - + @@ -2037,7 +2037,7 @@ - + @@ -2046,21 +2046,23 @@ - + - + - + + + - + - + @@ -2068,21 +2070,21 @@ - + - + - + - + @@ -2096,7 +2098,7 @@ - + @@ -2114,7 +2116,7 @@ - + @@ -2130,7 +2132,7 @@ - + @@ -2155,7 +2157,7 @@ - + @@ -2180,7 +2182,7 @@ - + @@ -2194,7 +2196,7 @@ - + @@ -2209,7 +2211,7 @@ - + @@ -2223,7 +2225,7 @@ - + @@ -2239,7 +2241,7 @@ - + @@ -2256,7 +2258,7 @@ - + @@ -2293,8 +2295,8 @@ - - + + @@ -2498,23 +2500,23 @@ - + - + - + - + @@ -2528,17 +2530,17 @@ - + - + - + @@ -2549,10 +2551,10 @@ - + - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeCoreUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeCoreUI.page index 40e89013..9950aa65 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeCoreUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeCoreUI.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeListUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeListUI.page index be011211..95095dfa 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeListUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeListUI.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeTimelineUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeTimelineUI.page index cb4c7f41..a90936f3 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeTimelineUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeTimelineUI.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeTrendUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeTrendUI.page index e260efb7..71fd9d17 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeTrendUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpOeeTrendUI.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpPackMLBasicUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpPackMLBasicUI.page index d13b65af..9952b507 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpPackMLBasicUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpPackMLBasicUI.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpPackMLStatisticsUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpPackMLStatisticsUI.page index d1972f98..0d2d3d24 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpPackMLStatisticsUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpPackMLStatisticsUI.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpRecipeUI.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpRecipeUI.page index 4f746464..4ca5041f 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpRecipeUI.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpRecipeUI.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpReport.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpReport.page index 7e3c04b0..125863ad 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpReport.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpReport.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpSetup.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpSetup.page index 86660bd1..b270a521 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpSetup.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpSetup.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpSystemDiagnostics.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpSystemDiagnostics.page index 113e547e..005dba1a 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpSystemDiagnostics.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpSystemDiagnostics.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpUserXManagerUI_Roles.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpUserXManagerUI_Roles.page index 57dc15c3..82f2f4bd 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpUserXManagerUI_Roles.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpUserXManagerUI_Roles.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpUserXManagerUI_Users.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpUserXManagerUI_Users.page index 3a21180a..658cd75e 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpUserXManagerUI_Users.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/MpUserXManagerUI_Users.page @@ -1,5 +1,5 @@ - + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/mapp1StartPage.page b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/mapp1StartPage.page index 0a314944..c8272753 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/mapp1StartPage.page +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/Pages/mapp1StartPage.page @@ -1,5 +1,5 @@ - + @@ -45,17 +45,17 @@ - + - + - + - - + + diff --git a/mappFramework/Logical/VC4/mappFrameworkVisu/VirtualKeys.vcvk b/mappFramework/Logical/VC4/mappFrameworkVisu/VirtualKeys.vcvk index 66c5189f..ecf1058d 100644 --- a/mappFramework/Logical/VC4/mappFrameworkVisu/VirtualKeys.vcvk +++ b/mappFramework/Logical/VC4/mappFrameworkVisu/VirtualKeys.vcvk @@ -1,4494 +1,4494 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/VCShared/DataSources/DataSource.dso b/mappFramework/Logical/VCShared/DataSources/DataSource.dso index 02bf03f8..ad84eb1d 100644 --- a/mappFramework/Logical/VCShared/DataSources/DataSource.dso +++ b/mappFramework/Logical/VCShared/DataSources/DataSource.dso @@ -1,15664 +1,15672 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/VCShared/Package.vcp b/mappFramework/Logical/VCShared/Package.vcp index 37e3db11..828cb295 100644 --- a/mappFramework/Logical/VCShared/Package.vcp +++ b/mappFramework/Logical/VCShared/Package.vcp @@ -3,7 +3,7 @@ - + diff --git a/mappFramework/Logical/VCShared/TextGroups/MpAuditTrailUIText.txtgrp b/mappFramework/Logical/VCShared/TextGroups/MpAuditTrailUIText.txtgrp index 01336c27..ead89b74 100644 --- a/mappFramework/Logical/VCShared/TextGroups/MpAuditTrailUIText.txtgrp +++ b/mappFramework/Logical/VCShared/TextGroups/MpAuditTrailUIText.txtgrp @@ -1,131 +1,135 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/VCShared/TextGroups/MpFileManagerUIText.txtgrp b/mappFramework/Logical/VCShared/TextGroups/MpFileManagerUIText.txtgrp index b8c99c86..285355f6 100644 --- a/mappFramework/Logical/VCShared/TextGroups/MpFileManagerUIText.txtgrp +++ b/mappFramework/Logical/VCShared/TextGroups/MpFileManagerUIText.txtgrp @@ -1,5 +1,5 @@ - + @@ -76,6 +76,8 @@ + + @@ -102,12 +104,14 @@ - + + + @@ -140,6 +144,8 @@ + + @@ -172,5 +178,7 @@ + + \ No newline at end of file diff --git a/mappFramework/Logical/mappView/Layouts/MediumDialog.layout b/mappFramework/Logical/mappView/Layouts/MediumDialog.layout new file mode 100644 index 00000000..f1b7562e --- /dev/null +++ b/mappFramework/Logical/mappView/Layouts/MediumDialog.layout @@ -0,0 +1,6 @@ + + + + + + diff --git a/mappFramework/Logical/mappView/Layouts/Package.pkg b/mappFramework/Logical/mappView/Layouts/Package.pkg index 29f079cb..0fe8ceb5 100644 --- a/mappFramework/Logical/mappView/Layouts/Package.pkg +++ b/mappFramework/Logical/mappView/Layouts/Package.pkg @@ -4,6 +4,7 @@ StandardPage.layout SmallDialog.layout + MediumDialog.layout RecipeDialog.layout LargeDialog.layout PDFViewerDialog.layout diff --git a/mappFramework/Logical/mappView/Resources/Snippets/Recipe.snippet b/mappFramework/Logical/mappView/Resources/Snippets/Recipe.snippet index acdb72ea..d95894eb 100644 --- a/mappFramework/Logical/mappView/Resources/Snippets/Recipe.snippet +++ b/mappFramework/Logical/mappView/Resources/Snippets/Recipe.snippet @@ -4,5 +4,6 @@ + diff --git a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/AuditPageTexts.tmx b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/AuditPageTexts.tmx index cffdac1b..80f267c1 100644 --- a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/AuditPageTexts.tmx +++ b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/AuditPageTexts.tmx @@ -16,15 +16,15 @@ Number of Archives - + - Archiv Einstellungen + Audit Konfiguration - 存档设置 + 审计配置 - Archive Setup + Audit Configuration @@ -170,15 +170,26 @@ Save + + + Audit Konfiguration + + + 审计配置 + + + Audit Configuration + + - Automatisches Archiv einrichten + Automatisches Archivieren - 设置自动存档 + 自动归档 - Set up automatic archiving + Automatic Archiving diff --git a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/FileTexts.tmx b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/FileTexts.tmx index b713bf2d..bec19632 100644 --- a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/FileTexts.tmx +++ b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/FileTexts.tmx @@ -450,7 +450,7 @@ - FIFO-Device + FIFO Device FIFO设备 @@ -459,15 +459,15 @@ FIFO Device - + - FIFO aktivieren + Abbrechen - FIFO使能 + 取消 - FIFO Enable + Cancel @@ -475,12 +475,23 @@ FIFO Option - FIFO + FIFO 选项 FIFO Option + + + Speichern + + + 节省 + + + Save + + FIFO konfigurieren diff --git a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/RecipePageTexts.tmx b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/RecipePageTexts.tmx index 2001f9ac..1e356878 100644 --- a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/RecipePageTexts.tmx +++ b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/RecipePageTexts.tmx @@ -408,61 +408,6 @@ Do you want to continue and overwrite the existing one? Page Up - - - Parameter 1 - - - 参数1 - - - Parameter 1 - - - - - Parameter 2 - - - 参数2 - - - Parameter 2 - - - - - Parameter 3 - - - 参数3 - - - Parameter 3 - - - - - Parameter 4 - - - 参数4 - - - Parameter 4 - - - - - Parameter 5 - - - 参数5 - - - Parameter 5 - - Vorschau @@ -510,147 +455,158 @@ Do you want to continue and overwrite the existing one? Selected Recipe - + - Einstellung 1 + Wert einstellen - 设置1 + 设定值 - Setting 1 + Set Value - + - Einstellung 2 + Zeitstempel - 设置2 + 时间戳 - Setting 2 + Time Stamp - + + + Wert + + + + + + Value + + + - Einstellung 3 + Ja - 设置3 + - Setting 3 + Yes - + - Einstellung 4 + Parameters - 设置4 + 参数 - Setting 4 + Parameters - + - Einstellung 5 + Maschineneinstellungen - 设置5 + 机器设置 - Setting 5 + Machine Settings - + - Wert einstellen + Standarddateien können nicht gelöscht werden - 设定值 + 无法删除默认文件 - Set Value + Default files cannot be deleted - + - Zeitstempel + Rezept - 时间戳 + 配方 - Time Stamp + Recipe - + - Wert + Rezeptliste - Seite {@RecipeCurrentPage} - + 当前页面 {@RecipeCurrentPage} - Value + Recipe List - Page {@RecipeCurrentPage} - + - Ja + Aktualisierung - + 刷新 - Yes + Refresh - + - Parameters + Letztes Rezept fehlt - 参数 + 缺少默认配方 - Parameters + Last Loaded Recipe Missing - + - Maschineneinstellungen + Das letzte geladende Rezept fehlt. Bitte laden Sie eine anderes. - 机器设置 + 缺少默认配方。 请立即创建一个。 - Machine Settings + The last loaded recipe is missing. Please select and load a different one now. - + - Standarddateien können nicht gelöscht werden + Letztes Konfiguration fehlt - 无法删除默认文件 + 缺少默认配方 - Default files cannot be deleted + Last Loaded Configuration Missing - + - Rezept + Das letzte geladende Konfiguration fehlt. Bitte laden Sie eine andere. - 配方 + 缺少默认配方。 请立即创建一个。 - Recipe + The last loaded configuration is missing. Please select and load a different one now. diff --git a/mappFramework/Logical/mappView/Resources/Themes/BuRThemeFlat1/brease/Common.styles b/mappFramework/Logical/mappView/Resources/Themes/BuRThemeFlat1/brease/Common.styles index 2eb6734b..74d30d36 100644 --- a/mappFramework/Logical/mappView/Resources/Themes/BuRThemeFlat1/brease/Common.styles +++ b/mappFramework/Logical/mappView/Resources/Themes/BuRThemeFlat1/brease/Common.styles @@ -157,5 +157,16 @@ backColorScaleArea4="#FFF" backColorScaleArea5="#646464"/> - +