Marty McFly
Level-1
- Beiträge
- 3
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo,
ich bin neu hier und habe auch direkt ein paar Fragen.
Was ich vor habe
Ich habe vor mit dem Raspberry Pi (Master) und einigen Arduinos (Slaves) einen Modbus-RTU (RS485) aufzubauen. Das ganze soll als Hausbus dienen. Dabei soll jedes Zimmer eine eigene Modbus-Linie bekommen. Dafür verwende ich USB-Serial-Converter. Auf dem Raspberry läuft "CODESYS Control for Raspberry Pi SL". Ich strebe eine Zykluszeit von ca. 100ms an, um kurzes Tastendrücken noch sicher erkennen zu können.
Aktueller Stand
Aktuell habe ich einen Slave an dem Raspberry Pi hängen und das funktioniert auch grundsätzlich. Was für mich jetzt wichtig wäre, ist wie lange dauert das Abfragen des Slaves. Wie kann ich das am besten herausfinden? Die Abfragezeit begrenzt ja die Anzahl der Slaves bei gegebener Zykluszeit.
Fragen zu Zykluszeiten
Die Zykluszeit der MainTask kann ich mir ja in der Tastkkonfiguration anzeigen lassen. Aber das scheint nur die reine SPS-Logik und nicht die Bus-Kommunikation zu betreffen?
Nun kann ich einmal unter Device->SPS-Einstellungen einen Buszyklus-Tast auswählen. Ich nehme an, das bezieht sich auf alle konfigurierten Feldbusse?
Dann kann ich aber auch auf dem Modbus-Master unter "ModbusGenericSerialMaster E/A-Abbild" einen Buszyklus-Tast auswählen. Ich nehme an, das bezieht sich dann nur auf die eine Buslinie?
Auch kann ich auf dem Modbus-Slave unter "ModbusGenericSerialSlave E/A-Abbild" unter "Variablen aktuallisieren" eine Aktion auswählen. Ich nehme an, das bezieht sich dann nur noch auf den Slave?
Dann reicht es doch, einmal Pro Buslinie eine Tast zu definieren und bei den Slaves nur noch "Einstellungen des übergeordneten Gerätes verwenden?
Was mir auch noch aufgefallen ist, man muss für jeden Channel einen Trigger auswählen. Dies scheinen die eigentlichen Befehle auf dem Bus zu sein und unabhängig von den Task-Einstellungen? Ist es so, dass wenn der Trigger ausgelöst wird, der Master sich die Daten vom Slave holt und erstmal in einem Zwischenspeicher bereit hält und darauf wartet, dass sie ins E/A-Abbild der SPS geladen werden? Sind die oben gefragten Task Einstellungen nur für den Transfer vom Zwischenspeicher ins E/A Abbild der SPS?
https://help.codesys.com/webapp/_mo..._modbus_configuration_editor;version=3.5.16.0
Wenn ich mir das hier anschaue, komme ich zu dem Schluss, dass es da sogar noch einen weiteren Zwischenspeicher geben muss? Dort ist ja nur die Rede von "Copy data from/to bus". Dazu muss der Master ja den Slave schon angetriggert haben und das Ergebnis im Bus-Zwischenspeicher haben. (Ist dass dieser Trigger unter Channel?) Im Bus-Zyklus wird es dann vom Bus-Zwischenspeicher in den Input-Buffer geschrieben und dann von da ins E/A-Abbild der SPS geladen?
Ich freue mich schon auf eure Antworten und wünsche euch eine Guten Rutsch
Marty McFly
ich bin neu hier und habe auch direkt ein paar Fragen.
Was ich vor habe
Ich habe vor mit dem Raspberry Pi (Master) und einigen Arduinos (Slaves) einen Modbus-RTU (RS485) aufzubauen. Das ganze soll als Hausbus dienen. Dabei soll jedes Zimmer eine eigene Modbus-Linie bekommen. Dafür verwende ich USB-Serial-Converter. Auf dem Raspberry läuft "CODESYS Control for Raspberry Pi SL". Ich strebe eine Zykluszeit von ca. 100ms an, um kurzes Tastendrücken noch sicher erkennen zu können.
Aktueller Stand
Aktuell habe ich einen Slave an dem Raspberry Pi hängen und das funktioniert auch grundsätzlich. Was für mich jetzt wichtig wäre, ist wie lange dauert das Abfragen des Slaves. Wie kann ich das am besten herausfinden? Die Abfragezeit begrenzt ja die Anzahl der Slaves bei gegebener Zykluszeit.
Fragen zu Zykluszeiten
Die Zykluszeit der MainTask kann ich mir ja in der Tastkkonfiguration anzeigen lassen. Aber das scheint nur die reine SPS-Logik und nicht die Bus-Kommunikation zu betreffen?
Nun kann ich einmal unter Device->SPS-Einstellungen einen Buszyklus-Tast auswählen. Ich nehme an, das bezieht sich auf alle konfigurierten Feldbusse?
Dann kann ich aber auch auf dem Modbus-Master unter "ModbusGenericSerialMaster E/A-Abbild" einen Buszyklus-Tast auswählen. Ich nehme an, das bezieht sich dann nur auf die eine Buslinie?
Auch kann ich auf dem Modbus-Slave unter "ModbusGenericSerialSlave E/A-Abbild" unter "Variablen aktuallisieren" eine Aktion auswählen. Ich nehme an, das bezieht sich dann nur noch auf den Slave?
Dann reicht es doch, einmal Pro Buslinie eine Tast zu definieren und bei den Slaves nur noch "Einstellungen des übergeordneten Gerätes verwenden?
Was mir auch noch aufgefallen ist, man muss für jeden Channel einen Trigger auswählen. Dies scheinen die eigentlichen Befehle auf dem Bus zu sein und unabhängig von den Task-Einstellungen? Ist es so, dass wenn der Trigger ausgelöst wird, der Master sich die Daten vom Slave holt und erstmal in einem Zwischenspeicher bereit hält und darauf wartet, dass sie ins E/A-Abbild der SPS geladen werden? Sind die oben gefragten Task Einstellungen nur für den Transfer vom Zwischenspeicher ins E/A Abbild der SPS?
https://help.codesys.com/webapp/_mo..._modbus_configuration_editor;version=3.5.16.0
Wenn ich mir das hier anschaue, komme ich zu dem Schluss, dass es da sogar noch einen weiteren Zwischenspeicher geben muss? Dort ist ja nur die Rede von "Copy data from/to bus". Dazu muss der Master ja den Slave schon angetriggert haben und das Ergebnis im Bus-Zwischenspeicher haben. (Ist dass dieser Trigger unter Channel?) Im Bus-Zyklus wird es dann vom Bus-Zwischenspeicher in den Input-Buffer geschrieben und dann von da ins E/A-Abbild der SPS geladen?
Ich freue mich schon auf eure Antworten und wünsche euch eine Guten Rutsch
Marty McFly