RONIN
Level-3
- Beiträge
- 2.529
- Reaktionspunkte
- 773
-> Hier kostenlos registrieren
Habe hier ein Intouch v9.5 Project das mittels DASSIDirect-Server an eine 317PN/DP angebunden ist.
Ich lasse Intouch dabei ein paar StoredProcedures aus einer SQL-Datenbank ausführen.
Die SPS bereitet dafür in einem Schnittellen-DB die Parameter vor und setzt dann ein Flag-Bit.
Das Flag-Bit wird mittel Konditinal-Skript überwacht, wenn es 1 ist wird eine die StoredProcedure mit den Parametern aus dem Datenbaustein ausgerufen.
Jetzt hab ich ein hochsporadisch das Problem das wenn das Flag gesetzt und das Konditional-Skript aufgerufen wird, dieses dann beim Zugriff
auf die Dateinbaustein-Variablen alte Werte verwendet.
Am schnellsten ist dieses ersichtlich wenn man einen Auszug aus dem Logfile ansieht das ich nebenbei mitschreibe
Wie man sieht wurden die Werte beim 2. rot markierten Event die DB-Werte des ersten und beim 3. die Werte vom 2. verwendet.
Wenn ich beim Skript die Parameter mittels SQLSetParam setze, scheine ich hin und wieder nicht die aktuellen Werte zu haben
Bei WinCC weiß ich ja dass dies problematisch ist. Bei WinCC gabs aber auch GetTagWait.
Gibt es in Intouch auch einen Weg wie man sicherstellen kann dass man aktuelle Werte im Skript hat?
Hier noch das Konditionalskript in Frage
Ich lasse Intouch dabei ein paar StoredProcedures aus einer SQL-Datenbank ausführen.
Die SPS bereitet dafür in einem Schnittellen-DB die Parameter vor und setzt dann ein Flag-Bit.
Das Flag-Bit wird mittel Konditinal-Skript überwacht, wenn es 1 ist wird eine die StoredProcedure mit den Parametern aus dem Datenbaustein ausgerufen.
Jetzt hab ich ein hochsporadisch das Problem das wenn das Flag gesetzt und das Konditional-Skript aufgerufen wird, dieses dann beim Zugriff
auf die Dateinbaustein-Variablen alte Werte verwendet.
Am schnellsten ist dieses ersichtlich wenn man einen Auszug aus dem Logfile ansieht das ich nebenbei mitschreibe
Code:
-----------------------------------------------------------------------------------------------------------------------------------
17.03.2015/16:22:48 : Informationen über Einzelmischungsdurchläufe an CMTS senden
Verbinde zu CMTS: Provider=SQLOLEDB.1;User ID=+++; Password=+++;Initial Catalog=+++;Data Source=+++;
Stored Procedure 'PROCESS_SETBCWEIGHING' vorbereiten
[COLOR=#ff0000]4821 / 1 / 1 / 0 -> Der Eintrag hier ist OK[/COLOR]
SQLEXEC PROCESS_SETBCWEIGHING:
-----------------------------------------------------------------------------------------------------------------------------------
17.03.2015/16:24:00 : Informationen über Einzel-DOSIERUNGEN an CMTS senden
Verbinde zu CMTS: Provider=SQLOLEDB.1;User ID=+++; Password=+++;Initial Catalog=+++;Data Source=+++;
Stored Procedure 'PROCESS_SETBCPERWEIGHING' vorbereiten
4821 / 1 / 31 / 1 / 105 / 437
PROCESS_SETBCPERWEIGHING:
-----------------------------------------------------------------------------------------------------------------------------------
17.03.2015/16:26:43 : Informationen über Einzelmischubngsdurchläufe an CMTS senden
Verbinde zu CMTS: Provider=SQLOLEDB.1;User ID=+++; Password=+++;Initial Catalog=+++;Data Source=+++;
Stored Procedure 'PROCESS_SETBCWEIGHING' vorbereiten
[COLOR=#ff0000]4821 / 1 / 1 / 0 -> Ab hier steht im Datenbaustein schon 4821 / 1 / [SIZE=3][B]2[/B][/SIZE] / 60[/COLOR]
SQLEXEC PROCESS_SETBCWEIGHING:
-----------------------------------------------------------------------------------------------------------------------------------
17.03.2015/16:28:32 : Informationen über Einzelmischubngsdurchläufe an CMTS senden
Verbinde zu CMTS: Provider=SQLOLEDB.1;User ID=+++; Password=+++;Initial Catalog=+++;Data Source=+++;
Stored Procedure 'PROCESS_SETBCWEIGHING' vorbereiten
[COLOR=#FF0000]4821 / 1 / 1 / 0 -> Hier steht im DB eigentlich [/COLOR][COLOR=#FF0000]4821 / [/COLOR][SIZE=3][COLOR=#ff0000] [B]2[/B] [/COLOR][/SIZE][COLOR=#FF0000]/ [/COLOR][SIZE=3][COLOR=#FF0000][B]1[/B][/COLOR][/SIZE][COLOR=#FF0000] / [SIZE=3][B]0[/B][/SIZE][/COLOR]
SQLEXEC PROCESS_SETBCWEIGHING:
Wenn ich beim Skript die Parameter mittels SQLSetParam setze, scheine ich hin und wieder nicht die aktuellen Werte zu haben
Bei WinCC weiß ich ja dass dies problematisch ist. Bei WinCC gabs aber auch GetTagWait.
Gibt es in Intouch auch einen Weg wie man sicherstellen kann dass man aktuelle Werte im Skript hat?
Hier noch das Konditionalskript in Frage
Code:
DIM bOK AS INTEGER;
DIM Itmp AS INTEGER;
DIM sqlResult AS INTEGER;
DIM MsgStr AS MESSAGE;
DIM PcName AS MESSAGE;
bOK = 1;
sql_StatementID = 0;
sql_ConnectionID = 0;
{ Informationen über Einzelmischungsdurchläufe an CMTS senden }
{---------------------------------------------------------------------------------------------------------------------------------------------------}
GetNodeName(PcName, 32);
IF PcName <> "++++" THEN bOK = 0; ENDIF; { Nur ++++ }
IF ChMi_dbRez_ChgID == 0 THEN bOK = 0; ENDIF; { Nur für Chargen die von CMTS kommen und eine gültige ID haben }
IF bOK == 1 THEN
CALL WriteTextLog( "CMTS_CMI_Batch_RUN", "-----------------------------------------------------------------------------------------------------------------------------------");
CALL WriteTextLog( "CMTS_CMI_Batch_RUN", $DateString + "/" + $TimeString + " : Informationen über Einzelmischungsdurchläufe an CMTS senden");
{--------------------------------------------------------------------------------------------------------------------------------------------------- Verbindung aufbauen }
CALL WriteTextLog( "CMTS_CMI_Batch_RUN", "Verbinde zu CMTS: " + sql_CMTSConnectionString);
sqlResult = SQLConnect( sql_ConnectionID, sql_CMTSConnectionString );
IF sqlResult <> 0 THEN
MsgStr = "Fehler: " + SQLErrorMsg(sqlResult);
CALL WriteTextLog( "CMTS_CMI_Batch_RUN", MsgStr);
bOK = 0;
ENDIF;
ENDIF;
{--------------------------------------------------------------------------------------------------------------------------------------------------- RUN Erzeugen/Fertigstellen }
IF bOK == 1 THEN
Itmp = CommCMTS_SetBCW_BatchID;[COLOR=#ff0000] {<--------- Hier hatte ich mal versucht die Werte vorher schon mal zu lesen }[/COLOR]
Itmp = CommCMTS_SetBCW_Run;
Itmp = CommCMTS_SetBCW_State;
Itmp = CommCMTS_SetBCW_MxTime;
CALL WriteTextLog( "CMTS_CMI_Batch_RUN", "Stored Procedure 'PROCESS_SETBCWEIGHING' vorbereiten");
SQLSetStatement(sql_ConnectionID, "EXEC PROCESS_SETBCWEIGHING ?,?,?,?" );
SQLPrepareStatement(sql_ConnectionID, sql_StatementID);
SQLSetParamLong(sql_StatementID, 1, CommCMTS_SetBCW_BatchID); [COLOR=#ff0000]{<--------- Hier ensteht dann das Problem}[/COLOR]
SQLSetParamInt(sql_StatementID, 2, CommCMTS_SetBCW_Run);
SQLSetParamInt(sql_StatementID, 3, CommCMTS_SetBCW_State);
SQLSetParamInt(sql_StatementID, 4, CommCMTS_SetBCW_MxTime);
CALL WriteTextLog("CMTS_CMI_Batch_RUN", Text(CommCMTS_SetBCW_BatchID, "#") + " / " + Text(CommCMTS_SetBCW_Run, "#") + " / " + Text(CommCMTS_SetBCW_State, "#") + " / " + Text(CommCMTS_SetBCW_MxTime, "#") );
CALL WriteTextLog("CMTS_CMI_Batch_RUN", "SQLEXEC PROCESS_SETBCWEIGHING: " + MsgStr);
sqlResult = SQLExecute( sql_ConnectionID, "NULL", sql_StatementID );
IF (sqlResult <> 0) THEN
CALL WriteTextLog("CMTS_CMI_Batch_RUN", "Fehler:" + SQLErrorMsg(sqlResult));
bOK = 0;
ENDIF;
CommCMTS_SetBCW_Flag = 0;
ENDIF;
{--------------------------------------------------------------------------------------------------------------------------------------------------- SQL-Zugriff beenden - Verbindung schließen }
IF sql_StatementID <> 0 THEN SQLClearStatement(sql_ConnectionID, sql_StatementID); ENDIF;
IF sql_ConnectionID <> 0 THEN
SQLEnd(sql_ConnectionID);
SQLDisconnect(sql_ConnectionID);
ENDIF;
Zuletzt bearbeitet: