RS485 Schnittstellenkarte 750-652 liest Daten nicht ein

Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe folgendes Problem:
Ich benutze eine 750-8206 PFC200-Steuerung zum Auslesen von Messgerätdaten via RS485.
Zur Kommunikation wird ein herstellereigenes Protokoll verwendet.
Benutze ich die OnBoard-Schnittstelle der Steuerung werden alle Daten richtig übertragen und die Verbindung funktioniert super.
Wechsle ich jedoch zu einer Schnittstellenkarte (750-652) (COM wechseln) klappt die Verbindung nicht mehr.
Die Indikatorleuchte "B" des Schnittstellenmoduls blinkt beim ausführen des Codes.

Bitte um hilfreiche Tipps wie ich mit dem Schnittstellenmodul ebenfalls die Daten einlesen kann :)

Wie gesagt ich benutze:
Controller: PFC200 750-8206
Modul: 750-652
Programmierumgebung: Codesys 2.3
Library: Serial_Interface_1-lib


Hier der Code:
Code:
(*Sendedaten*)
SendBuffer[0]:=16#1A; 
SendBuffer[1]:=16#01; 
SendBuffer[2]:=16#00; 
SendBuffer[3]:=16#30; 
SendBuffer[4]:=16#31; 
SendBuffer[5]:=16#01; 
SendBuffer[6]:=16#30; 
SendBuffer[7]:=16#36; 
SendBuffer[8]:=16#10;
SendBuffer[9]:=16#30;
SendBuffer[10]:=16#32; 
SendBuffer[11]:=16#01; 
SendBuffer[12]:=16#30; 
SendBuffer[13]:=16#34; 
SendBuffer[14]:=16#01; 
SendBuffer[15]:=16#30;
SendBuffer[16]:=16#36; 
SendBuffer[17]:=16#01; 
SendBuffer[18]:=16#30; 
SendBuffer[19]:=16#32; 
SendBuffer[20]:=16#10;
SendBuffer[21]:=16#30; 
SendBuffer[22]:=16#34; 
SendBuffer[23]:=16#10; 
SendBuffer[24]:=16#B3; 
SendBuffer[25]:=16#E3; 
SECFL(IN:= (NOT xSendActive) , PT:= T#500ms );


HFLAG[1]:= SECFL.Q AND NOT HFLAG_M[1];
HFLAG_M[1]:=SECFL.Q;


IF HFLAG[1] THEN ReceiveBuffer.Index:=0; END_IF;


COM(
    xOPEN_COM_PORT:= xOpenPort,
    bCOM_PORT_NR:=2  ,(*COM0 = Controllerinterface und funktioniert*)
    cbBAUDRATE:=5760 ,  (*57600Baud/s*)
    cpPARITY:= 2,  (*even = gerade*)
    csSTOPBITS:=1 ,
    cbsBYTESIZE:= 8,
    cfFLOW_CONTROL:= 24,  (* RS 485 / halfduplex / without handshake /without continous send =24*)
    iBYTES_TO_SEND:=26 ,
    ptSEND_BUFFER:= ADR(SendBuffer),
    xSTART_SEND:=xSendActive,
    utRECEIVE_BUFFER:=ReceiveBuffer,
    xINIT:=xInitPort ,
    bERROR=> berror,
    xCOM_PORT_IS_OPEN=>comopen
 );


IF ReceiveBuffer.Index = 54 THEN (*M Recieve Buffer auslesen*)






pInnentemp:=ADR(Innentemp);
pInnentemp^:= ReceiveBuffer.Data[6];
pInnentemp:=pInnenTemp+1;
pInnentemp^:= ReceiveBuffer.Data[7];
pInnentemp:=pInnenTemp+1;
pInnentemp^:= ReceiveBuffer.Data[8];
pInnentemp:=pInnenTemp+1;
pInnentemp^:= ReceiveBuffer.Data[9];




pTVal2:=ADR(TVal2);
pTVal2^:= ReceiveBuffer.Data[27];
pTVal2:=pTVal2+1;
pTVal2^:= ReceiveBuffer.Data[28];
pTVal2:=pTVal2+1;
pTval2^:= ReceiveBuffer.Data[29];
pTVal2:=pTVal2+1;
pTVal2^:= ReceiveBuffer.Data[30];




END_IF;




IF HFLAG[1] AND NOT xSendActive THEN  xSendActive:=TRUE; END_IF;


(*Fehlerhandling*)
perror:=ADR(error);
perror^:= 0;
perror:=perror+1;
perror^:= berror;




IF (ReceiveBuffer.Index<>54) OR (berror <> 0) THEN xERR:=TRUE; ELSE xERR:=FALSE; END_IF; (*M RecieveBuffer größer 40 = Fault *)


VERZ_ERR (IN:= xERR , PT:= T#10s );


IF (VERZ_ERR.Q AND berror =0)  THEN
%QW2010:= 16#0100;
ELSIF (VERZ_ERR.Q AND berror >0) THEN
%QW2010:= error;
ELSIF (NOT VERZ_ERR.Q AND berror =0) THEN
%QW2010:= 16#0000;
END_IF;
 
Hallo,

die LED B ist die Sende-LED. Wenn die Empfangs-LED C nicht blinkt, hat das serielle Modul nichts empfangen.
Überprüfe nochmal die Verdrahtung.

Übrigens: Wenn du die Enumerationen verwendest wird der Code wesentlich lesbarer:

cpPARITY:= PARITY_EVEN,
csSTOPBITS:= STOPBITS_1,
cbsBYTESIZE:= BS_8,
cfFLOW_CONTROL:= HALFDUPLEX,

Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
danke erstmal für die schnellen Antworten und Tipps.
Hab jetzt nochmal die Verdrahtung gecheckt und eine schlechte Klemmstelle festgestellt :)
Derzeitiger Stand ist also:
-Karte wird angesprochen (Send-LED blinkt grün (B))
-Nach Sicherstellen der korrekten Verdrahtung wird jetzt auch etwas empfangen (Recieve-LED blinkt grün (C))

Jetzt hab ich das Problem das die Daten nicht richtig eingelesen werden.
Konkret: der RecieveBuffer der bis 54 laufen sollte, bleibt bei 2 stehen.

Zur Sicherheit habe ich den Code nochmal mit COM0 und der Onboard-Schnittstelle ausgeführt - über diese Schnittstelle funktioniert die Kommunikation tadellos.

Bitte um weitere Tipps.
lg
 
Zurück
Oben