# RS485 Schnittstellenkarte 750-652 liest Daten nicht ein



## MaximilianBurger (3 Oktober 2019)

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:

```
(*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;
```


----------



## ClMak (3 Oktober 2019)

Hallo,

probier einmal die Einstellung cfFLOW_CONTROL:= 4, anstatt mit 24.

VG


----------



## MaximilianBurger (4 Oktober 2019)

Hallo,
das Ändern des Parameters hat leider nichts bewirkt.

lg


----------



## Tobsucht (4 Oktober 2019)

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


----------



## ClMak (4 Oktober 2019)

Ja, die Verdrahtung könnte die Ursache sein.
Sind die Klemmstellen 1<-->2 und 5<-->6 gebrückt?

VG


----------



## MaximilianBurger (7 Oktober 2019)

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


----------

