TC3 Event Logger: FB_TcAlarm (Create, ipArguments) nutzen, aber wie?

Beiträge
6.125
Reaktionspunkte
1.356
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich bin gerade etwas am verzweifeln. Das Infosys von Beckhoff geht im großen und ganzen ja, aber beim Event Logger bin ich entweder zu blöde, oder die Doku hat einen äußerst zweifelhaften Nutzwert.
Ich möchte gerne Warn- und Fehlermeldungen erzeugen und auslösen. Ich habe schon eine Event Klasse erzeugt und in dieser Meldungen hinzugefügt, soweit so einfach.
Jetzt scheitere ich aber an der Create Methode, erst habe ich es nicht hinbekommen die GUID der Klasse zu übergeben. Mittlerweile habe ich die Funktion STRING_TO_GUID entdeckt und das Problem sollte vom Tisch sein. Wo es jetzt noch hakt ist ipSourceInfo. Ich möchte derzeit keine spezielle Info angeben, dass kann aber noch kommen. Ich weiß nicht, was ich in dem Fall da eingeben muss. Eine 0 führt zu einem internen Fehler (Nachtrag: Der interne Fehler ist nach alles bereinigen weg) und ein '' zu einem Konvertierungsfehler.
Das nächste Problem habe ich bei den Argumenten. Es gibt Meldungen mit Argumenten die ich ja mit Leben füllen muss. Ich bekomme zwar da keine Fehlermeldung, habe aber dennoch das Gefühl da auch etwas falsch zu machen.
Ich hänge hier mal meinen Code (TC3 4024.47) an.
Code:
    // Message handling (Event Logger)
    fbSource             : FB_TcSourceInfo;
    afbWarnMessages        : ARRAY[2001..2001] OF FB_TcAlarm;
    afbErrorMessages    : ARRAY[3001..3008] OF FB_TcAlarm;
    fbMessageArguments    : FB_TcArguments;
    bMessageInitDone    : BOOL := FALSE;
    nMessageCounter        : INT;

    // ToDo: Delete after testing
    bRaiseErr3001        : BOOL;

// Init messages
IF bMessageInitDone = FALSE THEN
    FOR nMessageCounter := 2001 TO 2001 + SIZEOF(afbWarnMessages) / SIZEOF(afbWarnMessages) - 1 DO
        afbWarnMessages[nMessageCounter].Create(    eventClass := STRING_TO_GUID('b9bff13f-9f53-4951-922b-a1f7a84f9b82'),
                                                    nEventId := INT_TO_UDINT(nMessageCounter),
                                                    eSeverity := TcEventSeverity.Warning,
                                                    bWithConfirmation := FALSE,
                                                    ipSourceInfo := '');
    END_FOR

    FOR nMessageCounter := 3001 TO 3001 + SIZEOF(afbErrorMessages) / SIZEOF(afbErrorMessages) - 1 DO

        afbErrorMessages[nMessageCounter].Create(    eventClass := STRING_TO_GUID('b9bff13f-9f53-4951-922b-a1f7a84f9b82'),
                                                    nEventId := INT_TO_UDINT(nMessageCounter),
                                                    eSeverity := TcEventSeverity.Error,
                                                    bWithConfirmation := FALSE,
                                                    ipSourceInfo := '');
    END_FOR
    bMessageInitDone := TRUE;
END_IF

IF bRaiseErr3001 THEN
    afbErrorMessages[3001].ipArguments.AddUInt(value := 500);
    afbErrorMessages[3001].Raise(nTimeStamp := 0);
    bRaiseErr3001 := FALSE;
END_IF
Den FB_TcArguments nutze ich im Moment nicht.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
So, ich bin einen Schritt weiter. Das Problem saß sowohl vor als auch "im" Bildschirm.
Irgendwo hatte sich TC3/VS bei meinen Versuchen verschluckt und ich war nur zu dämlich mal "Projektmappe bereinigen" auszuführen.
Zu den Beispielen, diese verwenden alle die Ex Variante, also CreateEx, ich nutze aber die "normale" Variante, in dem Fall Create. Hier muss eine GUID angeben werden und da lauert mein nächstes Problem. Angeblich findet Create keine Liste mit dieser GUID. Aber die sollte passen:
XML:
<?xml version="1.0"?>
<DataTypes>
   <DataType>
      <Name GUID="{B9BFF13F-9F53-4951-922B-A1F7A84F9B82}" PersistentType="true">TVA_MessageList</Name>
      <DisplayName TxtId=""><![CDATA[TVA_MessageList]]></DisplayName>
      <EventId>
         <Name Id="2001">WrnMagazineInManMode</Name>
         <DisplayName TxtId=""><![CDATA[Magazin: Betriebsart Manuell ist aktiv, bitte auf Automatik schalten]]></DisplayName>
         <Severity>Warning</Severity>
      </EventId>
Nachtrag: Jetzt wird es kurios (Zumindest für mich), ich habe in meinem Programm mal eine GUID von einer anderen Event Klasse genommen und da findet er die Liste. Den einzigen Unterschied den ich auf Anhieb finde ist der, dass bei meiner Liste der Ref Cnt auf 0 ist und bei der anderen bei 1, meine also angeblich nicht benutzt wird.
 
Zuletzt bearbeitet:
Der Eventlogger übernimmt glaube ich auch nicht immer sofort alle Änderungen. Habe da auch heute Probleme gehabt
Da hat twimcat schließen und wieder öffnen nur geholfen
 
Aber bei mir funktioniert er gut. Habe Teils bis zu 9000 Instanzen von FB TC_Alarm Laufen. Ob so etwas mit Tia Portal klappt 😁
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, das Problem mit der GUID konnte heute nach einem Telefonat mit Beckhoff gelöst werden. Es wird bei jeder Änderung an der Event Klasse eine neue GUID erzeugt, aber nicht unbedingt in VS aktualisisert. Anstatt die GUID fest anzugeben muss diese "dynamisch" ermittelt werden. Hier mal der Codeteil mit Create, der jetzt endlich tut.
Code:
        afbErrorMessages[nMessageCounter].Create(    eventClass := TC_EVENT_CLASSES.TVA_MessageList,
                                                    nEventId := INT_TO_UDINT(nMessageCounter),
                                                    eSeverity := TcEventSeverity.Error,
                                                    bWithConfirmation := FALSE,
                                                    ipSourceInfo := fbSource);
 
Zurück
Oben