Liebes Forum,
ich versuche mich an der Implementierung eines Modbus-Slaves auf Basis des ESP32, der über einen USB->TTL-UART Wandler mit dem Windows 11 verbunden ist. Mein Ziel ist es, im Rahmen einer Lehrveranstaltung eine Platine mit diversen Sensoren und Aktoren von einer Codesys Software-SPS anzusprechen.
Ein Test mit dem Radzio! Modbus Master Simulator (RMMS)(https://en.radzio.dxp.pl/modbus-master-simulator/) lief (na ja, nach den üblichen Fehlerkorrekturen) einwandfrei.
Die Tests mit Modpoll (https://www.modbusdriver.com/modpoll.html) und dem CODESYS Control Win V3 x64 endeten mit Fehlermeldungen "CRC Error" oder "Timeout".
Um den Datenverkehr auf der Schnittstelle besser analysieren und vergleichen zu könnten, installierte ich den https://www.serial-port-monitor.org und präsentiere Euch Screenshots der Logs.
Im Detail zum RMMS-Test: So soll es sein :-) Es fällt auf, dass der RMMS im Vergleich sehr wenige Log-Einträge erzeugt. Insbesondere sind die ganzen IRP_MJ_DEVICE_CONTROL-Aufrufe nicht zu finden.
Im Detail zu modpoll-Test: Master-Log Eintrag 78/79 zeigt den Request, der gemäß Slave-Log korrekt erkannt und mit 01 02 01 00 a1 88 beantwortet wird. Gemäß Master-Log Eintrag 85 und 89 kommt aber etwas gänzlich anderes an und wird deshalb auch nicht akzeptiert.
Im Detail zum CODESYS-Test: In Zeilen 574/575 erkennt man den Request. Eine Response ist nicht zu sehen
Übrigens, die erste: Ich habe zunächst einen CH340-Wandler verwendet, testweise auf den neuesten Treiber des Herstellers aktualisiert und dann auch einen FT232-Wandler verwendet. Die Situation blieb gleich.
Übrigens die zweite: Ich habe testweise Verzögerungen von 100ms und von 500ms vor dem Rücksenden eingebaut. Beides brachte nichts.
Vermutlich ist der RMMS einfach weniger "scharf", was Timing-Anforderungen angeht? Möglicherweise kommen die Treiber für den USB-UART-Wandler durch die vielen IOCTL-Aufrufe durcheinander und "verschlucken" Daten? Ist dem so? Was kann man tun?
(edit 1: Das Projekt habe ich hier veröffentlicht: https://github.com/klaus-liebler/labathome/tree/master/labathome_firmware_modbus . Die notwendigen components, insbesondere meine modbus lib finden sich hier: https://github.com/klaus-liebler/espidf-components .)
Viele Grüße und Danke im Voraus!
Klaus


