Dear sir,
i'm having a integer Tag, which is bit encoded values. Now i have to do is to decode it by bit by bit. and store the bit values in individual bool tags. how could we do it VBA or other method?
Kindly check and do the needfull.
Dear sir,
i'm having a integer Tag, which is bit encoded values. Now i have to do is to decode it by bit by bit. and store the bit values in individual bool tags. how could we do it VBA or other method?
Kindly check and do the needfull.
Thanks&Rgds,
Paruvathakumar
Hi..
i found the solution for the above, by using the MOD 2/ Bit masking method.
now i have the problem is, how to detect which variable has triggered the function. basically i want to do is generate the alarms based on the integer tag value.
i can use withevents onlinevariable, but this events are fired for all the online variable change. for me the Online Alarm group variable value has any change then this event to be triggered.
how do i can complete my task. Kindly any one can help me.
Thanks&Rgds,
Paruvathakumar
Hi Paruvathakumar,
You need to know, that there can be only one active alarm per variable in zenon. So if you can guarantee that only one of the alarmbits in the INT is active at the same time, you can use a reaction matrix to define alarms for each of the single alarm bits.
If each of the bits represent individual alarms, you either need to create the variables in zenon as 16 single boolean variables, split them in the PLC, or use the zenon logic to split the variables into single boolean variables, in order to have individual alarms.
Best regards,
Mark
Hi Mark..
Thanks For the reply...
my intentions is your Second option...
My PLC Encode the alarm bits to INT, in HMI i have to Decode it to individual Bool Bits.
i'm using the following codes to detect the alarms.
if i use variablechange, this event calls for all the online variable change.
i can make a online container for only alarm. and in only that container variable has any change then decode function will call.
(i'm worried, if i execute this function for all the variables, my application should not get hang/slow)
Private Sub OLV_Change_VariableChange(ByVal obVar As Variable) If InStr(obVar.Name, "_AlarmStatus") > 0 Then Dim Ret Ret = Alarms.fnAlm_Decode(obVar.Name) End If End Sub Public Function fnAlm_Decode(ByVal VarName As String) As Boolean Dim InVal, TmpVal, WordNo, i As Integer Dim AlmStart As Integer Dim EncodeVar As Variable Dim DecodeVar As Variable Dim Out_Var, CPU As String Dim Ret, Sp On Error GoTo Err Ret = usrFunctions.SetOnlineVar(VarName) 'CPU20_AlarmStatus_1 'CPU20_AlarmTag_10 If InStr(VarName, "_AlarmStatus_") > 0 Then Sp = Split(VarName, "_AlarmStatus_") CPU = Sp(0) WordNo = Sp(1) Else GoTo Err End If Set EncodeVar = thisProject.Variables.Item(VarName) InVal = EncodeVar.Value AlmStart = WordNo * 32 For i = 0 To 31 Out_Var = CPU & "_AlarmTag_" & (AlmStart + i) Ret = usrFunctions.SetOnlineVar(Out_Var) TmpVal = 0 InVal = EncodeVar.Value TmpVal = InVal Mod 2 InVal = (InVal - TmpVal) / 2 Set DecodeVar = thisProject.Variables.Item(Out_Var) If TmpVal = 1 Then DecodeVar.Value = 1 Else DecodeVar.Value = 0 End If Next i fnAlm_Decode = True GoTo Ok Err: fnAlm_Decode = False Ok: End Function
Thanks&Rgds,
Paruvathakumar
Hi,
Have a look at the zenon logic (straton). Splitting one or more INT variables into single bits can be done fairly easy here, and the zenon logic runtime runs as a separate process.
Regards,
Mark
Hi,
I'm having a problem related with this!!!!
I just programmed a DINT split into Booleans through Zenon Logic. Everything is working fine EXCEPT that the timestamp in the AML is wrong. All the alarms configured through Logic have the same time for received and cleared, and both of those times are incorrect.
Any idea why that can be happening?
**I programmed it by copying the data into an array of bolleans by:
My_Bool_Of_Array[0]:=My_Dint_Variable.0;
My_Bool_Of_Array[1]:=My_Dint_Variable.1;
...
My_Bool_Of_Array[31]:=My_Dint_Variable.31;
Is there a better way to do it?