Codesys serielle Verbindung mit Raspberry Pi und Arduino

Informationen und Textbausteine:

In Bearbeitung [ … ]

Modbus/ Serial Einrichtung:

sudo raspi-config

    Would you like a login shell to be accessible over serial?
            -> NO

    Would you like the serial port hardware to be enabled?
            -> YES

    The serial login shell is disabled
    The serial interface is enabled

/boot/firmware/config.txt

[all]
    # Disconnect bluetooth fram UART
    dtoverlay=w1-gpio
    dtoverlay=disable-bt
    enable_uart=1

/etc/codesyscontrol/CODESYSControl_User.cfg

[SysCom]
    Linux.Devicefile.1=/dev/ttyAMA0
    Linux.Devicefile.2=/dev/ttyUSB0

Beispielprogramm:

Arduino:

void setup() {
    Serial.begin(9600); // Setze die Baudrate auf 9600
}

void loop() {
    if (Serial.available() > 0) {
        String receivedData = Serial.readStringUntil('\n');
        Serial.print("Empfangen: ");
        Serial.println(receivedData);

        String responseData = "Antwort: " + receivedData;
        Serial.println(responseData);
    }
}

Codesys:

  • Erstelle ein neues CODESYS-Projekt und füge einen seriellen Kommunikationsbaustein hinzu.
  • Konfiguriere die serielle Schnittstelle (/dev/ttyAMA0 oder entsprechend).
Beispielprogramm in ST (Structured Text):
PROGRAM Serial_Comm
VAR
    uart: SysCom.SerCom; (* Serieller Kommunikationsbaustein *)
    sendData: STRING := 'Hallo Arduino';
    receiveData: STRING;
    bytesWritten: DINT;
    bytesRead: DINT;
END_VAR

(* Initialisierung der seriellen Schnittstelle *)
uart.pPort := '/dev/ttyAMA0';
uart.iBaudRate := 9600;
uart.iDataBits := 8;
uart.iStopBits := 1;
uart.iParity := SysCom.Parity.NONE;
uart.xActive := TRUE;

(* Sende Daten an Arduino *)
IF uart.xConnected THEN
    uart.Write(s:=sendData, len:=LEN(sendData) + 1, rd:=bytesWritten);
END_IF

(* Empfange Daten vom Arduino *)
IF uart.xConnected THEN
    uart.Read(s:=receiveData, len:=256, rd:=bytesRead);
END_IF