Join us today!
VAR_INST vs VAR_STAT in TwinCAT
In the previous tutorial, we have explained how to retain the variable values in a method every method call. Another alternative way is to use VAR_STAT. However, memory address of the variable for every instantiation of the function block of where the method resides will be the same.
To observe this, we have added an output of the nCounter memory address in the M_Count method. Let's test it with VAR_INST first.
FB_Utilities.M_Count when VAR_INST is used:
METHOD M_Count : BOOL VAR_INPUT bStart : REFERENCE TO BOOL; END_VAR VAR_INST nCounter : INT; END_VAR VAR_OUTPUT nCounterADR : ULINT; END_VAR
IF bStart THEN nCounter := nCounter +1 ; IF nCounter > 50 THEN ADSLOGSTR(ADSLOG_MSGTYPE_WARN, 'Counter limit has been reached!', ''); bStart := FALSE; M_Count := TRUE; END_IF END_IF nCounterADR := ADR(nCounter);
In the main program, create two instances of FB_Utilities.
VAR fbUtilities : FB_Utilities; bStart : BOOL; counterADR : PVOID; fbUtilities_2 : FB_Utilities; bStart_2 : BOOL; counterADR_2 : PVOID; END_VAR
fbUtilities.M_Count(bStart := bStart,nCounterADR =>counterADR); fbUtilities_2.M_Count(bStart := bStart_2,nCounterADR =>counterADR_2);
Login the plc and check the counterADR and counterADR_2 values. You will see that each counter variable in M_Count method have a different memory address since we have used VAR_INST.
Now, let's use VAR_STAT instead. Make the changes in the method:
FB_Utilities.M_Count when VAR_STAT is used:
METHOD M_Count : BOOL VAR_INPUT bStart : REFERENCE TO BOOL; END_VAR VAR_STAT nCounter : INT; END_VAR VAR_OUTPUT nCounterADR : ULINT; END_VAR
You can see that nCounter variables in the function block instances of the method point to the same memory address since VAR_STAT is used.
Now, let's start the first method and check the counter value in the second instance.
Since the both counters point to the same memory address, even though we have executed the first instance, counter value in the second instance has also the same value.
In case you want to say thank you !)
We'd be very grateful if you could share this community with your colleagues and friends. You can also buy us a coffee to keep us fueled 😊 This is the best way to say thank you to this project and support your community.
twinControls - https://twincontrols.com/
- 17 Forums
- 265 Topics
- 932 Posts
- 2 Online
- 688 Members