diff --git a/.gitignore b/.gitignore index d351d02d..8f79c1cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,37 +1,8 @@ # Git Repository File Ignore Specifications -# B&R Automation Studio project directory files - -*/AS/System/ -# Ignore Binaries/ directory (the entire folder) -*/Binaries -# Ignore everything INSIDE Diagnosis/ directory -*/Diagnosis/** -# Ignore Temp/ directory -*/Temp - -# Ignore all .set and .isopen files -*/*.set -*/*.isopen # Ignore .zip files, for the moment *.zip -# Exception for Diagnosis/ sub-directories -> these won't be committed anyways -# because there are no files inside that will be committed -# Credit: Jim G. on Stack Overflow https://stackoverflow.com/a/25916709/11402416 -!**/Diagnosis/**/ -# Exception for specific files within Diagnosis/ -#!*.tc - - -# ****************************************************************************** -# Project specific ignore paths -# ****************************************************************************** -# Save watch windows and task trace configurations -!**/Diagnosis/**/*.PVM -!**/Diagnosis/**/*.tc - - # ignore temp files *~ ~* diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index fbdfba47..00000000 --- a/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 B&R Industrial Automation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/mappFramework/.gitignore b/mappFramework/.gitignore new file mode 100644 index 00000000..df653b36 --- /dev/null +++ b/mappFramework/.gitignore @@ -0,0 +1,29 @@ +# Git Repository File Ignore Specifications +# B&R Automation Studio project directory files + +/AS/System/ +# Ignore Binaries/ directory (the entire folder) +/Binaries +# Ignore (all) debugging content +/Diagnosis/** +# But save the watch windows and task trace configurations (if it should stay in the repository) +!/Diagnosis/**/ +!/Diagnosis/**/*.PVM +!/Diagnosis/**/*.tc +# Ignore Temp/ directory +/Temp/ +#Ignore Upgrades +/Upgrades/ +# Ignore all .set and .isopen files +/*.set +/*.isopen +/debug.log + +# Ignore .zip files, for the moment +/*.zip + +# ignore temp files +*~ +~* +*.[Bb]ak +*.[Oo]rig diff --git a/mappFramework/Logical/ChineseHelp/Package.pkg b/mappFramework/Logical/ChineseHelp/Package.pkg index 72b19261..bce57007 100644 --- a/mappFramework/Logical/ChineseHelp/Package.pkg +++ b/mappFramework/Logical/ChineseHelp/Package.pkg @@ -1,5 +1,5 @@  - + mappFramwork.chm diff --git a/mappFramework/Logical/ChineseHelp/mappFramwork.chm b/mappFramework/Logical/ChineseHelp/mappFramwork.chm index b66dc757..014eeb7f 100644 Binary files a/mappFramework/Logical/ChineseHelp/mappFramwork.chm and b/mappFramework/Logical/ChineseHelp/mappFramwork.chm differ diff --git a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.st b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.st index 2eb54dfa..b494db3c 100644 --- a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.st +++ b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmMgr.st @@ -16,7 +16,7 @@ PROGRAM _INIT END_IF // Call action to intialize alarm samples - AlarmSampleInit; + AlarmSampleInit; // Initialize mapp function blocks MpAlarmXCore_0.Enable := TRUE; @@ -29,12 +29,14 @@ PROGRAM _INIT 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'; @@ -53,7 +55,7 @@ PROGRAM _CYCLIC END_IF // Call all cyclic actions - AlarmHandling; + AlarmHandling; GetBacktraceInformation; ExecuteQuery; QueryTableConfig; diff --git a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmSamples.st b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmSamples.st index d8026a4b..552ad5bd 100644 --- a/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmSamples.st +++ b/mappFramework/Logical/Infrastructure/AlarmX/AlarmMgr/AlarmSamples.st @@ -4,18 +4,18 @@ ACTION AlarmSampleInit: // If AlarmExamples.LevelMonitoring gets less than 20 or more than 80, the LevelMonitoringExample alarm will trigger // The Low limit is 20. The LowLow limit is 10. The High limit is 80. The HighHigh limit is 90. - AlarmExamples.LevelMonitoring := 50; + AlarmExamples.LevelMonitoring := 50; // If AlarmExamples.DeviationMonitoring deviates from the setpoint (AlarmExamples.DeviationMonitoringSetpoint) by more than 5 // units in either direction, the DeviationMonitoringExample alarm will trigger - AlarmExamples.DeviationMonitoring := 15; + AlarmExamples.DeviationMonitoring := 15; AlarmExamples.DeviationMonitoringSetpoint := 15; // If AlarmExamples.RateOfChange increases at a rate of more than 5 units per second, the RateOfChangeExample alarm will trigger - AlarmExamples.RateOfChange := 0; + AlarmExamples.RateOfChange := 0; // If AlarmExamples.SnippetValue gets between 50 and 100, an alarm will trigger and the current value will be shown in the alarm text - AlarmExamples.SnippetValue := 10; + AlarmExamples.SnippetValue := 10; END_ACTION diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditAlarms.tmx b/mappFramework/Logical/Infrastructure/Audit/AuditAlarms.tmx new file mode 100644 index 00000000..27643d0d --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/AuditAlarms.tmx @@ -0,0 +1,20 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + Audit/Alarms +
+ + + + Servus Welt! + + + Hello world! + + + Bonjour tout le monde! + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.st b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.st new file mode 100644 index 00000000..2cac84a4 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.st @@ -0,0 +1,118 @@ +//*********************************************************************** +// Copyright: B&R Industrial Automation GmbH +// Author: B&R Industrial Automation GmbH +// Created: Sept 1, 2022 +// Description: Task for audit management. +//*********************************************************************** + +PROGRAM _INIT + + // Create folder for this component on the user file device + DirCreate_0(enable := TRUE, pDevice := ADR('UserPartition'), pName := ADR(LOCAL_FOLDER)); + + // 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 + 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(); + + // Initialize custom events + CustomEvent[0].Type := "Custom Event Type"; + CustomEvent[0].Msg := "Custom Event Message"; + CustomEvent[0].Comment := "Custom Event Comment"; + + CustomEvent[1].Type := "Audit Test"; + CustomEvent[1].Msg := "This is a custom event test msg"; + CustomEvent[1].Comment := "If you see this it was a success!"; + + CustomEvent[2].Type := "Cmd Exe"; + CustomEvent[2].Msg := "The run query command was pressed on the HMI"; + CustomEvent[2].Comment := "Result can be seen in the Query tab"; + + HmiAudit.Status.Query.Name := 'UserEvents'; + HmiAudit.Status.Query.Option := 1; + + // Configuring the query selection, reading the available components + HmiAudit.Parameters.QuerySelection[0] := 'UserXMgr'; + HmiAudit.Parameters.QuerySelection[1] := 'RecipeMgr'; + + IF (ST_ident(ADR(HmiAudit.Parameters.QuerySelection[0]), 0, ADR(ident)) = 0) AND (ST_ident(ADR(HmiAudit.Parameters.QuerySelection[1]), 0, ADR(ident)) = 0) THEN + HmiAudit.Status.DeviceDataProvider[0] := '{"value":"UserEvents","text":"User Events Query"}'; + HmiAudit.Status.DeviceDataProvider[1] := '{"value":"RecipeEvents","text":"Recipe Events Query"}'; + ELSIF (ST_ident(ADR(HmiAudit.Parameters.QuerySelection[0]), 0, ADR(ident)) <> 0) AND (ST_ident(ADR(HmiAudit.Parameters.QuerySelection[1]), 0, ADR(ident)) = 0) THEN + HmiAudit.Status.DeviceDataProvider[0] := '{"value":"RecipeEvents","text":"Recipe Events Query"}'; + ELSIF (ST_ident(ADR(HmiAudit.Parameters.QuerySelection[0]), 0, ADR(ident)) = 0) AND (ST_ident(ADR(HmiAudit.Parameters.QuerySelection[1]), 0, ADR(ident)) <> 0) THEN + HmiAudit.Status.DeviceDataProvider[0] := '{"value":"UserEvents","text":"User Events Query"}'; + END_IF + +END_PROGRAM + +PROGRAM _CYCLIC + + // Call all cyclic actions + ExecuteQuery; + QueryTableConfig; + ArchiveExport; + ArchiveSettings; + ChangeConfiguration; + + // Sample code for how custom events can be triggered. Use custom events as needed around the application for debugging purposes. + IF EDGEPOS(CustomEvent[0].Set) THEN + MpAuditCustomEvent(gMpLinkCustomEvents,CustomEvent[0].Type,CustomEvent[0].Msg,CustomEvent[0].Comment); + END_IF + IF EDGENEG(CustomEvent[1].Set) THEN + MpAuditCustomEvent(gMpLinkCustomEvents,CustomEvent[1].Type,CustomEvent[1].Msg,CustomEvent[1].Comment); + END_IF + + // Change sample variable randomly to trigger a value change event + IF VariableMonitorExample = 0 THEN + VariableMonitorExample := 10.5; + END_IF + + // Error reset + IF NOT MpAuditTrail_0.Error THEN + MpAuditTrail_0.ErrorReset := FALSE; + END_IF + + // Assign MpLinks and HMI connections + MpAuditTrail_0.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailConfig_0.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrail_CEvents.MpLink := ADR(gMpLinkCustomEvents); + + // Call function blocks + MpAuditTrail_0(); + MpAuditTrailConfig_0(); + MpAuditTrail_CEvents(); + +END_PROGRAM + +PROGRAM _EXIT + + // Disable the function blocks to unlink the MpLinks + MpAuditTrail_0.Enable := FALSE; + MpAuditTrailConfig_0.Enable := FALSE; + MpAuditTrail_CEvents.Enable := FALSE; + + // Call function blocks + MpAuditTrail_0(); + MpAuditTrailConfig_0(); + MpAuditTrail_CEvents(); + +END_PROGRAM + diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.typ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.typ new file mode 100644 index 00000000..0d8bdf5c --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.typ @@ -0,0 +1,73 @@ + +TYPE + AuditQueryHMIType : STRUCT (*Datatype for the structure which rearranges the query data from AuditQuery into a structure of arrays for easy connection to the Table widget in mapp View*) + EvTime : ARRAY[0..MAX_QUERY_RESULTS]OF DATE_AND_TIME; (*ActiveAudits query, Event-Time column*) + Text : ARRAY[0..MAX_QUERY_RESULTS]OF WSTRING[100]; (*ActiveAudits query, Text column*) + DText : ARRAY[0..MAX_QUERY_RESULTS]OF WSTRING[100]; (*ActiveAudits query, Display Text column*) + Op : ARRAY[0..MAX_QUERY_RESULTS]OF WSTRING[100]; (*ActiveAudits query, Operator-Name column*) + QueryCount : USINT; (*Count of query results for building the query table configuration string*) + Name : STRING[80]; (*Name of the query to be executed*) + Option : USINT; (*Index value of the selected query type in the dropdown on the query tab*) + END_STRUCT; + ActiveAuditStateEnum : + ( (*Enumeration for the state for the query state machine*) + ACTIVE_AUDIT_WAIT, (*Wait state*) + ACTIVE_AUDIT_QUERY, (*State to query the Audit data*) + ACTIVE_AUDIT_NEXT (*State to check if more Audits meet the query criteria and need to be queried*) + ); + AuditCustomEventType : STRUCT (*Structure for custom events handling*) + Set : BOOL; (*Trigger the assigned function*) + Type : WSTRING[100]; (*Entered when creating the entry under %typ*) + Msg : WSTRING[100]; (*Entered when creating the entry under %msg *) + Comment : WSTRING[100]; (*Entered when creating the entry under %cmt *) + END_STRUCT; + AuditQueryType : STRUCT (*Structure for query results and status*) + State : ActiveAuditStateEnum; (*State variable for the query state machine*) + LastUpdateCount : UDINT; (*Previous count of query results. Used to check for new query data. *) + UpdateCountRecipe : UDINT; (*Count of query results. Increases each time new results are availble. *) + UpdateCount : UDINT; (*Count of query results. Increases each time new results are availble. *) + Audits : ARRAY[0..MAX_QUERY_RESULTS]OF AuditType; (*Query data*) + Next : BOOL; (*Trigger to query the next data, if there are more results than MAX_QUERY_RESULTS*) + END_STRUCT; + AuditHmiInterfaceType : STRUCT (*Structure to hold commands and status from the HMI*) + Commands : AuditCommandsType; (*HMI commands*) + Parameters : AuditParType; (*HMI parameters*) + Status : {REDUND_UNREPLICABLE} AuditStatusType; (*HMI status*) + END_STRUCT; + AuditCommandsType : STRUCT (*Structure to hold the commands from the HMI*) + ExportArchives : BOOL; (*Triggers an Audit export of the Audit history. Connected to a button on the HMI. *) + RunQuery : BOOL; (*Triggers the query to run. Connected to a button on the HMI. *) + SaveConfig : BOOL; (*Starts the configuration for archives*) + END_STRUCT; + AuditStatusType : STRUCT (*Structure to hold status information from the mapp View HMI. (This structure is not compatible/relevant if you are using a VC4 visualization)*) + AuditSortCfg : STRING[1000]; (*Sort configuration for the AuditList widget*) + AuditFilterCfg : STRING[1000]; (*Filter configuration for the AuditList widget*) + TableConfig : ARRAY[0..1]OF STRING[255]; (*Table configuration for the Audit query Table*) + Query : AuditQueryHMIType; (*Structure which rearranges the query data from AuditQuery into a structure of arrays for easy connection to the Table widget*) + CustomEventSortCfg : STRING[1000]; (*Sort configuration for the AuditList Custom Events widget*) + CustomEventsFilterCfg : STRING[1000]; (*Filter configuration for the AuditList Custom Events widget*) + ArchiveAvailable : BOOL; (*At least 1 archive is available for export*) + NumberOfArchives : UINT; (*How many archives are available for export*) + DeviceDataProvider : ARRAY[0..1]OF STRING[100]; (*Data provider for the file device selector*) + END_STRUCT; + AuditParType : STRUCT (*Structure to hold parameter data for the HMI*) + ArchiveSettings : AuditArchiveParType; (*Parameter for archive configuration*) + QuerySelection : ARRAY[0..MAX_QUERIES]OF STRING[10]; (*The selection in the query dropdown on the query tab of the Audit content*) + END_STRUCT; + AuditArchiveParType : STRUCT (*Automatic archive settings*) + Enable : BOOL; (*Enable automatic archive feature*) + MaxSize : UDINT; (*Name prefix for each automatic backup file*) + Mode : MpAuditArchiveModeEnum; (*Mode (daily, Mo-Fr or by batch)*) + Hour : USINT; (*Time (hour)*) + Minute : USINT; (*Time (minutes)*) + FileType : MpAuditFileTypeEnum := mpAUDIT_FILE_TYPE_XML; (*File type selection (XML, TXT, PDF)*) + END_STRUCT; + AuditType : STRUCT (*Structure to hold the Audit data for the query results*) + EvTime : DATE_AND_TIME; (*ActiveAudits query, Event-Time column*) + Text : WSTRING[100]; (*ActiveAudits query, Text column*) + DText : WSTRING[100]; (*ActiveAudits query, Display Text column*) + Op : WSTRING[100]; (*ActiveAudits query, Operator-Name column*) + END_STRUCT; +END_TYPE + +(*Enumerations*) diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.var b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.var new file mode 100644 index 00000000..51f5ecce --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/AuditMgr.var @@ -0,0 +1,28 @@ +(*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*) +END_VAR +(*Constants*) +VAR CONSTANT + MAX_QUERY_RESULTS : USINT := 19; (*Maximum number of query results (Value+1)*) + LOCAL_FOLDER : STRING[10] := 'Audit'; (*Folder name on the file device for UserX files*) + MAX_CUSTOM_EVENTS : USINT := 9; (*Maximum number of custom events*) + MAX_QUERIES : USINT := 2; (*Maximum number of configured queries*) +END_VAR +(*Structure Types*) +VAR + HmiAudit : AuditHmiInterfaceType; (*HMI interface structure*) + CustomEvent : ARRAY[0..MAX_CUSTOM_EVENTS] OF AuditCustomEventType; (*Custom events*) + AuditQuery : {REDUND_UNREPLICABLE} AuditQueryType; (*Query results and status*) + AuditTrailConfig : MpAuditTrailConfigType; (*Configuration structure for changing archiving setup*) +END_VAR +(*Variables*) +VAR + i : USINT; (*Index for loops*) + ident : UDINT; (*Identifier for task deployment*) + VariableMonitorExample : REAL; (*Used for the variable monitor example*) +END_VAR diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ChangeConfiguration.st b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ChangeConfiguration.st new file mode 100644 index 00000000..101bf3d4 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ChangeConfiguration.st @@ -0,0 +1,30 @@ +ACTION ChangeConfiguration: + + MpAuditTrailConfig_0.MpLink := ADR(gMpLinkAuditTrail); + MpAuditTrailConfig_0.Configuration := ADR(AuditTrailConfig); + + IF (MpAuditTrailConfig_0.Error = TRUE) THEN + IF (MpAuditTrailConfig_0.StatusID = mpAUDIT_ERR_CONFIG_LOAD) THEN + LoadAuditConfiguration; + END_IF + MpAuditTrailConfig_0.Load := FALSE; + MpAuditTrailConfig_0.Save := FALSE; + MpAuditTrailConfig_0.ErrorReset := TRUE; + END_IF + + MpAuditTrailConfig_0(); + MpAuditTrailConfig_0.ErrorReset := FALSE; + + IF (MpAuditTrailConfig_0.CommandDone = TRUE) THEN + IF (MpAuditTrailConfig_0.Load = TRUE) THEN + LoadAuditConfiguration; + END_IF + // after save the AuditTrail needs to restart + IF (MpAuditTrailConfig_0.Save = TRUE) THEN + MpAuditTrail_0.Enable := FALSE; + END_IF + MpAuditTrailConfig_0.Load := FALSE; + MpAuditTrailConfig_0.Save := FALSE; + END_IF + +END_ACTION diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ExecuteQuery.st b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ExecuteQuery.st new file mode 100644 index 00000000..0837991f --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/ExecuteQuery.st @@ -0,0 +1,67 @@ +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(); + + CASE (AuditQuery.State) OF + ACTIVE_AUDIT_WAIT: + // Wait until the RunQuery command is triggered from the HMI. + // 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 + // 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; + HmiAudit.Commands.RunQuery := FALSE; + IF (HmiAudit.Status.Query.Name = 'UserEvents') THEN + HmiAudit.Status.Query.Option := 0; + ELSIF (HmiAudit.Status.Query.Name = 'RecipeEvents') THEN + HmiAudit.Status.Query.Option := 1; + END_IF + + AuditQuery.State := ACTIVE_AUDIT_QUERY; + END_IF + + 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 + // 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; + 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; + AuditQuery.State := ACTIVE_AUDIT_NEXT; + END_IF + + ACTIVE_AUDIT_NEXT: + IF (AuditQuery.Next = TRUE) 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; + AuditQuery.State := ACTIVE_AUDIT_QUERY; + END_IF + END_CASE + + // Convert the query results into arrays that can easily be bound to the Table widget in mapp View + FOR i := 0 TO MAX_QUERY_RESULTS DO + HmiAudit.Status.Query.EvTime[i] := AuditQuery.Audits[i].EvTime; + HmiAudit.Status.Query.Op[i] := AuditQuery.Audits[i].Op; + HmiAudit.Status.Query.Text[i] := AuditQuery.Audits[i].Text; + HmiAudit.Status.Query.DText[i] := AuditQuery.Audits[i].DText; + END_FOR + +END_ACTION diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/HMIActions.st new file mode 100644 index 00000000..7247fef3 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/HMIActions.st @@ -0,0 +1,77 @@ +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; + + IF (HmiAudit.Commands.ExportArchives AND MpAuditTrail_0.CommandDone) THEN + HmiAudit.Commands.ExportArchives := FALSE; + END_IF + +END_ACTION + +ACTION ArchiveSettings: + + // Audit Trail Config implementation + IF (HmiAudit.Commands.SaveConfig = TRUE) THEN + HmiAudit.Commands.SaveConfig := FALSE; + SaveAuditConfiguration; + MpAuditTrailConfig_0.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; + END_IF + +END_ACTION + +ACTION SaveAuditConfiguration: + + // Assign current parameters from the HMI structure to AuditTrail configuration before saving it + AuditTrailConfig.Archive.Time := UDINT_TO_TOD((((USINT_TO_UDINT(HmiAudit.Parameters.ArchiveSettings.Hour) * 60) + + HmiAudit.Parameters.ArchiveSettings.Minute) * 60) * 1000); + AuditTrailConfig.Archive.Enable := HmiAudit.Parameters.ArchiveSettings.Enable; + AuditTrailConfig.Archive.MaxSize := HmiAudit.Parameters.ArchiveSettings.MaxSize; + AuditTrailConfig.Archive.Mode := HmiAudit.Parameters.ArchiveSettings.Mode; + AuditTrailConfig.Export.FileType := HmiAudit.Parameters.ArchiveSettings.FileType; + + END_ACTION + +ACTION LoadAuditConfiguration: + + // Assign current parameters from the configuration to the HMI structure + HmiAudit.Parameters.ArchiveSettings.Hour := UDINT_TO_USINT(TOD_TO_UDINT(AuditTrailConfig.Archive.Time) / 1000 / 60 / 60); + HmiAudit.Parameters.ArchiveSettings.Minute := UDINT_TO_USINT(TOD_TO_UDINT(AuditTrailConfig.Archive.Time) / 1000 / 60) - + (HmiAudit.Parameters.ArchiveSettings.Hour * 60); + HmiAudit.Parameters.ArchiveSettings.Enable := AuditTrailConfig.Archive.Enable; + HmiAudit.Parameters.ArchiveSettings.MaxSize := AuditTrailConfig.Archive.MaxSize; + HmiAudit.Parameters.ArchiveSettings.Mode := AuditTrailConfig.Archive.Mode; + HmiAudit.Parameters.ArchiveSettings.FileType := AuditTrailConfig.Export.FileType; + +END_ACTION + +ACTION QueryTableConfig: + + // Configure visible list + HmiAudit.Status.TableConfig[0] := '{ "specRows": [{"from":'; + HmiAudit.Status.Query.QueryCount := 0; + FOR i := 0 TO 9 DO + IF HmiAudit.Status.Query.Text[i] <> "" THEN + HmiAudit.Status.Query.QueryCount := i + 1; + END_IF + END_FOR + brsitoa((HmiAudit.Status.Query.QueryCount), ADR(HmiAudit.Status.TableConfig[0]) + brsstrlen(ADR(HmiAudit.Status.TableConfig[0]))); + brsstrcat(ADR(HmiAudit.Status.TableConfig[0]), ADR(',"to":19, "visible":false}]')); + + // Hide operator column for the recipe query + IF (HmiAudit.Status.Query.Option = 0) THEN + brsstrcat(ADR(HmiAudit.Status.TableConfig[0]), ADR(', "specColumns": [ {"from":1, "to":1, "visible":true}]')); + ELSIF (HmiAudit.Status.Query.Option = 1) THEN + brsstrcat(ADR(HmiAudit.Status.TableConfig[0]), ADR(', "specColumns": [ {"from":1, "to":1, "visible":false}]')); + END_IF + + brsstrcat(ADR(HmiAudit.Status.TableConfig[0]), ADR('}')); + +END_ACTION diff --git a/mappFramework/Logical/Infrastructure/Audit/AuditMgr/IEC.prg b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/IEC.prg new file mode 100644 index 00000000..a19ea54b --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/AuditMgr/IEC.prg @@ -0,0 +1,12 @@ + + + + + AuditMgr.st + AuditMgr.typ + AuditMgr.var + HMIActions.st + ExecuteQuery.st + ChangeConfiguration.st + + \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/CommonText/Package.pkg b/mappFramework/Logical/Infrastructure/Audit/CommonText/Package.pkg new file mode 100644 index 00000000..99fb860f --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/CommonText/Package.pkg @@ -0,0 +1,10 @@ + + + + + TxtUserF.tmx + TxtRecipeF.tmx + TxtFileF.tmx + TxtBackupF.tmx + + \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtBackupF.tmx b/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtBackupF.tmx new file mode 100644 index 00000000..5a1a7f0a --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtBackupF.tmx @@ -0,0 +1,45 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/SysF/Backup +
+ + + + Sicherungserstellung gestartet {&dev}:{&file} + + + 备份创建开始 {&dev}:{&file} + + + Backup creation started {&dev}:{&file} + + + Bonjour tout le monde! + + + + + Sicherungserstellung abgeschlossen {&dev}:{&file} + + + 备份创建完成 {&dev}:{&file} + + + Backup creation completed {&dev}:{&file} + + + + + Sicherungsinstallation {&dev}:{&file} + + + 备份安装 {&dev}:{&file} + + + Backup installing {&dev}:{&file} + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtFileF.tmx b/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtFileF.tmx new file mode 100644 index 00000000..a71d003f --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtFileF.tmx @@ -0,0 +1,144 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/SysF/File +
+ + + + Ein Ordner/eine Datei wurde erstellt: {&file} + + + 创建了一个文件夹/文件:{&file} + + + A folder/file was created: {&file} + + + Bonjour tout le monde! + + + + + Ein Ordner/Datei wurde überschrieben: {&file} + + + 文件夹/文件被覆盖:{&file} + + + A folder/file was overwritten: {&file} + + + + + Ein Ordner/Datei wurde hinzugefügt: {&file} + + + 添加了一个文件夹/文件:{&file} + + + A folder/file was added: {&file} + + + + + Ein Ordner/Datei wurde gelöscht: {&file} + + + 文件夹/文件已删除:{&file} + + + A folder/file was deleted: {&file} + + + + + Ein Ordner/Datei wurde umbenannt: {&file} + + + 文件夹/文件已重命名:{&file} + + + A folder/file was renamed: {&file} + + + + + Ein Ordner/Datei wurde gelesen: {&file} + + + 已读取文件夹/文件:{&file} + + + A folder/file was read: {&file} + + + + + Ein Ordner/Datei wurde kopiert: {&file} + + + 复制了一个文件夹/文件:{&file} + + + A folder/file was copied: {&file} + + + + + Ein Ordner/Datei wurde ausgeschnitten: {&file} + + + 文件夹/文件被剪切:{&file} + + + A folder/file was cut: {&file} + + + + + Ein Ordner/Datei wurde zuerst kopiert und dann eingefügt. Ein neuer Ordner/eine neue Datei wurde erstellt. + + + 文件夹/文件首先被复制然后粘贴。 创建了一个新文件夹/文件。 + + + A folder/file was first copied and then pasted. A new folder/file was created. + + + + + Ein Ordner/Datei wurde zuerst kopiert und dann eingefügt. Der vorhandene Ordner/Datei wurde überschrieben. + + + 文件夹/文件首先被复制然后粘贴。 现有文件夹/文件被覆盖。 + + + A folder/file was first copied and then pasted. The existing folder/file was overwritten. + + + + + Ein Ordner/Datei wurde gesperrt: {&file} + + + 文件夹/文件被锁定:{&file} + + + A folder/file was locked: {&file} + + + + + Ein Ordner/Datei wurde entsperrt: {&file} + + + 文件夹/文件已解锁:{&file} + + + A folder/file was unlocked: {&file} + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtRecipeF.tmx b/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtRecipeF.tmx new file mode 100644 index 00000000..037c9159 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtRecipeF.tmx @@ -0,0 +1,64 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/SysF/Recipe +
+ + + + Start Laden von Rezept {&dev}:{&file} + + + 开始加载配方 {&dev}:{&file} + + + Start Loading Recipe {&dev}:{&file} + + + + + Ende Laden von Rezept + + + 结束加载配方 + + + End Loading Recipe + + + + + Rezept {&dev}:{&file} gespeichert + + + 保存的配方 {&dev}:{&file} + + + Saved Recipe {&dev}:{&file} + + + + + Rezept {&dev}:{&old} umbenannt auf {&new} + + + 将配方 {dev}:{old} 重命名为 {new} + + + Renamed Recipe {&dev}:{&old} to {&new} + + + + + Rezept {&dev}:{&file} gelöscht + + + 已删除配方 {&dev}:{&file} + + + Deleted Recipe {&dev}:{&file} + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtUserF.tmx b/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtUserF.tmx new file mode 100644 index 00000000..deab74c2 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/CommonText/TxtUserF.tmx @@ -0,0 +1,163 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/SysF/User +
+ + + + Angemeldet + + + 登录 + + + logged in + + + + + Abgemeldet + + + 登出 + + + logged out + + + + + Abgemeldet (Timeout) + + + 已注销(超时) + + + was logged out (timeout) + + + + + Anwender {&usr} zugefügt + + + 添加用户 {&usr} + + + added user {&usr} + + + + + Anwender {&usr} gelöscht + + + 已删除用户 {&usr} + + + deleted user {&usr} + + + + + Anwender {&usr} gesperrt + + + 锁定用户 {&usr} + + + locked user {&usr} + + + + + Anwender {&usr} entsperrt + + + 解锁用户 {&usr} + + + unlocked user {&usr} + + + + + Gesperrt (inkorrektes Passwort) + + + 被锁定(密码错误) + + + got locked (incorrect password) + + + + + Passwort geändert + + + 已更改密码 + + + has changed password + + + + + Falscher Name eingegeben + + + 输入了错误的名称 + + + Incorrect name was entered + + + + + Falsches Passwort eingegeben + + + 输入了错误的密码 + + + Incorrect password was entered + + + + + Neue Rolle {&usr} zugefügt + + + 添加了新角色 {&usr} + + + added new role {&usr} + + + + + Rolle {&usr} gelöscht + + + 已删除角色 {&usr} + + + deleted role {&usr} + + + + + Ungültige Anmeldeinformationen wurden eingegeben + + + 输入的凭据无效 + + + Invalid credentials entered + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/DisplayText/Package.pkg b/mappFramework/Logical/Infrastructure/Audit/DisplayText/Package.pkg new file mode 100644 index 00000000..f19ad51d --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/DisplayText/Package.pkg @@ -0,0 +1,8 @@ + + + + + TxtEventF.tmx + TxtDatapoints.tmx + + \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/DisplayText/TxtDatapoints.tmx b/mappFramework/Logical/Infrastructure/Audit/DisplayText/TxtDatapoints.tmx new file mode 100644 index 00000000..364a0d30 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/DisplayText/TxtDatapoints.tmx @@ -0,0 +1,20 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/Display/DP +
+ + + + Beispieltemperature + + + 样品温度 + + + Sample Temperature + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/DisplayText/TxtEventF.tmx b/mappFramework/Logical/Infrastructure/Audit/DisplayText/TxtEventF.tmx new file mode 100644 index 00000000..da981758 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/DisplayText/TxtEventF.tmx @@ -0,0 +1,152 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/Display/SysF/Event +
+ + + + {&op} {=$MpAudit/Display/SysF/Event/{&ev}} + + + {&op} {=$MpAudit/Display/SysF/Event/{&ev}} + + + {&op} {=$MpAudit/Display/SysF/Event/{&ev}} + + + + + {=$MpAudit/SysF/User/{&act}} + + + {=$MpAudit/SysF/User/{&act}} + + + {=$MpAudit/SysF/User/{&act}} + + + + + {=$MpAudit/Display/DP/{&dpid}} Wert von {&old|.2f}{&old[UNIT=%s]} auf {&new|.2f}{&new[UNIT=%s]} geändert + + + {=$MpAudit/Display/DP/{&dpid}} 从改变值 {&old|.2f}{&old[UNIT=%s]} 至 {&new|.2f}{&new[UNIT=%s]} + + + {=$MpAudit/Display/DP/{&dpid}} changed value from {&old|.2f}{&old[UNIT=%s]} to {&new|.2f}{&new[UNIT=%s]} + + + + + hat Wert (UserID: {&dpid}) von {&old} auf {&new} geändert + + + 从改变值 (UserID: {&dpid}) 从 {&old} 至 {&new} + + + changed value of (UserID: {&dpid}) from {&old} to {&new} + + + + + {=$MpAudit/Custom/{&typ}} + + + {=$MpAudit/Custom/{&typ}} + + + {=$MpAudit/Custom/{&typ}} + + + + + hat Wert {=$MpAudit/DP/{&dpid}} von {&old|.2f}{&old[UNIT=%s]} auf {&new|.2f}{&new[UNIT=%s]} geändert + + + 从改变值 {=$MpAudit/DP/{&dpid}} 从 {&old|.2f}{&old[UNIT=%s]} 至 {&new|.2f}{&new[UNIT=%s]} + + + changed value of {=$MpAudit/DP/{&dpid}} from {&old|.2f}{&old[UNIT=%s]} to {&new|.2f}{&new[UNIT=%s]} + + + + + Alarm {&name} Status geändert: {&stold} -> {&stnew} + + + 警报 {&name} 改变状态: {&stold} 至 {&stnew} + + + Alarm {&name} changed state: {&stold} to {&stnew} + + + + + {=$MpAudit/SysF/Recipe/{&act}} + + + {=$MpAudit/SysF/Recipe/{&act}} + + + {=$MpAudit/SysF/Recipe/{&act}} + + + + + PackML Zustandsänderung: von {&old} zu {&new} + + + PackML 状态变化: {&old} 至 {&new} + + + PackML State-Change: {&old} to {&new} + + + + + PackML Modusänderung: von {&old} zu {&new} + + + PackML 模式改变: {&old} 至 {&new} + + + PackML Mode-Change: {&old} to {&new} + + + + + PackML Substatus-Änderung: von {&old} zu {&new} + + + PackML 子状态变化: {&old} 至 {&new} + + + PackML Substate-Change: {&old} to {&new} + + + + + mapp File + + + {=$MpAudit/SysF/File/{&act}} + + + {=$MpAudit/SysF/File/{&act}} + + + + + mapp Backup + + + {=$MpAudit/SysF/Backup/{&act}} + + + {=$MpAudit/SysF/Backup/{&act}} + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/ExportedText/Package.pkg b/mappFramework/Logical/Infrastructure/Audit/ExportedText/Package.pkg new file mode 100644 index 00000000..f19ad51d --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/ExportedText/Package.pkg @@ -0,0 +1,8 @@ + + + + + TxtEventF.tmx + TxtDatapoints.tmx + + \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/ExportedText/TxtDatapoints.tmx b/mappFramework/Logical/Infrastructure/Audit/ExportedText/TxtDatapoints.tmx new file mode 100644 index 00000000..4055c0c3 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/ExportedText/TxtDatapoints.tmx @@ -0,0 +1,20 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/DP +
+ + + + Beispieltemperature + + + 样品温度 + + + Sample Temperature + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/ExportedText/TxtEventF.tmx b/mappFramework/Logical/Infrastructure/Audit/ExportedText/TxtEventF.tmx new file mode 100644 index 00000000..35083b54 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/ExportedText/TxtEventF.tmx @@ -0,0 +1,152 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/SysF/Event +
+ + + + {&evtime[TIME=%u%R]} {&op} {=$MpAudit/SysF/Event/{&ev}} + + + {&evtime[TIME=%u%R]} {&op} {=$MpAudit/SysF/Event/{&ev}} + + + {&evtime[TIME=%u%R]} {&op} {=$MpAudit/SysF/Event/{&ev}} + + + + + {=$MpAudit/SysF/User/{&act}} + + + {=$MpAudit/SysF/User/{&act}} + + + {=$MpAudit/SysF/User/{&act}} + + + + + hat Wert {=$MpAudit/DP/{&dpid}} von {&old|.2f}{&old[UNIT=%s]} auf {&new|.2f}{&new[UNIT=%s]} geändert + + + 改变的值 {=$MpAudit/DP/{&dpid}} 从 {&old|.2f}{&old[UNIT=%s]} 至 {&new|.2f}{&new[UNIT=%s]} + + + changed value of {=$MpAudit/DP/{&dpid}} from {&old|.2f}{&old[UNIT=%s]} to {&new|.2f}{&new[UNIT=%s]} + + + + + hat Wert (UserID: {&dpid}) von {&old} auf {&new} geändert + + + 改变的值 (UserID: {&dpid}) 从 {&old} 至 {&new} + + + changed value of (UserID: {&dpid}) from {&old} to {&new} + + + + + {=$MpAudit/Custom/{&typ}} + + + {=$MpAudit/Custom/{&typ}} + + + {=$MpAudit/Custom/{&typ}} + + + + + hat Wert {=$MpAudit/DP/{&dpid}} von {&old|.2f}{&old[UNIT=%s]} auf {&new|.2f}{&new[UNIT=%s]} geändert + + + 改变的值 {=$MpAudit/DP/{&dpid}} 从 {&old|.2f}{&old[UNIT=%s]} 至 {&new|.2f}{&new[UNIT=%s]} + + + changed value of {=$MpAudit/DP/{&dpid}} from {&old|.2f}{&old[UNIT=%s]} to {&new|.2f}{&new[UNIT=%s]} + + + + + Alarm {&name} Status geändert: {&stold} -> {&stnew} + + + 警报 {&name} 改变状态: {&stold} 至 {&stnew} + + + Alarm {&name} changed state: {&stold} to {&stnew} + + + + + {=$MpAudit/SysF/Recipe/{&act}} + + + {=$MpAudit/SysF/Recipe/{&act}} + + + {=$MpAudit/SysF/Recipe/{&act}} + + + + + PackML Zustandsänderung: von {&old} zu {&new} + + + PackML 状态变化: {&old} 至 {&new} + + + PackML State-Change: {&old} to {&new} + + + + + PackML Modusänderung: von {&old} zu {&new} + + + PackML 模式改变: {&old} 至 {&new} + + + PackML Mode-Change: {&old} to {&new} + + + + + PackML Substatus-Änderung: von {&old} zu {&new} + + + PackML 子状态变化: {&old} 至 {&new} + + + PackML Substate-Change: {&old} to {&new} + + + + + mapp File + + + {=$MpAudit/SysF/File/{&act}} + + + {=$MpAudit/SysF/File/{&act}} + + + + + mapp Backup + + + {=$MpAudit/SysF/Backup/{&act}} + + + {=$MpAudit/SysF/Backup/{&act}} + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Audit/Package.pkg b/mappFramework/Logical/Infrastructure/Audit/Package.pkg new file mode 100644 index 00000000..fb93965e --- /dev/null +++ b/mappFramework/Logical/Infrastructure/Audit/Package.pkg @@ -0,0 +1,11 @@ + + + + + AuditMgr + AuditAlarms.tmx + ExportedText + DisplayText + CommonText + + \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.st b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.st index 5cbb4524..a763d0d3 100644 --- a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.st +++ b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.st @@ -27,8 +27,10 @@ PROGRAM _INIT MpBackupCoreConfig_0.Enable := TRUE; MpBackupCoreConfig_0.MpLink := ADR(gMpLinkBackupCore); - MpBackupCoreConfig_0.Configuration := ADR(MpBackupConfiguration); - MpBackupCoreConfig_0.Load := TRUE; + MpBackupCoreConfig_0.Configuration := ADR(MpBackupConfiguration); + + MpBackupCoreConfig_0.Load := NOT(DiagCpuIsARsim() OR DiagCpuIsSimulated()); + MpBackupCoreConfig_0(); HmiBackup.Status.DeviceDataProvider[0] := '{"value":"mappBackupFiles","text":"CF/PLC"}'; @@ -36,27 +38,41 @@ PROGRAM _INIT END_PROGRAM PROGRAM _CYCLIC - - CASE BackupState OF - BACKUP_IDLE: - HmiBackup.Status.CreateAllowed := NOT(MpBackupCore_0.Info.Automatic.Backup.InProgress); - HmiBackup.Status.Busy := FALSE; - IF (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 (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; + 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 (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; @@ -64,96 +80,122 @@ PROGRAM _CYCLIC BackupState := BACKUP_DELETING; ELSIF (HmiBackup.Commands.SaveConfig = TRUE) THEN HmiBackup.Commands.SaveConfig := FALSE; - SaveBackupConfiguration; - MpBackupCoreConfig_0.Save := TRUE; + 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; - ELSIF DiagCpuIsARsim() OR DiagCpuIsSimulated() THEN - HmiBackup.Status.SimulationActive := TRUE; - HmiBackup.Status.CreateAllowed := FALSE; - HmiBackup.Status.RestoreAllowed := FALSE; - END_IF + HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.SelectedIndex; + IF (brsstrlen(ADR(MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name)) > 0) THEN + MpBackupCore_0.Name := ADR(MpFileManagerUIConnect.File.List.Items[HmiBackup.Status.SelectedIndex].Name); + MpBackupCore_0.RequestInfo := TRUE; + END_IF + END_IF - BACKUP_CREATING: - IF (MpBackupCore_0.CommandDone = TRUE) THEN + 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_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; - 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; - MpBackupCore_0.Create := FALSE; - MpBackupCore_0.Install := FALSE; - MpBackupCore_0.RequestInfo := FALSE; - END_IF + 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; - MpBackupCore_0.Create := FALSE; - MpBackupCore_0.Install := FALSE; - MpBackupCore_0.RequestInfo := FALSE; - 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 + 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 + 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 + BackupState := BACKUP_IDLE; + END_IF END_CASE + + BACKUP_SIM: + HmiBackup.Status.SimulationActive := TRUE; - BACKUP_ERROR: - IF MpBackupCore_0.Info.Diag.StatusID.ID = mpBACKUP_ERR_CREATE_FAILED THEN + 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 THEN + IF HmiBackup.Commands.Reset OR (MpBackupCore_0.Info.Diag.StatusID.ID = -1064159486) THEN HmiBackup.Commands.Reset := FALSE; MpBackupCore_0.ErrorReset := TRUE; - BackupState := BACKUP_IDLE; + BackupState := BACKUP_IDLE; + ELSIF ((MpBackupCore_0.Info.Diag.StatusID.ID = 0) AND (MpBackupCore_0.Error = FALSE)) THEN + BackupState := BACKUP_IDLE; END_IF - END_CASE + END_CASE - // Reset any errors caused by requesting information - IF ((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 (MpBackupCore_0.Error = FALSE) THEN - MpBackupCore_0.ErrorReset := FALSE; + // 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 + END_IF - HmiBackup.Status.RestoreAllowed := (MpFileManagerUIConnect.File.PathInfo.FolderCount > 0) AND NOT(MpBackupCore_0.Info.Automatic.Backup.InProgress); + 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) AND (MpBackupCore_0.Info.Project.Requested.Name <> ''); // Call all actions - FileManager; - ChangeConfiguration; + FileManager; + IF NOT DiagCpuIsARsim() THEN + ChangeConfiguration; + END_IF + FormatDeviceDataProvider; // Assign MpLinks @@ -165,7 +207,6 @@ PROGRAM _CYCLIC MpBackupCore_0(); MpFileManagerUI_0(); MpBackupCoreConfig_0(); - END_PROGRAM PROGRAM _EXIT diff --git a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.typ b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.typ index f05ce3e8..973c7fd6 100644 --- a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.typ +++ b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/BackupMgr.typ @@ -9,6 +9,7 @@ TYPE BackupHmiCommandsType : STRUCT (*Structure to hold the commands from the HMI*) Create : BOOL; (*Create a backup*) Restore : BOOL; (*Restore a backup*) + Update : BOOL; (*Install an update*) Delete : BOOL; (*Delete a backup*) SaveConfig : BOOL; (*Save automatic backup configuration settings*) Reset : BOOL; (*Error reset*) @@ -24,6 +25,7 @@ TYPE Error : BOOL; (*Error flag*) CreateAllowed : BOOL; (*Bit to indicate it is allowable to create a backup right now*) RestoreAllowed : BOOL; (*Bit to indicate it is allowable to restore a backup right now*) + BackupCtrlEnabled : BOOL; (*Disable control panel for Backup with in Sim*) FileNames : ARRAY[0..49]OF STRING[80]; (*Existing backup file names*) TimeStamps : ARRAY[0..49]OF DATE_AND_TIME; (*Time stamps for existing backups*) Size : {REDUND_UNREPLICABLE} ARRAY[0..49]OF UDINT; (*Sizes of existing backup files*) @@ -32,9 +34,10 @@ TYPE TableConfig : ARRAY[0..1]OF STRING[120]; (*Table configuration for the list of available backups*) SimulationActive : BOOL; (*Flag for if simulation is active*) SelectedIndex : USINT; (*Index of the selected backup file*) - LastSelectedIndex : USINT; (*Index of the last selected backup file*) + LastSelectedIndex : USINT := 255; (*Index of the last selected backup file*) LastSelectedDeviceIndex : UINT; (*Index of the last selected file device. Compared with MpFileManagerUIConnect.DeviceList.SelectedIndex*) FileOverMax : BOOL; (*Active when more than 50 items detected*) + Update : MpBackupAutoUpdateInfoType; END_STRUCT; AutomaticBackupType : STRUCT (*Automatic backup settings*) Enable : BOOL; (*Enable automatic backup feature*) @@ -68,8 +71,11 @@ TYPE ( (*States for backup state machine*) BACKUP_IDLE, (*Wait state*) BACKUP_CREATING, (*Creating a backup*) + BACKUP_REFRESHING_LIST, (*Refreshing backup list*) BACKUP_RESTORING, (*Restoring a backup*) + BACKUP_UPDATING, (*Installing a new version*) BACKUP_DELETING, (*Deleting a backup*) + BACKUP_SIM, (*CPU in simulation mode, don't do anything*) BACKUP_ERROR (*Error state*) ); END_TYPE diff --git a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/HMIActions.st index 848713c3..df4dbeba 100644 --- a/mappFramework/Logical/Infrastructure/Backup/BackupMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/Backup/BackupMgr/HMIActions.st @@ -28,11 +28,11 @@ ACTION FormatDeviceDataProvider: // Configure visible file list ItemCount := MpFileManagerUIConnect.File.PathInfo.FileCount + MpFileManagerUIConnect.File.PathInfo.FolderCount; - HmiBackup.Status.TableConfig[1] := '{ "specRows": [{"from":'; + HmiBackup.Status.TableConfig[1] := '{ "specRows": [{"from":'; brsitoa((ItemCount), ADR(HmiBackup.Status.TableConfig[1]) + brsstrlen(ADR(HmiBackup.Status.TableConfig[1]))); brsstrcat(ADR(HmiBackup.Status.TableConfig[1]), ADR(',"to":50, "visible":false}]}')); - HmiBackup.Status.FileOverMax := ItemCount > 50; + HmiBackup.Status.FileOverMax := ItemCount > (SIZEOF(MpFileManagerUIConnect.File.List.Items)/SIZEOF(MpFileManagerUIConnect.File.List.Items[0])); END_ACTION @@ -116,7 +116,11 @@ ACTION FileManager: IF ((MpFileManagerUIConnect.DeviceList.SelectedIndex <> HmiBackup.Status.LastSelectedDeviceIndex) AND (MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE)) THEN HmiBackup.Status.LastSelectedDeviceIndex := MpFileManagerUIConnect.DeviceList.SelectedIndex; - HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.LastSelectedIndex + 1; + IF HmiBackup.Status.LastSelectedIndex > MpFileManagerUIConnect.File.PathInfo.FolderCount THEN + HmiBackup.Status.SelectedIndex := 0; + ELSE + HmiBackup.Status.LastSelectedIndex := HmiBackup.Status.LastSelectedIndex + 1; + END_IF END_IF END_ACTION diff --git a/mappFramework/Logical/Infrastructure/File/FileMgr/FIFOOperations.st b/mappFramework/Logical/Infrastructure/File/FileMgr/FIFOOperations.st index ba25c9c7..92333a7e 100644 --- a/mappFramework/Logical/Infrastructure/File/FileMgr/FIFOOperations.st +++ b/mappFramework/Logical/Infrastructure/File/FileMgr/FIFOOperations.st @@ -7,15 +7,26 @@ ACTION FIFOOperation: IF R_TRIG_CheckStatus.Q OR TON_ScanFolder.Q THEN HmiFile.Commands.CheckFolder := TRUE; END_IF - + + brsmemset(ADR(HmiFile.Status.FifoSelect[0]), 0, SIZEOF(HmiFile.Status.FifoSelect)); + FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames)/SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames[0])) - 1) DO + IF (HmiFile.Parameters.Fifo.DeviceName = MpFileManagerUIConnect.DeviceList.DeviceNames[i]) AND HmiFile.Parameters.Fifo.Enable THEN + HmiFile.Status.FifoSelect[i] := 1; + EXIT; + END_IF + END_FOR + + // Autodelete oldest files based on scanning option CASE HmiFile.Status.DeleteStep OF FILE_DELETE_WAIT: // Wait for check the correct device selection TON_ScanFolder.IN := TRUE; + HmiFile.Status.FifoConfigEnable := TRUE; IF TON_ScanFolder.Q THEN TON_ScanFolder.IN := FALSE; + HmiFile.Status.FifoConfigEnable := FALSE; Fifo_Count := 0; HmiFile.Status.DeleteStep := FILE_SCAN_FOLDER_WAIT; END_IF @@ -64,12 +75,12 @@ ACTION FIFOOperation: FILE_GO_TO_END: IF (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) THEN - IF (HmiFile.Parameters.Fifo.MaxNumberOfFiles >= (SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items)/SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items[0]))) THEN + FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items)/SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items[0])) - 1) DO + MpFileManagerUIConnect_FIFO.File.List.Items[i].IsSelected := FALSE; + END_FOR + IF (MpFileManagerUIConnect_FIFO.File.PathInfo.FileCount >= (SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items)/SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items[0]))) THEN // Page down until we get to the end, then start deleting IF (MpFileManagerUIConnect_FIFO.File.List.RangeStart <> 0) THEN - FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items)/SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items[0])) - 1) DO - MpFileManagerUIConnect_FIFO.File.List.Items[i].IsSelected := FALSE; - END_FOR MpFileManagerUIConnect_FIFO.File.List.PageDown := TRUE; HmiFile.Status.DeleteStep := FILE_GO_TO_END_1; ELSE @@ -100,7 +111,8 @@ ACTION FIFOOperation: HmiFile.Status.DeleteStep := SEL(MpFileManagerUIConnect_FIFO.File.PathInfo.FileCount <= HmiFile.Parameters.Fifo.MaxNumberOfFiles, FILE_SELECT_OLDEST_FILES_0, FILE_DELETE_WAIT); FILE_FIFO_SIZE_OF_FOLDER: - HmiFile.Status.DeleteStep := FILE_CALC_FOLDER_SIZE; + CurrentIndex := 0; + HmiFile.Status.DeleteStep := FILE_CALC_FOLDER_SIZE; END_CASE FILE_SELECT_OLDEST_FILES_0: @@ -113,9 +125,7 @@ ACTION FIFOOperation: // start from the first file to delete and select everything after // e.g. if there are 100 files and we want to keep 60 files around then we'd start at 60 + 0 MOD 50 = 10 and go to index 49 FileNameArraySize := SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items)/SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items[0]); - IF (MpFileManagerUIConnect_FIFO.File.PathInfo.FileCount >= (HmiFile.Parameters.Fifo.MaxNumberOfFiles * 2)) THEN - StartIndex := 0; - ELSIF (HmiFile.Parameters.Fifo.MaxNumberOfFiles >= FileNameArraySize) THEN + IF (HmiFile.Parameters.Fifo.MaxNumberOfFiles >= FileNameArraySize) THEN StartIndex := FileNameArraySize - (UDINT_TO_USINT(MpFileManagerUIConnect_FIFO.File.PathInfo.FileCount - HmiFile.Parameters.Fifo.MaxNumberOfFiles + MpFileManagerUIConnect_FIFO.File.PathInfo.FolderCount) MOD FileNameArraySize); ELSE StartIndex := UDINT_TO_USINT(HmiFile.Parameters.Fifo.MaxNumberOfFiles + MpFileManagerUIConnect_FIFO.File.PathInfo.FolderCount) MOD FileNameArraySize; @@ -124,8 +134,14 @@ ACTION FIFOOperation: StartIndex := 0; END_IF + IF (StartIndex > 0) THEN + FOR i := 0 TO (StartIndex - 1) DO + MpFileManagerUIConnect_FIFO.File.List.Items[i].IsSelected := FALSE; + END_FOR + END_IF + FOR i := StartIndex TO (FileNameArraySize - 1) DO - MpFileManagerUIConnect_FIFO.File.List.Items[0].IsSelected := FALSE; + MpFileManagerUIConnect_FIFO.File.List.Items[i].IsSelected := FALSE; IF (MpFileManagerUIConnect_FIFO.File.List.Items[i].ItemType <> mpFILE_ITEM_TYPE_NONE) AND NOT MpFileManagerUIConnect_FIFO.File.List.Items[i].IsFolder THEN MpFileManagerUIConnect_FIFO.File.List.Items[i].IsSelected := TRUE; HmiFile.Status.AutoDeleteSelected := HmiFile.Status.AutoDeleteSelected + 1; @@ -140,23 +156,33 @@ ACTION FIFOOperation: END_IF END_IF - FILE_CALC_FOLDER_SIZE: - // Calculate the overall file size in the open folder - HmiFile.Status.FolderSize := 0; - FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items)/SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items[0])) - 1) DO - IF MpFileManagerUIConnect_FIFO.File.List.Items[i].ItemType <> mpFILE_ITEM_TYPE_FOLDER THEN - HmiFile.Status.FolderSize := HmiFile.Status.FolderSize + UDINT_TO_REAL(MpFileManagerUIConnect_FIFO.File.List.Items[i].Size); - END_IF - END_FOR - HmiFile.Status.DeleteStep := SEL(HmiFile.Status.FolderSize > HmiFile.Parameters.Fifo.MaxFolderSize*1000, FILE_RESET_SORT_BY, FILE_SELECT_OLDEST_FILES_1); - + FILE_CALC_FOLDER_SIZE: + 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 + HmiFile.Status.FolderSize := HmiFile.Status.FolderSize + UDINT_TO_REAL(DirectoryData.Filelength); + CurrentIndex := CurrentIndex + 1; + IF (CurrentIndex >= MpFileManagerUIConnect_FIFO.File.PathInfo.FileCount) THEN + HmiFile.Status.DeleteStep := SEL(HmiFile.Status.FolderSize > HmiFile.Parameters.Fifo.MaxFolderSize*1024, FILE_RESET_SORT_BY, FILE_SELECT_OLDEST_FILES_1); + END_IF + END_IF + FILE_SELECT_OLDEST_FILES_1: // Scan and select all file over the filter setting IF (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) THEN - LastIndex := (MpFileManagerUIConnect_FIFO.File.PathInfo.FileCount MOD ((SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items)/SIZEOF(MpFileManagerUIConnect_FIFO.File.List.Items[0])) - 1)); - MpFileManagerUIConnect_FIFO.File.List.Items[LastIndex].IsSelected := TRUE; - HmiFile.Status.DeleteStep := FILE_DELETE_FILES; - END_IF + MpFileManagerUIConnect_FIFO.File.List.Items[0].IsSelected := TRUE; + HmiFile.Status.FolderSize := HmiFile.Status.FolderSize - UDINT_TO_REAL(MpFileManagerUIConnect_FIFO.File.List.Items[0].Size); + HmiFile.Status.DeleteStep := FILE_DELETE_FILES; + END_IF FILE_DELETE_FILES: // Set command to delete the selected oldest files @@ -173,8 +199,9 @@ ACTION FIFOOperation: IF (MpFileManagerUIConnect_FIFO.MessageBox.Type = mpFILE_MSG_CONFIRM_DELETE) THEN MpFileManagerUIConnect_FIFO.MessageBox.Confirm := TRUE; ELSIF (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) AND (MpFileManagerUIConnect_FIFO.MessageBox.LayerStatus = 1) THEN - IF (HmiFile.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER) THEN - HmiFile.Status.DeleteStep := FILE_CALC_FOLDER_SIZE; + IF (HmiFile.Parameters.Fifo.FifoType = FILE_FIFO_SIZE_OF_FOLDER) THEN + HmiFile.Status.DeleteStep := SEL(HmiFile.Status.FolderSize > HmiFile.Parameters.Fifo.MaxFolderSize*1024, FILE_RESET_SORT_BY, FILE_SELECT_OLDEST_FILES_1); + //HmiFile.Status.DeleteStep := FILE_SELECT_OLDEST_FILES_1; ELSE MpFileManagerUIConnect_FIFO.File.MultiSelect := FALSE; // if more files need to be deleted then go back to select the oldest files @@ -196,7 +223,7 @@ ACTION FIFOOperation: IF (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_REFRESH) OR (MpFileManagerUIConnect_FIFO.Status = mpFILE_UI_STATUS_IDLE) THEN HmiFile.Status.DeleteStep := FILE_DELETE_WAIT; IF (MpFileManagerUIConnect_FIFO.MessageBox.Type = mpFILE_MSG_BUSY) THEN - MpFileManagerUIConnect_FIFO.MessageBox.Confirm := TRUE; + MpFileManagerUIConnect_FIFO.MessageBox.Confirm := TRUE; END_IF END_IF END_CASE diff --git a/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.st b/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.st index 2ac2fbc9..d7edd754 100644 --- a/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.st +++ b/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.st @@ -14,7 +14,7 @@ PROGRAM _INIT MpFileManagerUIConnect.DeviceList.DeviceNames[3] := 'mappDataFiles'; MpFileManagerUIConnect.DeviceList.DeviceNames[4] := 'mappBackupFiles'; MpFileManagerUIConnect.DeviceList.DeviceNames[5] := 'mappAlarmXFiles'; - MpFileManagerUIConnect.DeviceList.DeviceNames[6] := 'mappUserXFiles'; + MpFileManagerUIConnect.DeviceList.DeviceNames[6] := 'mappUserXFiles'; MpFileManagerUI_0.Enable := TRUE; MpFileManagerUI_0.MpLink := ADR(gMpLinkFileManagerUIFile); MpFileManagerUI_0.UIConnect := ADR(MpFileManagerUIConnect); @@ -22,12 +22,25 @@ PROGRAM _INIT MpFileManagerUI_0(); // Initialize FIFO feature - HmiFile.Parameters.Fifo.DeviceName := 'mappDataFiles'; - // MaxFolderSize is in kB - HmiFile.Parameters.Fifo.MaxFolderSize := 1000; - HmiFile.Parameters.Fifo.MaxNumberOfFiles := 20; - // ScanInterval is in minutes - HmiFile.Parameters.Fifo.ScanInterval := 60; + 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; @@ -63,6 +76,8 @@ PROGRAM _CYCLIC FileManager; IF HmiFile.Parameters.Fifo.Enable THEN FIFOOperation; + ELSE + brsmemset(ADR(HmiFile.Status.FifoSelect[0]), 0, SIZEOF(HmiFile.Status.FifoSelect)); END_IF // Error reset diff --git a/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.typ b/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.typ index 7509c6ba..695b0644 100644 --- a/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.typ +++ b/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.typ @@ -23,6 +23,7 @@ TYPE Type : ARRAY[0..49]OF DINT; (*List of file types*) Size : ARRAY[0..49]OF UDINT; (*List of file sizes*) DeviceDataProvider : ARRAY[0..MAX_IDX_FILE_DEV]OF STRING[100]; (*Data provider for the file device selector*) + FifoSelect : ARRAY[0..MAX_IDX_FILE_DEV]OF DINT; (*Indicate FIFO selected file device*) DeviceName : STRING[50]; (*File device name*) FileName : STRING[255]; (*Fille name*) TableConfig : ARRAY[0..1]OF STRING[120]; (*Table configuration for the file explorer (table widget) on the mapp View HMI*) @@ -32,6 +33,7 @@ TYPE AutoDeleteSelected : USINT; (*Number of selected items*) FolderSize : REAL; (*Size of currently selected folder*) SelectedIndex : USINT; (*Selected index in the file list*) + FifoConfigEnable : BOOL; (*Disable FIFO access or change confirmation when FIFO is active*) END_STRUCT; FileHmiParaFifoType : STRUCT (*Parameters for the FIFO feature (first-in-first-out)*) Enable : BOOL; (*FIFO enable*) @@ -63,6 +65,7 @@ TYPE FILE_CHECK_FOR_FILTER, (*Check which delete filter is active*) FILE_SELECT_OLDEST_FILES_0, (*Scan and select all file over the filter setting*) FILE_CALC_FOLDER_SIZE, (*Calculate the overall file size in the open folder*) + FILE_CALC_FOLDER_SCROLL, FILE_SELECT_OLDEST_FILES_1, (*Scan and select all file over the filter setting*) FILE_DELETE_FILES, (*Set command to delete the selected oldest files*) FILE_CONFIRM_DELETE, (*Confirm the file delete*) diff --git a/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.var b/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.var index 61378a39..3c0f5b29 100644 --- a/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.var +++ b/mappFramework/Logical/Infrastructure/File/FileMgr/FileMgr.var @@ -4,8 +4,11 @@ VAR MpFileManagerUI_FIFO : MpFileManagerUI; (*MpFileManagerUI instance*) DirInfo_0 : DirInfo; (*Directory info function block*) R_TRIG_CheckStatus : R_TRIG; (*Trigger function block*) - TON_Wait : TON; + TON_Wait : TON; (*FIFO handling support*) TON_ScanFolder : TON; (*Timer to scan for folder*) + TON_EnterFolder : TON; (*Time to delay EnterFolder command so file list can refresh*) + CurrentIndex : UDINT; (*FIFO handling support deleting more then 50 files*) + DirRead_FolderSize : DirRead; (*FIFO handling support reading current folder size*) END_VAR (*Constants*) VAR CONSTANT @@ -14,9 +17,15 @@ END_VAR (*Structure Types*) VAR MpFileManagerUIConnect : MpFileManagerUIConnectType; (*File manager connection to the HMI*) - MpFileManagerUIConnect_FIFO : MpFileManagerUIConnectType; (*File manager connection to the HMI*) + MpFileManagerUIConnect_FIFO : {REDUND_UNREPLICABLE} MpFileManagerUIConnectType; (*File manager connection to the HMI*) +END_VAR +VAR RETAIN HmiFile : FileHmiInterfaceType; (*HMI interface structure*) END_VAR +VAR + PathCheck : FilePathCheckType; (*Parameter structure controlling the visible file device based on available folders*) + DirectoryData : fiDIR_READ_DATA; (*FIFO handling support reading current folder size*) +END_VAR (*Variables*) VAR i : USINT; (*Index for FOR loops*) @@ -24,12 +33,10 @@ VAR DeviceCount : USINT; (*Counter for available file devices*) Index : USINT; (*Index for avaliable devices*) FolderDepthCount : USINT; (*Keeps track of the folder depth location to determine whether or not the back button should be shown*) - PathCheck : FilePathCheckType; (*Parameter structure controlling the visible file device based on available folders*) USBOffset : USINT := 0; (*Device list offset where to add USB device*) MaxDeviceNameIndex : USINT; (*How many devices are configured*) - tempIdx : USINT; - FileNameArraySize : USINT; - StartIndex : USINT; - LastIndex : UDINT; - Fifo_Count : USINT; + tempIdx : USINT; (*FIFO handling support index variable*) + FileNameArraySize : USINT; (*FIFO handling support size of the array*) + StartIndex : USINT; (*FIFO handling support *) + Fifo_Count : USINT; (*FIFO handling support current file count*) END_VAR diff --git a/mappFramework/Logical/Infrastructure/File/FileMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/File/FileMgr/HMIActions.st index f3a5ec21..633218fe 100644 --- a/mappFramework/Logical/Infrastructure/File/FileMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/File/FileMgr/HMIActions.st @@ -33,7 +33,7 @@ ACTION FormatDeviceDataProvider: DeviceListCount := 0; END_IF // copy device name from source list into the actual device list - MpFileManagerUIConnect.DeviceList.DeviceNames[Index] := PathCheck.DeviceList.DeviceNames[DeviceListCount]; + MpFileManagerUIConnect.DeviceList.DeviceNames[Index] := PathCheck.DeviceList.DeviceNames[DeviceListCount]; Index := Index + 1; DeviceListCount := DeviceListCount + 1; IF (DeviceListCount > ((SIZEOF(PathCheck.DeviceList.DeviceNames) / SIZEOF(PathCheck.DeviceList.DeviceNames[0])) - 1)) THEN @@ -49,7 +49,7 @@ ACTION FormatDeviceDataProvider: END_IF END_IF - DirInfo_0(enable:= TRUE, pDevice := ADR('UserPartition'), pPath := ADR(PathCheck.Folder[DeviceListCount])); + DirInfo_0(enable := TRUE, pDevice := ADR('UserPartition'), pPath := ADR(PathCheck.Folder[DeviceListCount])); // Configure visible device list HmiFile.Status.TableConfig[0] := '{ "specRows": [{"from":'; @@ -69,10 +69,10 @@ ACTION FormatDeviceDataProvider: // Create device data provider for FIFO drop down FOR i := 0 TO MaxDeviceNameIndex DO IF (MpFileManagerUIConnect.DeviceList.DeviceNames[i] <> '') THEN - HmiFile.Status.DeviceDataProvider[i] := '{"value":"'; - brsstrcat(ADR(HmiFile.Status.DeviceDataProvider[i]), ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[i])); + HmiFile.Status.DeviceDataProvider[i] := '{"value":"'; + brsstrcat(ADR(HmiFile.Status.DeviceDataProvider[i]), ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[i])); brsstrcat(ADR(HmiFile.Status.DeviceDataProvider[i]), ADR('","text":"')); - brsstrcat(ADR(HmiFile.Status.DeviceDataProvider[i]), ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[i])); + 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])); @@ -116,9 +116,8 @@ ACTION FileManager: END_IF END_IF END_FOR - - - // Read currently selected device name for HMI + + // Read currently selected device name for HMI IF (MpFileManagerUIConnect.DeviceList.SelectedIndex >= (SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames) / SIZEOF(MpFileManagerUIConnect.DeviceList.DeviceNames[0]))) THEN MpFileManagerUIConnect.DeviceList.SelectedIndex := 0; END_IF @@ -131,11 +130,16 @@ ACTION FileManager: HmiFile.Status.IsFolder := MpFileManagerUIConnect.File.List.Items[HmiFile.Status.SelectedIndex].IsFolder; // Control the folder structure when entering and leaving folders - IF (HmiFile.Commands.EnterFolder) AND MpFileManagerUIConnect.File.List.Items[HmiFile.Status.SelectedIndex].IsFolder THEN - HmiFile.Commands.EnterFolder := FALSE; - MpFileManagerUIConnect.File.EnterFolder := TRUE; + IF (HmiFile.Commands.EnterFolder) AND MpFileManagerUIConnect.File.List.Items[HmiFile.Status.SelectedIndex].IsFolder + AND (MpFileManagerUIConnect.File.List.Items[HmiFile.Status.SelectedIndex].IsSelected) THEN + TON_EnterFolder.IN := TRUE; + IF TON_EnterFolder.Q THEN + HmiFile.Commands.EnterFolder := FALSE; + MpFileManagerUIConnect.File.EnterFolder := TRUE; + TON_EnterFolder.IN := FALSE; + END_IF FolderDepthCount := FolderDepthCount + 1; - ELSE + ELSIF (TON_EnterFolder.IN = FALSE) THEN HmiFile.Commands.EnterFolder := FALSE; END_IF @@ -146,5 +150,7 @@ ACTION FileManager: END_IF HmiFile.Status.BackButton := (FolderDepthCount > 0); + TON_EnterFolder(PT := t#200ms); + END_ACTION \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Package.pkg b/mappFramework/Logical/Infrastructure/Package.pkg index b81f69e1..363a95a6 100644 --- a/mappFramework/Logical/Infrastructure/Package.pkg +++ b/mappFramework/Logical/Infrastructure/Package.pkg @@ -11,5 +11,6 @@ Usb Recipe UserX + Audit
\ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/FileOperations.st b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/FileOperations.st deleted file mode 100644 index 51bc74f3..00000000 --- a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/FileOperations.st +++ /dev/null @@ -1,111 +0,0 @@ -ACTION FileCopyOperation: - - // Export/Import recipes to/from USB - CASE HmiRecipe.Status.CopyStep OF - REC_COPY_WAIT: - // Wait for export/import command - IF (HmiRecipe.Commands.ExportToUSB = TRUE) THEN - // Check if USB device is available - IF (brsstrlen(ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[1])) > 0) THEN - // USB is available proceed with export: select all files on the CF and trigger copy command - IF (MpFileManagerUIConnect.DeviceList.SelectedIndex <> 0) THEN - MpFileManagerUIConnect.DeviceList.SelectedIndex := 0; - MpFileManagerUIConnect.File.MultiSelect := FALSE; - ELSIF (MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE) THEN - - IF NOT MpFileManagerUIConnect.File.MultiSelect THEN - MpFileManagerUIConnect.File.MultiSelect := TRUE; - FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect.File.List.Items) / SIZEOF(MpFileManagerUIConnect.File.List.Items[0])) - 1) DO - MpFileManagerUIConnect.File.List.Items[i].IsSelected := TRUE; - END_FOR - ELSIF (brsstrlen(ADR(MpFileManagerUIConnect.File.List.Items[i].Name)) = 0) THEN - // No files to copy, cancel operation - HmiRecipe.Commands.ExportToUSB := FALSE; - ELSE - MpFileManagerUIConnect.File.Copy := TRUE; - HmiRecipe.Status.CopyStep := REC_COPY_TO_USB; - HmiRecipe.Commands.ExportToUSB := FALSE; - END_IF - - END_IF - - ELSE - // No USB disk available, cancel operation - HmiRecipe.Commands.ExportToUSB := FALSE; - END_IF - - ELSIF HmiRecipe.Commands.ImportFromUSB THEN - // Check if USB device is available - IF (brsstrlen(ADR(MpFileManagerUIConnect.DeviceList.DeviceNames[1])) > 0) THEN - // USB is available proceed with import: select all files on the USB and trigger copy command - - IF (MpFileManagerUIConnect.DeviceList.SelectedIndex <> 1) THEN - MpFileManagerUIConnect.DeviceList.SelectedIndex := 1; - MpFileManagerUIConnect.File.MultiSelect := FALSE; - ELSIF MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE THEN - - IF NOT MpFileManagerUIConnect.File.MultiSelect THEN - MpFileManagerUIConnect.File.MultiSelect := TRUE; - FOR i := 0 TO ((SIZEOF(MpFileManagerUIConnect.File.List.Items)/SIZEOF(MpFileManagerUIConnect.File.List.Items[0])) - 1) DO - MpFileManagerUIConnect.File.List.Items[i].IsSelected := TRUE; - END_FOR - ELSIF (brsstrlen(ADR(MpFileManagerUIConnect.File.List.Items[i].Name)) = 0) THEN - // No files to copy, cancel operation - HmiRecipe.Commands.ImportFromUSB := FALSE; - ELSE - MpFileManagerUIConnect.File.Copy := TRUE; - HmiRecipe.Status.CopyStep := REC_COPY_FROM_USB; - HmiRecipe.Commands.ImportFromUSB := FALSE; - END_IF - - END_IF - ELSE - // No USB disk available, cancel operation - HmiRecipe.Commands.ImportFromUSB := FALSE; - END_IF - - END_IF - - REC_COPY_TO_USB: - // Navigate to USB device and paste files - IF (MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE) THEN - - IF (MpFileManagerUIConnect.DeviceList.SelectedIndex <> 1) THEN - MpFileManagerUIConnect.DeviceList.SelectedIndex := 1; - MpFileManagerUIConnect.File.MultiSelect := FALSE; - ELSE - MpFileManagerUIConnect.File.Paste := TRUE; - END_IF - - END_IF - - IF MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_PASTE THEN - HmiRecipe.Status.CopyStep := REC_COPY_BUSY; - END_IF - - REC_COPY_FROM_USB: - // Navigate to CF device and paste files - IF (MpFileManagerUIConnect.DeviceList.SelectedIndex <> 0) THEN - MpFileManagerUIConnect.DeviceList.SelectedIndex := 0; - MpFileManagerUIConnect.File.MultiSelect := FALSE; - ELSIF (MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE) THEN - MpFileManagerUIConnect.File.Paste := TRUE; - END_IF - - IF (MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_PASTE) THEN - HmiRecipe.Status.CopyStep := REC_COPY_BUSY; - END_IF - - REC_COPY_BUSY: - // Wait for copying done - IF (MpFileManagerUIConnect.MessageBox.Type = mpFILE_MSG_CONFIRM_OVERWRITE) OR (MpFileManagerUIConnect.MessageBox.Type = mpFILE_MSG_BUSY) THEN - // TODO: Replace by confirm dialog - MpFileManagerUIConnect.MessageBox.Confirm := TRUE; - ELSIF MpFileManagerUIConnect.Status = mpFILE_UI_STATUS_IDLE THEN - MpRecipeUIConnect.Recipe.Refresh := (MpRecipeUIConnect.Status = mpRECIPE_UI_STATUS_IDLE); - HmiRecipe.Status.CopyStep := REC_COPY_WAIT; - END_IF - - END_CASE - -END_ACTION diff --git a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/HMIActions.st b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/HMIActions.st index 741d55ac..2c394a1c 100644 --- a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/HMIActions.st +++ b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/HMIActions.st @@ -188,7 +188,7 @@ ACTION RecipeHMIcommands: // Check if the file name has already been used HmiRecipe.Status.FileDuplicate := FALSE; - FOR i:= 0 TO ((SIZEOF(MpRecipeUIConnect.Recipe.List.Names) / SIZEOF(MpRecipeUIConnect.Recipe.List.Names[0])) - 1) DO + FOR i:=0 TO ((SIZEOF(MpRecipeUIConnect.Recipe.List.Names) / SIZEOF(MpRecipeUIConnect.Recipe.List.Names[0])) - 1) DO temp := MpRecipeUIConnect.New.FileName; IF (brsstrcmp(ADR(HmiRecipe.Status.CategoryDropdown), ADR(PARAMETERS_RECIPE)) = 0) THEN brsstrcat(ADR(temp),ADR('.par')); diff --git a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/IEC.prg b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/IEC.prg index fdc82a73..58b33091 100644 --- a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/IEC.prg +++ b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/IEC.prg @@ -6,6 +6,5 @@ RecipeMgr.typ RecipeMgr.var HMIActions.st - FileOperations.st \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.st b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.st index 223bbf07..6782247a 100644 --- a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.st +++ b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.st @@ -73,7 +73,7 @@ PROGRAM _INIT // Load default Machine Settings recipe HmiRecipe.Parameters.Category := MACHINE_CONFIGURATION_CATEGORY; - HmiRecipe.Parameters.FileName := DEFAULT_MACHINE_CONFIGURATION; + 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 @@ -144,7 +144,6 @@ PROGRAM _CYCLIC FormatDeviceDataProvider; LoadPreview; RecipeHMIcommands; - FileCopyOperation; // Reset commands on MpRecipe FUB IF MpRecipe_0.CommandDone THEN @@ -152,7 +151,7 @@ PROGRAM _CYCLIC MpRecipe_0.Save := FALSE; // Set update notification for machine category IF ((brsstrcmp(ADR(HmiRecipe.Status.CategoryDropdown), ADR(MACHINE_CONFIGURATION_CATEGORY)) = 0) AND (MpRecipe_0.Save = TRUE)) THEN - MpRecipe_0.UpdateNotification := TRUE; + MpRecipe_0.UpdateNotification := TRUE; ELSE MpRecipe_0.UpdateNotification := FALSE; HmiRecipe.Parameters.Category := PARAMETERS_CATEGORY; diff --git a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.typ b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.typ index fc89ca95..3d951c17 100644 --- a/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.typ +++ b/mappFramework/Logical/Infrastructure/Recipe/RecipeMgr/RecipeMgr.typ @@ -31,7 +31,6 @@ TYPE LastMaxSelection : UINT; (*The previous maximum number of recipes*) LastSelectedIndex : UINT; (*The previous selected index*) LastStatus : MpRecipeUIStatusEnum; (*The previous UI status*) - CopyStep : RecipeCopyStepEnum; (*State machine step for copying a recipe to/from a USB drive*) CategoryDropdown : STRING[50]; (*Category dropdown value*) EditDialogOpened : BOOL; (*Flag that the edit dialog box was opened*) CreateDialogOpened : BOOL; (*Flag that the create dialog box was opened*) @@ -63,13 +62,6 @@ END_TYPE (*Enumerations*) TYPE - RecipeCopyStepEnum : - ( (*State machine step for copying a recipe to/from a USB drive*) - REC_COPY_WAIT := 0, (*Wait state*) - REC_COPY_TO_USB, (*Copy to USB*) - REC_COPY_FROM_USB, (*Copy from USB*) - REC_COPY_BUSY (*Busy*) - ); RecipeHmiStepEnum : ( (*State machine step for HMI commands*) REC_HMI_WAIT, (*Wait*) diff --git a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/IEC.prg b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/IEC.prg index 9f25ae3f..770085b7 100644 --- a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/IEC.prg +++ b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/IEC.prg @@ -3,7 +3,7 @@ UsbMgr.st - 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 d4435c34..69bcf2ba 100644 --- a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.st +++ b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.st @@ -19,20 +19,20 @@ PROGRAM _CYCLIC Node := 1; USB.Status := ERR_OK; IF USB.Cmd.AutoScan = TRUE THEN - TON_10ms_01(IN:=1, PT:=USB.Par.RefreshInterval); + TON_01(IN := 1, PT := USB.Par.RefreshInterval); // Get new USB data - IF(TON_10ms_01.Q) THEN - TON_10ms_01(IN:=0); + IF(TON_01.Q) THEN + TON_01(IN := 0); USB.Status := ERR_FUB_BUSY; brsmemset(ADR(Usb_data), 0, SIZEOF(Usb_data)); StateMachine := USB_CREATE_NODE_ID_LIST; END_IF ELSE - TON_10ms_01(IN:=0); + TON_01(IN := 0); END_IF // Refresh USB data every X seconds when enabled IF USB.Cmd.ErrorReset = TRUE THEN - StateMachine := USB_ERROR; + StateMachine := USB_ERROR; END_IF FOR i := 0 TO IDX_USB_DEV_LIST DO @@ -44,10 +44,10 @@ PROGRAM _CYCLIC // ----------------------------------------------------------------------------------------------------------- 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.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; // -------------------------------------------------------------------------------------------------------------------- @@ -82,9 +82,9 @@ PROGRAM _CYCLIC // ----------------------------------------------------------------------------------------------------------- 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.nodeId := Node_id_buffer[Node]; + UsbNodeGet_0.pBuffer := ADR(Usb_data[Node]); + UsbNodeGet_0.bufferSize := SIZEOF (Usb_data[Node]); UsbNodeGet_0; // -------------------------------------------------------------------------------------------------------------------- @@ -186,15 +186,15 @@ PROGRAM _CYCLIC RETURN; END_IF // Create device string - brsstrcpy(ADR(Device_param), ADR('/DEVICE=')); + brsstrcpy(ADR(Device_param), ADR('/DEVICE=')); brsstrcat(ADR(Device_param), ADR(Usb_data[Node].ifName)); brsstrcpy(ADR(Device_name), ADR('USB')); brsitoa(i, ADR(tmpSTR)); brsstrcat(ADR(Device_name), ADR(tmpSTR)); // Link device DevLink_0.enable := 1; - DevLink_0.pDevice := ADR(Device_name); - DevLink_0.pParam := ADR(Device_param); + DevLink_0.pDevice := ADR(Device_name); + DevLink_0.pParam := ADR(Device_param); DevLink_0; // -------------------------------------------------------------------------------------------------------------------- @@ -204,21 +204,21 @@ PROGRAM _CYCLIC brsmemcpy(ADR(Usb_data_old[i]), ADR(Usb_data[Node]), SIZEOF(Usb_data[Node])); USB.Par.IsConnected[i] := TRUE; Link_handle[i] := DevLink_0.handle; - Node := Node + 1; + Node := Node + 1; StateMachine := USB_LINK_NEW; // Error ELSIF DevLink_0.status <> ERR_FUB_BUSY THEN USB.Status := DevLink_0.status; USB.Err.State := StateMachine; USB.Err.Text := 'error linking device'; - StateMachine := USB_ERROR; - END_IF; + StateMachine := USB_ERROR; + END_IF; // ----------------------------------------------------------------------------------------------------------- // UnLink device // ----------------------------------------------------------------------------------------------------------- USB_UNLINK_DEVICE: DevUnlink_0.enable := 1; - DevUnlink_0.handle := Link_handle[Node]; + DevUnlink_0.handle := Link_handle[Node]; DevUnlink_0; // -------------------------------------------------------------------------------------------------------------------- @@ -262,7 +262,7 @@ PROGRAM _CYCLIC // Unlink device IF(USB.Err.State = USB_LINK_DEVICE) THEN DevUnlink_0.enable := 1; - DevUnlink_0.handle := DevLink_0.handle; + DevUnlink_0.handle := DevLink_0.handle; DevUnlink_0; END_IF @@ -280,7 +280,7 @@ 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.handle := Link_handle[i]; DevUnlink_0; UNTIL DevUnlink_0.status <> ERR_FUB_BUSY END_REPEAT; diff --git a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.typ b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.typ index c35a821b..7c491d8a 100644 --- a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.typ +++ b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.typ @@ -17,7 +17,7 @@ TYPE END_STRUCT; UsbParType : STRUCT IgnoreDongle : BOOL := TRUE; (*Ignoe B&R license dongle*) - RefreshInterval : UINT := 300; (*Intervall timer for USB device refresh*) + RefreshInterval : TIME := T#3s; (*Intervall timer for USB device refresh*) IsConnected : ARRAY[0..MAX_IDX_USB_DEV_LIST]OF BOOL; (*Shows if a USB stick is connected*) END_STRUCT; UsbErrType : STRUCT diff --git a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.var b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.var index d7d853ec..f5c54709 100644 --- a/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.var +++ b/mappFramework/Logical/Infrastructure/Usb/UsbMgr/UsbMgr.var @@ -1,36 +1,32 @@ -(*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*) +(*Function Blocks*) VAR - USB : UsbMainType; -END_VAR -(*Local functions*) -VAR - TON_10ms_01 : TON_10ms; + 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*) END_VAR -(*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*) -(*Local variables*) +(*Constants*) +VAR CONSTANT + 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*) +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*) - 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*) 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*) Node : USINT; (*Node number*) i : USINT; tmpSTR : STRING[10]; -END_VAR -(*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*) -(*Local constants*) -VAR CONSTANT - BRvendorId : UINT := 1615; (*B&R vendor id*) - BRproductId : UINT := 1001; (*B&R dongle product id*) -END_VAR -VAR ERR_MAX_DEVICE : UINT := 50000; (*Maximum number of dongles reached*) END_VAR diff --git a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/HMIAction.st b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/HMIAction.st new file mode 100644 index 00000000..579ea027 --- /dev/null +++ b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/HMIAction.st @@ -0,0 +1,60 @@ + +ACTION HMIAction: + // Check if the file name has already been used + CASE UserXCheckState OF + USERX_START: + IF NOT UserXMgrUIConnect.Import.ShowDialog THEN + UserXMgrUIConnect.Import.ShowDialog := TRUE; + ELSE + UserXCheckState := USERX_WAIT_FOR_DIALOG; + END_IF + USERX_WAIT_FOR_DIALOG: + UserXMgrUIConnect.Import.ShowDialog := FALSE; + UserXCheckState := USERX_SET_RESPONSE; + USERX_SET_RESPONSE: + IF NOT(UserXMgrUIConnect.Status = mpUSERX_UI_STATUS_IDLE) THEN + UserXMgrUIConnect.Import.Dialog.Cancel := TRUE; + ELSE + UserXMgrUIConnect.Import.Dialog.Cancel := FALSE; + UserXCheckState := USERX_CONFIRM_RESPONSE; + END_IF + USERX_CONFIRM_RESPONSE: + IF UserXMgrUIConnect.Status = mpUSERX_UI_STATUS_WAIT_DLG THEN + UserXCheckState := USERX_START; + ELSE + UserXCheckState := USERX_FINISH; + END_IF + USERX_NEW_EXPORT: + IF NOT UserXMgrUIConnect.Export.ShowDialog AND UserXMgrUIConnect.Status = mpUSERX_UI_STATUS_IDLE THEN + UserXCheckState := USERX_START; + END_IF + USERX_FINISH: + + END_CASE + // If new updates are made via export execute a check + IF UserXMgrUIConnect.Export.ShowDialog THEN + UserXCheckState := USERX_NEW_EXPORT; + END_IF + + + //Duplicate file checks + HmiUserX.FileDuplicate := FALSE; + FOR i := 0 TO ((SIZEOF(UserXMgrUIConnect.Import.Dialog.List.FileNames) / SIZEOF(UserXMgrUIConnect.Import.Dialog.List.FileNames[0])) - 1) DO + temp := UserXMgrUIConnect.Export.Dialog.FileName; + brsstrcat(ADR(temp),ADR('.usr')); + IF (temp = UserXMgrUIConnect.Import.Dialog.List.FileNames[i]) AND HmiUserX.Export THEN + HmiUserX.FileDuplicate := TRUE; + END_IF + END_FOR + + IF HmiUserX.FileDuplicate AND (HmiUserX.ConfirmOverwrite) THEN + UserXMgrUIConnect.Export.Dialog.Confirm := TRUE; + HmiUserX.Export := FALSE; + HmiUserX.ConfirmOverwrite := FALSE; + ELSIF NOT HmiUserX.FileDuplicate AND HmiUserX.Export THEN + UserXMgrUIConnect.Export.Dialog.Confirm := TRUE; + HmiUserX.Export := FALSE; + END_IF + + +END_ACTION diff --git a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/IEC.prg b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/IEC.prg index 84f04e9c..fd29ae77 100644 --- a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/IEC.prg +++ b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/IEC.prg @@ -1,9 +1,10 @@  - + UserXMgr.st UserXMgr.typ UserXMgr.var + HMIAction.st \ No newline at end of file diff --git a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.st b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.st index a58e8907..a457d7b2 100644 --- a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.st +++ b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.st @@ -19,19 +19,19 @@ PROGRAM _INIT UserXMgrUIConnect.User.Create.Lock := FALSE; UserXMgrUIConnect.User.Lock := FALSE; UserXMgrUIConnect.User.Edit.Lock := FALSE; - UserXMgrUIConnect.User.Create.Dialog.UserName := ""; - UserXMgrUIConnect.User.Create.Dialog.NewPassword := ""; + UserXMgrUIConnect.User.Create.Dialog.UserName := ""; + UserXMgrUIConnect.User.Create.Dialog.NewPassword := ""; UserXMgrUIConnect.User.Create.Dialog.ConfirmPassword := ""; 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.MpLink := ADR(gMpLinkUserXLogin); + MpUserXManagerUI_0.Enable := TRUE; + MpUserXManagerUI_0.UIConnect := ADR(UserXMgrUIConnect); MpUserXManagerUI_0(); MpUserXLoginUI_0.MpLink := ADR(gMpLinkUserXLogin); - MpUserXLoginUI_0.Enable := TRUE; + MpUserXLoginUI_0.Enable := TRUE; MpUserXLoginUI_0.UIConnect := ADR(UserXLoginUIConnect); MpUserXLoginUI_0(); @@ -39,6 +39,7 @@ PROGRAM _INIT MpUserXLogin_0.Enable := TRUE; MpUserXLogin_0(); + END_PROGRAM PROGRAM _CYCLIC @@ -54,7 +55,9 @@ PROGRAM _CYCLIC IF NOT MpUserXLogin_0.Error THEN MpUserXLogin_0.ErrorReset := FALSE; - END_IF + END_IF + + HMIAction; // Assign MpLinks MpUserXManagerUI_0.MpLink := ADR(gMpLinkUserXLogin); @@ -65,6 +68,7 @@ PROGRAM _CYCLIC MpUserXManagerUI_0(); MpUserXLoginUI_0(); MpUserXLogin_0(); + END_PROGRAM diff --git a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.typ b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.typ index e69de29b..38f3310f 100644 --- a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.typ +++ b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.typ @@ -0,0 +1,18 @@ + +TYPE + enumCheckState : + ( + USERX_START := 0, + USERX_WAIT_FOR_DIALOG := 1, + USERX_SET_RESPONSE := 2, + USERX_CONFIRM_RESPONSE := 3, + USERX_NEW_EXPORT := 4, + USERX_FINISH := 5 + ); + HMIUser_Typ : STRUCT + NewFileName : STRING[255]; + Export : BOOL; + ConfirmOverwrite : BOOL; + FileDuplicate : BOOL; + END_STRUCT; +END_TYPE diff --git a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.var b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.var index 76611a74..be11019b 100644 --- a/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.var +++ b/mappFramework/Logical/Infrastructure/UserX/UserXMgr/UserXMgr.var @@ -16,4 +16,14 @@ END_VAR VAR UserXMgrUIConnect : MpUserXMgrUIConnectType; (*UserX manager connection to the HMI*) UserXLoginUIConnect : MpUserXLoginUIConnectType; (*UserL login connection to the HMI*) + i : USINT; + HmiUserX : HMIUser_Typ; +END_VAR +(*Enumerations*) +VAR + UserXCheckState : enumCheckState; (*Used by the HMI Action to check for duplicate files*) +END_VAR +(*Variables*) +VAR + temp : STRING[255]; (*Temporary string holder for checking file names*) END_VAR diff --git a/mappFramework/Logical/Libraries/IecCheck/IecCheck.st b/mappFramework/Logical/Libraries/IecCheck/IecCheck.st index eb727fde..09a61d90 100644 --- a/mappFramework/Logical/Libraries/IecCheck/IecCheck.st +++ b/mappFramework/Logical/Libraries/IecCheck/IecCheck.st @@ -1,80 +1,80 @@ (* Check divisor for SINT division *) FUNCTION CheckDivSint IF divisor=0 THEN - CheckDivSint:=1; - MakeEntry(55555,divisor,'CheckDivSint'); + CheckDivSint := 1; + MakeEntry(55555, divisor, 'CheckDivSint'); ELSE - CheckDivSint:=divisor; + CheckDivSint := divisor; END_IF END_FUNCTION (* Check divisor for USINT division *) FUNCTION CheckDivUsint - IF divisor=0 THEN - CheckDivUsint:=1; - MakeEntry(55555,divisor,'CheckDivUsint'); + IF divisor = 0 THEN + CheckDivUsint := 1; + MakeEntry(55555, divisor, 'CheckDivUsint'); ELSE - CheckDivUsint:=divisor; + CheckDivUsint := divisor; END_IF END_FUNCTION (* Check divisor for INT division *) FUNCTION CheckDivInt - IF divisor=0 THEN - CheckDivInt:=1; - MakeEntry(55555,divisor,'CheckDivInt'); + IF divisor = 0 THEN + CheckDivInt := 1; + MakeEntry(55555, divisor, 'CheckDivInt'); ELSE - CheckDivInt:=divisor; + CheckDivInt := divisor; END_IF END_FUNCTION (* Check divisor for UINT division *) FUNCTION CheckDivUint - IF divisor=0 THEN - CheckDivUint:=1; - MakeEntry(55555,divisor,'CheckDivUint'); + IF divisor = 0 THEN + CheckDivUint := 1; + MakeEntry(55555, divisor, 'CheckDivUint'); ELSE - CheckDivUint:=divisor; + CheckDivUint := divisor; END_IF END_FUNCTION (* Check divisor for DINT division *) FUNCTION CheckDivDint - IF divisor=0 THEN - CheckDivDint:=1; - MakeEntry(55555,divisor,'CheckDivDint'); + IF divisor = 0 THEN + CheckDivDint := 1; + MakeEntry(55555, divisor, 'CheckDivDint'); ELSE - CheckDivDint:=divisor; + CheckDivDint := divisor; END_IF END_FUNCTION (* Check divisor for UDINT division *) FUNCTION CheckDivUdint - IF divisor=0 THEN - CheckDivUdint:=1; - MakeEntry(55555,divisor,'CheckDivUdint'); + IF divisor = 0 THEN + CheckDivUdint := 1; + MakeEntry(55555, divisor, 'CheckDivUdint'); ELSE - CheckDivUdint:=divisor; + CheckDivUdint := divisor; END_IF END_FUNCTION (* Check divisor for REAL division *) FUNCTION CheckDivReal - IF divisor=0 THEN - CheckDivReal:=1; - MakeEntry(55555,0,'CheckDivReal'); + IF divisor = 0 THEN + CheckDivReal := 1; + MakeEntry(55555, 0, 'CheckDivReal'); ELSE - CheckDivReal:=divisor; + CheckDivReal := divisor; END_IF END_FUNCTION (* Check divisor for LREAL division *) FUNCTION CheckDivLReal - IF divisor=0 THEN - CheckDivLReal:=1; - MakeEntry(55555,0,'CheckDivLReal'); + IF divisor = 0 THEN + CheckDivLReal := 1; + MakeEntry(55555, 0, 'CheckDivLReal'); ELSE - CheckDivLReal:=divisor; + CheckDivLReal := divisor; END_IF END_FUNCTION @@ -82,10 +82,10 @@ END_FUNCTION FUNCTION CheckBounds IF index < lower THEN CheckBounds := lower; - MakeEntry(55555,index,'CheckBounds'); + MakeEntry(55555, index, 'CheckBounds'); ELSIF index > upper THEN CheckBounds := upper; - MakeEntry(55555,index,'CheckBounds'); + MakeEntry(55555, index, 'CheckBounds'); ELSE CheckBounds := index; END_IF @@ -95,10 +95,10 @@ END_FUNCTION FUNCTION CheckRange IF value < lower THEN CheckRange := lower; - MakeEntry(55555,value,'CheckRange'); + MakeEntry(55555, value, 'CheckRange'); ELSIF value > upper THEN CheckRange := upper; - MakeEntry(55555,value,'CheckRange'); + MakeEntry(55555, value, 'CheckRange'); ELSE CheckRange := value; END_IF @@ -108,10 +108,10 @@ END_FUNCTION FUNCTION CheckSignedSubrange IF value < lower THEN CheckSignedSubrange := lower; - MakeEntry(55555,value,'CheckSignedSubrange'); + MakeEntry(55555, value, 'CheckSignedSubrange'); ELSIF value > upper THEN CheckSignedSubrange := upper; - MakeEntry(55555,value,'CheckSignedSubrange'); + MakeEntry(55555, value, 'CheckSignedSubrange'); ELSE CheckSignedSubrange := value; END_IF @@ -121,10 +121,10 @@ END_FUNCTION FUNCTION CheckUnsignedSubrange IF value < lower THEN CheckUnsignedSubrange := lower; - MakeEntry(55555,value,'CheckUnsignedSubrange'); + MakeEntry(55555, value, 'CheckUnsignedSubrange'); ELSIF value > upper THEN CheckUnsignedSubrange := upper; - MakeEntry(55555,value,'CheckUnsignedSubrange'); + MakeEntry(55555, value, 'CheckUnsignedSubrange'); ELSE CheckUnsignedSubrange := value; END_IF @@ -132,31 +132,31 @@ END_FUNCTION (* Check address when reading dynamic variables *) FUNCTION CheckReadAccess - IF address=0 THEN + IF address = 0 THEN (* TODO: Insert an appropriate code, see AutomationStudio help for further information *) - MakeEntry(55555,address,'Read from NULL'); + MakeEntry(55555, address, 'Read from NULL'); END_IF - CheckReadAccess:=0; + CheckReadAccess := 0; END_FUNCTION (* Check address when writing dynamic variables *) FUNCTION CheckWriteAccess - IF address=0 THEN + IF address = 0 THEN (* TODO: Insert an appropriate code, see AutomationStudio help for further information *) - MakeEntry(55555,address,'Write to NULL'); + MakeEntry(55555, address, 'Write to NULL'); END_IF - CheckWriteAccess:=0; + CheckWriteAccess := 0; END_FUNCTION (* Makes an entry (log book entry) in the error log book *) FUNCTION MakeEntry - status_name := ST_name(0,ADR(taskname),ADR(group)); - brsstrcpy(ADR(out_text),ADR(text)); - brsstrcat(ADR(out_text),ADR(' > in task > ')); - brsstrcat(ADR(out_text),ADR(taskname)); - MakeEntry := ADR(out_text); + status_name := ST_name(0, ADR(taskname), ADR(group)); + brsstrcpy(ADR(out_text), ADR(text)); + brsstrcat(ADR(out_text), ADR(' > in task > ')); + brsstrcat(ADR(out_text), ADR(taskname)); + MakeEntry := ADR(out_text); ERRxwarning(number, index, ADR(out_text)); // force page fault to get back trace brsmemcpy(0, 0, 1); diff --git a/mappFramework/Logical/Libraries/MpAudit/Binary.lby b/mappFramework/Logical/Libraries/MpAudit/Binary.lby new file mode 100644 index 00000000..ec0a5a7c --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/Binary.lby @@ -0,0 +1,21 @@ + + + + + MpAudit.typ + MpAuditError.typ + MpAuditAlarm.typ + MpAudit.fun + TxtEvent.tmx + TxtCustom.tmx + TxtDatapoints.tmx + TxtUser.tmx + TxtRecipe.tmx + TxtEventF.tmx + TxtUserF.tmx + TxtRecipeF.tmx + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/Libraries/MpAudit/MpAudit.fun b/mappFramework/Logical/Libraries/MpAudit/MpAudit.fun new file mode 100644 index 00000000..e9add073 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/MpAudit.fun @@ -0,0 +1,204 @@ + +FUNCTION MpAuditWStringChange : DINT (*Detects the change of a unicode string and creates an event for audit trail*) (* $GROUP=mapp Services,$CAT=Audit Trail,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpAudit.png *) + VAR_INPUT + MpLink : MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Old : WSTRING[100]; (*Entered when creating the entry under %old*) (* *) (*#CMD#;*) + New : WSTRING[100]; (*Entered when creating the entry under %new*) (* *) (*#CMD#;*) + Identifier : STRING[100]; (*Entered when creating the entry under %dpid *) (* *) (*#CMD#;*) + END_VAR +END_FUNCTION + +FUNCTION MpAuditStringChange : DINT (*Detects the change of a string and creates an event for audit trail*) (* $GROUP=mapp Services,$CAT=Audit Trail,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpAudit.png *) + VAR_INPUT + MpLink : MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Old : STRING[100]; (*Entered when creating the entry under %old *) (* *) (*#CMD#;*) + New : STRING[100]; (*Entered when creating the entry under %new*) (* *) (*#CMD#;*) + Identifier : STRING[100]; (*Entered when creating the entry under %dpid *) (* *) (*#CMD#;*) + END_VAR +END_FUNCTION + +FUNCTION_BLOCK MpAuditTrailConfig (*Configuration for audit trail*) (* $GROUP=mapp Services,$CAT=Audit Trail,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpAudit.png *) + VAR_INPUT + MpLink : REFERENCE TO MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Enable : BOOL; (*Enables/Disables the function block*) (* *) (*#PAR#;*) + ErrorReset : BOOL; (*Resets function block errors*) (* *) (*#PAR#;*) + Configuration : REFERENCE TO MpAuditTrailConfigType; (*Structure used to specify the configuration*) (* *) (*#PAR#;*) + Load : BOOL; (*Loads the configuration of the component*) (* *) (*#CMD#;*) + Save : BOOL; (*Saves the configuration of the component*) (* *) (*#CMD#;*) + END_VAR + VAR_OUTPUT + Active : BOOL; (*Indicates whether the function block is active*) (* *) (*#PAR#;*) + Error : BOOL; (*Indicates that the function block is in an error state or a command was not executed correctly*) (* *) (*#PAR#;*) + StatusID : DINT; (*Status information about the function block*) (* *) (*#PAR#;*) + CommandBusy : BOOL; (*Function block currently executing command*) (* *) (*#CMD#OPT#;*) + CommandDone : BOOL; (*Command successfully executed by function block*) (* *) (*#CMD#;*) + Info : MpAuditTrailInfoType; (*Additional information about the component*) (* *) (*#CMD#;*) + END_VAR + VAR + Internal : {REDUND_UNREPLICABLE} MpComInternalDataType; + END_VAR +END_FUNCTION_BLOCK + +FUNCTION MpAuditCustomEvent : DINT (*Sets a user-defined event*) (* $GROUP=mapp Services,$CAT=Audit Trail,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpAudit.png *) + VAR_INPUT + MpLink : MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Type : WSTRING[100]; (*Entered when creating the entry under %typ*) (* *) (*#CMD#;*) + Message : WSTRING[100]; (*Entered when creating the entry under %msg*) (* *) (*#CMD#;*) + Comment : WSTRING[100]; (*Entered when creating the entry under %cmt *) (* *) (*#CMD#;*) + END_VAR +END_FUNCTION + +FUNCTION_BLOCK MpAuditTrailUI (*UI connection to a VC4 audit trail page*) (* $GROUP=mapp Services,$CAT=Audit Trail,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpAudit.png *) + VAR_INPUT + MpLink : REFERENCE TO MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Enable : BOOL; (*Enables/Disables the function block*) (* *) (*#PAR#;*) + ErrorReset : BOOL; (*Resets function block errors*) (* *) (*#PAR#;*) + UISetup : MpAuditTrailUISetupType; (*Used to configure the elements connected to the HMI application*) (* *) (*#PAR#;*) + Refresh : BOOL; (*A rising edge on this command updates the event list (e.g. after the language has been changed)*) (* *) (*#CMD#;*) + Language : REFERENCE TO STRING[20]; (*Language ID (and optionally measurement-system) that should be used when exporting data (e,g, "en|metric")*) (* *) (*#CMD#;*) + UIConnect : REFERENCE TO MpAuditTrailUIConnectType; (*This structure contains the parameters needed for the connection to the HMI application*) (* *) (*#CMD#;*) + END_VAR + VAR_OUTPUT + Active : BOOL; (*Indicates whether the function block is active*) (* *) (*#PAR#;*) + Error : BOOL; (*Indicates that the function block is in an error state or a command was not executed correctly*) (* *) (*#PAR#;*) + StatusID : DINT; (*Status information about the function block*) (* *) (*#PAR#; *) + Info : MpAuditInfoType; (*Additional information about the component*) (* *) (*#CMD#;*) + END_VAR + VAR + Internal : MpComInternalDataType; + END_VAR +END_FUNCTION_BLOCK + +FUNCTION_BLOCK MpAuditTrail (*Centralized event audit trail*) (* $GROUP=mapp Services,$CAT=Audit Trail,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpAudit.png *) + VAR_INPUT + MpLink : REFERENCE TO MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Enable : BOOL; (*Enables/Disables the function block*) (* *) (*#PAR#;*) + ErrorReset : BOOL; (*Resets function block errors*) (* *) (*#PAR#;*) + Language : REFERENCE TO STRING[20]; (*Language ID (and optionally measurement-system) that should be used when exporting data (e,g, "en|metric")*) (* *) (*#CMD#;*) + DeviceName : REFERENCE TO STRING[50]; (*File device (data storage medium) where the files are stored*) (* *) (*#CMD#;*) + Export : BOOL; (*Saves the currently logged from memory to a file on the specified data storage medium ("DeviceName")*) (* *) (*#CMD#;*) + ExportArchive : BOOL; (*Exports the oldest archive to the specified data storage medium ("DeviceName")*) (* *) (*#CMD#;*) + END_VAR + VAR_OUTPUT + Active : BOOL; (*Indicates whether the function block is active*) (* *) (*#PAR#;*) + Error : BOOL; (*Indicates that the function block is in an error state or a command was not executed correctly*) (* *) (*#PAR#;*) + StatusID : DINT; (*Status information about the function block*) (* *) (*#PAR#; *) + CommandBusy : BOOL; (*Function block currently executing command*) (* *) (*#CMD#OPT#;*) + CommandDone : BOOL; (*Command successfully executed by function block*) (* *) (*#CMD#;*) + CurrentRecord : UDINT; (*Counts all events*) (* *) (*#CMD#;*) + ArchiveAvailable : BOOL; (*Indicates that an archive is currently available and can be exported*) (* *) (*#CMD#;*) + Info : MpAuditTrailInfoType; (*Additional information about the component*) (* *) (*#CMD#;*) + END_VAR + VAR + Internal : {REDUND_UNREPLICABLE} MpComInternalDataType; + END_VAR +END_FUNCTION_BLOCK + +FUNCTION MpAuditValueChange : DINT (*Detects the change of a value and creates an event for audit trail*) (* $GROUP=mapp Services,$CAT=Audit Trail,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpAudit.png *) + VAR_INPUT + MpLink : MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Old : LREAL; (*Entered when creating the entry under %old*) (* *) (*#CMD#;*) + New : LREAL; (*Entered when creating the entry under %new*) (* *) (*#CMD#;*) + Identifier : STRING[100]; (*Entered when creating the entry under %dpid*) (* *) (*#CMD#;*) + END_VAR +END_FUNCTION + +FUNCTION_BLOCK MpAuditVC4Event (*Collects events from VC4 for the audit trail*) (* $GROUP=mapp Services,$CAT=Audit Trail,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpAudit.png *) + VAR_INPUT + MpLink : REFERENCE TO MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Enable : BOOL; (*Enables/Disables the function block*) (* *) (*#PAR#;*) + ErrorReset : BOOL; (*Resets function block errors*) (* *) (*#PAR#;*) + Localize : BOOL; (*Defines whether the user ID or description of the user ID is used to create an entry*) (* *) (*#CMD#;*) + MinUserID : UINT; (*First ID from VC4 for which events are logged*) (* *) (*#CMD#;*) + MaxUserID : UINT; (*Last ID from VC4 for which events are logged*) (* *) (*#CMD#;*) + END_VAR + VAR_OUTPUT + Active : BOOL; (*Indicates whether the function block is active*) (* *) (*#PAR#;*) + Error : BOOL; (*Indicates that the function block is in an error state or a command was not executed correctly*) (* *) (*#PAR#;*) + StatusID : DINT; (*Status information about the function block*) (* *) (*#PAR#; *) + END_VAR + VAR + Internal : {REDUND_UNREPLICABLE} MpAuditVC4EventInternalType; + END_VAR +END_FUNCTION_BLOCK + +FUNCTION_BLOCK MpAuditRegPar (*Register and monitor a PV*) + VAR_INPUT + MpLink : REFERENCE TO MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Enable : BOOL; (*The parameter is registered on a positive edge on this input and unregistered on a negative edge*) (* *) (*#PAR#;*) + ErrorReset : BOOL; (*Resets function block errors*) (* *) (*#PAR#;*) + PVName : REFERENCE TO STRING[100]; (*Name of PV that should be monitored*) (* *) (*#CMD#;*) + Identiffier : REFERENCE TO STRING[100]; (*Identifier for given PV used in MpAudit (optional). If no separate identifier is given than the PV-name will be used*) (* *) (*#CMD#OPT#;*) + END_VAR + VAR_OUTPUT + Active : BOOL; (*Indicates whether the function block is active*) (* *) (*#PAR#;*) + Error : BOOL; (*Indicates that the function block is in an error state or a command was not executed correctly*) (* *) (*#PAR#;*) + StatusID : DINT; (*Status information about the function block*) (* *) (*#PAR#; *) + Info : MpAuditTrailInfoType; (*Additional information about the component*) (* *) (*#CMD#;*) + END_VAR + VAR + Internal : {REDUND_UNREPLICABLE} MpComInternalDataType; + END_VAR +END_FUNCTION_BLOCK + +FUNCTION MpAuditClearBuffer : DINT (*Clears the audit buffer (archives are not effected)*) + VAR_INPUT + MpLink : MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + END_VAR +END_FUNCTION + +FUNCTION MpAuditStartBatch : DINT (*Creates a event marking the start of a new batch*) + VAR_INPUT + MpLink : MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Name : WSTRING[50]; (*Name (unique identifier) of batch*) (* *) (*#CMD#;*) + END_VAR +END_FUNCTION + +FUNCTION_BLOCK MpAuditExport (*Advanced export function*) (* $GROUP=mapp Services,$CAT=Audit Trail,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpAudit.png *) + VAR_INPUT + MpLink : REFERENCE TO MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Enable : BOOL; (*Enables/Disables the function block*) (* *) (*#PAR#;*) + ErrorReset : BOOL; (*Resets function block errors*) (* *) (*#PAR#;*) + Filter : REFERENCE TO MpAuditExportFilterType; (*Filter-settings to be applied for data to export*) (* *) (*#CMD#;*) + ToRecord : UDINT; (*Record-number up to which (and excluding) data is exported*) (* *) (*#CMD#;*) + Language : REFERENCE TO STRING[20]; (*Language ID (and optionally measurement-system) that should be used when exporting data (e,g, "en|metric")*) (* *) (*#CMD#;*) + DeviceName : REFERENCE TO STRING[50]; (*File device (data storage medium) where the files are stored*) (* *) (*#CMD#;*) + Export : BOOL; (*Execute export*) (* *) (*#CMD#;*) + END_VAR + VAR_OUTPUT + Active : BOOL; (*Indicates whether the function block is active*) (* *) (*#PAR#;*) + Error : BOOL; (*Indicates that the function block is in an error state or a command was not executed correctly*) (* *) (*#PAR#;*) + StatusID : DINT; (*Status information about the function block*) (* *) (*#PAR#; *) + CommandBusy : BOOL; (*Function block currently executing command*) (* *) (*#CMD#OPT#;*) + CommandDone : BOOL; (*Command successfully executed by function block*) (* *) (*#CMD#;*) + Record : UDINT; (*Record-number of last exported record (set after export)*) (* *) (*#CMD#;*) + Info : MpAuditInfoType; (*Additional information about the component*) (* *) (*#CMD#;*) + END_VAR + VAR + Internal : {REDUND_UNREPLICABLE} MpComInternalDataType; + END_VAR +END_FUNCTION_BLOCK + +FUNCTION_BLOCK MpAuditQuery (*Query Data function*) (* $GROUP=mapp Services,$CAT=Audit Trail,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpAudit.png *) + VAR_INPUT + MpLink : REFERENCE TO MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Enable : BOOL; (*Enables/Disables the function block*) (* *) (*#PAR#;*) + ErrorReset : BOOL; (*Resets function block errors*) (* *) (*#PAR#;*) + Mode : MpAuditQueryModeEnum; (*Kind of query*) (* *) (*#CMD#;*) + Name : REFERENCE TO STRING[50]; (*Name of query to execute*) (* *) (*#CMD#;*) + Language : REFERENCE TO STRING[20]; (*Language ID (and optionally measurement-system) that should be used when exporting data (e,g, "en|metric")*) (* *) (*#CMD#;*) + Execute : BOOL; (*Execute query*) (* *) (*#CMD#;*) + Next : BOOL; (*Execute query - get next entries*) (* *) (*#CMD#;*) + END_VAR + VAR_OUTPUT + Active : BOOL; (*Indicates whether the function block is active*) (* *) (*#PAR#;*) + Error : BOOL; (*Indicates that the function block is in an error state or a command was not executed correctly*) (* *) (*#PAR#;*) + StatusID : DINT; (*Status information about the function block*) (* *) (*#PAR#; *) + CommandBusy : BOOL; (*Function block currently executing command*) (* *) (*#CMD#OPT#;*) + CommandDone : BOOL; (*Command successfully executed by function block*) (* *) (*#CMD#;*) + Info : MpAuditQueryInfoType; (*Additional information about the component*) (* *) (*#CMD#;*) + END_VAR + VAR + Internal : {REDUND_UNREPLICABLE} MpComInternalDataType; + END_VAR +END_FUNCTION_BLOCK diff --git a/mappFramework/Logical/Libraries/MpAudit/MpAudit.typ b/mappFramework/Logical/Libraries/MpAudit/MpAudit.typ new file mode 100644 index 00000000..19faee0c --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/MpAudit.typ @@ -0,0 +1,272 @@ + +TYPE + MpAuditTrailUIStatusEnum : + ( + mpAUDIT_UI_STATUS_IDLE, (*Indicates that no process is currently active*) + mpAUDIT_UI_STATUS_UPDATE, (*Performs an update*) + mpAUDIT_UI_STATUS_FILTER, (*Displays a window for filtering the results*) + mpAUDIT_UI_STATUS_EXPORT, (*Exporting data*) + mpAUDIT_UI_STATUS_ERROR (*Error pending*) + ); + MpAuditFileTypeEnum : + ( + mpAUDIT_FILE_TYPE_TXT := 0, (*Export as text file*) + mpAUDIT_FILE_TYPE_XML := 1, (*Export as .xml file*) + mpAUDIT_FILE_TYPE_PDF := 2 (*Export as .pdf file*) + ); + MpAuditArchiveModeEnum : + ( + mpAUDIT_ARCHIVE_DAILY := 0, (*Creates an archive daily*) + mpAUDIT_ARCHIVE_MO_TO_FR := 1, (*Creates an archive from Monday to Friday*) + mpAUDIT_ARCHIVE_BATCH := 2 (*Create archives at start of new batch*) + ); + MpAuditFontTypeEnum : + ( + mpAUDIT_FONT_COURIER := 0, + mpAUDIT_FONT_HELVETICA := 1, + mpAUDIT_FONT_TIMESROMAN := 2, + mpAUDIT_FONT_SIMSUN := 3, (*Simplified Chinese*) + mpAUDIT_FONT_SIMHEI := 4, (*Simplified Chinese*) + mpAUDIT_FONT_MINGLIU := 5, (*Traditional Chinese*) + mpAUDIT_FONT_MINCYO := 6, (*Japanese*) + mpAUDIT_FONT_GOTHIC := 7, (*Japanese*) + mpAUDIT_FONT_PMINCYO := 8, (*Japanese*) + mpAUDIT_FONT_PGOTHIC := 9, (*Japanese*) + mpAUDIT_FONT_DOTUMCHE := 10, (*Korean*) + mpAUDIT_FONT_DOTUM := 11, (*Korean*) + mpAUDIT_FONT_BATANGCHE := 12, (*Korean*) + mpAUDIT_FONT_BATANG := 13 (*Korean*) + ); + MpAuditPageFormatEnum : + ( + mpAUDIT_PAGE_FORMAT_UNDEFINED := 0, + mpAUDIT_PAGE_FORMAT_LETTER := 1, + mpAUDIT_PAGE_FORMAT_LEGAL := 2, + mpAUDIT_PAGE_FORMAT_A3 := 3, + mpAUDIT_PAGE_FORMAT_A4 := 4, + mpAUDIT_PAGE_FORMAT_A5 := 5, + mpAUDIT_PAGE_FORMAT_B4 := 6, + mpAUDIT_PAGE_FORMAT_B5 := 7 + ); + MpAuditPageDirectionEnum : + ( + mpAUDIT_PAGE_DIRECTION_UNDEFINED := 0, + mpAUDIT_PAGE_DIRECTION_PORTRAIT := 1, + mpAUDIT_PAGE_DIRECTION_LANDSCAPE := 2 + ); + MpAuditPageMarginEnum : + ( + mpAUDIT_PAGE_MARGIN_NORMAL := 0, + mpAUDIT_PAGE_MARGIN_NARROW := 1, + mpAUDIT_PAGE_MARGIN_MODERATE := 2, + mpAUDIT_PAGE_MARGIN_WIDE := 3 + ); + MpAuditQueryModeEnum : + ( + mpAUDIT_QUERY_MODE_ALL, (*Read all elements starting from newest entry*) + mpAUDIT_QUERY_MODE_NEW (*Read only new elements (added since last successfull call of MpAuditQuery) - For the first call it behaves like mpAUDIT_QUERY_MODE_ALL*) + ); + MpAuditMemoryEnum : + ( + mpAUDIT_MEM_TEMP := 0, (*Memory location: DRAM (temporary)*) + mpAUDIT_MEM_ROM := 1, (*Memory location: USER ROM (memory card)*) + mpAUDIT_MEM_SRAM := 2, (*Memory location: SRAM (battery-backed)*) + mpAUDIT_MEM_BUFFERD_ROM := 3 (*Memory location: DRAM (temporary)*) + ); + MpAuditDisplayTextSourceType : STRUCT + FormatSource : STRING[100]; (*only for With mpAUDIT_TEXT_SOURCE_VC4 as text source: Defines the index of the text group of the visualization object from which the text is added*) + Format : STRING[255]; (*With mpAUDIT_TEXT_SOURCE_NONE as text source: This parameter defines how the entry looks. +With mpAUDIT_TEXT_SOURCE_VC4 as text source: Defines the index in the text group from which the text is added*) + END_STRUCT; + MpAuditTextSourceType : STRUCT + Type : MpAuditTextSourceEnum := mpAUDIT_TEXT_SOURCE_NONE; (*Type of text source*) + Name : STRING[50]; (*only for mpAUDIT_TEXT_SOURCE_VC4 as text source: Name of the VC4 visualization application*) + OutputFormat : STRING[255] := '[%[TIME=%c]] [%ev] [%op]'; (*With mpAUDIT_TEXT_SOURCE_NONE as text source: This parameter defines how the entry looks. +With mpAUDIT_TEXT_SOURCE_VC4 as text source: Defines the index in the text group from which the text is added*) + OutputFormatSource : STRING[100]; (*only for With mpAUDIT_TEXT_SOURCE_VC4 as text source: Defines the index of the text group of the visualization object from which the text is added*) + Display : MpAuditDisplayTextSourceType; + ErrorMessage : MpAuditErrorMessageType; (*Replacement text that is added if the specified ID is not found*) + END_STRUCT; + MpAuditLanguageFontType : STRUCT + Language : STRING[20]; + Font : MpAuditFontTypeEnum; + END_STRUCT; + MpAuditPdfTitleType : STRUCT + Enable : BOOL := TRUE; (*Enable PDF Title page*) + Text : STRING[100]; + END_STRUCT; + MpAuditExportPdfType : STRUCT + DefaultFont : MpAuditFontTypeEnum; + Format : MpAuditPageFormatEnum; + Direction : MpAuditPageDirectionEnum; + Margins : MpAuditPageMarginEnum; + OwnerPassword : STRING[50]; + UserPassword : STRING[50]; + AllowPrint : BOOL; + AllowCopy : BOOL; + AllowEdit : BOOL; + Icon : STRING[100]; + Header : STRING[100]; + Title : MpAuditPdfTitleType; + Fonts : ARRAY[0..4]OF MpAuditLanguageFontType; + END_STRUCT; + MpAuditExportType : STRUCT + FileNamePattern : STRING[50] := 'Audit_%Y_%m_%d_%H_%M'; (*Filename including timestamp. This format can be changed*) + ArchiveNamePattern : STRING[50] := 'Archive_%Y_%m_%d_%H_%M'; (*Archive name including timestamp. This format can be changed*) + PassPhrase : STRING[100] := 'DefaultPassword1'; (*Password (or phrase) for the encrypted files / archive. Special characters are not permitted*) + Encrypt : BOOL := FALSE; (*Encrypted export files*) + RawData : BOOL := FALSE; (*Attaches raw data to the export file*) + FileType : MpAuditFileTypeEnum := mpAUDIT_FILE_TYPE_TXT; (*File type for the export file*) + PDF : MpAuditExportPdfType; (*Settings for PDF-export*) + END_STRUCT; + MpAuditExportFilterType : STRUCT + From : MpAuditTrailUICurrDTFilterType; (*Time from which events are displayed*) + Until : MpAuditTrailUICurrDTFilterType; (*Time until which events are displayed*) + Event : MpAuditTrailUIEventFilterType; (*Defines which events are displayed*) + Operator : MpAuditTrailUIOpFilterType; (*Determines from which user events are displayed*) + Pattern : MpAuditTrailUIPatternFilterType; (*Event-message filter (pattern matching)*) + Batch : MpAuditTrailUIBatchFilterType; (*Batch filter*) + END_STRUCT; + MpAuditArchiveType : STRUCT + Enable : BOOL := FALSE; (*Switches the archive function on/off*) + Mode : MpAuditArchiveModeEnum := mpAUDIT_ARCHIVE_DAILY; (*Defines which weekdays archiving takes place*) + Time : TIME_OF_DAY; (*Defines which time archiving takes place*) + MaxSize : UDINT := 100; (*If the number of events reaches this size, an archive is created immediately regardless of the day/time [kB]*) + END_STRUCT; + MpAuditTrailConfigType : STRUCT + Events : ARRAY[0..9]OF UINT := [16#10,16#12,8(0)]; (*Defines which events will be logged . This value are only read when the component is initialized (Disabled -> Enabled).*) + RecordingSize : UDINT := 200; (*Reserved memory for events [kB]. This value is only read when the component is initialized (Disabled -> Enabled).*) + SramBufferSize : UDINT := 20; (*Reserved memory for events in SRAM [kB] (this parameter is only used if "RecordMemory" is set to mpAUDIT_MEM_BUFFERED_ROM). This value is only read when the component is initialized (Disabled -> Enabled).*) + RecordMemory : MpAuditMemoryEnum := mpAUDIT_MEM_TEMP; (*Memory where logging is stored while active. This value is only read when the component is initialized (Disabled -> Enabled).*) + TextSource : MpAuditTextSourceType; (*Defines the origin of the description text for the various events*) + Archive : MpAuditArchiveType; (*Specifies when an archive should be created from the current events*) + Export : MpAuditExportType; (*Specifies how the export should proceed*) + END_STRUCT; + MpAuditErrorMessageType : STRUCT + TextNotFound : STRING[20] := '{Err:Text}'; (*Text that is displayed if the desired index was not found*) + SpecifierInvalid : STRING[20] := '{Err:Specifier}'; (*Text that is displayed if the desired icon wasn't found or is not available for this event*) + END_STRUCT; + MpAuditTextSourceEnum : + ( + mpAUDIT_TEXT_SOURCE_NONE := 0, (*Event text from the configuration*) + mpAUDIT_TEXT_SOURCE_VC4 := 1, (*Event text taken from VC4*) + mpAUDIT_TEXT_SOURCE_TEXTSYS := 2 (*AR TextSystem with Audit-specific notation*) + ); + MpAuditTrailUISetupType : STRUCT + EventListSize : UINT := 20; (*Number of events to be displayed on one page of the list in the HMI application*) + ScrollWindow : USINT := 0; (*Determines how many entries from the list are displayed in advance when scrolling up and down*) + END_STRUCT; + MpAuditTrailUIConnectType : STRUCT + Status : MpAuditTrailUIStatusEnum; (*Current operation*) + Output : MpAuditTrailUIOutputType; (*Indicates the filtered events*) + Filter : MpAuditUIFilterType; (*Allows events to be filtered*) + Export : BOOL; (*Export audit-data*) + MessageBox : MpAuditUIMessageBoxType; (*Controls dialog boxes*) + END_STRUCT; + MpAuditUIMessageEnum : + ( + mpAUDIT_UI_MSG_NONE := 0, (*No dialog box*) + mpAUDIT_UI_MSG_ERROR := 1 (*Dialog box: Errors*) + ); + MpAuditUIMessageBoxType : STRUCT + LayerStatus : UINT; (*Visibility of the dialog box *) + Type : MpAuditUIMessageEnum; (*Type of dialog box*) + ErrorNumber : UINT; (*Current error number to be displayed *) + StatusID : DINT; + Confirm : BOOL; (*Confirms the operation*) + Cancel : BOOL; (*Cancels the operation*) + END_STRUCT; + MpAuditInfoType : STRUCT + Diag : MpAuditDiagType; (*Diagnostic structure for the status ID*) + END_STRUCT; + MpAuditQueryInfoType : STRUCT + AvailableSpace : UDINT; (*Number of available "rows" in the PV configured for the query*) + RowsRead : UDINT; (*Actual number of rows read by the query*) + HasMoreRows : BOOL; (*Query is complete (alll data read and copied to PV)*) + Diag : MpAuditDiagType; (*Diagnostic structure for the status ID*) + END_STRUCT; + MpAuditTrailInfoType : STRUCT + NumberArchives : UINT; (*Number of available archives*) + Diag : MpAuditDiagType; (*Diagnostic structure for the status ID*) + END_STRUCT; + MpAuditDiagType : STRUCT + StatusID : MpAuditStatusIDType; (*StatusID diagnostic structure *) + END_STRUCT; + MpAuditStatusIDType : STRUCT + ID : MpAuditErrorEnum; (*Error code for mapp component*) + Severity : MpComSeveritiesEnum; (*Describes the type of information supplied by the status ID (success, information, warning, error)*) + Code : UINT; (*Code for the status ID. This error number can be used to search for additional information in the help system*) + END_STRUCT; + MpAuditTrailUIOutputType : STRUCT + EventID : ARRAY[0..19]OF UINT; (*List of IDs from all events meeting the current filter criteria*) + EventText : ARRAY[0..19]OF WSTRING[100]; (*List of all events meeting the current filter criteria*) + PageUp : BOOL; (*Jumps to the start of the current page and then scrolls up one page at a time The size of the page is defined using the "EventListSize" parameter in the MpAuditTrailUISetupType structure*) + StepUp : BOOL; (*Selects the previous entry in the list*) + StepDown : BOOL; (*Selects the next entry in the list*) + PageDown : BOOL; (*Jumps to the end of the current page and then scrolls down one page at a time The size of the page is defined using the "EventListSize" parameter in the MpAuditTrailUISetupType structure*) + RangeStart : REAL; (*Shows a bar indicating which part of the list is currently being displayed. Used for the starting value of "Range" for a scaled element in the HMI application*) + RangeEnd : REAL; (*Shows a bar indicating which part of the list is currently being displayed. Used for the ending value of "Range" for a scaled element in the HMI application*) + END_STRUCT; + MpAuditTrailUICurrDTFilterType : STRUCT + Enable : BOOL; (*Enables the filter*) + DateTime : DATE_AND_TIME; (*Time from/to which filtering should take place*) + END_STRUCT; + MpAuditTrailUISetDTFilterType : STRUCT + Enable : BOOL; (*Enables the filter*) + Year : UINT; (*Year from/to which filtering should take place*) + Month : USINT; (*Month from/to which filtering should take place*) + Day : USINT; (*Day from/to which filtering should take place*) + Hour : USINT; (*Hour from/to which filtering should take place*) + Minute : USINT; (*Minute from/to which filtering should take place*) + END_STRUCT; + MpAuditTrailUIEventFilterType : STRUCT + Enable : BOOL; (*Enables the filter*) + Exclude : BOOL; (*Either only this event type (FALSE) or all but this event type (TRUE)*) + Event : ARRAY[0..4]OF UDINT; (*Events that should be filtered*) + END_STRUCT; + MpAuditTrailUIOpFilterType : STRUCT + Enable : BOOL; (*Enables the filter*) + Exclude : BOOL; (*Only this user (FALSE) / All other users (TRUE)*) + Name : WSTRING[50]; (*Operator name*) + END_STRUCT; + MpAuditTrailUIPatternFilterType : STRUCT + Enable : BOOL; (*Enables the filter*) + Exclude : BOOL; (*Select events matching the pattern (FALSE) or all other events (TRUE)*) + Compare : WSTRING[50]; (*String Pattern containing wildcards (* and ?) that is applied on the event-message*) + END_STRUCT; + MpAuditTrailUIBatchFilterType : STRUCT + Enable : BOOL; (*Enables the filter*) + Name : WSTRING[50]; (*Name (identifier) of batch to be included in output*) + END_STRUCT; + MpAuditTrailUIFilterDialogType : STRUCT + LayerStatus : UINT; (*Status data point for the default layer of the visualization page where the filter is configured*) + From : MpAuditTrailUISetDTFilterType; (*Time from which events are displayed*) + Until : MpAuditTrailUISetDTFilterType; (*Time until which events are displayed*) + Event : MpAuditTrailUIEventFilterType; (*Defines which events are displayed*) + Operator : MpAuditTrailUIOpFilterType; (*Determines from which user events are displayed*) + Confirm : BOOL; (*Confirms the operation*) + Cancel : BOOL; (*Cancels the operation*) + Pattern : MpAuditTrailUIPatternFilterType; (*Event-message filter (pattern matching)*) + Batch : MpAuditTrailUIBatchFilterType; (*Batch filter*) + END_STRUCT; + MpAuditTrailUICurrentFilterType : STRUCT + From : MpAuditTrailUICurrDTFilterType; (*Time from which events are displayed*) + Until : MpAuditTrailUICurrDTFilterType; (*Time until which events are displayed*) + Event : MpAuditTrailUIEventFilterType; (*Defines which events are displayed*) + Operator : MpAuditTrailUIOpFilterType; (*Determines from which user events are displayed*) + Pattern : MpAuditTrailUIPatternFilterType; (*Event-message filter (pattern matching)*) + Batch : MpAuditTrailUIBatchFilterType; (*Batch filter*) + END_STRUCT; + MpAuditUIFilterType : STRUCT + ShowDialog : BOOL; (*Command that opens the dialog box*) + Dialog : MpAuditTrailUIFilterDialogType; (*Window for selecting an event filter*) + Current : MpAuditTrailUICurrentFilterType; (*Displays the current filter*) + DefaultLayerStatus : UINT; (*Status data point for the default layer of the visualization page on which the filter options are available*) + END_STRUCT; + MpAuditVC4EventInternalType : STRUCT + hEventSys : UDINT; + END_STRUCT; + MpAuditMonitorInternalType : STRUCT + Handle : UDINT; + END_STRUCT; +END_TYPE diff --git a/mappFramework/Logical/Libraries/MpAudit/MpAuditAlarm.typ b/mappFramework/Logical/Libraries/MpAudit/MpAuditAlarm.typ new file mode 100644 index 00000000..d61b184c --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/MpAuditAlarm.typ @@ -0,0 +1,8 @@ + +TYPE + MpAuditTrailAlarmEnum : + ( (* Alarms of MpAudit Trail *) + mpAUDIT_ALM_ARCHIVE_AVAILABLE := 0, (* Archive is available for export *) + mpAUDIT_ALM_ARCHIVE_OVERFLOW := 1 (* Max. number of archives reached - archiving stopped *) + ); +END_TYPE diff --git a/mappFramework/Logical/Libraries/MpAudit/MpAuditError.typ b/mappFramework/Logical/Libraries/MpAudit/MpAuditError.typ new file mode 100644 index 00000000..549c0961 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/MpAuditError.typ @@ -0,0 +1,44 @@ + +TYPE + MpAuditErrorEnum : + ( (* Error numbers of library MpAudit *) + mpAUDIT_NO_ERROR := 0, (* No error *) + mpAUDIT_ERR_ACTIVATION := -1064239103, (* Could not create component [Error: 1, 0xc0910001] *) + mpAUDIT_ERR_MPLINK_NULL := -1064239102, (* MpLink is NULL pointer [Error: 2, 0xc0910002] *) + mpAUDIT_ERR_MPLINK_INVALID := -1064239101, (* MpLink connection not allowed [Error: 3, 0xc0910003] *) + mpAUDIT_ERR_MPLINK_CHANGED := -1064239100, (* MpLink modified [Error: 4, 0xc0910004] *) + mpAUDIT_ERR_MPLINK_CORRUPT := -1064239099, (* Invalid MpLink contents [Error: 5, 0xc0910005] *) + mpAUDIT_ERR_MPLINK_IN_USE := -1064239098, (* MpLink already in use [Error: 6, 0xc0910006] *) + mpAUDIT_ERR_CONFIG_NULL := -1064239096, (* Configuration structure is null pointer [Error: 8, 0xc0910008] *) + mpAUDIT_ERR_CONFIG_NO_PV := -1064239095, (* Configuration pointer not PV [Error: 9, 0xc0910009] *) + mpAUDIT_ERR_CONFIG_LOAD := -1064239094, (* Error loading configuration [Error: 10, 0xc091000a] *) + mpAUDIT_WRN_CONFIG_LOAD := -2137980917, (* Warning loading configuration [Warning: 11, 0x8091000b] *) + mpAUDIT_ERR_CONFIG_SAVE := -1064239092, (* Error saving configuration [Error: 12, 0xc091000c] *) + mpAUDIT_ERR_CONFIG_INVALID := -1064239091, (* Invalid Configuration [Error: 13, 0xc091000d] *) + mpAUDIT_ERR_TEXT_SOURCE := -1064124508, (* Text source not found [Error: 49060, 0xc092bfa4] *) + mpAUDIT_ERR_TEXT_NAMESPACE := -1064124507, (* Text not found in text source [Error: 49061, 0xc092bfa5] *) + mpAUDIT_ERR_TEXT_IDENT := -1064124506, (* Text ID not found [Error: 49062, 0xc092bfa6] *) + mpAUDIT_ERR_LANGUAGE := -1064124505, (* Language not found [Error: 49063, 0xc092bfa7] *) + mpAUDIT_WRN_LANGUAGE_FALLBACK := -2137866328, (* Fallback-language being used [Warning: 49064, 0x8092bfa8] *) + mpAUDIT_WRN_LANGUAGE_IGNORED := -2137866327, (* "Language" input not evaluated [Warning: 49065, 0x8092bfa9] *) + mpAUDIT_ERR_ARCHIVE_NOT_FOUND := -1064124502, (* Archive not found [Error: 49066, 0xc092bfaa] *) + mpAUDIT_ERR_ARCHIVE_WRITE := -1064124501, (* Error writing archive [Error: 49067, 0xc092bfab] *) + mpAUDIT_ERR_TEXT_OVERFLOW := -1064124500, (* Text too long [Error: 49068, 0xc092bfac] *) + mpAUDIT_ERR_BUFFER_CREATE := -1064124499, (* Could not allocate memory [Error: 49069, 0xc092bfad] *) + mpAUDIT_ERR_WRITE_EXPORT_FILE := -1064124498, (* Error writing export-file [Error: 49070, 0xc092bfae] *) + mpAUDIT_ERR_READ_BUFFER_ENTRIES := -1064124497, (* Error reading events [Error: 49071, 0xc092bfaf] *) + mpAUDIT_INF_ARCHIVE_NO_ENTRIES := 1083359152, (* Archive has no entries [Informational: 49072, 0x4092bfb0] *) + mpAUDIT_ERR_EVENT_RECORDER := -1064124495, (* Event not recorded [Error: 49073, 0xc092bfb1] *) + mpAUDIT_ERR_INVALID_FILE_DEV := -1064124494, (* Invalid file-device [Error: 49074, 0xc092bfb2] *) + mpAUDIT_ERR_MAX_ARCHIVES := -1064124493, (* Maximum number of archives reached [Error: 49075, 0xc092bfb3] *) + mpAUDIT_ERR_MISSING_UICONNECT := -1064124492, (* Missing value on UIConnect [Error: 49076, 0xc092bfb4] *) + mpAUDIT_INF_WAIT_AUDIT_FB := 1083359157, (* UI-FB is waiting for MpAuditTrail to get active [Informational: 49077, 0x4092bfb5] *) + mpAUDIT_ERR_READ_VC_EVENTS := -1064124490, (* Could not read VC4-event errors [Error: 49078, 0xc092bfb6] *) + mpAUDIT_WRN_OPC_AUDIT_DISABLED := -2137866313, (*Opc Auditing is disabled [Error: 49079, 0x8092bfb7]*) + mpAUDIT_ERR_MONITOR_PV := -1064124488, (*PV to monitor not found [Error: 49080, 0xc092bfb8]*) + mpAUDIT_ERR_NO_BATCHID := -1064124487, (*No batch-ID given [Error: 49081, 0xc092bfb9]*) + mpAUDIT_ERR_MEASUREMENT_SYSTEM := -1064124486, (*Invalid measurement system given [Error: 49082, 0xc092bfba]*) + mpAUDIT_ERR_QUERY_NOT_FOUND := -1064124485, (*Query with given name not found [Error: 49083, 0xc092bfbb]*) + mpAUDIT_INF_QUERY_NO_DATA := 1083359164 (*No data for query [Error: 49084, 0x4092bfbc]*) + ); +END_TYPE diff --git a/mappFramework/Logical/Libraries/MpAudit/SG4/ARM/MpAudit.br b/mappFramework/Logical/Libraries/MpAudit/SG4/ARM/MpAudit.br new file mode 100644 index 00000000..f991205d Binary files /dev/null and b/mappFramework/Logical/Libraries/MpAudit/SG4/ARM/MpAudit.br differ diff --git a/mappFramework/Logical/Libraries/MpAudit/SG4/ARM/libMpAudit.a b/mappFramework/Logical/Libraries/MpAudit/SG4/ARM/libMpAudit.a new file mode 100644 index 00000000..1208f088 Binary files /dev/null and b/mappFramework/Logical/Libraries/MpAudit/SG4/ARM/libMpAudit.a differ diff --git a/mappFramework/Logical/Libraries/MpAudit/SG4/IA32/MpAudit.br b/mappFramework/Logical/Libraries/MpAudit/SG4/IA32/MpAudit.br new file mode 100644 index 00000000..6f68d3cf Binary files /dev/null and b/mappFramework/Logical/Libraries/MpAudit/SG4/IA32/MpAudit.br differ diff --git a/mappFramework/Logical/Libraries/MpAudit/SG4/IA32/libMpAudit.a b/mappFramework/Logical/Libraries/MpAudit/SG4/IA32/libMpAudit.a new file mode 100644 index 00000000..94c59b0f Binary files /dev/null and b/mappFramework/Logical/Libraries/MpAudit/SG4/IA32/libMpAudit.a differ diff --git a/mappFramework/Logical/Libraries/MpAudit/SG4/MpAudit.h b/mappFramework/Logical/Libraries/MpAudit/SG4/MpAudit.h new file mode 100644 index 00000000..a5069b33 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/SG4/MpAudit.h @@ -0,0 +1,555 @@ +/* Automation Studio generated header file */ +/* Do not edit ! */ +/* MpAudit 5.18.0 */ + +#ifndef _MPAUDIT_ +#define _MPAUDIT_ +#ifdef __cplusplus +extern "C" +{ +#endif +#ifndef _MpAudit_VERSION +#define _MpAudit_VERSION 5.18.0 +#endif + +#include + +#ifndef _BUR_PUBLIC +#define _BUR_PUBLIC +#endif +#ifdef _SG3 + #include "MpBase.h" +#endif + +#ifdef _SG4 + #include "MpBase.h" +#endif + +#ifdef _SGC + #include "MpBase.h" +#endif + + + +/* Datatypes and datatypes of function blocks */ +typedef enum MpAuditTrailUIStatusEnum +{ mpAUDIT_UI_STATUS_IDLE, + mpAUDIT_UI_STATUS_UPDATE, + mpAUDIT_UI_STATUS_FILTER, + mpAUDIT_UI_STATUS_EXPORT, + mpAUDIT_UI_STATUS_ERROR +} MpAuditTrailUIStatusEnum; + +typedef enum MpAuditFileTypeEnum +{ mpAUDIT_FILE_TYPE_TXT = 0, + mpAUDIT_FILE_TYPE_XML = 1, + mpAUDIT_FILE_TYPE_PDF = 2 +} MpAuditFileTypeEnum; + +typedef enum MpAuditArchiveModeEnum +{ mpAUDIT_ARCHIVE_DAILY = 0, + mpAUDIT_ARCHIVE_MO_TO_FR = 1, + mpAUDIT_ARCHIVE_BATCH = 2 +} MpAuditArchiveModeEnum; + +typedef enum MpAuditFontTypeEnum +{ mpAUDIT_FONT_COURIER = 0, + mpAUDIT_FONT_HELVETICA = 1, + mpAUDIT_FONT_TIMESROMAN = 2, + mpAUDIT_FONT_SIMSUN = 3, + mpAUDIT_FONT_SIMHEI = 4, + mpAUDIT_FONT_MINGLIU = 5, + mpAUDIT_FONT_MINCYO = 6, + mpAUDIT_FONT_GOTHIC = 7, + mpAUDIT_FONT_PMINCYO = 8, + mpAUDIT_FONT_PGOTHIC = 9, + mpAUDIT_FONT_DOTUMCHE = 10, + mpAUDIT_FONT_DOTUM = 11, + mpAUDIT_FONT_BATANGCHE = 12, + mpAUDIT_FONT_BATANG = 13 +} MpAuditFontTypeEnum; + +typedef enum MpAuditPageFormatEnum +{ mpAUDIT_PAGE_FORMAT_UNDEFINED = 0, + mpAUDIT_PAGE_FORMAT_LETTER = 1, + mpAUDIT_PAGE_FORMAT_LEGAL = 2, + mpAUDIT_PAGE_FORMAT_A3 = 3, + mpAUDIT_PAGE_FORMAT_A4 = 4, + mpAUDIT_PAGE_FORMAT_A5 = 5, + mpAUDIT_PAGE_FORMAT_B4 = 6, + mpAUDIT_PAGE_FORMAT_B5 = 7 +} MpAuditPageFormatEnum; + +typedef enum MpAuditPageDirectionEnum +{ mpAUDIT_PAGE_DIRECTION_UNDEFINED = 0, + mpAUDIT_PAGE_DIRECTION_PORTRAIT = 1, + mpAUDIT_PAGE_DIRECTION_LANDSCAPE = 2 +} MpAuditPageDirectionEnum; + +typedef enum MpAuditPageMarginEnum +{ mpAUDIT_PAGE_MARGIN_NORMAL = 0, + mpAUDIT_PAGE_MARGIN_NARROW = 1, + mpAUDIT_PAGE_MARGIN_MODERATE = 2, + mpAUDIT_PAGE_MARGIN_WIDE = 3 +} MpAuditPageMarginEnum; + +typedef enum MpAuditQueryModeEnum +{ mpAUDIT_QUERY_MODE_ALL, + mpAUDIT_QUERY_MODE_NEW +} MpAuditQueryModeEnum; + +typedef enum MpAuditMemoryEnum +{ mpAUDIT_MEM_TEMP = 0, + mpAUDIT_MEM_ROM = 1, + mpAUDIT_MEM_SRAM = 2, + mpAUDIT_MEM_BUFFERD_ROM = 3 +} MpAuditMemoryEnum; + +typedef enum MpAuditTextSourceEnum +{ mpAUDIT_TEXT_SOURCE_NONE = 0, + mpAUDIT_TEXT_SOURCE_VC4 = 1, + mpAUDIT_TEXT_SOURCE_TEXTSYS = 2 +} MpAuditTextSourceEnum; + +typedef enum MpAuditUIMessageEnum +{ mpAUDIT_UI_MSG_NONE = 0, + mpAUDIT_UI_MSG_ERROR = 1 +} MpAuditUIMessageEnum; + +typedef enum MpAuditErrorEnum +{ mpAUDIT_NO_ERROR = 0, + mpAUDIT_ERR_ACTIVATION = -1064239103, + mpAUDIT_ERR_MPLINK_NULL = -1064239102, + mpAUDIT_ERR_MPLINK_INVALID = -1064239101, + mpAUDIT_ERR_MPLINK_CHANGED = -1064239100, + mpAUDIT_ERR_MPLINK_CORRUPT = -1064239099, + mpAUDIT_ERR_MPLINK_IN_USE = -1064239098, + mpAUDIT_ERR_CONFIG_NULL = -1064239096, + mpAUDIT_ERR_CONFIG_NO_PV = -1064239095, + mpAUDIT_ERR_CONFIG_LOAD = -1064239094, + mpAUDIT_WRN_CONFIG_LOAD = -2137980917, + mpAUDIT_ERR_CONFIG_SAVE = -1064239092, + mpAUDIT_ERR_CONFIG_INVALID = -1064239091, + mpAUDIT_ERR_TEXT_SOURCE = -1064124508, + mpAUDIT_ERR_TEXT_NAMESPACE = -1064124507, + mpAUDIT_ERR_TEXT_IDENT = -1064124506, + mpAUDIT_ERR_LANGUAGE = -1064124505, + mpAUDIT_WRN_LANGUAGE_FALLBACK = -2137866328, + mpAUDIT_WRN_LANGUAGE_IGNORED = -2137866327, + mpAUDIT_ERR_ARCHIVE_NOT_FOUND = -1064124502, + mpAUDIT_ERR_ARCHIVE_WRITE = -1064124501, + mpAUDIT_ERR_TEXT_OVERFLOW = -1064124500, + mpAUDIT_ERR_BUFFER_CREATE = -1064124499, + mpAUDIT_ERR_WRITE_EXPORT_FILE = -1064124498, + mpAUDIT_ERR_READ_BUFFER_ENTRIES = -1064124497, + mpAUDIT_INF_ARCHIVE_NO_ENTRIES = 1083359152, + mpAUDIT_ERR_EVENT_RECORDER = -1064124495, + mpAUDIT_ERR_INVALID_FILE_DEV = -1064124494, + mpAUDIT_ERR_MAX_ARCHIVES = -1064124493, + mpAUDIT_ERR_MISSING_UICONNECT = -1064124492, + mpAUDIT_INF_WAIT_AUDIT_FB = 1083359157, + mpAUDIT_ERR_READ_VC_EVENTS = -1064124490, + mpAUDIT_WRN_OPC_AUDIT_DISABLED = -2137866313, + mpAUDIT_ERR_MONITOR_PV = -1064124488, + mpAUDIT_ERR_NO_BATCHID = -1064124487, + mpAUDIT_ERR_MEASUREMENT_SYSTEM = -1064124486, + mpAUDIT_ERR_QUERY_NOT_FOUND = -1064124485, + mpAUDIT_INF_QUERY_NO_DATA = 1083359164 +} MpAuditErrorEnum; + +typedef enum MpAuditTrailAlarmEnum +{ mpAUDIT_ALM_ARCHIVE_AVAILABLE = 0, + mpAUDIT_ALM_ARCHIVE_OVERFLOW = 1 +} MpAuditTrailAlarmEnum; + +typedef struct MpAuditDisplayTextSourceType +{ plcstring FormatSource[101]; + plcstring Format[256]; +} MpAuditDisplayTextSourceType; + +typedef struct MpAuditErrorMessageType +{ plcstring TextNotFound[21]; + plcstring SpecifierInvalid[21]; +} MpAuditErrorMessageType; + +typedef struct MpAuditTextSourceType +{ enum MpAuditTextSourceEnum Type; + plcstring Name[51]; + plcstring OutputFormat[256]; + plcstring OutputFormatSource[101]; + struct MpAuditDisplayTextSourceType Display; + struct MpAuditErrorMessageType ErrorMessage; +} MpAuditTextSourceType; + +typedef struct MpAuditLanguageFontType +{ plcstring Language[21]; + enum MpAuditFontTypeEnum Font; +} MpAuditLanguageFontType; + +typedef struct MpAuditPdfTitleType +{ plcbit Enable; + plcstring Text[101]; +} MpAuditPdfTitleType; + +typedef struct MpAuditExportPdfType +{ enum MpAuditFontTypeEnum DefaultFont; + enum MpAuditPageFormatEnum Format; + enum MpAuditPageDirectionEnum Direction; + enum MpAuditPageMarginEnum Margins; + plcstring OwnerPassword[51]; + plcstring UserPassword[51]; + plcbit AllowPrint; + plcbit AllowCopy; + plcbit AllowEdit; + plcstring Icon[101]; + plcstring Header[101]; + struct MpAuditPdfTitleType Title; + struct MpAuditLanguageFontType Fonts[5]; +} MpAuditExportPdfType; + +typedef struct MpAuditExportType +{ plcstring FileNamePattern[51]; + plcstring ArchiveNamePattern[51]; + plcstring PassPhrase[101]; + plcbit Encrypt; + plcbit RawData; + enum MpAuditFileTypeEnum FileType; + struct MpAuditExportPdfType PDF; +} MpAuditExportType; + +typedef struct MpAuditTrailUICurrDTFilterType +{ plcbit Enable; + plcdt DateTime; +} MpAuditTrailUICurrDTFilterType; + +typedef struct MpAuditTrailUIEventFilterType +{ plcbit Enable; + plcbit Exclude; + unsigned long Event[5]; +} MpAuditTrailUIEventFilterType; + +typedef struct MpAuditTrailUIOpFilterType +{ plcbit Enable; + plcbit Exclude; + plcwstring Name[51]; +} MpAuditTrailUIOpFilterType; + +typedef struct MpAuditTrailUIPatternFilterType +{ plcbit Enable; + plcbit Exclude; + plcwstring Compare[51]; +} MpAuditTrailUIPatternFilterType; + +typedef struct MpAuditTrailUIBatchFilterType +{ plcbit Enable; + plcwstring Name[51]; +} MpAuditTrailUIBatchFilterType; + +typedef struct MpAuditExportFilterType +{ struct MpAuditTrailUICurrDTFilterType From; + struct MpAuditTrailUICurrDTFilterType Until; + struct MpAuditTrailUIEventFilterType Event; + struct MpAuditTrailUIOpFilterType Operator; + struct MpAuditTrailUIPatternFilterType Pattern; + struct MpAuditTrailUIBatchFilterType Batch; +} MpAuditExportFilterType; + +typedef struct MpAuditArchiveType +{ plcbit Enable; + enum MpAuditArchiveModeEnum Mode; + plctod Time; + unsigned long MaxSize; +} MpAuditArchiveType; + +typedef struct MpAuditTrailConfigType +{ unsigned short Events[10]; + unsigned long RecordingSize; + unsigned long SramBufferSize; + enum MpAuditMemoryEnum RecordMemory; + struct MpAuditTextSourceType TextSource; + struct MpAuditArchiveType Archive; + struct MpAuditExportType Export; +} MpAuditTrailConfigType; + +typedef struct MpAuditTrailUISetupType +{ unsigned short EventListSize; + unsigned char ScrollWindow; +} MpAuditTrailUISetupType; + +typedef struct MpAuditTrailUIOutputType +{ unsigned short EventID[20]; + plcwstring EventText[20][101]; + plcbit PageUp; + plcbit StepUp; + plcbit StepDown; + plcbit PageDown; + float RangeStart; + float RangeEnd; +} MpAuditTrailUIOutputType; + +typedef struct MpAuditTrailUISetDTFilterType +{ plcbit Enable; + unsigned short Year; + unsigned char Month; + unsigned char Day; + unsigned char Hour; + unsigned char Minute; +} MpAuditTrailUISetDTFilterType; + +typedef struct MpAuditTrailUIFilterDialogType +{ unsigned short LayerStatus; + struct MpAuditTrailUISetDTFilterType From; + struct MpAuditTrailUISetDTFilterType Until; + struct MpAuditTrailUIEventFilterType Event; + struct MpAuditTrailUIOpFilterType Operator; + plcbit Confirm; + plcbit Cancel; + struct MpAuditTrailUIPatternFilterType Pattern; + struct MpAuditTrailUIBatchFilterType Batch; +} MpAuditTrailUIFilterDialogType; + +typedef struct MpAuditTrailUICurrentFilterType +{ struct MpAuditTrailUICurrDTFilterType From; + struct MpAuditTrailUICurrDTFilterType Until; + struct MpAuditTrailUIEventFilterType Event; + struct MpAuditTrailUIOpFilterType Operator; + struct MpAuditTrailUIPatternFilterType Pattern; + struct MpAuditTrailUIBatchFilterType Batch; +} MpAuditTrailUICurrentFilterType; + +typedef struct MpAuditUIFilterType +{ plcbit ShowDialog; + struct MpAuditTrailUIFilterDialogType Dialog; + struct MpAuditTrailUICurrentFilterType Current; + unsigned short DefaultLayerStatus; +} MpAuditUIFilterType; + +typedef struct MpAuditUIMessageBoxType +{ unsigned short LayerStatus; + enum MpAuditUIMessageEnum Type; + unsigned short ErrorNumber; + signed long StatusID; + plcbit Confirm; + plcbit Cancel; +} MpAuditUIMessageBoxType; + +typedef struct MpAuditTrailUIConnectType +{ enum MpAuditTrailUIStatusEnum Status; + struct MpAuditTrailUIOutputType Output; + struct MpAuditUIFilterType Filter; + plcbit Export; + struct MpAuditUIMessageBoxType MessageBox; +} MpAuditTrailUIConnectType; + +typedef struct MpAuditStatusIDType +{ enum MpAuditErrorEnum ID; + MpComSeveritiesEnum Severity; + unsigned short Code; +} MpAuditStatusIDType; + +typedef struct MpAuditDiagType +{ struct MpAuditStatusIDType StatusID; +} MpAuditDiagType; + +typedef struct MpAuditInfoType +{ struct MpAuditDiagType Diag; +} MpAuditInfoType; + +typedef struct MpAuditQueryInfoType +{ unsigned long AvailableSpace; + unsigned long RowsRead; + plcbit HasMoreRows; + struct MpAuditDiagType Diag; +} MpAuditQueryInfoType; + +typedef struct MpAuditTrailInfoType +{ unsigned short NumberArchives; + struct MpAuditDiagType Diag; +} MpAuditTrailInfoType; + +typedef struct MpAuditVC4EventInternalType +{ unsigned long hEventSys; +} MpAuditVC4EventInternalType; + +typedef struct MpAuditMonitorInternalType +{ unsigned long Handle; +} MpAuditMonitorInternalType; + +typedef struct MpAuditTrailConfig +{ + /* VAR_INPUT (analog) */ + struct MpComIdentType* MpLink; + struct MpAuditTrailConfigType* Configuration; + /* VAR_OUTPUT (analog) */ + signed long StatusID; + struct MpAuditTrailInfoType Info; + /* VAR (analog) */ + struct MpComInternalDataType Internal; + /* VAR_INPUT (digital) */ + plcbit Enable; + plcbit ErrorReset; + plcbit Load; + plcbit Save; + /* VAR_OUTPUT (digital) */ + plcbit Active; + plcbit Error; + plcbit CommandBusy; + plcbit CommandDone; +} MpAuditTrailConfig_typ; + +typedef struct MpAuditTrailUI +{ + /* VAR_INPUT (analog) */ + struct MpComIdentType* MpLink; + struct MpAuditTrailUISetupType UISetup; + plcstring (*Language); + struct MpAuditTrailUIConnectType* UIConnect; + /* VAR_OUTPUT (analog) */ + signed long StatusID; + struct MpAuditInfoType Info; + /* VAR (analog) */ + struct MpComInternalDataType Internal; + /* VAR_INPUT (digital) */ + plcbit Enable; + plcbit ErrorReset; + plcbit Refresh; + /* VAR_OUTPUT (digital) */ + plcbit Active; + plcbit Error; +} MpAuditTrailUI_typ; + +typedef struct MpAuditTrail +{ + /* VAR_INPUT (analog) */ + struct MpComIdentType* MpLink; + plcstring (*Language); + plcstring (*DeviceName); + /* VAR_OUTPUT (analog) */ + signed long StatusID; + unsigned long CurrentRecord; + struct MpAuditTrailInfoType Info; + /* VAR (analog) */ + struct MpComInternalDataType Internal; + /* VAR_INPUT (digital) */ + plcbit Enable; + plcbit ErrorReset; + plcbit Export; + plcbit ExportArchive; + /* VAR_OUTPUT (digital) */ + plcbit Active; + plcbit Error; + plcbit CommandBusy; + plcbit CommandDone; + plcbit ArchiveAvailable; +} MpAuditTrail_typ; + +typedef struct MpAuditVC4Event +{ + /* VAR_INPUT (analog) */ + struct MpComIdentType* MpLink; + unsigned short MinUserID; + unsigned short MaxUserID; + /* VAR_OUTPUT (analog) */ + signed long StatusID; + /* VAR (analog) */ + struct MpAuditVC4EventInternalType Internal; + /* VAR_INPUT (digital) */ + plcbit Enable; + plcbit ErrorReset; + plcbit Localize; + /* VAR_OUTPUT (digital) */ + plcbit Active; + plcbit Error; +} MpAuditVC4Event_typ; + +typedef struct MpAuditRegPar +{ + /* VAR_INPUT (analog) */ + struct MpComIdentType* MpLink; + plcstring (*PVName); + plcstring (*Identiffier); + /* VAR_OUTPUT (analog) */ + signed long StatusID; + struct MpAuditTrailInfoType Info; + /* VAR (analog) */ + struct MpComInternalDataType Internal; + /* VAR_INPUT (digital) */ + plcbit Enable; + plcbit ErrorReset; + /* VAR_OUTPUT (digital) */ + plcbit Active; + plcbit Error; +} MpAuditRegPar_typ; + +typedef struct MpAuditExport +{ + /* VAR_INPUT (analog) */ + struct MpComIdentType* MpLink; + struct MpAuditExportFilterType* Filter; + unsigned long ToRecord; + plcstring (*Language); + plcstring (*DeviceName); + /* VAR_OUTPUT (analog) */ + signed long StatusID; + unsigned long Record; + struct MpAuditInfoType Info; + /* VAR (analog) */ + struct MpComInternalDataType Internal; + /* VAR_INPUT (digital) */ + plcbit Enable; + plcbit ErrorReset; + plcbit Export; + /* VAR_OUTPUT (digital) */ + plcbit Active; + plcbit Error; + plcbit CommandBusy; + plcbit CommandDone; +} MpAuditExport_typ; + +typedef struct MpAuditQuery +{ + /* VAR_INPUT (analog) */ + struct MpComIdentType* MpLink; + enum MpAuditQueryModeEnum Mode; + plcstring (*Name); + plcstring (*Language); + /* VAR_OUTPUT (analog) */ + signed long StatusID; + struct MpAuditQueryInfoType Info; + /* VAR (analog) */ + struct MpComInternalDataType Internal; + /* VAR_INPUT (digital) */ + plcbit Enable; + plcbit ErrorReset; + plcbit Execute; + plcbit Next; + /* VAR_OUTPUT (digital) */ + plcbit Active; + plcbit Error; + plcbit CommandBusy; + plcbit CommandDone; +} MpAuditQuery_typ; + + + +/* Prototyping of functions and function blocks */ +_BUR_PUBLIC void MpAuditTrailConfig(struct MpAuditTrailConfig* inst); +_BUR_PUBLIC void MpAuditTrailUI(struct MpAuditTrailUI* inst); +_BUR_PUBLIC void MpAuditTrail(struct MpAuditTrail* inst); +_BUR_PUBLIC void MpAuditVC4Event(struct MpAuditVC4Event* inst); +_BUR_PUBLIC void MpAuditRegPar(struct MpAuditRegPar* inst); +_BUR_PUBLIC void MpAuditExport(struct MpAuditExport* inst); +_BUR_PUBLIC void MpAuditQuery(struct MpAuditQuery* inst); +_BUR_PUBLIC signed long MpAuditWStringChange(struct MpComIdentType* MpLink, plcwstring* Old, plcwstring* New, plcstring* Identifier); +_BUR_PUBLIC signed long MpAuditStringChange(struct MpComIdentType* MpLink, plcstring* Old, plcstring* New, plcstring* Identifier); +_BUR_PUBLIC signed long MpAuditCustomEvent(struct MpComIdentType* MpLink, plcwstring* Type, plcwstring* Message, plcwstring* Comment); +_BUR_PUBLIC signed long MpAuditValueChange(struct MpComIdentType* MpLink, double Old, double New, plcstring* Identifier); +_BUR_PUBLIC signed long MpAuditClearBuffer(struct MpComIdentType* MpLink); +_BUR_PUBLIC signed long MpAuditStartBatch(struct MpComIdentType* MpLink, plcwstring* Name); + + +#ifdef __cplusplus +}; +#endif +#endif /* _MPAUDIT_ */ + diff --git a/mappFramework/Logical/Libraries/MpAudit/TxtCustom.tmx b/mappFramework/Logical/Libraries/MpAudit/TxtCustom.tmx new file mode 100644 index 00000000..5080e8b8 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/TxtCustom.tmx @@ -0,0 +1,14 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/Custom +
+ + + + Add Custom event texts here + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Libraries/MpAudit/TxtDatapoints.tmx b/mappFramework/Logical/Libraries/MpAudit/TxtDatapoints.tmx new file mode 100644 index 00000000..9d57d162 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/TxtDatapoints.tmx @@ -0,0 +1,9 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/DP +
+ + +
\ No newline at end of file diff --git a/mappFramework/Logical/Libraries/MpAudit/TxtEvent.tmx b/mappFramework/Logical/Libraries/MpAudit/TxtEvent.tmx new file mode 100644 index 00000000..2d643bc8 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/TxtEvent.tmx @@ -0,0 +1,97 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/Event +
+ + + + [%[TIME=%u%R]] [%op] [%ev$[TEXT=MpAudit/Event]] + + + [%[TIME=%u%R]] [%op] [%ev$[TEXT=MpAudit/Event]] + + + + + [%act$[TEXT=MpAudit/User]] + + + [%act$[TEXT=MpAudit/User]] + + + + + hat Wert [%dpid$[TEXT=MpAudit/DP]] von [%old] auf [%new] geändert + + + changed value of [%dpid$[TEXT=MpAudit/DP]] from [%old] to [%new] + + + + + hat Wert [%dpid$[TEXT=MpAudit/DP]] von [%old] auf [%new] [%unit] geändert + + + changed value of [%dpid$[TEXT=MpAudit/DP]] from [%old] to [%new] [%unit] + + + + + [%typ$[TEXT=MpAudit/Custom]] + + + [%typ$[TEXT=MpAudit/Custom]] + + + + + hat Wert [%dpid$[TEXT=MpAudit/DP]] von [%old] auf [%new] geändert + + + changed value of [%dpid$[TEXT=MpAudit/DP]] from [%old] to [%new] + + + + + Der Alarm [%name] hat einen neuen Status: von [%stold] zu [%stnew] + + + alarm [%name] changed state: [%stold] to [%stnew] + + + + + [%act$[TEXT=MpAudit/Recipe]] + + + [%act$[TEXT=MpAudit/Recipe]] + + + + + PackML Zustandsänderung: von [%old] zu [%new] + + + PackML State-Change: [%old] to [%new] + + + + + PackML Modusänderung: von [%old] zu [%new] + + + PackML Mode-Change: [%old] to [%new] + + + + + PackML Substatus-Änderung von [%old] zu [%new] + + + PackML Substate-Change: [%old] to [%new] + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Libraries/MpAudit/TxtEventF.tmx b/mappFramework/Logical/Libraries/MpAudit/TxtEventF.tmx new file mode 100644 index 00000000..2c65791b --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/TxtEventF.tmx @@ -0,0 +1,97 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/SysF/Event +
+ + + + {&evtime[TIME=%u%R]} {&op} {=$MpAudit/SysF/Event/{&ev}} + + + {&evtime[TIME=%u%R]} {&op} {=$MpAudit/SysF/Event/{&ev}} + + + + + {=$MpAudit/SysF/User/{&act}} + + + {=$MpAudit/SysF/User/{&act}} + + + + + hat Wert {&dpid} von {&old} auf {&new} geändert + + + changed value of {&dpid} from {&old} to {&new} + + + + + hat Wert (UserID: {&dpid}) von {&old} auf {&new} geändert + + + changed value of (UserID: {&dpid}) from {&old} to {&new} + + + + + {=$MpAudit/Custom/{&typ}} + + + {=$MpAudit/Custom/{&typ}} + + + + + hat Wert {=$MpAudit/DP/{&dpid}} von {&old} auf {&new} geändert + + + changed value of {=$MpAudit/DP/{&dpid}} from {&old} to {&new} + + + + + Alarm {&name} Status geändert: {&stold} -> {&stnew} + + + alarm {&name} changed state: {&stold} to {&stnew} + + + + + {=$MpAudit/SysF/Recipe/{&act}} + + + {=$MpAudit/SysF/Recipe/{&act}} + + + + + PackML Zustandsänderung: von {&old} zu {&new} + + + PackML State-Change: {&old} to {&new} + + + + + PackML Modusänderung: von {&old} zu {&new} + + + PackML Mode-Change: {&old} to {&new} + + + + + PackML Substatus-Änderung: von {&old} zu {&new} + + + PackML Substate-Change: {&old} to {&new} + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Libraries/MpAudit/TxtRecipe.tmx b/mappFramework/Logical/Libraries/MpAudit/TxtRecipe.tmx new file mode 100644 index 00000000..72b55803 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/TxtRecipe.tmx @@ -0,0 +1,52 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/Recipe +
+ + + + Start Laden von Rezept [%dev]:[%file] + + + Start Loading Recipe [%dev]:[%file] + + + Bonjour tout le monde! + + + + + Ende Laden von Rezept + + + End Loading Recipe + + + + + Rezept [%dev]:[%file] gespeichert + + + Saved Recipe [%dev]:[%file] + + + + + Rezept [%dev]:[%old] umbenannt auf [%new] + + + Renamed Recipe [%dev]:[%old] to [%new] + + + + + Rezept [%dev]:[%file] gelöscht + + + Deleted Recipe [%dev]:[%file] + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Libraries/MpAudit/TxtRecipeF.tmx b/mappFramework/Logical/Libraries/MpAudit/TxtRecipeF.tmx new file mode 100644 index 00000000..402a885c --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/TxtRecipeF.tmx @@ -0,0 +1,49 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/SysF/Recipe +
+ + + + Start Laden von Rezept {&dev}:{&file} + + + Start Loading Recipe {&dev}:{&file} + + + + + Ende Laden von Rezept + + + End Loading Recipe + + + + + Rezept {&dev}:{&file} gespeichert + + + Saved Recipe {&dev}:{&file} + + + + + Rezept {&dev}:{&old} umbenannt auf {&new} + + + Renamed Recipe {&dev}:{&old} to {&new} + + + + + Rezept {&dev}:{&file} gelöscht + + + Deleted Recipe {&dev}:{&file} + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Libraries/MpAudit/TxtUser.tmx b/mappFramework/Logical/Libraries/MpAudit/TxtUser.tmx new file mode 100644 index 00000000..c9f2ec0b --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/TxtUser.tmx @@ -0,0 +1,113 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/User +
+ + + + logged in + + + Angemeldet + + + + + logged out + + + Abgemeldet + + + + + was logged out (timeout) + + + Abgemeldet (Timeout) + + + + + added user [%usr] + + + Anwender [%usr] zugefügt + + + + + deleted user [%usr] + + + Anwender [%usr] gelöscht + + + + + locked user [%usr] + + + Anwender [%usr] gesperrt + + + + + unlocked user [%usr] + + + Anwender [%usr] entsperrt + + + + + got locked (incorrect password) + + + Gesperrt (inkorrektes Passwort) + + + + + has changed password + + + Passwort geändert + + + + + Incorrect name was entered + + + Falscher Name eingegeben + + + + + Incorrect password was entered + + + Falsches Passwort eingegeben + + + + + added new role [%usr] + + + Neue Rolle [%usr] zugefügt + + + + + deleted role [%usr] + + + Rolle [%usr] gelöscht + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Libraries/MpAudit/TxtUserF.tmx b/mappFramework/Logical/Libraries/MpAudit/TxtUserF.tmx new file mode 100644 index 00000000..a0f2970c --- /dev/null +++ b/mappFramework/Logical/Libraries/MpAudit/TxtUserF.tmx @@ -0,0 +1,113 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + MpAudit/SysF/User +
+ + + + Angemeldet + + + logged in + + + + + Abgemeldet + + + logged out + + + + + Abgemeldet (Timeout) + + + was logged out (timeout) + + + + + Anwender {&usr} zugefügt + + + added user {&usr} + + + + + Anwender {&usr} gelöscht + + + deleted user {&usr} + + + + + Anwender {&usr} gesperrt + + + locked user {&usr} + + + + + Anwender {&usr} entsperrt + + + unlocked user {&usr} + + + + + Gesperrt (inkorrektes Passwort) + + + got locked (incorrect password) + + + + + Passwort geändert + + + has changed password + + + + + Falscher Name eingegeben + + + Incorrect name was entered + + + + + Falsches Passwort eingegeben + + + Incorrect password was entered + + + + + Neue Rolle {&usr} zugefügt + + + added new role {&usr} + + + + + Rolle {&usr} gelöscht + + + deleted role {&usr} + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/Libraries/MpReport/Binary.lby b/mappFramework/Logical/Libraries/MpReport/Binary.lby new file mode 100644 index 00000000..d4ed0dfc --- /dev/null +++ b/mappFramework/Logical/Libraries/MpReport/Binary.lby @@ -0,0 +1,13 @@ + + + + + MpReport.typ + MpReportError.typ + MpReportAlarm.typ + MpReport.fun + + + + + \ No newline at end of file diff --git a/mappFramework/Logical/Libraries/MpReport/MpReport.fun b/mappFramework/Logical/Libraries/MpReport/MpReport.fun new file mode 100644 index 00000000..a8d361a5 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpReport/MpReport.fun @@ -0,0 +1,23 @@ + +FUNCTION_BLOCK MpReportCore (*Component provides the functionality to enerate pdf reports*) (* $GROUP=mapp Services,$CAT=PDF Report,$GROUPICON=Icon_mapp.png,$CATICON=Icon_MpReport.png *) + VAR_INPUT + MpLink : REFERENCE TO MpComIdentType; (*Connection to mapp*) (* *) (*#PAR#;*) + Enable : BOOL; (*Enables/Disables the function block*) (* *) (*#PAR#;*) + ErrorReset : BOOL; (*Resets function block errors*) (* *) (*#PAR#;*) + Name : REFERENCE TO STRING[50]; (*Name of Report*) (* *) (*#CMD#;*) + Language : REFERENCE TO STRING[20]; (*Report language*) (* *) (*#CMD#;*) + DeviceName : REFERENCE TO STRING[50]; (*File device (data storage medium) where the files are stored*) (* *) (*#CMD#;*) + Generate : BOOL; (*Create Report as PDF*) (* *) (*#CMD#;*) + END_VAR + VAR_OUTPUT + Active : BOOL; (*Indicates whether the function block is active*) (* *) (*#PAR#;*) + Error : BOOL; (*Indicates that the function block is in an error state or a command was not executed correctly *) (* *) (*#PAR#;*) + StatusID : DINT; (*Status information about the function block *) (* *) (*#PAR#; *) + CommandBusy : BOOL; (*Optional: Function block currently executing command*) (* *) (*#CMD#OPT#;*) + CommandDone : BOOL; (*Create report as PDF is finished*) (* *) (*#CMD#;*) + Info : MpReportCoreInfoType; (*Additional information about the component*) (* *) (*#CMD#; *) + END_VAR + VAR + Internal : {REDUND_UNREPLICABLE} MpComInternalDataType; (*Internal data*) + END_VAR +END_FUNCTION_BLOCK diff --git a/mappFramework/Logical/Libraries/MpReport/MpReport.typ b/mappFramework/Logical/Libraries/MpReport/MpReport.typ new file mode 100644 index 00000000..f9bd1701 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpReport/MpReport.typ @@ -0,0 +1,16 @@ + +TYPE + MpReportCoreInfoType : STRUCT + NumberOfReports : UDINT; (*Number of created reports*) + GeneratedFileName : STRING[50]; (*File name of created report*) + Diag : MpReportDiagType; (*Diagnostic structure for the status ID*) + END_STRUCT; + MpReportDiagType : STRUCT + StatusID : MpReportStatusIDType; (*StatusID diagnostic structure *) + END_STRUCT; + MpReportStatusIDType : STRUCT + ID : MpReportErrorEnum; (*Error code for mapp component*) + Severity : MpComSeveritiesEnum; (*Describes the type of information supplied by the status ID (success, information, warning, error)*) + Code : UINT; (*Code for the status ID. This error number can be used to search for additional information in the help system*) + END_STRUCT; +END_TYPE diff --git a/mappFramework/Logical/Libraries/MpReport/MpReportAlarm.typ b/mappFramework/Logical/Libraries/MpReport/MpReportAlarm.typ new file mode 100644 index 00000000..9277edbe --- /dev/null +++ b/mappFramework/Logical/Libraries/MpReport/MpReportAlarm.typ @@ -0,0 +1,7 @@ + +TYPE + MpReportCoreAlarmEnum : + ( (* Alarms of MpReport Core *) + mpREPORT_ALM_GENERATE_FAILED := 0 (* Report Generation Failed. *) + ); +END_TYPE diff --git a/mappFramework/Logical/Libraries/MpReport/MpReportError.typ b/mappFramework/Logical/Libraries/MpReport/MpReportError.typ new file mode 100644 index 00000000..6d2f0044 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpReport/MpReportError.typ @@ -0,0 +1,19 @@ + +TYPE + MpReportErrorEnum : + ( (* Error numbers of library MpReport *) + mpREPORT_NO_ERROR := 0, (* No error *) + mpREPORT_ERR_ACTIVATION := -1064239103, (* Could not create component [Error: 1, 0xc0910001] *) + mpREPORT_ERR_MPLINK_NULL := -1064239102, (* MpLink is NULL pointer [Error: 2, 0xc0910002] *) + mpREPORT_ERR_MPLINK_INVALID := -1064239101, (* MpLink connection not allowed [Error: 3, 0xc0910003] *) + mpREPORT_ERR_MPLINK_CHANGED := -1064239100, (* MpLink modified [Error: 4, 0xc0910004] *) + mpREPORT_ERR_MPLINK_CORRUPT := -1064239099, (* Invalid MpLink contents [Error: 5, 0xc0910005] *) + mpREPORT_ERR_MPLINK_IN_USE := -1064239098, (* MpLink already in use [Error: 6, 0xc0910006] *) + mpREPORT_ERR_CONFIG_INVALID := -1064239091, (* Invalid Configuration [Error: 13, 0xc091000d] *) + mpREPORT_ERR_TEXT_IDENT := -1064112128, (* Text not found in text system [Error: 61440, 0xc092f000] *) + mpREPORT_ERR_LANGUAGE := -1064112127, (* Language not found [Error: 61441, 0xc092f001] *) + mpREPORT_ERR_INVALID_FILE_DEV := -1064112126, (* Invalid file device [Error: 61442, 0xc092f002] *) + mpREPORT_ERR_INVALID_REPORT := -1064112125, (* Invalid report name [Error: 61443, 0xc092f003] *) + mpREPORT_ERR_GENERATE_REPORT := -1064112124 (* Error during report generation [Error: 61444, 0xc092f004] *) + ); +END_TYPE diff --git a/mappFramework/Logical/Libraries/MpReport/SG4/ARM/MpReport.br b/mappFramework/Logical/Libraries/MpReport/SG4/ARM/MpReport.br new file mode 100644 index 00000000..976506b8 Binary files /dev/null and b/mappFramework/Logical/Libraries/MpReport/SG4/ARM/MpReport.br differ diff --git a/mappFramework/Logical/Libraries/MpReport/SG4/ARM/libMpReport.a b/mappFramework/Logical/Libraries/MpReport/SG4/ARM/libMpReport.a new file mode 100644 index 00000000..0f43dac5 Binary files /dev/null and b/mappFramework/Logical/Libraries/MpReport/SG4/ARM/libMpReport.a differ diff --git a/mappFramework/Logical/Libraries/MpReport/SG4/IA32/MpReport.br b/mappFramework/Logical/Libraries/MpReport/SG4/IA32/MpReport.br new file mode 100644 index 00000000..1215f10f Binary files /dev/null and b/mappFramework/Logical/Libraries/MpReport/SG4/IA32/MpReport.br differ diff --git a/mappFramework/Logical/Libraries/MpReport/SG4/IA32/libMpReport.a b/mappFramework/Logical/Libraries/MpReport/SG4/IA32/libMpReport.a new file mode 100644 index 00000000..8ac83db9 Binary files /dev/null and b/mappFramework/Logical/Libraries/MpReport/SG4/IA32/libMpReport.a differ diff --git a/mappFramework/Logical/Libraries/MpReport/SG4/MpReport.h b/mappFramework/Logical/Libraries/MpReport/SG4/MpReport.h new file mode 100644 index 00000000..e8506716 --- /dev/null +++ b/mappFramework/Logical/Libraries/MpReport/SG4/MpReport.h @@ -0,0 +1,104 @@ +/* Automation Studio generated header file */ +/* Do not edit ! */ +/* MpReport 5.18.0 */ + +#ifndef _MPREPORT_ +#define _MPREPORT_ +#ifdef __cplusplus +extern "C" +{ +#endif +#ifndef _MpReport_VERSION +#define _MpReport_VERSION 5.18.0 +#endif + +#include + +#ifndef _BUR_PUBLIC +#define _BUR_PUBLIC +#endif +#ifdef _SG3 + #include "MpBase.h" +#endif + +#ifdef _SG4 + #include "MpBase.h" +#endif + +#ifdef _SGC + #include "MpBase.h" +#endif + + + +/* Datatypes and datatypes of function blocks */ +typedef enum MpReportErrorEnum +{ mpREPORT_NO_ERROR = 0, + mpREPORT_ERR_ACTIVATION = -1064239103, + mpREPORT_ERR_MPLINK_NULL = -1064239102, + mpREPORT_ERR_MPLINK_INVALID = -1064239101, + mpREPORT_ERR_MPLINK_CHANGED = -1064239100, + mpREPORT_ERR_MPLINK_CORRUPT = -1064239099, + mpREPORT_ERR_MPLINK_IN_USE = -1064239098, + mpREPORT_ERR_CONFIG_INVALID = -1064239091, + mpREPORT_ERR_TEXT_IDENT = -1064112128, + mpREPORT_ERR_LANGUAGE = -1064112127, + mpREPORT_ERR_INVALID_FILE_DEV = -1064112126, + mpREPORT_ERR_INVALID_REPORT = -1064112125, + mpREPORT_ERR_GENERATE_REPORT = -1064112124 +} MpReportErrorEnum; + +typedef enum MpReportCoreAlarmEnum +{ mpREPORT_ALM_GENERATE_FAILED = 0 +} MpReportCoreAlarmEnum; + +typedef struct MpReportStatusIDType +{ enum MpReportErrorEnum ID; + MpComSeveritiesEnum Severity; + unsigned short Code; +} MpReportStatusIDType; + +typedef struct MpReportDiagType +{ struct MpReportStatusIDType StatusID; +} MpReportDiagType; + +typedef struct MpReportCoreInfoType +{ unsigned long NumberOfReports; + plcstring GeneratedFileName[51]; + struct MpReportDiagType Diag; +} MpReportCoreInfoType; + +typedef struct MpReportCore +{ + /* VAR_INPUT (analog) */ + struct MpComIdentType* MpLink; + plcstring (*Name); + plcstring (*Language); + plcstring (*DeviceName); + /* VAR_OUTPUT (analog) */ + signed long StatusID; + struct MpReportCoreInfoType Info; + /* VAR (analog) */ + struct MpComInternalDataType Internal; + /* VAR_INPUT (digital) */ + plcbit Enable; + plcbit ErrorReset; + plcbit Generate; + /* VAR_OUTPUT (digital) */ + plcbit Active; + plcbit Error; + plcbit CommandBusy; + plcbit CommandDone; +} MpReportCore_typ; + + + +/* Prototyping of functions and function blocks */ +_BUR_PUBLIC void MpReportCore(struct MpReportCore* inst); + + +#ifdef __cplusplus +}; +#endif +#endif /* _MPREPORT_ */ + diff --git a/mappFramework/Logical/Libraries/Package.pkg b/mappFramework/Logical/Libraries/Package.pkg index 2cc3a53e..86340b24 100644 --- a/mappFramework/Logical/Libraries/Package.pkg +++ b/mappFramework/Logical/Libraries/Package.pkg @@ -30,5 +30,7 @@ CoTrace AsARCfg IecCheck + MpAudit + MpReport \ No newline at end of file diff --git a/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisControlModes.st b/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisControlModes.st index 4069613b..30fc15dc 100644 --- a/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisControlModes.st +++ b/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisControlModes.st @@ -27,9 +27,11 @@ ACTION AxisManual: MANUAL_STATE_IDLE: IF ((AxisControl.Command.JogNegative = TRUE) OR (AxisControl.Command.JogPositive = TRUE)) THEN ManualState := MANUAL_STATE_JOG; - ELSIF ((AxisControl.Command.MoveAbsolute = TRUE) OR (AxisControl.Command.MoveAdditive = TRUE)) THEN + 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; + MpAlarmXControl_SpeedNotSet.Set := (MpAxisParameters.Velocity = 0); AxisControl.Command.MoveAbsolute := FALSE; AxisControl.Command.MoveAdditive := FALSE; ManualState := MANUAL_STATE_MOVE; @@ -61,6 +63,9 @@ ACTION AxisManual: MpAxisBasic_0.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; + ManualState := MANUAL_STATE_STOPPING; ELSIF ((AxisControl.Command.JogNegative = TRUE) OR (AxisControl.Command.JogPositive = TRUE)) THEN MpAxisBasic_0.MoveAbsolute := FALSE; MpAxisBasic_0.MoveAdditive := FALSE; @@ -71,11 +76,13 @@ ACTION AxisManual: MpAxisBasic_0.JogNegative := FALSE; MpAxisBasic_0.JogPositive := FALSE; MpAxisBasic_0.MoveAbsolute := FALSE; - MpAxisBasic_0.MoveAdditive := FALSE; + MpAxisBasic_0.MoveAdditive := FALSE; + AxisControl.Command.MoveVelocity := FALSE; MpAxisBasic_0.Stop := TRUE; IF (MpAxisBasic_0.MoveActive = FALSE) THEN MpAxisBasic_0.Stop := FALSE; + MpAxisBasic_0.MoveVelocity := FALSE; ManualState := MANUAL_STATE_IDLE; State := STATE_READY; END_IF diff --git a/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisMgr.st b/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisMgr.st index ca22f7ca..1e74292c 100644 --- a/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisMgr.st +++ b/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisMgr.st @@ -19,9 +19,12 @@ PROGRAM _INIT // Call initialization variables RestorePosition; + // Initialize homing mode + MpAxisParameters.Homing.Mode := mcHOMING_DEFAULT; + // Enable mapp function blocks - MpAlarmXCore_0.Enable := TRUE; - MpAxisBasic_0.Enable := TRUE; + MpAxisBasic_0.Enable := TRUE; + MpAlarmXCore_0.Enable := TRUE; END_PROGRAM @@ -29,16 +32,16 @@ PROGRAM _CYCLIC MpAxisBasic_0.MpLink := ADR(gMpLinkAppAxis_1); - // Call all actions + // Call all actions SimulationControl; AxisStateMachine; AxisCyclic; RecipeCyclic; - - // Assign MpLink - MpAlarmXCore_0.MpLink := ADR(gMpLinkAlarmXCoreAppAxis_1); + + // Assign MpLink + MpAlarmXCore_0.MpLink := ADR(gMpLinkAlarmXCoreAppAxis_1); - // Call function block + // Call function block MpAlarmXCore_0(); END_PROGRAM diff --git a/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisMgr.typ b/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisMgr.typ index 2df95e09..e2450457 100644 --- a/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisMgr.typ +++ b/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/AxisMgr.typ @@ -18,6 +18,7 @@ TYPE Reference : {REDUND_UNREPLICABLE} BOOL; (*Cmd home / reference*) MoveAbsolute : {REDUND_UNREPLICABLE} BOOL; (*Cmd move absolute*) MoveAdditive : {REDUND_UNREPLICABLE} BOOL; (*Cmd move additive*) + MoveVelocity : {REDUND_UNREPLICABLE} BOOL; (*Cmd move velocity*) MoveToStart : {REDUND_UNREPLICABLE} BOOL; (*Cmd move the start position*) Abort : {REDUND_UNREPLICABLE} BOOL; (*Cmd abort*) Stop : {REDUND_UNREPLICABLE} BOOL; (*Cmd stop all movement*) @@ -55,6 +56,7 @@ TYPE MotorTemperature : {REDUND_UNREPLICABLE} REAL; (*Motor temperature*) IsHomed : {REDUND_UNREPLICABLE} BOOL; (*Axis is referenced*) IsPowered : {REDUND_UNREPLICABLE} BOOL; (*Axis is powered*) + PLCopenState : McAxisPLCopenStateEnum; (*Axis PLCopenState*) END_STRUCT; AxisControlType : {REDUND_UNREPLICABLE} STRUCT Command : {REDUND_UNREPLICABLE} AxisControlCommandType; (*Cmd structure*) diff --git a/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/ManualCommand.st b/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/ManualCommand.st index 41443b4a..9c0a229f 100644 --- a/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/ManualCommand.st +++ b/mappFramework/Logical/MachineControl/AppAxis_1/AppAxis_1/ManualCommand.st @@ -1,6 +1,6 @@ // Returns True if a manual command is active, false otherwise FUNCTION ManualCommand - ManualCommand := Commands.JogNegative OR Commands.JogPositive OR Commands.MoveAbsolute OR Commands.MoveAdditive; + ManualCommand := Commands.JogNegative OR Commands.JogPositive OR Commands.MoveAbsolute OR Commands.MoveAdditive OR Commands.MoveVelocity; END_FUNCTION diff --git a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisControlModes.st b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisControlModes.st index fcd404a7..7f7df65e 100644 --- a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisControlModes.st +++ b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisControlModes.st @@ -25,14 +25,15 @@ ACTION AxisManual: MANUAL_STATE_IDLE: IF ((AxisControl.Command.JogNegative = TRUE) OR (AxisControl.Command.JogPositive = TRUE)) THEN ManualState := MANUAL_STATE_JOG; - ELSIF ((AxisControl.Command.MoveAbsolute = TRUE) OR (AxisControl.Command.MoveAdditive = TRUE)) THEN + 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; AxisControl.Command.MoveAbsolute := FALSE; AxisControl.Command.MoveAdditive := FALSE; ManualState := MANUAL_STATE_MOVE; END_IF - // Jog state + // Jog state MANUAL_STATE_JOG: MpAxisBasic_0.JogNegative := AxisControl.Command.JogNegative; MpAxisBasic_0.JogPositive := AxisControl.Command.JogPositive; @@ -59,6 +60,9 @@ ACTION AxisManual: MpAxisBasic_0.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; + ManualState := MANUAL_STATE_STOPPING; ELSIF ((AxisControl.Command.JogNegative = TRUE) OR (AxisControl.Command.JogPositive = TRUE)) THEN MpAxisBasic_0.MoveAbsolute := FALSE; MpAxisBasic_0.MoveAdditive := FALSE; @@ -69,11 +73,13 @@ ACTION AxisManual: MpAxisBasic_0.JogNegative := FALSE; MpAxisBasic_0.JogPositive := FALSE; MpAxisBasic_0.MoveAbsolute := FALSE; - MpAxisBasic_0.MoveAdditive := FALSE; - MpAxisBasic_0.Stop := TRUE; + MpAxisBasic_0.MoveAdditive := FALSE; + AxisControl.Command.MoveVelocity := FALSE; + MpAxisBasic_0.Stop := TRUE; IF (MpAxisBasic_0.MoveActive = FALSE) THEN MpAxisBasic_0.Stop := FALSE; + MpAxisBasic_0.MoveVelocity := FALSE; ManualState := MANUAL_STATE_IDLE; State := STATE_READY; END_IF diff --git a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.st b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.st index 0dd8e6fd..88dc3b9e 100644 --- a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.st +++ b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.st @@ -16,6 +16,12 @@ PROGRAM _INIT ParameterInit; AxisInit; + // Call initialization variables + RestorePosition; + + // Initialize homing mode + MpAxisParameters.Homing.Mode := mcHOMING_DEFAULT; + // Enable mapp function blocks MpAlarmXCore_0.Enable := TRUE; MpAxisBasic_0.Enable := TRUE; @@ -25,7 +31,6 @@ END_PROGRAM PROGRAM _CYCLIC MpAxisBasic_0.MpLink := ADR(gAxisTemplate); - MC_BR_CheckRestorePositionData_0.Axis := ADR(gAxisTemplate); // Call all actions SimulationControl; diff --git a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.typ b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.typ index b5962895..0ac215e0 100644 --- a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.typ +++ b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.typ @@ -53,6 +53,7 @@ TYPE MotorTemperature : {REDUND_UNREPLICABLE} REAL; (*Motor temperature*) IsHomed : {REDUND_UNREPLICABLE} BOOL; (*Axis is referenced*) IsPowered : {REDUND_UNREPLICABLE} BOOL; (*Axis is powered*) + PLCopenState : McAxisPLCopenStateEnum; (*Axis PLCopenState*) END_STRUCT; AxisControlType : {REDUND_UNREPLICABLE} STRUCT Command : {REDUND_UNREPLICABLE} AxisControlCommandType; (*Cmd structure*) diff --git a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.var b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.var index dc6407cd..6b5c1628 100644 --- a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.var +++ b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisMgr.var @@ -14,7 +14,7 @@ VAR MpRecipeRegPar_Cfg : {REDUND_UNREPLICABLE} MpRecipeRegPar; (*Register function block for configuration values*) MpRecipeRegPar_Par : {REDUND_UNREPLICABLE} MpRecipeRegPar; (*Register function block for parameter values*) MpAlarmXCore_0 : {REDUND_UNREPLICABLE} MpAlarmXCore; (*AlarmX Core function block*) - MpAxisParameters : {REDUND_UNREPLICABLE} MpAxisBasicParType := (Distance:=70,Velocity:=100,Acceleration:=5000,Deceleration:=5000,Homing:=(Mode:=mcHOMING_RESTORE_POSITION),Jog:=(Velocity:=70,Acceleration:=5000,Deceleration:=5000),AutoTune:=(MaxCurrentPercent:=50,MaxDistance:=720,MaxPositionError:=5)); (*Standard MpAxis parameter structure *) + MpAxisParameters : {REDUND_UNREPLICABLE} MpAxisBasicParType := (Distance:=70,Velocity:=100,Acceleration:=5000,Deceleration:=5000,Jog:=(Velocity:=70,Acceleration:=5000,Deceleration:=5000),AutoTune:=(MaxCurrentPercent:=50,MaxDistance:=720,MaxPositionError:=5)); (*Standard MpAxis parameter structure *) MpAxisBasic_0 : {REDUND_UNREPLICABLE} MpAxisBasic; (*MpAxis main function block*) MC_BR_ProcessConfig_AX : {REDUND_UNREPLICABLE} MC_BR_ProcessConfig; (*Function block to read and write the axis configuration*) MC_BR_ProcessConfig_ACP : {REDUND_UNREPLICABLE} MC_BR_ProcessConfig; (*Function block to read and write the ACOPOS configuration*) @@ -22,7 +22,7 @@ VAR InPositionEdgePos : {REDUND_UNREPLICABLE} R_TRIG; (*Detecting rising edge for InPosition*) ReferenceEdgePos : {REDUND_UNREPLICABLE} R_TRIG; (*Detecting rising edge for Referenced*) MC_BR_ProcessParam_AX : {REDUND_UNREPLICABLE} MC_BR_ProcessParam; (*Function block to read and write the ACOPOS parameters*) - MpAlarmXControl_SpeedNotSet : MpAlarmXAlarmControl; (*AlarmX control function block*) + MpAlarmXControl_SpeedNotSet : {REDUND_UNREPLICABLE} MpAlarmXAlarmControl; (*AlarmX control function block*) END_VAR (*Recipe*) VAR diff --git a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisStateMachine.st b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisStateMachine.st index 85496a69..6ddcc6cd 100644 --- a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisStateMachine.st +++ b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/AxisStateMachine.st @@ -39,7 +39,7 @@ ACTION AxisStateMachine: // Power on the axis STATE_POWER_ON: - AxisControl.Status.Status := 'Waiting for power on'; + AxisControl.Status.Status := 'Waiting for power on'; IF (MpAxisBasic_0.Info.ReadyToPowerOn = TRUE) THEN MpAxisBasic_0.Power := AxisControl.Command.Power; END_IF @@ -93,6 +93,7 @@ ACTION AxisStateMachine: IF (InPositionEdgePos.Q = TRUE) THEN AxisControl.Status.Busy := FALSE; MpAxisBasic_0.MoveAbsolute := FALSE; + MpAxisParameters.Direction := mcDIR_POSITIVE; State := STATE_READY; END_IF @@ -166,11 +167,13 @@ 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) THEN + IF (AxisControl.Command.Reset = TRUE) OR ((MpAlarmXCheckReaction(gMpLinkAlarmXCore, 'Error') = FALSE) AND EDGEPOS(MpAlarmXCore_0.PendingAlarms = 0)) THEN AxisControl.Status.Busy := TRUE; AxisControl.Command.Reset := FALSE; MpAxisBasic_0.ErrorReset := TRUE; AxisReset; + ManualState := MANUAL_STATE_IDLE; + AutomaticState := AUTOMATIC_STATE_IDLE; ELSE MpAxisBasic_0.ErrorReset := FALSE; END_IF @@ -191,11 +194,12 @@ ACTION AxisStateMachine: // Cyclic function block calls MpAxisBasic_0.Parameters := ADR(MpAxisParameters); MpAxisBasic_0(); - + // Status assignments - AxisControl.Status.ErrorActive := MpAxisBasic_0.Error; + 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; diff --git a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/ManualCommand.st b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/ManualCommand.st index 41443b4a..d837ca5d 100644 --- a/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/ManualCommand.st +++ b/mappFramework/Logical/MachineControl/AxisTemplate/AxisMgr/ManualCommand.st @@ -1,6 +1,6 @@ // Returns True if a manual command is active, false otherwise FUNCTION ManualCommand - ManualCommand := Commands.JogNegative OR Commands.JogPositive OR Commands.MoveAbsolute OR Commands.MoveAdditive; + ManualCommand := Commands.JogNegative OR Commands.JogPositive OR Commands.MoveAbsolute OR Commands.MoveAdditive OR Commands.MoveVelocity; END_FUNCTION diff --git a/mappFramework/Logical/UnitTest/File/FileUnitTest/Set_SetupTeardown.c b/mappFramework/Logical/UnitTest/File/FileUnitTest/Set_SetupTeardown.c index 69469291..a79e22cc 100644 --- a/mappFramework/Logical/UnitTest/File/FileUnitTest/Set_SetupTeardown.c +++ b/mappFramework/Logical/UnitTest/File/FileUnitTest/Set_SetupTeardown.c @@ -28,6 +28,7 @@ _SETUP_TEST(void) HmiFile_UT.Parameters.Fifo.Enable = false; HmiFile_UT.Parameters.Fifo.ScanInterval = 60; + strcpy(HmiFile_UT.Parameters.Fifo.DeviceName, "mappUserXFiles"); switch (SetupState) { @@ -379,6 +380,76 @@ _TEST FIFO_MaxFiles120(void) TEST_BUSY; } +_TEST FIFO_MaxFolderSize_30Files(void) +{ + 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 = &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 = 5; + HmiFile_UT.Parameters.Fifo.ScanInterval = 0; + TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep == FILE_DELETE_WAIT); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep != FILE_DELETE_WAIT); + 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(5, DirInfo_UT.filenum); + TEST_DONE; + break; + + } + TEST_BUSY; +} _TEST FIFO_MaxFolderSize_60Files(void) { @@ -426,7 +497,7 @@ _TEST FIFO_MaxFolderSize_60Files(void) 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 = 5 * 1024; + HmiFile_UT.Parameters.Fifo.MaxFolderSize = 5; HmiFile_UT.Parameters.Fifo.ScanInterval = 0; TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep == FILE_DELETE_WAIT); TestState = 100; @@ -451,7 +522,147 @@ _TEST FIFO_MaxFolderSize_60Files(void) TEST_BUSY; } +_TEST FIFO_MaxFolderSize_Keep60Files(void) +{ + 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 = &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(HmiFile_UT.Status.DeleteStep == FILE_DELETE_WAIT); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep != FILE_DELETE_WAIT); + 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) +{ + 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 = &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(HmiFile_UT.Status.DeleteStep == FILE_DELETE_WAIT); + TestState = 100; + break; + + // Assert + case 100: + TEST_BUSY_CONDITION(HmiFile_UT.Status.DeleteStep != FILE_DELETE_WAIT); + 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! @@ -466,7 +677,10 @@ UNITTEST_FIXTURES(fixtures) 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), }; diff --git a/mappFramework/Logical/mappView/Resources/Media/BnR_Logo.ico b/mappFramework/Logical/mappView/Resources/Media/BnR_Logo.ico new file mode 100644 index 00000000..f8c633f0 Binary files /dev/null and b/mappFramework/Logical/mappView/Resources/Media/BnR_Logo.ico differ diff --git a/mappFramework/Logical/mappView/Resources/Media/BnR_Logo.svg b/mappFramework/Logical/mappView/Resources/Media/BnR_Logo.svg new file mode 100644 index 00000000..46bc566d --- /dev/null +++ b/mappFramework/Logical/mappView/Resources/Media/BnR_Logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/mappFramework/Logical/mappView/Resources/Media/Package.pkg b/mappFramework/Logical/mappView/Resources/Media/Package.pkg index 59099c8b..829eaee8 100644 --- a/mappFramework/Logical/mappView/Resources/Media/Package.pkg +++ b/mappFramework/Logical/mappView/Resources/Media/Package.pkg @@ -6,5 +6,7 @@ Documents InProgress.gif InProgressGray.gif + BnR_Logo.svg + BnR_Logo.ico \ No newline at end of file diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/Edit/Export.svg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/Edit/Export.svg new file mode 100644 index 00000000..4f012499 --- /dev/null +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/Edit/Export.svg @@ -0,0 +1,77 @@ + + + + + + image/svg+xml + + + + + + + + + Layer 1 + + + Export + + diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/Edit/ExportArchive.svg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/Edit/ExportArchive.svg new file mode 100644 index 00000000..673bb526 --- /dev/null +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/Edit/ExportArchive.svg @@ -0,0 +1,86 @@ + + + + + + image/svg+xml + + + + + + + + + Layer 1 + + + Export + Archive + + diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/Edit/Package.pkg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/Edit/Package.pkg index 8efb0e06..460cf8dd 100644 --- a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/Edit/Package.pkg +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/Edit/Package.pkg @@ -9,6 +9,8 @@ Cut.svg Delete.svg Edit.svg + Export.svg + ExportArchive.svg Favorite.svg Help.svg Information.svg diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/Empty.svg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/Empty.svg new file mode 100644 index 00000000..2921ec8e --- /dev/null +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/Empty.svg @@ -0,0 +1,35 @@ + + + + + diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/FileScan.svg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/FileScan.svg new file mode 100644 index 00000000..c7c9d9b4 --- /dev/null +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/FileScan.svg @@ -0,0 +1,45 @@ + + + + + + + + + diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/PDF.svg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/PDF.svg new file mode 100644 index 00000000..3ad31f39 --- /dev/null +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/PDF.svg @@ -0,0 +1,54 @@ + + + + + + + + PDF + diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/Package.pkg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/Package.pkg index 7981772e..916603d9 100644 --- a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/Package.pkg +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/Package.pkg @@ -10,5 +10,10 @@ FileExporer.svg FileSelected.svg Folder.svg + PDF.svg + TXT.svg + XML.svg + FileScan.svg + Empty.svg \ No newline at end of file diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/TXT.svg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/TXT.svg new file mode 100644 index 00000000..7c0a21f7 --- /dev/null +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/TXT.svg @@ -0,0 +1,54 @@ + + + + + + + + TXT + diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/XML.svg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/XML.svg new file mode 100644 index 00000000..27ac1139 --- /dev/null +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/File/XML.svg @@ -0,0 +1,54 @@ + + + + + + + + XML + diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/User/EditUser.svg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/User/EditUser.svg index e07c4b99..3cde603a 100644 --- a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/User/EditUser.svg +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/User/EditUser.svg @@ -1,59 +1,19 @@ - + - -image/svg+xml \ No newline at end of file + + + + + + + diff --git a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/User/Package.pkg b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/User/Package.pkg index 1fbdf475..ecf6a2df 100644 --- a/mappFramework/Logical/mappView/Resources/Media/SymbolLib/User/Package.pkg +++ b/mappFramework/Logical/mappView/Resources/Media/SymbolLib/User/Package.pkg @@ -1,5 +1,5 @@  - + AddUser.svg diff --git a/mappFramework/Logical/mappView/Resources/Texts/Package.pkg b/mappFramework/Logical/mappView/Resources/Texts/Package.pkg index a88fa8d8..023e80c0 100644 --- a/mappFramework/Logical/mappView/Resources/Texts/Package.pkg +++ b/mappFramework/Logical/mappView/Resources/Texts/Package.pkg @@ -1,7 +1,8 @@  - - + + mappFrameworkTexts + SystemDialog.tmx \ No newline at end of file diff --git a/mappFramework/Logical/mappView/Resources/Texts/SystemDialog.tmx b/mappFramework/Logical/mappView/Resources/Texts/SystemDialog.tmx new file mode 100644 index 00000000..ae9be802 --- /dev/null +++ b/mappFramework/Logical/mappView/Resources/Texts/SystemDialog.tmx @@ -0,0 +1,225 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + IAT/System/Dialog +
+ + + + Benutzer + + + Username + + + + + altes Passwort + + + Old Password + + + + + neues Passwort + + + New Password + + + + + Passwort wiederholen + + + Confirm Password + + + + + Passwort ändern + + + Change Password + + + + + Abbruch + + + Cancel + + + + + OK + + + OK + + + + + Passwort ändern + + + Change password + + + + + Passwort ändern für {1} + + + Change password for {1} + + + + + Passwortänderung erfolgreich! + + + Password changed successfully! + + + + + Passwortänderung fehlgeschlagen! + + + Password change failed! + + + + + Anmeldedaten (Benutzer und/oder altes Passwort) nicht korrekt. + + + Invalid credentials (username and/or old password). + + + + + Passwort entspricht nicht den Kriterien. + + + Password does not meet the password policies. + + + + + Passwortänderung nicht möglich. Verwenden Sie mpUserX anstatt RBAC zur Authentifizierung. + + + Password change not possible. Use mpUserX instead of RBAC for authentication. + + + + + Zeitüberschreitung. + + + Timeout. + + + + + Ein unbekannter Fehler ist aufgetreten. + + + An unknown error has occurred. + + + + + Benutzer darf nicht leer sein. + + + Username must not be empty. + + + + + Altes Passwort darf nicht leer sein. + + + Old password must not be empty. + + + + + Neues Passwort darf nicht leer sein. + + + New password must not be empty. + + + + + Neues Passwort muss sich vom alten Passwort unterscheiden. + + + New password must be different from the old password. + + + + + Passwortwiederholung stimmt nicht dem neuen Passwort überein. + + + Password confirmation does not match the new password. + + + + + Dialog wird in {1} Sekunden geschlossen. + + + Dialog will be closed in {1} seconds. + + + + + Das Passwort muss enthalten + + + Your password must have + + + + + Mindestens einen Buchstaben und eine Zahl + + + Alphanumeric and numeric characters + + + + + Groß- und Kleinbuchstaben + + + Upper and lowercase characters + + + + + {1} oder mehr Zeichen + + + {1} or more characters + + + + + Mindestens ein Sonderzeichen (z.B. %$ö) + + + At least one special character (e.g. $%ö) + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/AuditPageTexts.tmx b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/AuditPageTexts.tmx new file mode 100644 index 00000000..c1feabf6 --- /dev/null +++ b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/AuditPageTexts.tmx @@ -0,0 +1,295 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + IAT/Audit +
+ + + + Zeitstempel + + + 时间戳 + + + Timestamp + + + + + Typ - Message - Komment + + + 类型 - 消息 - 评论 + + + Type - Message - Comment + + + + + Eintrag + + + 信息 + + + Message + + + + + Anwender + + + 操作员 + + + Operator + + + + + Exportieren + + + 出口 + + + Export + + + + + Sortieren + + + 种类 + + + Sort + + + + + Filtern + + + 筛选 + + + Filter + + + + + Export Archiv + + + 导出存档 + + + Export Archive + + + + + Audit Trail + + + 审计追踪 + + + Audit Trail + + + + + Benutzerdefinierte Ereignisse + + + 自定义事件 + + + Custom Events + + + + + Anfrage + + + 询问 + + + Query + + + + + Anfrage starten + + + 运行查询 + + + Run Query + + + + + Archiv Anzahl + + + 档案数量 + + + Number of Archives + + + + + Archiv Einstellungen + + + 存档设置 + + + Archive Setup + + + + + Automatisches Archiv einrichten + + + 设置自动存档 + + + Set up automatic archiving + + + + + Abrechen + + + 取消 + + + Cancel + + + + + Speichern + + + 存储 + + + Save + + + + + Mo-Fr + + + Mo-Fr + + + Mo-Fr + + + + + Bei Batch + + + 按批次 + + + By Batch + + + + + Täglich + + + 每日 + + + Daily + + + + + : + + + : + + + : + + + + + Tageszeit (24 Std.) + + + 一天中的时间(24 小时) + + + Time of day (24 hr) + + + + + Intervall + + + 间隔 + + + Interval + + + + + Maximale Dateigrösse (Kb) + + + 最大文件大小 + + + Max file size (Kb) + + + + + Einschalten + + + 使能够 + + + Enable + + + + + Export Format + + + 导出格式 + + + Export Format + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/BackupTexts.tmx b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/BackupTexts.tmx index 0f4f783e..4992f146 100644 --- a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/BackupTexts.tmx +++ b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/BackupTexts.tmx @@ -5,15 +5,26 @@ IAT/Backup - + - Aktivieren Sie die automatische Sicherung + Installieren - 使能自动备份 + 申请 - Enable Automatic Backup + Apply + + + + + Einstellungen + + + 设置 + + + Settings @@ -41,37 +52,70 @@ Backups - + - Zeitstempel + Abrechen - 时间戳 + 取消 - Time Stamp + Cancel - + - Größe + Möchten Sie die ausgewählte Sicherung wirklich wiederherstellen? - 大小 + 确定要还原所选备份? - Size + Are you sure you want to restore selected backup? - + - Fehler zuruecksetzen + Konfigurations-ID - 错误复位 + Configuration ID - Error Reset + Configuration ID + + + + + Möchten Sie die ausgewählte Sicherung wirklich löschen? + + + 确定要删除所选备份? + + + Are you sure you want to delete selected backup? + + + + + Von USB kopieren + + + 从USB拷贝 + + + Copy from USB + + + + + Auf USB kopieren + + + 拷贝至USB + + + Copy to USB @@ -85,31 +129,37 @@ Create - + - Wiederherstellen + Backup wird erstellt, bitte warten! - 还原 + 正在创建备份中,请等待! - Restore + Creating the backup is in progress, please wait! - + - Seite nach oben + Täglich + + + 每日 - Page Down + Daily - + - Seite nach unten + dd-MM-yy hh:mm + + + MM-dd-yy hh:mm - Page Up + MM-dd-yy hh:mm @@ -123,114 +173,111 @@ Delete - + - Auf USB kopieren + Geräte - 拷贝至USB + 设备 - Copy to USB + Devices - + - Von USB kopieren - - - 从USB拷贝 + Details der ausgewählten Sicherung - Copy from USB + Selected backup details - + - Abrechen + Neue Sicherung erstellen - 取消 + 创建一个新的备份 - Cancel + Create new backup - + - Name + Vorhandene Backup löschen - 名称 + 删除存在的备份 - Name + Delete existing backup - + - Konfigurations-ID + Vorherige Backup wiederherstellen - Configuration ID + 还原以前的备份 - Configuration ID + Restore previous backup - + - Ausführung + Automatisches Backup einrichten - 版本 + 设置自动备份 - Version + Set up automatic backup - + - Möchten Sie die ausgewählte Sicherung wirklich löschen? + Aktivieren Sie die automatische Sicherung - 确定要删除所选备份? + 使能自动备份 - Are you sure you want to delete selected backup? + Enable Automatic Backup - + - Möchten Sie die ausgewählte Sicherung wirklich wiederherstellen? + Fehler zuruecksetzen - 确定要还原所选备份? + 错误复位 - Are you sure you want to restore selected backup? + Error Reset - + - Neues Update verfügbar + Freitag - 新的可用更新 + 周五 - New Update Available + Friday - + - Speichern + Std - 存储 + 小时 - Save + Hrs @@ -244,26 +291,26 @@ Interval - + - Täglich + Max Anzahl - 每日 + 最大备份 - Daily + Max Backups - + - Wöchentlich + min - 每周 + 分钟 - Weekly + min @@ -277,313 +324,311 @@ Monday - + - Dienstag + Fehler auf Backup Core, bitte überprüfen Sie die folgenden Ursachen + + + + +•Prüfen Sie, ob am Eingangsparameter „Name“ ein Backup angegeben wurde. + + + + +•Überprüfen Sie, ob das angegebene Datenspeichergerät vorhanden ist. + + + + +•Prüfen Sie, ob auf dem angegebenen Datenträger Schreibrechte vorhanden sind. + + + + +•Weitere Informationen finden Sie im Logger. - 周二 + Backup Core错误,请检查以下原因... - Tuesday + +Error on Backup Core, please check the following causes + +•Check whether a backup was specified on input parameter "Name". + + +•Check whether the specified data storage device exists. + + +•Check whether write permissions exist on the specified data storage device. + + +•See the Logger for additional information. - + - Mittwoch + Backup Fehler - 周三 + 备份错误 - Wednesday + Backup Error - + - Donnerstag + Backup Funcktion in Simulation nicht verfuegbar - 周四 + 在仿真模式下备份功能不可用 - Thursday + Backup functionality not available in simulation. - + - Freitag + Backup Warnung - 周五 + 备份警告 - Friday + Backup Warning - + - Samstag + Name - 周六 + 名称 - Saturday + Name - + - Sonntag + Neues Update verfügbar - 周日 + 新的可用更新 - Sunday + New Update Available - + - Präfix + Älteste überschreiben - 前缀 - - - Prefix - - - - - min + 覆盖最早的 - min + Overwrite Oldest - + - : + Seite nach oben - : + 向下翻页 - : + Page Down - + - Std + Seite nach unten + + + 向上翻页 - Hrs + Page Up - + - Uhrzeit + : - 时间 + : - Time of day + : - + - Älteste überschreiben + Präfix - 覆盖最早的 + 前缀 - Overwrite Oldest + Prefix - + - Einstellungen + Wiederherstellen - 设置 + 还原 - Settings + Restore - + - Geräte + Wiederherstellung der Sicherung läuft, bitte warten! - 设备 + 正在还原备份中,请等待! - Devices + Restoring the backup is in progress, please wait! - + - dd-MM-yy hh:mm + Samstag - MM-dd-yy hh:mm + 周六 - MM-dd-yy hh:mm + Saturday - + - Backup wird erstellt, bitte warten! + Speichern - 正在创建备份中,请等待! + 存储 - Creating the backup is in progress, please wait! + Save - + - Wiederherstellung der Sicherung läuft, bitte warten! + Größe - 正在还原备份中,请等待! + 大小 - Restoring the backup is in progress, please wait! + Size - + - Max Anzahl + Sonntag + + + 周日 - Max Backups + Sunday - + - Neue Sicherung erstellen + Donnerstag - 创建一个新的备份 + 周四 - Create new backup + Thursday - + - Vorhandene Backup löschen + Uhrzeit - 删除存在的备份 + 时间 - Delete existing backup + Time of day - + - Vorherige Backup wiederherstellen + Zeitstempel - 还原以前的备份 + 时间戳 - Restore previous backup + Time Stamp - + - Automatisches Backup einrichten + Dienstag - 设置自动备份 + 周二 - Set up automatic backup + Tuesday - + - Backup Funcktion in Simulation nicht verfuegbar + Neues Proektupdate verfügbar - 在仿真模式下备份功能不可用 + 新项目更新可用 - Backup functionality not available in simulation. + New project update available - + - Backup Warnung + Ausführung - 备份警告 + 版本 - Backup Warning + Version - + - Backup Fehler + Mittwoch - 备份错误 + 周三 - Backup Error + Wednesday - + - Fehler auf Backup Core, bitte überprüfen Sie die folgenden Ursachen - - - - -•Prüfen Sie, ob am Eingangsparameter „Name“ ein Backup angegeben wurde. - - - - -•Überprüfen Sie, ob das angegebene Datenspeichergerät vorhanden ist. - - - - -•Prüfen Sie, ob auf dem angegebenen Datenträger Schreibrechte vorhanden sind. - - - - -•Weitere Informationen finden Sie im Logger. + Wöchentlich - Backup Core错误,请检查以下原因... + 每周 - -Error on Backup Core, please check the following causes - -•Check whether a backup was specified on input parameter "Name". - - -•Check whether the specified data storage device exists. - - -•Check whether write permissions exist on the specified data storage device. - - -•See the Logger for additional information. + Weekly diff --git a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/FileTexts.tmx b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/FileTexts.tmx index 234a5f01..a51bb43b 100644 --- a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/FileTexts.tmx +++ b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/FileTexts.tmx @@ -508,6 +508,14 @@ Delete older than + + + FIFO Operation in Progress, bitte warten. + + + FIFO operation in progress, please wait. + + Löschen bei maximale Ordergröße diff --git a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/Package.pkg b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/Package.pkg index 70cac1eb..d71d5746 100644 --- a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/Package.pkg +++ b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/Package.pkg @@ -1,5 +1,5 @@  - + AlarmPageTexts.tmx @@ -9,5 +9,6 @@ FileTexts.tmx RecipePageTexts.tmx UserXPageTexts.tmx + AuditPageTexts.tmx \ No newline at end of file diff --git a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/RecipePageTexts.tmx b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/RecipePageTexts.tmx index 54f5cc2c..b2e16132 100644 --- a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/RecipePageTexts.tmx +++ b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/RecipePageTexts.tmx @@ -486,6 +486,9 @@ {@IndexTextSnippetRecipeMsgBoxType} + + {@IndexTextSnippetRecipeMsgBoxType} + {@IndexTextSnippetRecipeMsgBoxType} @@ -494,6 +497,9 @@ 0 + + 0 + 0 @@ -502,6 +508,9 @@ Laden der ausgewaehlten Datei bestaetigen + + 请确认加载此食谱。 + Please confirm loading this recipe. @@ -510,6 +519,9 @@ Speichern der ausgewaehlten Datei bestaetigen + + 请确认以该名称保存此食谱。 + Please confirm saving this recipe under this name. @@ -519,6 +531,11 @@ Eine Datei mit demselben Namen {@NewRecipeName} existiert bereits! Möchten Sie fortfahren und die vorhandene überschreiben? + + + 同名文件 {@NewRecipeName} 已存在! + +您要继续并覆盖现有的吗? A file with the same name {@NewRecipeName} already exists! @@ -530,6 +547,9 @@ Do you want to continue and overwrite the existing one? Loeschen der ausgewaehlten Datei bestaetigen + + 请确认删除所选配方。 + Please confirm deleting the selected recipe. @@ -538,6 +558,9 @@ Do you want to continue and overwrite the existing one? Umbenennen der ausgewaehlten Datei bestaetigen + + 请确认重命名所选配方。 + Please confirm renaming the selected recipe. @@ -546,6 +569,9 @@ Do you want to continue and overwrite the existing one? {@NewRecipeName} + + {@NewRecipeName} + {@NewRecipeName} diff --git a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/UserXPageTexts.tmx b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/UserXPageTexts.tmx index d32b9c2d..96f31ef0 100644 --- a/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/UserXPageTexts.tmx +++ b/mappFramework/Logical/mappView/Resources/Texts/mappFrameworkTexts/UserXPageTexts.tmx @@ -41,6 +41,17 @@ Assign Role + + + Ungültiger Benutzername / Passwort + + + 无效的用户名/密码 + + + Invalid Username/Password + + Stornieren @@ -135,1151 +146,1195 @@ Edit User - + - Benutzergruppe exportieren + Kein Fehler - 导出用户组 + 无错误 - Export User Group + No Error - + - Dateiname exportieren + Das angegebene Passwort ist ungültig. - 导出文件名称 + 密码错误 - Export File Name + The specified password is invalid. - + - Benutzer exportieren + Der angegebene Benutzer existiert nicht. - 导出用户 + 用户名错误 - Export Users + The specified user does not exist. - + - Benutzergruppe importieren + Der angegebene Benutzer existiert bereits. - 导入用户组 + 该用户已存在 - Import User Group + The specified user already exists. - + - Dateiliste + Das verwendete Anmeldetoken ist für den angegebenen Benutzer ungültig. - 文件列表 + 验证码错误 - File List + The login token being used is invalid for the specified user. - + - Ausgewählte Datei: + Benutzer hat keine Administratorrechte. - 选择文件: + 抱歉,当前用户无访问权限 - Selected File: + User has no administrator rights. - + - Rollen importieren + Der Benutzer hat keine ausreichenden Zugriffsrechte für die gewünschte Operation. - 导入角色 + 抱歉,当前用户无访问权限 - Import Roles + The user has insufficient access rights for the desired operation. - + - Benutzer importieren + Die angegebene Rolle existiert nicht. - 导入用户 + 用户组不存在 - Import Users + The specified role does not exist. - + - Einstellungen + Das angegebene Passwort ist nicht stark genug. - 用户设置 + 密码安全度过低 - User settings + The specified password is not strong enough. - + - Letzte Anmeldung + Dieser Benutzer ist gesperrt. - 上次登录 + 该用户已冻结 - Last Login + This user is blocked. - + - Anmeldung + Der Benutzer muss das Passwort ändern, bevor zusätzliche Funktionen ausgeführt werden können. - 登录 + 完成该操作请先更改密码 - Login - - - 登录 + The user must change the password before any additional functions can be carried out. - + - Ausloggen + Der Benutzer hat zu oft ein falsches Passwort eingegeben und wurde gesperrt. - 退出 + 输入错误密码次数过多,该用户已冻结 - Logout - - - 退出 + The user has entered an incorrect password too often and has been blocked. - + - Neues Kennwort + Der angemeldete Benutzer hat keine Administratorrechte. - 新密码 + 当前用户无管理员权限 - New Password + The logged in user has no administrator rights. - + - Neuer Benutzername + Für diese Gruppe ist bereits eine Benutzerverwaltung eingerichtet. Eine zusätzliche Instanz für diesen Funktionsbaustein ist nicht möglich. - 新用户名称 + 该用户组的管理项不可更改 - New User Name - - - 新用户名称 + User management is already in place for this group. An additional instance for this function block is not possible. - + - Passwort + Es ist kein Benutzer angemeldet. - 密码 + 请先登录 - Password - - - 密码 + No user is logged in. - + - Aktualisierung + Der Index für die ausgewählte Funktion überschreitet den maximalen Index; Rechte können nicht abgefragt werden (reserviert für zukünftige Verwendung). - 刷新 + 该功能需要管理员权限 - Refresh - - - 刷新 + The index for the selected function exceeds the maximum index; rights cannot be queried (reserved for future use). - + - Rolle entfernen + Das neue und das alte Passwort sind gleich. - 角色删除 + 新密码与旧密码重复 - Remove Role + The new and old passwords are the same. - + - Umbenennen + Der angegebene Benutzername existiert bereits. - 用户重 命名 + 该用户已存在 - Rename - - - 用户重 命名 + The specified username already exists. - + - Wiederholen + Der ausgewählte Benutzer konnte nicht gelöscht werden. Weitere Informationen finden Sie im Logger. - 重复一遍 + 该用户无法删除,详情请查看Logger - Repeat - - - 重复 一 遍 + The selected user could not be deleted. See the logger for additional information. - + - Rolle + Das Passwort ist abgelaufen und muss geändert werden. - 角色 + 密码已过期,请设置新密码 - Role + The password is expired and must be changed. - + - Rollenoptionen + Es wurde ein ungültiger Rollenname (NULL) angegeben. - 角色可选 + 无法选择该用户组 - Role Options + An invalid role name (NULL) was specified. - + - Benutzer + Der angegebene Benutzer ist bereits angemeldet. - 用户 + 该用户已登录 - User - - - 用户 + The specified user is already logged in. - + - Administrator + NULL wurde an "UIConnect" angehängt. - 管理员 + UI界面输入了无效值 - Administrator - - - Administrator - - - Administrator + NULL was appended to "UIConnect". - + - Jeder + Es wurde ein ungültiger Benutzername (NULL) angegeben. - 任何人 + 用户名错误 - Everyone - - - Jeder - - - Everyone + An invalid username (NULL) was specified. - + - Vollständiger Name: + Es wurde kein Passwort eingegeben. - 全名: + 没有密码 - Full Name: - - - Vollständiger Name: - - - Full Name: + No password was entered. - + - Imperial + Funktionsbaustein MpUserXLogin fehlt oder ist nicht richtig konfiguriert. - 英制 + MpUserXLogin功能块缺失或配置错误 - Imperial + Function block MpUserXLogin is missing or not configured correctly. - + - Imperial-US + Das zur Bestätigung eingegebene Passwort stimmt nicht mit dem neuen Passwort überein. - 英制-US + 再次输入的密码不符 - Imperial-US + The password entered for confirmation does not match the new password. - + - Sprache + Das angegebene Systemrecht wurde nicht gefunden (reserviert für zukünftige Verwendung). - 语言 + 无法找到指定的系统权限(该权限为备用权限) - Language + The specified system right was not found (reserved for future use). - + - Deutsch + Der Import von Benutzergruppen und/oder Benutzerdaten ist fehlgeschlagen. Weitere Informationen finden Sie im Logger. - 德语 + 用户或用户组权限导入失败。详情请查看Logger - German + The import of user groups and/or user data failed. See the logger for additional information. - + - Englisch + Beim Laden der Importdatei ist ein Fehler aufgetreten. Weitere Informationen finden Sie im Logger. - 英语 + 加载导入文件出现错误。详情请查看Logger - English + An error occurred while loading the import file. See the logger for additional information. - + - Chinesisch + Beim Speichern der Exportdatei ist ein Fehler aufgetreten. Weitere Informationen finden Sie im Logger. - 中文 + 保存输出文件出现错误。详情请查看Logger - Chinese + An error occurred while saving the export file. See the logger for additional information. - + - Anmeldung + Der für die Rolle eingegebene Name ist zu lang (>50 Zeichen). - 登录 + 用户组名过长 - Login - - - Anmeldung - - - Login + The name entered for the role is too long (>50 characters). - + - Instandhaltung + Der für den Benutzer eingegebene Name ist zu lang (>20 Zeichen). - 维护者 + 用户名过长 - Maintenance - - - Instandhaltung - - - Maintenance + The name entered for the user is too long (>20 characters). - + - Maßeinheit + Das eingegebene Passwort ist zu lang (>20 Zeichen). - 计量单位 + 密码过长 - Measurement Unit + The password entered is too long (>20 characters). - + - Metrisch + Diese Komponente kann nur aktiv werden, wenn MpUserXLogin aktiv ist. - 公制 + 用户系统未激活 - Metric + This component can only become active if MpUserXLogin is active. - + - Nutzername: + Der eingegebene Benutzername ist zu kurz - 用户名: + 用户名过短 - User Name: - - - Nutzername: - - - User Name: + The username entered is too short - + - Keiner + Die angegebene Rolle existiert bereits. - + 指定的用户组已存在 - None - - - Keiner - - - None + The specified role already exists. - + - Operator + Maximale Anzahl an Signaturversuchen überschritten. Der Signaturvorgang wurde unterbrochen. - 操作者 + 电子签名错误次数到达上限,无法继续尝试电子签名 - Operator - - - Operator - - - Operator + Maximum number of signature attempts exceeded. The signature procedure was interrupted. - + - Passwort: + Eine neue Signatur wurde gestartet, bevor die letzte signierte Aktion ausgeführt wurde. - 密码: + 本次电子签名未完成,请勿开启新的电子签名 - Password: - - - Passwort: - - - Password: + A new signature was started before the last signed action was executed. - + - Passwortbestätigung: + Das eingegebene Passwort wurde bereits verwendet und kann nicht erneut vergeben werden. - 密码确认: + 新密码与旧密码一致,请重新输入新密码 - Password Confirm: - - - Passwortbestätigung: - - - Password Confirm: + The entered password has already been used and cannot be specified again. - + - Auswahl der Benutzerrolle + Die importierte Datei hat ein ungültiges Format. - 用户角色选择: + 导入的文件格式无效 - User Role Selection - - - Auswahl der Benutzerrollen - - - User Role Selection + The file being imported has an invalid format. - + - Aufsicht + Benutzergruppe exportieren - 主管 + 导出用户组 - Supervisor - - - Supervisor - - - Supervisor + Export User Group - + - Nutzerinformation + Dateiname exportieren - 用户信息 + 导出文件名称 - UserInformation + Export File Name - + - Benutzerverwaltung + Benutzer exportieren - 用户管理 + 导出用户 - User Management - - - 用户管理 + Export Users - + - Nutzername + Der eingegebene Dateiname existiert bereits. Möchten Sie die vorhandene Datei überschreiben? - 用户 + 输入的文件名已经存在。是否要覆盖现有文件? - User Name - - - 用户 + The filename entered already exists. Would you like to overwrite the existing file? - + - Kein Fehler + Benutzergruppe importieren - 无错误 + 导入用户组 - No Error + Import User Group - + - Das angegebene Passwort ist ungültig. + Dateiliste - 密码错误 + 文件列表 - The specified password is invalid. + File List - + - Der angegebene Benutzer existiert nicht. + Ausgewählte Datei: - 用户名错误 + 选择文件: - The specified user does not exist. + Selected File: - + - Der angegebene Benutzer existiert bereits. + Rollen importieren - 该用户已存在 + 导入角色 - The specified user already exists. + Import Roles - + - Das verwendete Anmeldetoken ist für den angegebenen Benutzer ungültig. + Benutzer importieren - 验证码错误 + 导入用户 - The login token being used is invalid for the specified user. + Import Users - + - Benutzer hat keine Administratorrechte. + Einstellungen - 抱歉,当前用户无访问权限 + 用户设置 - User has no administrator rights. + User settings - + - Der Benutzer hat keine ausreichenden Zugriffsrechte für die gewünschte Operation. + Letzte Anmeldung - 抱歉,当前用户无访问权限 + 上次登录 - The user has insufficient access rights for the desired operation. + Last Login - + - Die angegebene Rolle existiert nicht. + Anmeldung - 用户组不存在 + 登录 - The specified role does not exist. + Login - - - - Das angegebene Passwort ist nicht stark genug. + + 登录 + + - 密码安全度过低 + 登录成功 - The specified password is not strong enough. + Login Successful - - + + 登录成功 + + + - Dieser Benutzer ist gesperrt. + Ausloggen - 该用户已冻结 + 退出 - This user is blocked. + Logout + + + 退出 - + - Der Benutzer muss das Passwort ändern, bevor zusätzliche Funktionen ausgeführt werden können. + Bestätigen Sie die Benutzerlöschung - 完成该操作请先更改密码 + 确认删除该用户? - The user must change the password before any additional functions can be carried out. + Confirm User Deletion - + - Der Benutzer hat zu oft ein falsches Passwort eingegeben und wurde gesperrt. + Bestätigen Sie die Benutzersperre - 输入错误密码次数过多,该用户已冻结 + 确认锁定该用户? - The user has entered an incorrect password too often and has been blocked. + Confirm User Locking - + - Der angemeldete Benutzer hat keine Administratorrechte. + Bestätigen Sie das Entsperren des Benutzers - 当前用户无管理员权限 + 确认解锁该用户? - The logged in user has no administrator rights. + Confirm User Unlocking - + - Für diese Gruppe ist bereits eine Benutzerverwaltung eingerichtet. Eine zusätzliche Instanz für diesen Funktionsbaustein ist nicht möglich. + Bestätigen Sie die Rollenlöschung - 该用户组的管理项不可更改 + 确认删除该用户组? - User management is already in place for this group. An additional instance for this function block is not possible. + Confirm Role Deletion - + - Es ist kein Benutzer angemeldet. + Neues Kennwort - 请先登录 + 新密码 - No user is logged in. + New Password - + - Der Index für die ausgewählte Funktion überschreitet den maximalen Index; Rechte können nicht abgefragt werden (reserviert für zukünftige Verwendung). + Neuer Benutzername - 该功能需要管理员权限 + 新用户名称 - The index for the selected function exceeds the maximum index; rights cannot be queried (reserved for future use). + New User Name + + + 新用户名称 - + - Das neue und das alte Passwort sind gleich. + Passwort - 新密码与旧密码重复 + 密码 - The new and old passwords are the same. + Password + + + 密码 - + - Der angegebene Benutzername existiert bereits. + - 该用户已存在 + - The specified username already exists. + - + - Der ausgewählte Benutzer konnte nicht gelöscht werden. Weitere Informationen finden Sie im Logger. + Passwortlänge unzureichend - 该用户无法删除,详情请查看Logger + 密码长度不足 - The selected user could not be deleted. See the logger for additional information. + Password length insuffiencent - + - Das Passwort ist abgelaufen und muss geändert werden. + Alphanumerische Anforderungen nicht erfüllt - 密码已过期,请设置新密码 + 密码须包含字母和数字 - The password is expired and must be changed. + Alpha-numeric requirements not met - + - Es wurde ein ungültiger Rollenname (NULL) angegeben. + Groß- und Kleinschreibung erforderlich - 无法选择该用户组 + 密码须包含大小写字母 - An invalid role name (NULL) was specified. + Upper and lower case characters required - + - Der angegebene Benutzer ist bereits angemeldet. + Das Passwort muss Sonderzeichen enthalten - 该用户已登录 + 密码须包含特定字符 - The specified user is already logged in. + Password must contain special characters - + - NULL wurde an "UIConnect" angehängt. + Bitte loggen Sie sich ein - UI界面输入了无效值 + 请登录 - NULL was appended to "UIConnect". + Please Login - + - Es wurde ein ungültiger Benutzername (NULL) angegeben. + Aktualisierung - 用户名错误 + 刷新 - An invalid username (NULL) was specified. + Refresh + + + 刷新 - + - Es wurde kein Passwort eingegeben. + Rolle entfernen - 没有密码 + 角色删除 - No password was entered. + Remove Role - + - Funktionsbaustein MpUserXLogin fehlt oder ist nicht richtig konfiguriert. + Umbenennen - MpUserXLogin功能块缺失或配置错误 + 用户重 命名 - Function block MpUserXLogin is missing or not configured correctly. + Rename + + + 用户重 命名 - + - Das zur Bestätigung eingegebene Passwort stimmt nicht mit dem neuen Passwort überein. + Wiederholen - 再次输入的密码不符 + 重复一遍 - The password entered for confirmation does not match the new password. + Repeat + + + 重复 一 遍 - + - Das angegebene Systemrecht wurde nicht gefunden (reserviert für zukünftige Verwendung). + Rolle - 无法找到指定的系统权限(该权限为备用权限) + 角色 - The specified system right was not found (reserved for future use). + Role - + - Der Import von Benutzergruppen und/oder Benutzerdaten ist fehlgeschlagen. Weitere Informationen finden Sie im Logger. + Rollenoptionen - 用户或用户组权限导入失败。详情请查看Logger + 角色可选 - The import of user groups and/or user data failed. See the logger for additional information. + Role Options - + - Beim Laden der Importdatei ist ein Fehler aufgetreten. Weitere Informationen finden Sie im Logger. + Benutzer - 加载导入文件出现错误。详情请查看Logger + 用户 - An error occurred while loading the import file. See the logger for additional information. + User + + + 用户 - + - Beim Speichern der Exportdatei ist ein Fehler aufgetreten. Weitere Informationen finden Sie im Logger. + Administrator - 保存输出文件出现错误。详情请查看Logger + 管理员 - An error occurred while saving the export file. See the logger for additional information. + Administrator + + + Administrator + + + Administrator - + - Der für die Rolle eingegebene Name ist zu lang (>50 Zeichen). + Jeder - 用户组名过长 + 任何人 - The name entered for the role is too long (>50 characters). + Everyone + + + Jeder + + + Everyone - + - Der für den Benutzer eingegebene Name ist zu lang (>20 Zeichen). + Vollständiger Name: - 用户名过长 + 全名: - The name entered for the user is too long (>20 characters). + Full Name: + + + Vollständiger Name: + + + Full Name: - + - Das eingegebene Passwort ist zu lang (>20 Zeichen). + Imperial - 密码过长 + 英制 - The password entered is too long (>20 characters). + Imperial - + - Diese Komponente kann nur aktiv werden, wenn MpUserXLogin aktiv ist. + Imperial-US - 用户系统未激活 + 英制-US - This component can only become active if MpUserXLogin is active. + Imperial-US - + - Der eingegebene Benutzername ist zu kurz + Sprache - 用户名过短 + 语言 - The username entered is too short + Language - + - Die angegebene Rolle existiert bereits. + Deutsch - 指定的用户组已存在 + 德语 - The specified role already exists. + German - + - Maximale Anzahl an Signaturversuchen überschritten. Der Signaturvorgang wurde unterbrochen. + Englisch - 电子签名错误次数到达上限,无法继续尝试电子签名 + 英语 - Maximum number of signature attempts exceeded. The signature procedure was interrupted. + English - + - Eine neue Signatur wurde gestartet, bevor die letzte signierte Aktion ausgeführt wurde. + Chinesisch - 本次电子签名未完成,请勿开启新的电子签名 + 中文 - A new signature was started before the last signed action was executed. + Chinese - + - Das eingegebene Passwort wurde bereits verwendet und kann nicht erneut vergeben werden. + Anmeldung - 新密码与旧密码一致,请重新输入新密码 + 登录 - The entered password has already been used and cannot be specified again. + Login + + + Anmeldung + + + Login - + - Die importierte Datei hat ein ungültiges Format. + Instandhaltung - 导入的文件格式无效 + 维护者 - The file being imported has an invalid format. + Maintenance + + + Instandhaltung + + + Maintenance - + - Bestätigen Sie die Benutzerlöschung + Maßeinheit - 确认删除该用户? + 计量单位 - Confirm User Deletion + Measurement Unit - + - Bestätigen Sie die Benutzersperre + Metrisch - 确认锁定该用户? + 公制 - Confirm User Locking + Metric - + - Bestätigen Sie das Entsperren des Benutzers + Nutzername: - 确认解锁该用户? + 用户名: - Confirm User Unlocking + User Name: + + + Nutzername: + + + User Name: - + - Bestätigen Sie die Rollenlöschung + Keiner - 确认删除该用户组? + - Confirm Role Deletion + None + + + Keiner + + + None - + - + Operator - + 操作者 - + Operator + + + Operator + + + Operator - + - Passwortlänge unzureichend + Passwort: - 密码长度不足 + 密码: - Password length insuffiencent + Password: + + + Passwort: + + + Password: - + - Alphanumerische Anforderungen nicht erfüllt + Passwortbestätigung: - 密码须包含字母和数字 + 密码确认: - Alpha-numeric requirements not met + Password Confirm: + + + Passwortbestätigung: + + + Password Confirm: - + - Groß- und Kleinschreibung erforderlich + Auswahl der Benutzerrolle - 密码须包含大小写字母 + 用户角色选择: - Upper and lower case characters required + User Role Selection + + + Auswahl der Benutzerrollen + + + User Role Selection - + - Das Passwort muss Sonderzeichen enthalten + Aufsicht - 密码须包含特定字符 + 主管 - Password must contain special characters + Supervisor + + + Supervisor + + + Supervisor + + + + + 用户更改为: + + + User Changed To: + + + 用户更改为: + + + + + Nutzerinformation + + + 用户信息 + + + UserInformation + + + + + Benutzerverwaltung + + + 用户管理 + + + User Management + + + 用户管理 + + + + + Nutzername + + + 用户 + + + User Name + + + 用户 diff --git a/mappFramework/Logical/mappView/Resources/Themes/BuRThemeFlat1/brease/Buttons.styles b/mappFramework/Logical/mappView/Resources/Themes/BuRThemeFlat1/brease/Buttons.styles index 64aa60e2..93034abd 100644 --- a/mappFramework/Logical/mappView/Resources/Themes/BuRThemeFlat1/brease/Buttons.styles +++ b/mappFramework/Logical/mappView/Resources/Themes/BuRThemeFlat1/brease/Buttons.styles @@ -64,7 +64,21 @@ backColor="#b4b4b4" mouseDownBackColor="#39f" disabledBackColor="#d1d1d1"/> + + + + + + + + + + + + + + diff --git a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/GearEnabled.svg b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/GearEnabled.svg new file mode 100644 index 00000000..fb0c4c75 --- /dev/null +++ b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/GearEnabled.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + diff --git a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/GearRotating.svg b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/GearRotating.svg new file mode 100644 index 00000000..8f612f80 --- /dev/null +++ b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/GearRotating.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + diff --git a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/KnownPosition.svg b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/KnownPosition.svg new file mode 100644 index 00000000..38b01ef7 --- /dev/null +++ b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/KnownPosition.svg @@ -0,0 +1,92 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/Off1.svg b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/Off1.svg new file mode 100644 index 00000000..60785b32 --- /dev/null +++ b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/Off1.svg @@ -0,0 +1,54 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/On1.svg b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/On1.svg new file mode 100644 index 00000000..4870c383 --- /dev/null +++ b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/On1.svg @@ -0,0 +1,54 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/Package.pkg b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/Package.pkg index b2005ddf..a88e7925 100644 --- a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/Package.pkg +++ b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/Package.pkg @@ -6,5 +6,13 @@ On.svg Reset.svg Stop.svg + KnownPosition.svg + UnknownPosition.svg + On1.svg + Off1.svg + AlarmActive.svg + GearDisabled.svg + GearEnabled.svg + GearRotating.svg
\ No newline at end of file diff --git a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/UnknownPosition.svg b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/UnknownPosition.svg new file mode 100644 index 00000000..dd5d9ef6 --- /dev/null +++ b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/UnknownPosition.svg @@ -0,0 +1,68 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/desktop.ini b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/desktop.ini new file mode 100644 index 00000000..17c2f566 --- /dev/null +++ b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Media/AxisControl/desktop.ini @@ -0,0 +1,4 @@ +[ViewState] +Mode= +Vid= +FolderType=Pictures diff --git a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Texts/AxisFaceplate.tmx b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Texts/AxisFaceplate.tmx new file mode 100644 index 00000000..dede572c --- /dev/null +++ b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Texts/AxisFaceplate.tmx @@ -0,0 +1,174 @@ + + +
+ Change the namespace to define where this text module should be located within the logical structure of your texts + IAT/AxisFaceplate +
+ + + + Aktuelle Position + + + 实际位置 + + + Act Position + + + + + Aktuelle Geschwindigkeit + + + 实际速度 + + + Act Speed + + + + + Referenzieren + + + 寻参 + + + Home + + + + + Joggen negativ + + + 负向点动 + + + Jog Negative + + + + + Joggen Sie positiv + + + 正向点动 + + + Jog Positive + + + + + Absolut bewegen + + + 绝对 + + + Move Absolute + + + + + Additiv verschieben + + + 相对定位 + + + Move Additive + + + + + Bewegungsgeschwindigkeit + + + 按速度运行 + + + Move Velocity + + + + + Leistung + + + 使能 + + + Power + + + + + An + + + 开启 + + + On + + + + + Abstand einstellen + + + 设置距离 + + + Set Distance + + + + + Soll Position + + + 设定位置 + + + Set Position + + + + + Soll Geschwindigkeit + + + 设定速度 + + + Set Speed + + + + + Stoppen + + + 停止 + + + Stop + + + + + Zurücksetzen + + + 复位 + + + Reset + + + +
\ No newline at end of file diff --git a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Texts/Package.pkg b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Texts/Package.pkg index d1c5f72f..014cd409 100644 --- a/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Texts/Package.pkg +++ b/mappFramework/Logical/mappView/Widgets/AxisControlWidgetLib/Resources/Texts/Package.pkg @@ -1,5 +1,7 @@  - + + AxisFaceplate.tmx + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/Hardware.hw b/mappFramework/Physical/Simulation/Hardware.hw index 196fab40..d6f7d33f 100644 --- a/mappFramework/Physical/Simulation/Hardware.hw +++ b/mappFramework/Physical/Simulation/Hardware.hw @@ -1,11 +1,12 @@  - + - + + @@ -21,7 +22,15 @@ + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/AccessAndSecurity/UserRoleSystem/User.user b/mappFramework/Physical/Simulation/PC/AccessAndSecurity/UserRoleSystem/User.user index 4afbd194..b1deabc7 100644 --- a/mappFramework/Physical/Simulation/PC/AccessAndSecurity/UserRoleSystem/User.user +++ b/mappFramework/Physical/Simulation/PC/AccessAndSecurity/UserRoleSystem/User.user @@ -1,5 +1,4 @@  - @@ -9,7 +8,7 @@ - + diff --git a/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/AuditMgr.uad b/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/AuditMgr.uad new file mode 100644 index 00000000..a5a0c990 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/AuditMgr.uad @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/FileMgr.uad b/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/FileMgr.uad index 7db70e67..05c1c1a0 100644 --- a/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/FileMgr.uad +++ b/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/FileMgr.uad @@ -13,6 +13,7 @@ + diff --git a/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/Package.pkg b/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/Package.pkg index 0e26e31d..10ecf2f1 100644 --- a/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/Package.pkg +++ b/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/Package.pkg @@ -1,5 +1,5 @@  - + AlarmMgr.uad @@ -8,5 +8,6 @@ FileMgr.uad RecipeMgr.uad UserXMgr.uad + AuditMgr.uad \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/RecipeMgr.uad b/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/RecipeMgr.uad index 32e1b563..f721ff61 100644 --- a/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/RecipeMgr.uad +++ b/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/RecipeMgr.uad @@ -21,6 +21,9 @@ + + + diff --git a/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/UserXMgr.uad b/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/UserXMgr.uad index 6099c62f..ab47355d 100644 --- a/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/UserXMgr.uad +++ b/mappFramework/Physical/Simulation/PC/Connectivity/OpcUA/UserXMgr.uad @@ -1,19 +1,18 @@  - - + - - - - + + + + - - - - + + + + @@ -54,6 +53,7 @@ + diff --git a/mappFramework/Physical/Simulation/PC/Cpu.pkg b/mappFramework/Physical/Simulation/PC/Cpu.pkg index b2654d3e..e5578776 100644 --- a/mappFramework/Physical/Simulation/PC/Cpu.pkg +++ b/mappFramework/Physical/Simulation/PC/Cpu.pkg @@ -1,5 +1,5 @@  - + Cpu.sw @@ -23,7 +23,7 @@ - + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/Cpu.sw b/mappFramework/Physical/Simulation/PC/Cpu.sw index ce3b1298..8b87d322 100644 --- a/mappFramework/Physical/Simulation/PC/Cpu.sw +++ b/mappFramework/Physical/Simulation/PC/Cpu.sw @@ -2,22 +2,68 @@ + + - - + + + + - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -45,5 +91,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/TextSystem/TC.textconfig b/mappFramework/Physical/Simulation/PC/TextSystem/TC.textconfig index dc1aa803..bd2c9188 100644 --- a/mappFramework/Physical/Simulation/PC/TextSystem/TC.textconfig +++ b/mappFramework/Physical/Simulation/PC/TextSystem/TC.textconfig @@ -1,5 +1,4 @@  - @@ -15,18 +14,30 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappMotion/AppAxis_1/VAppAxis1.purevaxcfg b/mappFramework/Physical/Simulation/PC/mappMotion/AppAxis_1/VAppAxis1.purevaxcfg index 344f2493..260dfaf2 100644 --- a/mappFramework/Physical/Simulation/PC/mappMotion/AppAxis_1/VAppAxis1.purevaxcfg +++ b/mappFramework/Physical/Simulation/PC/mappMotion/AppAxis_1/VAppAxis1.purevaxcfg @@ -1,16 +1,12 @@  - - - - - - + + diff --git a/mappFramework/Physical/Simulation/PC/mappServices/AppAxis_1/Axis1Alm.mpalarmxcore b/mappFramework/Physical/Simulation/PC/mappServices/AppAxis_1/Axis1Alm.mpalarmxcore index 3c7b7307..26ad5ac1 100644 --- a/mappFramework/Physical/Simulation/PC/mappServices/AppAxis_1/Axis1Alm.mpalarmxcore +++ b/mappFramework/Physical/Simulation/PC/mappServices/AppAxis_1/Axis1Alm.mpalarmxcore @@ -3,6 +3,13 @@ + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappServices/Audit/AuditCfg.mpaudittrail b/mappFramework/Physical/Simulation/PC/mappServices/Audit/AuditCfg.mpaudittrail new file mode 100644 index 00000000..c94099d4 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappServices/Audit/AuditCfg.mpaudittrail @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappServices/Audit/CustomCfg.mpaudittrail b/mappFramework/Physical/Simulation/PC/mappServices/Audit/CustomCfg.mpaudittrail new file mode 100644 index 00000000..ba777fd2 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappServices/Audit/CustomCfg.mpaudittrail @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappServices/Audit/Package.pkg b/mappFramework/Physical/Simulation/PC/mappServices/Audit/Package.pkg new file mode 100644 index 00000000..0462de5f --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappServices/Audit/Package.pkg @@ -0,0 +1,9 @@ + + + + + AuditCfg.mpaudittrail + CustomCfg.mpaudittrail + UnitCfg.mpcomunit + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappServices/Audit/UnitCfg.mpcomunit b/mappFramework/Physical/Simulation/PC/mappServices/Audit/UnitCfg.mpcomunit new file mode 100644 index 00000000..f4b05967 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappServices/Audit/UnitCfg.mpcomunit @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappServices/Backup/BackupCfg.mpbackupcore b/mappFramework/Physical/Simulation/PC/mappServices/Backup/BackupCfg.mpbackupcore index b6d4868d..e40d7023 100644 --- a/mappFramework/Physical/Simulation/PC/mappServices/Backup/BackupCfg.mpbackupcore +++ b/mappFramework/Physical/Simulation/PC/mappServices/Backup/BackupCfg.mpbackupcore @@ -11,7 +11,11 @@ + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappServices/Package.pkg b/mappFramework/Physical/Simulation/PC/mappServices/Package.pkg index 7de50d75..ea2f6baa 100644 --- a/mappFramework/Physical/Simulation/PC/mappServices/Package.pkg +++ b/mappFramework/Physical/Simulation/PC/mappServices/Package.pkg @@ -1,5 +1,5 @@  - + AlarmX @@ -9,5 +9,6 @@ File Recipe UserX + Audit \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappServices/UserX/UserXCfg.mpuserx b/mappFramework/Physical/Simulation/PC/mappServices/UserX/UserXCfg.mpuserx index e0bf21ac..557c8864 100644 --- a/mappFramework/Physical/Simulation/PC/mappServices/UserX/UserXCfg.mpuserx +++ b/mappFramework/Physical/Simulation/PC/mappServices/UserX/UserXCfg.mpuserx @@ -1,14 +1,16 @@  - + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/AlarmX/Navigation_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/AlarmX/Navigation_content.eventbinding index c8b4a689..ec7eb937 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/AlarmX/Navigation_content.eventbinding +++ b/mappFramework/Physical/Simulation/PC/mappView/AlarmX/Navigation_content.eventbinding @@ -11,7 +11,7 @@ - + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit.vis b/mappFramework/Physical/Simulation/PC/mappView/Audit.vis new file mode 100644 index 00000000..7a6a298a --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit.vis @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditDialog_ArchiveSettings_content.binding b/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditDialog_ArchiveSettings_content.binding new file mode 100644 index 00000000..4ffbf7af --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditDialog_ArchiveSettings_content.binding @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditDialog_ArchiveSettings_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditDialog_ArchiveSettings_content.eventbinding new file mode 100644 index 00000000..e7c18c04 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditDialog_ArchiveSettings_content.eventbinding @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditQuery_content.binding b/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditQuery_content.binding new file mode 100644 index 00000000..4c036c6c --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditQuery_content.binding @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditTrail_content.binding b/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditTrail_content.binding new file mode 100644 index 00000000..9d8e4df9 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditTrail_content.binding @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditTrail_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditTrail_content.eventbinding new file mode 100644 index 00000000..16e08377 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit/AuditTrail_content.eventbinding @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit/CustomEvents_content.binding b/mappFramework/Physical/Simulation/PC/mappView/Audit/CustomEvents_content.binding new file mode 100644 index 00000000..8d979993 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit/CustomEvents_content.binding @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit/CustomEvents_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/Audit/CustomEvents_content.eventbinding new file mode 100644 index 00000000..e7d0523c --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit/CustomEvents_content.eventbinding @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit/Navigation_content.binding b/mappFramework/Physical/Simulation/PC/mappView/Audit/Navigation_content.binding new file mode 100644 index 00000000..6f46e40f --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit/Navigation_content.binding @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit/Navigation_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/Audit/Navigation_content.eventbinding new file mode 100644 index 00000000..fc410ebd --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit/Navigation_content.eventbinding @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Audit/Package.pkg b/mappFramework/Physical/Simulation/PC/mappView/Audit/Package.pkg new file mode 100644 index 00000000..5ff5d865 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Audit/Package.pkg @@ -0,0 +1,15 @@ + + + + + AuditTrail_content.binding + AuditTrail_content.eventbinding + CustomEvents_content.binding + CustomEvents_content.eventbinding + AuditQuery_content.binding + AuditDialog_ArchiveSettings_content.binding + AuditDialog_ArchiveSettings_content.eventbinding + Navigation_content.binding + Navigation_content.eventbinding + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/Backup.vis b/mappFramework/Physical/Simulation/PC/mappView/Backup.vis index 0d20f70c..17c41b93 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Backup.vis +++ b/mappFramework/Physical/Simulation/PC/mappView/Backup.vis @@ -12,6 +12,7 @@ + @@ -20,6 +21,7 @@ + @@ -27,6 +29,7 @@ + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Backup/BackupDialog_Update_content.binding b/mappFramework/Physical/Simulation/PC/mappView/Backup/BackupDialog_Update_content.binding new file mode 100644 index 00000000..e402ffb9 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Backup/BackupDialog_Update_content.binding @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Backup/BackupDialog_Update_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/Backup/BackupDialog_Update_content.eventbinding new file mode 100644 index 00000000..b8933197 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/Backup/BackupDialog_Update_content.eventbinding @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/Backup/Backup_content.binding b/mappFramework/Physical/Simulation/PC/mappView/Backup/Backup_content.binding index 42d2b4c1..299482fe 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Backup/Backup_content.binding +++ b/mappFramework/Physical/Simulation/PC/mappView/Backup/Backup_content.binding @@ -9,10 +9,7 @@ - - - - + @@ -62,6 +59,13 @@ - + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Backup/Backup_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/Backup/Backup_content.eventbinding index c123c571..60730127 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Backup/Backup_content.eventbinding +++ b/mappFramework/Physical/Simulation/PC/mappView/Backup/Backup_content.eventbinding @@ -146,5 +146,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/Backup/Package.pkg b/mappFramework/Physical/Simulation/PC/mappView/Backup/Package.pkg index 34555c88..7a063adc 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Backup/Package.pkg +++ b/mappFramework/Physical/Simulation/PC/mappView/Backup/Package.pkg @@ -1,5 +1,5 @@  - + Backup_content.binding @@ -10,6 +10,8 @@ BackupDialog_Restore_content.eventbinding BackupDialog_AutoSettings_content.binding BackupDialog_AutoSettings_content.eventbinding + BackupDialog_Update_content.binding + BackupDialog_Update_content.eventbinding Navigation_content.eventbinding Navigation_content.binding diff --git a/mappFramework/Physical/Simulation/PC/mappView/File/FileDialog_FIFO_dialog_content.binding b/mappFramework/Physical/Simulation/PC/mappView/File/FileDialog_FIFO_dialog_content.binding index c8fdc64a..ca0ecb34 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/File/FileDialog_FIFO_dialog_content.binding +++ b/mappFramework/Physical/Simulation/PC/mappView/File/FileDialog_FIFO_dialog_content.binding @@ -30,5 +30,9 @@ + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/File/FileDialog_FIFO_dialog_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/File/FileDialog_FIFO_dialog_content.eventbinding index 472fbe47..97e52ecf 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/File/FileDialog_FIFO_dialog_content.eventbinding +++ b/mappFramework/Physical/Simulation/PC/mappView/File/FileDialog_FIFO_dialog_content.eventbinding @@ -78,5 +78,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/File/File_content.binding b/mappFramework/Physical/Simulation/PC/mappView/File/File_content.binding index 675399a5..411d0908 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/File/File_content.binding +++ b/mappFramework/Physical/Simulation/PC/mappView/File/File_content.binding @@ -105,5 +105,13 @@ + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/File/File_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/File/File_content.eventbinding index 8e603da8..b9b6522d 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/File/File_content.eventbinding +++ b/mappFramework/Physical/Simulation/PC/mappView/File/File_content.eventbinding @@ -26,21 +26,6 @@ - - - - - - - - - - - - - - - diff --git a/mappFramework/Physical/Simulation/PC/mappView/Package.pkg b/mappFramework/Physical/Simulation/PC/mappView/Package.pkg index 0b90b167..0ebe9541 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Package.pkg +++ b/mappFramework/Physical/Simulation/PC/mappView/Package.pkg @@ -1,5 +1,5 @@  - + Config.mappviewcfg @@ -10,6 +10,7 @@ File.vis Recipe.vis UserX.vis + Audit.vis AlarmX DemoPage Axis @@ -17,5 +18,6 @@ File Recipe UserX + Audit \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipeDialog_New_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipeDialog_New_content.eventbinding index 85f146b9..3bc4b62a 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipeDialog_New_content.eventbinding +++ b/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipeDialog_New_content.eventbinding @@ -25,6 +25,11 @@ + + + + + @@ -42,7 +47,7 @@ - + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipePreviewMachConfig_content.binding b/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipePreviewMachConfig_content.binding index ec1f95da..9436ba6a 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipePreviewMachConfig_content.binding +++ b/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipePreviewMachConfig_content.binding @@ -5,49 +5,43 @@ + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + @@ -55,56 +49,14 @@ + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipePreviewPars_content.binding b/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipePreviewPars_content.binding index 5491b3ef..e76986dc 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipePreviewPars_content.binding +++ b/mappFramework/Physical/Simulation/PC/mappView/Recipe/RecipePreviewPars_content.binding @@ -53,59 +53,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Recipe/Recipe_content.binding b/mappFramework/Physical/Simulation/PC/mappView/Recipe/Recipe_content.binding index 3eb5cdf5..f338ff9a 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Recipe/Recipe_content.binding +++ b/mappFramework/Physical/Simulation/PC/mappView/Recipe/Recipe_content.binding @@ -14,19 +14,19 @@ - - - - + + + + - - - - - - - - + + + + + + + + @@ -62,13 +62,7 @@ - - - - - - - + @@ -151,40 +145,14 @@ - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - + + + + @@ -193,11 +161,20 @@ + + + + + + + + + @@ -221,20 +198,37 @@ + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Recipe/Recipe_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/Recipe/Recipe_content.eventbinding index 2b2d73e3..2dac1612 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Recipe/Recipe_content.eventbinding +++ b/mappFramework/Physical/Simulation/PC/mappView/Recipe/Recipe_content.eventbinding @@ -248,22 +248,29 @@ - - + + + + + + + + + - + - + @@ -298,7 +305,7 @@ - + @@ -333,7 +340,7 @@ - + @@ -344,4 +351,4 @@ - + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/UserX.vis b/mappFramework/Physical/Simulation/PC/mappView/UserX.vis index fc270940..2819db62 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/UserX.vis +++ b/mappFramework/Physical/Simulation/PC/mappView/UserX.vis @@ -13,11 +13,13 @@ + + @@ -26,11 +28,15 @@ + - + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/UserX/Package.pkg b/mappFramework/Physical/Simulation/PC/mappView/UserX/Package.pkg index db2884d8..9cf189f9 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/UserX/Package.pkg +++ b/mappFramework/Physical/Simulation/PC/mappView/UserX/Package.pkg @@ -1,5 +1,5 @@  - + UserX_content.binding @@ -11,5 +11,7 @@ UserXDialog_Error_content.binding Navigation_content.eventbinding Navigation_content.binding + UserXDialog_Duplicate_content.binding + UserXDialog_Duplicate_content.eventbinding \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/UserX/UserXDialog_Duplicate_content.binding b/mappFramework/Physical/Simulation/PC/mappView/UserX/UserXDialog_Duplicate_content.binding new file mode 100644 index 00000000..4f46aa5b --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/UserX/UserXDialog_Duplicate_content.binding @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/UserX/UserXDialog_Duplicate_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/UserX/UserXDialog_Duplicate_content.eventbinding new file mode 100644 index 00000000..c5d987d4 --- /dev/null +++ b/mappFramework/Physical/Simulation/PC/mappView/UserX/UserXDialog_Duplicate_content.eventbinding @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mappFramework/Physical/Simulation/PC/mappView/UserX/UserXDialog_Export_content.binding b/mappFramework/Physical/Simulation/PC/mappView/UserX/UserXDialog_Export_content.binding index 4359ff31..703b8fa0 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/UserX/UserXDialog_Export_content.binding +++ b/mappFramework/Physical/Simulation/PC/mappView/UserX/UserXDialog_Export_content.binding @@ -1,10 +1,7 @@  - - - - + @@ -13,5 +10,9 @@ - + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/UserX/UserX_content.eventbinding b/mappFramework/Physical/Simulation/PC/mappView/UserX/UserX_content.eventbinding index 2ca92200..8088949a 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/UserX/UserX_content.eventbinding +++ b/mappFramework/Physical/Simulation/PC/mappView/UserX/UserX_content.eventbinding @@ -137,12 +137,22 @@ - - + + - - + + + + + + + + + + + + diff --git a/mappFramework/Physical/Simulation/PC/mappView/Visualization.vis b/mappFramework/Physical/Simulation/PC/mappView/Visualization.vis index 0e831643..a42480f7 100644 --- a/mappFramework/Physical/Simulation/PC/mappView/Visualization.vis +++ b/mappFramework/Physical/Simulation/PC/mappView/Visualization.vis @@ -1,148 +1,177 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mappFramework/mappFramework.apj b/mappFramework/mappFramework.apj index 8a8a7003..a0ae4bc7 100644 --- a/mappFramework/mappFramework.apj +++ b/mappFramework/mappFramework.apj @@ -1,5 +1,5 @@  - +