4.7 KiB
4.7 KiB
IF #CurrentPage <> #LastPage THEN
#LastPage := #CurrentPage;
#found := False;
#index := -1;
// Search if the current page is already in the history
FOR #i := 1 TO #Length DO
IF #PageHistory[#i] = #CurrentPage THEN
#found := True;
#index := #i; // Exit the loop as we found the page
EXIT;
END_IF;
END_FOR;
IF #found THEN
// If the page is found, move the history to remove loops
FOR #i := #index TO #Length DO
#PageHistory[#i-#index] := #PageHistory[#i];
END_FOR;
#Length := #Length - #index;
ELSE
// If the page is new, add it to the history
IF #Length < #MaxHistory THEN
#Length := #Length + 1;
FOR #i := #Length TO 1 BY -1 DO
#PageHistory[#i] := #PageHistory[#i - 1];
END_FOR;
#PageHistory[0] := #CurrentPage;
END_IF;
END_IF;
// Return the previous page
#ReturnPage := #PageHistory[1];
ELSE
// Special initial case if history is empty
IF #Length=0 THEN
#PageHistory[0] := #CurrentPage;
#Length := 1;
#ReturnPage := 1;
END_IF;
END_IF;
IF #ReturnPage = 0 THEN
#ReturnPage := 1;
END_IF;
Then on the FC10:
we save the last page on the DBW66
Description:
This script manages the navigation history of Human-Machine Interface (HMI) pages using a Last-In-First-Out (LIFO) approach. It ensures efficient page tracking and allows users to navigate back to previous pages without encountering loops or redundant entries.
Key Functionalities:
- Page Change Detection:
- The script checks if the current page (
#CurrentPage
) is different from the last visited page (#LastPage
). - If there is a change, it updates the navigation history accordingly.
- The script checks if the current page (
- Updating the Last Visited Page:
- Assigns the value of
#CurrentPage
to#LastPage
to keep track of the latest page.
- Assigns the value of
- Searching the Current Page in History:
- Initializes a flag
#found
toFalse
and an index#index
to-1
. - Iterates through the
#PageHistory
array to check if the current page already exists in the history. - If found, sets
#found
toTrue
, records the index, and exits the loop.
- Initializes a flag
- Removing Loops in History:
- If the current page is found in the history (
#found
isTrue
):- Shifts the pages after the found index to the beginning of the
#PageHistory
array. - Updates the
#Length
of the history to reflect the removed pages, effectively eliminating loops.
- Shifts the pages after the found index to the beginning of the
- If the current page is found in the history (
- Adding a New Page to History:
- If the current page is not found in the history:
- Checks if the history length is less than the maximum allowed (
#MaxHistory
). - Increments the
#Length
of the history. - Shifts existing pages one position backward to make space at the top of the history stack.
- Adds the current page to the top of the history (
#PageHistory[0]
).
- Checks if the history length is less than the maximum allowed (
- If the current page is not found in the history:
- Setting the Return Page:
- Assigns the value of
#PageHistory[1]
to#ReturnPage
, which represents the previous page for navigation.
- Assigns the value of
- Handling Initial Case:
- If there is no page change and the history is empty (
#Length = 0
):- Initializes the history with the current page.
- Sets the
#ReturnPage
to1
as a default.
- If there is no page change and the history is empty (
- Default Return Page:
- Ensures that
#ReturnPage
is not zero; if it is, sets it to1
to avoid invalid page references.
- Ensures that
Usage Guidelines:
- Navigation History Management:
- Utilize this script to keep an accurate and loop-free history of HMI page navigation.
- It is particularly useful for implementing "Back" functionality in HMI applications.
- Customizing History Size:
- Adjust the
#MaxHistory
variable to change the maximum number of pages stored in the history.
- Adjust the
- Understanding the History Stack:
- The
#PageHistory
array operates as a stack where#PageHistory[0]
is the most recently visited page. - Pages are pushed onto the stack when new pages are visited and popped off when navigating back.
- The
- Avoiding Navigation Errors:
- The script ensures that there is always a valid page to return to by setting a default
#ReturnPage
if necessary.
- The script ensures that there is always a valid page to return to by setting a default
Tips:
- Preventing Loops:
- The script removes any pages between the current position and a previously visited page to prevent navigation loops.
Conclusion:
This script effectively manages HMI page navigation by maintaining a clean history stack, allowing users to navigate backward efficiently. By preventing loops and redundant entries, it enhances the user experience in HMI applications.