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 @@
+
\ 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 @@
+
\ 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 @@
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
\ 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 @@
-
+