Hello everyone,
Is it possible to export the historical alarm list from VC4? Has anyone already implemented this?
Thanks for the feedback.
Willi
Hello everyone,
Is it possible to export the historical alarm list from VC4? Has anyone already implemented this?
Thanks for the feedback.
Willi
This function B&R Online Help will read one alarm at a time. You can expand it into a algorithm to extract the entire historical list.
are you using alarm system of VC4 or MpAlarmXHistory?
Hello,
I am exporting historical messages from VC4 to a CSV file:
PROGRAM _INIT
MpParameterCSV_0.MpLink = ADR(gAlarmCsv)
MpParameterCSV_0.Enable = TRUE
MpParameterCSV_0.DeviceName = “Data”
MpParameterCSV_0.FileName = “Alarm_Historie”
MpParameterCSV_0.Load = FALSE
MpParameterCSV_0.Category = “CAT_Alarme”
MpParameterRegPar_1.MpLink = ADR(gAlarmCsv)
MpParameterRegPar_1.Enable = TRUE
MpParameterRegPar_1.PVName = "Read_Logbu:Alarmstring"
MpParameterRegPar_1.Category = "CAT_Alarme"
END_PROGRAM
PROGRAM _CYCLIC
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Starte Logbuch lesen
IF EDGEPOS(bLeseLogbuch) THEN
ui_ZaehleLesen = 0
bLesenAktiv = TRUE
ENDIF
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Verzögert Starten
TP_Starte_Sicherung.IN = bLeseLogbuch
TP_Starte_Sicherung.PT = TIME(200)
TP_Starte_Sicherung FUB TP()
bInfo[90] = TP_Starte_Sicherung.Q
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Funktion Logbuch lesen
IF NOT(TP_Starte_Sicherung.Q) THEN
IF bLesenAktiv THEN
IF ready = 0 THEN
VC_HANDLE = VA_Setup(1,"Visu_I")
IF VC_HANDLE <> 0 THEN
ready = 1
ENDIF
ELSE
Access_Status = VA_Saccess (1,VC_HANDLE)
IF Access_Status = 0 THEN
Alarmlen = 150
Seperator = 45 ;Hyphen
IF ui_ZaehleLesen = 0 THEN
Alarmtype = 1 ;Ersten Alarm auslesen
ENDIF
IF ui_ZaehleLesen >= 1 THEN
Alarmtype = 2 ;Nächsten Alarm auslesen
ENDIF
TimeDateForm = 0 ;DD.MM.YY HH.MM.SS
GetExAL_Status = VA_GetExAlarmList (1,VC_HANDLE,UDINT(ADR(Alarmstring)),UDINT(ADR(Alarmlen)),Alarmtype,Seperator,TimeDateForm)
VA_Srelease (1,VC_HANDLE)
ENDIF
ENDIF
ENDIF
ENDIF
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IF (ui_ZaehleLesen <= MaxWert_Logbuch_Lesen) THEN
IF EDGENEG(bLesenAktiv) THEN
;Schieberegister weiterschieben
LOOP i = MaxWert_Logbuch_Lesen DOWNTO 0 DO
IF (i > 0) THEN
Alarmstring[i] = Alarmstring[i-1]
ENDIF
;Aktuellen Wert auf Schieberegister Datenfeld 0 schreiben
IF (i = 0) THEN
brsmemcpy(ADR(Alarmstring[0]),ADR(Alarmstring),150)
ENDIF
ENDLOOP
bLesenAktiv = TRUE
ui_ZaehleLesen = ui_ZaehleLesen + 1
ENDIF
ENDIF
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Rücksetzen
IF ui_ZaehleLesen = MaxWert_Logbuch_Lesen THEN
bLeseLogbuch = FALSE
;Logbuch sichern in CSV auf Steuerung
MpParameterCSV_0.Save = TRUE
ENDIF
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Wenn Status 0 wird, wurde eine Zeile fertig gelesen
IF EDGEPOS(GetExAL_Status = 0) THEN
bLesenAktiv = FALSE
ENDIF
;Abfangen wenn weniger als 500 Zeilen sind dann Abbrechen indem der Wert auf 500 gesetzt wird
TON_GetExAL_Status.IN = (GetExAL_Status <> 0) AND bLesenAktiv
TON_GetExAL_Status.PT = TIME(2000)
TON_GetExAL_Status FUB TON()
IF TON_GetExAL_Status.Q THEN
ui_ZaehleLesen = MaxWert_Logbuch_Lesen
ENDIF
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MpParameterRegPar_1 FUB MpRecipeRegPar()
MpParameterCSV_0 FUB MpRecipeCsv()
IF (MpParameterCSV_0.CommandDone) THEN
MpParameterCSV_0.Save = FALSE
ENDIF
TP_CSV_Gesichert.IN = MpParameterCSV_0.CommandDone
TP_CSV_Gesichert.PT = TIME(200)
TP_CSV_Gesichert FUB TP()
bInfo[91] = TP_CSV_Gesichert.Q
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
END_PROGRAM
PROGRAM _EXIT
MpParameterCSV_0.Enable = FALSE
MpParameterRegPar_1.Enable = FALSE
MpParameterRegPar_1 FUB MpRecipeRegPar()
MpParameterCSV_0 FUB MpRecipeCsv()
END_PROGRAM
This Code is “quick and dirty“ but it works ![]()
I am using VC4, not MpAlarmXHistrory.
Thanks for the example, I will test it.
Hi @Willi were you able to find a solution for your problem? If so, please mark the reply that helped you most.