-> Hier kostenlos registrieren
Hallo zusammen,
ich habe Schwierigkeiten zwei Nanotec PD6 N89 Motoren über die serielle Schnittstelle RS485 zu betreiben.
Mit dem Nanotec USB Kabel ZK RS485 USB und der Nanotec Software kann ich die Motoren konfigurieren und drehen lassen. Dabei gibts ja 32 Fahrprofile, die ich mir vorher anlegen kann.
Als Befehl würde ich für den ersten Motor und das erste Fahrprofil schreiben: '#1y1\r'
Anschließend habe ich versucht die Motoren über die Beckhoff EL6022 zum Laufen zu bringen, jedoch erfolglos. Dabei tun sich für mich zwei Fehlerquellen auf. Zum einen bereitet mir die Pinbelegung des 9-poligen D-Sub-Steckers kopfzerbrechen, zum anderen weiß ich nicht genau ob mein Programm richtig funktioniert.
Ich hatte bisher keinen elektrotechnischen Bezug und tue mich schwer mit der Verkabelung von Rx und Tx. Mal ist es gekreuzt, mal nicht. Desweiteren dachte ich RS485 sei ein Standard. Bei Nanotec werden aber die Pins 2 (Rx+), 4 (Tx+) , 7 (Rx-) und 9 (Tx-) belegt, bei Beckhoff 2 (Tx+), 3 (Rx+), 7 (Tx-) und 8 (Rx-). Dazu kommt noch, dass in der Beckhoffdoku zur EL6022 unter Anschlüsse bei RS485 von halbduplex die Rede ist und ich mir nicht sicher bin, ob die Motoren damit überhaupt zum Laufen gebracht werden können. Im halb-duplex-Betrieb bräcuhte ich ja dann Verbindungen jeweils zwischen Rx+ und Tx+ sowie Rx- und Tx-. Für mich als Laie klingt das eher nach Kurzschluss
Hier mal noch der bisherige Programmausschnitt, fall die Verpinnung dann mal passen sollte.
Ich habe mir folgendes Programm für die serielle Schnittstelle erstellt und teste alsBefehl für den ersten Motor und das erste Fahrprofil: '#1y1\r'.
Im Programmteil steht dann:
Anschließend soll mit der FB_Serial die Kommunikation gewährleisten:
Deklarationsteil:
Im Programmteil steht zum testen folgendes:
Es wäre super, wenn mir jemand sagen könnte, wie ich die Motoren verpinnen muss, da ich mittlerweile schon einiges getestet habe und nicht mehr weiter weiß.
Viele Grüße
Yannik
ich habe Schwierigkeiten zwei Nanotec PD6 N89 Motoren über die serielle Schnittstelle RS485 zu betreiben.
Mit dem Nanotec USB Kabel ZK RS485 USB und der Nanotec Software kann ich die Motoren konfigurieren und drehen lassen. Dabei gibts ja 32 Fahrprofile, die ich mir vorher anlegen kann.
Als Befehl würde ich für den ersten Motor und das erste Fahrprofil schreiben: '#1y1\r'
Anschließend habe ich versucht die Motoren über die Beckhoff EL6022 zum Laufen zu bringen, jedoch erfolglos. Dabei tun sich für mich zwei Fehlerquellen auf. Zum einen bereitet mir die Pinbelegung des 9-poligen D-Sub-Steckers kopfzerbrechen, zum anderen weiß ich nicht genau ob mein Programm richtig funktioniert.
Ich hatte bisher keinen elektrotechnischen Bezug und tue mich schwer mit der Verkabelung von Rx und Tx. Mal ist es gekreuzt, mal nicht. Desweiteren dachte ich RS485 sei ein Standard. Bei Nanotec werden aber die Pins 2 (Rx+), 4 (Tx+) , 7 (Rx-) und 9 (Tx-) belegt, bei Beckhoff 2 (Tx+), 3 (Rx+), 7 (Tx-) und 8 (Rx-). Dazu kommt noch, dass in der Beckhoffdoku zur EL6022 unter Anschlüsse bei RS485 von halbduplex die Rede ist und ich mir nicht sicher bin, ob die Motoren damit überhaupt zum Laufen gebracht werden können. Im halb-duplex-Betrieb bräcuhte ich ja dann Verbindungen jeweils zwischen Rx+ und Tx+ sowie Rx- und Tx-. Für mich als Laie klingt das eher nach Kurzschluss

Hier mal noch der bisherige Programmausschnitt, fall die Verpinnung dann mal passen sollte.
Ich habe mir folgendes Programm für die serielle Schnittstelle erstellt und teste alsBefehl für den ersten Motor und das erste Fahrprofil: '#1y1\r'.
Code:
PROGRAM Background_Serial
VAR
fbEL6022_1 : SerialLineControl; // Interface Controller für Hintergrund Kommunikation (22 Byte)
bEL6022Error_1 : BOOL;
eEL6022ErrorID_1 : ComError_t;
// I/O Variablen
stInEL_1 AT%I* : EL6inData22B;
stOutEL_1 AT%Q* : EL6inData22B;
END_VAR
Code:
fbEL6022_1(
Mode:= SERIALLINEMODE_EL6_22B,
pComIn:= ADR(stInEL_1),
pComOut:= ADR(stOutEL_1),
SizeComIn:= SIZEOF(stInEL_1),
Error=> ,
ErrorID=> ,
TxBuffer:= TxBufferEL_1,
RxBuffer:= RxBufferEL_1);
IF fbEL6022_1.Error THEN
bEL6022Error_1 := TRUE;
eEL6022ErrorID_1 := fbEL6022_1.ErrorID;
END_IF
Anschließend soll mit der FB_Serial die Kommunikation gewährleisten:
Deklarationsteil:
Code:
FUNCTION_BLOCK FB_Serial
VAR_INPUT
END_VAR
VAR_IN_OUT
TxBuffer : ComBuffer;
RxBuffer : ComBuffer;
END_VAR
VAR_OUTPUT
END_VAR
VAR
fbSend : SendString;
bSendBusy : BOOL;
eSendErrorID : ComError_t;
sCommand : STRING;
bSend : BOOL;
fbReceive : ReceiveString;
sReceiveString : STRING;
nstate: INT;
bdrehen: BOOL;
END_VAR
Im Programmteil steht zum testen folgendes:
Code:
IF bSend THEN
bsend := FALSE;
fbSend(SendString:= sCommand,
Busy=> bSendBusy,
Error=> ,
TXbuffer:= TxBuffer);
END_IF
IF fbSend.Error <> COMERROR_NOERROR THEN
eSendErrorID := fbSend.Error;
END_IF
fbReceive(
Prefix:= ,
Suffix:= ,
Timeout:= T#1S,
Reset:= ,
StringReceived=> ,
Busy=> ,
Error=> ,
RxTimeout=> ,
ReceivedString:= sReceiveString,
RXbuffer:= RxBuffer);
Es wäre super, wenn mir jemand sagen könnte, wie ich die Motoren verpinnen muss, da ich mittlerweile schon einiges getestet habe und nicht mehr weiter weiß.
Viele Grüße
Yannik