Machsupport Forum
Mach Discussion => Mach4 General Discussion => Topic started by: KentCNC on March 23, 2021, 11:40:57 AM
-
I have two very simple question that I cannot find answers to.
1) How do I exit a screen script. I have a simple script add to the button up script. I have an If statement that when true I want to exit the code and not continue with the lines below it.
2) I want to use mc.mcCntlSetLastError(inst, "Yadda yada")to display a message to the user and not require an acknowledgment via a message box. I have the message at the beginning of a screen script. Later in that script I have a FOR loop that I am treating as a timer. The problem is that the message will not be displayed until the end when the timer completes and the rest of the routing finishes. How can I get that message to appear as soon as it is hit in the code and not wait for completion of execution of the entire script?
-
Not sure I know what you mean with #1. Are you talking about a conditional cycle stop?
But #2 is that the button press is a GUI event. And the GUI cannot be updated while it is processing a GUI event. It is the same thread of execution.
So you have to get creative. Maybe have a global screen script variable (defined in the screen load script), a string variable that will contain your message. Than an addition to the PLC script that watches the string variable to become non empty and when so, , uses the string variable in a call to mcCntlSetLastError() and then finally sets the string variable to empty.
screen load script:
myMessageVar = ""
PLC script
if (myMessageVar ~= "") then
local inst = mc.GetInstance()
mcCntlSetLastError(inst, myMessageVar);
myMessageVar = ""
end
Button script:
myMessageVar = "Display this now!!!"
Steve
-
Thank you for that response. The first question may be so basic that it is easy not to understand what I am asking. If I wrote a subroutine in Visual Basic and had logic that determined a need to exit the subroutine, I would use an Exit Sub command. Any node after that command would not be executed. Is there an equivalent method for exiting the code in a screen button script? Perhaps it just needs to be written as a function and stored it the screen load and called from the button script. I assume you can exit a function using "Return".
-
Yes, return. All lower case.
if (condition == true) then
return
end
It is a dry read, but the LUA manual may be of some use to you. https://www.lua.org/manual/5.3/ (https://www.lua.org/manual/5.3/)
Steve
-
I tried return but that did not work. It continued to execute instructions after that IF statement.
-
Script instructions continued to execute after the return? The return keyword has never failed me. How about posting the entire button script. We will find the answer.
Steve
-
I have changed my script to use a series of if and elseif statements and eliminated the need for return. So I created the simple script below and like you said the return worked. When I get a chance I will modify my actual routine to determine if I was mistaken or if something odd is truly happening.
if 1==1 then
wx.wxMessageBox ("Return statement next")
return
end
wx.wxMessageBox ("Return did not work")
-
I went back to my script and sure enough return would work. Not sure what I was doing wrong before. Thank you very much for the responses!