Export for VC Alarmlist and HistoricalAlarmList

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:

  • MpRecipeCSV
  • MpRecipeRegPar

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 :wink:

1 Like

I am using VC4, not MpAlarmXHistrory.

1 Like

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.

1 Like