TCPIP Kommunikation mit Dataman 200 Cognex

bluebird277

Level-1
Beiträge
100
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Programmiere gerade eine Anbindung an einen Scanner die Kommunikation funktioniert soweit jeodch habe ich das Problem das ich das Ergebnis einen Trigger hinterher bekomme (beim 2ten Trigger bekomme ich das Ergebnis vom ersten Trigger beim 3ten das vom 2ten usw.).

Der Scanner gibt das richtige Ergebnis bei einem Trigger aus das habe ich bereits mit Hyperterminal geprüft. Es muss also irgendwas in meinem Programm falsch sein.

Vielleicht hat von euch jemand eine Idee?

Danke


CASE estep OF

DATA_SEND_START:

sToServer := '||>TRIGGER ON$R$N';

Trigger9(CLK:=StartScan, Q=> );

IF trigger9.Q THEN
warten:=TRUE;
END_IF

IF warten THEN
Wartezeit(IN:= TRUE, PT:= t#500ms, Q=> , ET=> );
END_IF

IF wartezeit.Q THEN
Wartezeit(IN:= FALSE );
warten:=FALSE;
MEMSET(ADR(RxBuffer),0,SIZEOF(RxBuffer));
MEMSET(ADR(sFromServer),0,SIZEOF(sFromServer));
eStep := DATA_SEND;
END_IF

DATA_SEND:

fbSocketSend(
sSrvNetId:= '',
hSocket:=hSocket ,
cbLen:= LEN(sToServer),
pSrc:=ADR(sToServer) ,
bExecute:=TRUE ,
tTimeout:= ,
bBusy=> ,
bError=> ,
nErrId=> );

fbSocketReceive(
sSrvNetId:= ,
hSocket:= hSocket,
cbLen:= SIZEOF( rxBuffer ),
pDest:= ADR( rxBuffer ),
bExecute:= TRUE ,
tTimeout:= ,
bBusy=> ,
bError=> ,
nErrId=> ,
nRecBytes=>bytes );

IF NOT fbSocketReceive.bBusy AND NOT fbSocketSend.bBusy THEN
IF NOT fbSocketSend.bError AND NOT fbSocketreceive.bError THEN
Ton4(IN:=TRUE , PT:=T#10000ms , Q=> , ET=> );
END_IF
END_IF;

IF Ton4.Q THEN
ton4(IN:=FALSE);
estep:=DATA_SEND_WAIT;
END_IF

DATA_SEND_WAIT:

fbSocketSend( bExecute := FALSE );
fbSocketreceive( bExecute := FALSE );

fbDataWriteTON(IN:= TRUE, PT:= t#2000ms, Q=> , ET=> );

IF fbDataWriteTON.Q THEN
fbDataWriteTON(IN:= FALSE);
eStep := DATA_GET_RESULT_WAIT;
END_IF;

IF (fbSocketReceive.nRecBytes > 0) AND (fbSocketReceive.nRecBytes < 256) THEN
(*Überprüfen ob daten empfangen wurden und nicht mehr wie 256 Bytes empfangen wurden. >256 ERROR*)
MEMCPY (ADR(sFromServer), ADR(rxBuffer), fbSocketReceive.nRecBytes);
(*Schriebe RX Buffer mit NAzahl der empfangenen Bytes in die Variable sFromServer*)
MEMSET (ADR(sFromServer) + fbSocketReceive.nRecBytes, 0, SIZEOF(sFromServer) - fbSocketReceive.nRecBytes);
END_IF;

(*
DATA_GET_RESULT_WAIT:
 
Zurück
Oben