Klöckner Möller RS232 Daten lesen.

goofiscoobi

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

ich versuche mit einem von mir erstellten C# Programm aus einer Klöckner Möller SPS300 über die RS232 Schnittstelle Variablen (Word) zu lesen. Ich komme eigentlich aus der Siemens-Welt (da ist es kein Problem). Muss man bei der RS232 irgendetwas besonderes beachten? Verbindung lässt sich herstellen aber ich empfange leider keine daten.

Grüße
 
Vor zwanzig Jahren haben das einige versucht. Meine Idee war, ob Du mit dem C-Code eventuell was anfangen und die alte Bibliothek zur Mitarbeit überreden kannst?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist kein offenes Protokoll wie Modbus z.B.
Frag mal ChatGPT oder andere, ob sie dir das Protokoll in C#/C/C++ oder was auch immer implementieren.
Ich setze sehr gern Python ein. ChatGPT hat folgenden Code ausgespuckt (was auch komplett falsch sein kann):

Python:
import serial
import time
from functools import reduce
from operator import xor

STX = 0x02
ETX = 0x03


class SucomClient:
    def __init__(self, port, baudrate=9600, timeout=1):
        self.ser = serial.Serial(
            port=port,
            baudrate=baudrate,
            bytesize=serial.EIGHTBITS,
            parity=serial.PARITY_NONE,
            stopbits=serial.STOPBITS_ONE,
            timeout=timeout
        )

    def _bcc(self, data: bytes) -> int:
        """XOR checksum (BCC)"""
        return reduce(xor, data, 0)

    def build_frame(self, address: int, function: int, payload: bytes) -> bytes:
        body = bytes([address, function]) + payload
        bcc = self._bcc(body)
        frame = bytes([STX]) + body + bytes([bcc, ETX])
        return frame

    def send(self, frame: bytes) -> bytes:
        self.ser.write(frame)
        self.ser.flush()
        time.sleep(0.1)
        return self.ser.read(256)

    def close(self):
        self.ser.close()



Read memory könnte dann so aussehen:
Python:
def read_memory(client: SucomClient, address=0x01, start=0x0000, length=1):
    FUNCTION_READ = 0x10  # Beispiel!

    payload = start.to_bytes(2, "big") + bytes([length])
    frame = client.build_frame(address, FUNCTION_READ, payload)

    print("TX:", frame.hex())
    response = client.send(frame)
    print("RX:", response.hex())

    return response

Main-Program:
Python:
if __name__ == "__main__":
    plc = SucomClient(port="COM3")  # Linux: "/dev/ttyUSB0"

    try:
        response = read_memory(plc, start=0x0000, length=2)
    else:
        print(response)
    finally:
        plc.close()
 
Zurück
Oben