TwinCAT 3 Database Server PLCDBCmd.Execute

sidame00

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo @all,
ich habe das im Handbuch Tc3 Database Server befindliche Beispiel zum Thema PLCDBCmd.Execute-Befehl kopiert, angepasst und gestartet.
Das Ergebnis meines TcResultEvents lautet:

ipTcResult
16#FFFFFA80136D63F8
sSourcePath
'...fb_Example.fbPLCDBCmd'
sEventClass
"TC3 Database Server Database Error"
sSeverity
Error
nEventID
67
sEventText
"SQLState_HY000 General error"

Schön dass Beckhoff eine Error-Liste mitbringt, jedoch nichts weiter dazu sagt als "General error".

Manuelle SQL-Befehle über den SQL-Query-Editor funktioniert einwandfrei, das programmtechnische leider nicht :/

Hat jemand vielleicht eine Vermutung oder eine Idee?:???:

Viele Grüße,
Sidame00
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Guga,
das manuelle Logging in die PostgreSQL Datenbank funktioniert aus dem SQL-Query-Editor raus einwandfrei, an der Anbindung (und n sCmd) kann es somit nicht liegen.
Anzumerken ist zudem, dass Visual Studio immer häufiger einfach abstürzt...
Resultierender Fehler, siehe erster Post.

bOnes habe ich nach einem "ERROR_TOO_MANY_SEM_REQUESTS"-Error eingefügt, damit der Upload erstmal nur einmal erfolgt

Code:
TYPE ST_DataAll2 :
STRUCT
    colInteger1: DINT;
    colInteger2: DINT;
    colInteger3: DINT;
END_STRUCT
END_TYPE

Code:
FUNCTION_BLOCK FB_Example
VAR
    fbPLCDBCmd    : FB_PLCDBCmd(sNetID := '', tTimeout := T#5S);
    sCmd        : STRING (1000); 
    myStruct     : ST_DataAll2;
    aPara        : ARRAY[0..2] OF ST_ExpParameter;
    
    bOnces: BOOL := FALSE;
    
    ipTcResult: I_TcResultEvent;
    sSourcePath: STRING(255);
    sEventClass: WSTRING(255);
    sSeverity: E_Severity;
    nEventID: UDINT;
    sEventText: WSTRING(255);
END_VAR

Code:
// set Parameter configuration
aPara[0].sParaName := 'colInteger1';   aPara[0].eParaType := E_ExpParameterType.Int32;      aPara[0].nParaSize := 4;
aPara[1].sParaName := 'colInteger2';   aPara[1].eParaType := E_ExpParameterType.Int32;      aPara[1].nParaSize := 4;
aPara[2].sParaName := 'colInteger3';   aPara[2].eParaType := E_ExpParameterType.Int32;      aPara[2].nParaSize := 4;

// set command
sCmd := 'INSERT INTO "MyTableName2" ( "colInteger1", "colInteger2", "colInteger3") VALUES ( 0, 0, 0)';

// call functionblock
IF NOT bOnces THEN
     fbPLCDBCmd.Execute(
        hDBID:= 1, 
        pExpression:= ADR(sCmd), 
        cbExpression:= SIZEOF(sCmd), 
        pData:= ADR(myStruct), 
        cbData:= SIZEOF(myStruct), 
        pParameter:= ADR(aPara), 
        cbParameter:= SIZEOF(aPara)) ;
        bOnces := TRUE;
    IF NOT fbPLCDBCmd.bBusy THEN
            ipTcResult := fbPLCDBCmd.ipTcResultEvent;
            sSourcePath:= ipTcResult.SourcePath;
            sEventClass := ipTcResult.EventClassDisplayName;
            sSeverity := ipTcResult.Severity;
            nEventID := ipTcResult.EventId;
            sEventText := ipTcResult.Text;
    END_IF
END_IF
 
@ Guga
Das von dir verlinkte Beispiel ist gut, leider jedoch noch weiter von meinem Vorhaben entfernt als das Beispiel aus dem Handbuch, das meinem Code zu Grunde liegt.

Grüße Sidame00
 
ich kann das Thema schließen.

es ist das gewohnte "halber Tag auf die Seite legen und nochmal ungeändert öffnen"...jetzt gehts...keiner weis warum ;)

Hauptsache alle sind glücklich ;)
 
Zurück
Oben