HearingSystem
Level-2
- Beiträge
- 5
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Grüß euch!
Ich bin gerade mittendrin in meiner Diplomarbeit - wir programmieren eine Roboterzelle, welche DuploSteine ein- und auslagert. Das ganze wird mit eine Beckhoff-Steuerung und einer MS SQL-Express Datenbank realisiert.
So weit so gut - ich habe jetzt nur folgendes Problem:
Ich habe den TF6420 im Projekt integriert und konfiguriert - einloggen aus der SPS heraus funktioniert!
Jedoch, immer wenn ich den FB_PLCDBCmdEvt-Baustein abfeuere, weil ich eine Bestellung loggen möchte, schriebt er mir "'PRG_DBcmd.SetOrder.Execute()': Ungültige Parametergröße" raus.
Ich habe jetzt schon alles 10x durchkontrolliert und gegoogelt usw. ich hoffe, ihr könnt mir helfen und seht was, was ich nicht sehe:
Das Design der Tabelle, welche ich beschreiben möchte schaut folgendermaßen aus:
ID, Benutzer & Zeitstempel werden von der DB selbst generiert!
Das Programm ist wie Folgt:
//Eingaben in String umwandeln
Prioritaet := UINT_TO_STRING(GVL_Order._i_hmiPiority);
AnzahlWeiss := UINT_TO_STRING(GVL_Order._i_hmiNumberOfWhite);
AnzahlGelb := UINT_TO_STRING(GVL_Order._i_hmiNumberOfYellow);
AnzahlRot := UINT_TO_STRING(GVL_Order._i_hmiNumberOfRed);
AnzahlBlau := UINT_TO_STRING(GVL_Order._i_hmiNumberOfBlue);
//Command zusammenbauen
sCmd := CONCAT('INSERT INTO [dbo].[Bestellung] ( [Auftragsart], [Prioritaet], [Status], [AnzahlWeiss], [AnzahlGelb], [AnzahlRot], [AnzahlBlau]) VALUES ( 20,', Prioritaet);
sCmd := CONCAT(sCmd, ',10,');
sCmd := CONCAT (sCmd, AnzahlWeiss);
sCmd := CONCAT (sCmd, ',');
sCmd := CONCAT (sCmd, AnzahlGelb);
sCmd := CONCAT (sCmd, ',');
sCmd := CONCAT (sCmd, AnzahlRot);
sCmd := CONCAT (sCmd, ',');
sCmd := CONCAT (sCmd, AnzahlBlau);
sCmd := CONCAT (sCmd, ')');
//Paramete setzen
//arrParameter[0].sParaName := 'ID'; arrParameter[0].nParaSize := 4; arrParameter[0].eParaType := E_EXPPARAMETERTYPE.Int32;
arrParameter[0].sParaName := 'Auftragsart'; arrParameter[0].nParaSize := 4; arrParameter[0].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[1].sParaName := 'Prioritaet'; arrParameter[1].nParaSize := 4; arrParameter[1].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[2].sParaName := 'Status'; arrParameter[2].nParaSize := 4; arrParameter[2].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[3].sParaName := 'AnzahlWeiss'; arrParameter[3].nParaSize := 4; arrParameter[3].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[4].sParaName := 'AnzahlGelb'; arrParameter[4].nParaSize := 4; arrParameter[4].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[5].sParaName := 'AnzahlRot'; arrParameter[5].nParaSize := 4; arrParameter[5].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[6].sParaName := 'AnzahlBlau'; arrParameter[6].nParaSize := 4; arrParameter[6].eParaType := E_EXPPARAMETERTYPE.UInt32;
//arrParameter[8].sParaName := 'Benutzer'; arrParameter[8].nParaSize := 100; arrParameter[8].eParaType := E_EXPPARAMETERTYPE.STRING_;
//arrParameter[9].sParaName := 'Zeitstempel'; arrParameter[9].nParaSize := 4; arrParameter[9].eParaType := E_EXPPARAMETERTYPE.DateTime;
//Comand abfeuern
CASE nState OF
1: //init
;
2:
//sCmd := 'INSERT INTO [dbo].[Bestellung] ( [Auftragsart], [Prioritaet], [Status], [AnzahlWeiss], [AnzahlGelb], [AnzahlRot], [AnzahlBlau]) VALUES ( 20, {Prioritaet}, 10, {AnzahlWeiss}, {AnzahlGelb}, {AnzahlRot}, {AnzahlBlau}) ';
SetOrder.Execute(
hDBID:= 2,
pExpression:= ADR(sCmd),
cbExpression:= SIZEOF(sCmd),
pData:= ADR(st_Order),
cbData:= SIZEOF(st_Order) ,
pParameter:= ADR(arrParameter),
cbParameter:= SIZEOF(arrParameter));
IF NOT SetOrder.bBusy THEN
ipTcResult := SetOrder.ipTcResult;
IF NOT SetOrder.bError THEN
nState := 2;
ELSE
nState := 200;
END_IF
END_IF
Jedoch, wenn dies bearbeitet wird kommt dann diese Fehlermeldung:
Ich hoffe ihr könnt mir helfen! ...und Danke schon mal im vorraus!
Liebe Grüße
Ich bin gerade mittendrin in meiner Diplomarbeit - wir programmieren eine Roboterzelle, welche DuploSteine ein- und auslagert. Das ganze wird mit eine Beckhoff-Steuerung und einer MS SQL-Express Datenbank realisiert.
So weit so gut - ich habe jetzt nur folgendes Problem:
Ich habe den TF6420 im Projekt integriert und konfiguriert - einloggen aus der SPS heraus funktioniert!
Jedoch, immer wenn ich den FB_PLCDBCmdEvt-Baustein abfeuere, weil ich eine Bestellung loggen möchte, schriebt er mir "'PRG_DBcmd.SetOrder.Execute()': Ungültige Parametergröße" raus.
Ich habe jetzt schon alles 10x durchkontrolliert und gegoogelt usw. ich hoffe, ihr könnt mir helfen und seht was, was ich nicht sehe:
Das Design der Tabelle, welche ich beschreiben möchte schaut folgendermaßen aus:
ID, Benutzer & Zeitstempel werden von der DB selbst generiert!
Das Programm ist wie Folgt:
//Eingaben in String umwandeln
Prioritaet := UINT_TO_STRING(GVL_Order._i_hmiPiority);
AnzahlWeiss := UINT_TO_STRING(GVL_Order._i_hmiNumberOfWhite);
AnzahlGelb := UINT_TO_STRING(GVL_Order._i_hmiNumberOfYellow);
AnzahlRot := UINT_TO_STRING(GVL_Order._i_hmiNumberOfRed);
AnzahlBlau := UINT_TO_STRING(GVL_Order._i_hmiNumberOfBlue);
//Command zusammenbauen
sCmd := CONCAT('INSERT INTO [dbo].[Bestellung] ( [Auftragsart], [Prioritaet], [Status], [AnzahlWeiss], [AnzahlGelb], [AnzahlRot], [AnzahlBlau]) VALUES ( 20,', Prioritaet);
sCmd := CONCAT(sCmd, ',10,');
sCmd := CONCAT (sCmd, AnzahlWeiss);
sCmd := CONCAT (sCmd, ',');
sCmd := CONCAT (sCmd, AnzahlGelb);
sCmd := CONCAT (sCmd, ',');
sCmd := CONCAT (sCmd, AnzahlRot);
sCmd := CONCAT (sCmd, ',');
sCmd := CONCAT (sCmd, AnzahlBlau);
sCmd := CONCAT (sCmd, ')');
//Paramete setzen
//arrParameter[0].sParaName := 'ID'; arrParameter[0].nParaSize := 4; arrParameter[0].eParaType := E_EXPPARAMETERTYPE.Int32;
arrParameter[0].sParaName := 'Auftragsart'; arrParameter[0].nParaSize := 4; arrParameter[0].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[1].sParaName := 'Prioritaet'; arrParameter[1].nParaSize := 4; arrParameter[1].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[2].sParaName := 'Status'; arrParameter[2].nParaSize := 4; arrParameter[2].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[3].sParaName := 'AnzahlWeiss'; arrParameter[3].nParaSize := 4; arrParameter[3].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[4].sParaName := 'AnzahlGelb'; arrParameter[4].nParaSize := 4; arrParameter[4].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[5].sParaName := 'AnzahlRot'; arrParameter[5].nParaSize := 4; arrParameter[5].eParaType := E_EXPPARAMETERTYPE.UInt32;
arrParameter[6].sParaName := 'AnzahlBlau'; arrParameter[6].nParaSize := 4; arrParameter[6].eParaType := E_EXPPARAMETERTYPE.UInt32;
//arrParameter[8].sParaName := 'Benutzer'; arrParameter[8].nParaSize := 100; arrParameter[8].eParaType := E_EXPPARAMETERTYPE.STRING_;
//arrParameter[9].sParaName := 'Zeitstempel'; arrParameter[9].nParaSize := 4; arrParameter[9].eParaType := E_EXPPARAMETERTYPE.DateTime;
//Comand abfeuern
CASE nState OF
1: //init
;
2:
//sCmd := 'INSERT INTO [dbo].[Bestellung] ( [Auftragsart], [Prioritaet], [Status], [AnzahlWeiss], [AnzahlGelb], [AnzahlRot], [AnzahlBlau]) VALUES ( 20, {Prioritaet}, 10, {AnzahlWeiss}, {AnzahlGelb}, {AnzahlRot}, {AnzahlBlau}) ';
SetOrder.Execute(
hDBID:= 2,
pExpression:= ADR(sCmd),
cbExpression:= SIZEOF(sCmd),
pData:= ADR(st_Order),
cbData:= SIZEOF(st_Order) ,
pParameter:= ADR(arrParameter),
cbParameter:= SIZEOF(arrParameter));
IF NOT SetOrder.bBusy THEN
ipTcResult := SetOrder.ipTcResult;
IF NOT SetOrder.bError THEN
nState := 2;
ELSE
nState := 200;
END_IF
END_IF
Jedoch, wenn dies bearbeitet wird kommt dann diese Fehlermeldung:
Ich hoffe ihr könnt mir helfen! ...und Danke schon mal im vorraus!
Liebe Grüße