Ich habe die Aufgabe mal auf ein einfaches Problem heruntergebrochen: Es sollen zwei Register von einem Modbus-Slave (Stromzähler) gelesen werden. Die Register liegen weit auseinander und die Baudrate ist niedrig, sodaß hier das Abholen eines gesamen Datenblocks von zB. 1000x2 Wörtern keinen Sinn macht. Stattdessen sollen die zwei Register einzeln abgefragt werden. Eigentlich das 'tägliche Brot' im Umgang mit nem Modbus Device.
Das Konzept:
Um die zwei (später 10) Register abzufragen zählt ein von einem Timer angestoßener Zähler zyklisch von 0 bis 1 und wird bei 2 resettet. Der Zählerstand wird auf den Auswahleingang eines Multiplexers gelegt. Beim Erreichen eines entsprechenden Zählerstandes wird die Nummer eines Modbus-Registers in ein Merkerwort am Ausgang des Multiplexers kopiert. Mit dem gleichen Zählerstand wird ein Demultiplexer gesteuert. Der Eingang ist das von Modbus-Wort das ich empfangen habe; der Demultiplexer schreibt in zwei Elemente einer Struktur.
Der Multiplexer schaltet immer nur EINEN Eingang auf den Ausgang, analog dazu verhält sich der Demultiplexer. Trotzdem habe ich in meinen beiden Ausgangsregistern (die Elemente einer meiner Datenstruktur) die gleiche Werte drinstehen.
Ich habe jetzt schon alles mögliche probiert, zB. von Hand mit Schaltern die Zählstände erzeugt, die Geschwindigkeit meines Zählers variiert - aber selbst bei einer Geschwindigkeit von 0.625Hz ist der Fehler reproduzierbar. Es könnte vielleicht sein, daß ich Daten zweimal abhole. Aber mit einem Flankenmerker für eine Taste am Request-Eingang will der Baustein MB_Master nicht aktiv werden.
Igendetwas scheint grundsätzlich falsch zu sein. Warum funktioniert diese Idee nicht?
Das Konzept:
Um die zwei (später 10) Register abzufragen zählt ein von einem Timer angestoßener Zähler zyklisch von 0 bis 1 und wird bei 2 resettet. Der Zählerstand wird auf den Auswahleingang eines Multiplexers gelegt. Beim Erreichen eines entsprechenden Zählerstandes wird die Nummer eines Modbus-Registers in ein Merkerwort am Ausgang des Multiplexers kopiert. Mit dem gleichen Zählerstand wird ein Demultiplexer gesteuert. Der Eingang ist das von Modbus-Wort das ich empfangen habe; der Demultiplexer schreibt in zwei Elemente einer Struktur.
Der Multiplexer schaltet immer nur EINEN Eingang auf den Ausgang, analog dazu verhält sich der Demultiplexer. Trotzdem habe ich in meinen beiden Ausgangsregistern (die Elemente einer meiner Datenstruktur) die gleiche Werte drinstehen.
Ich habe jetzt schon alles mögliche probiert, zB. von Hand mit Schaltern die Zählstände erzeugt, die Geschwindigkeit meines Zählers variiert - aber selbst bei einer Geschwindigkeit von 0.625Hz ist der Fehler reproduzierbar. Es könnte vielleicht sein, daß ich Daten zweimal abhole. Aber mit einem Flankenmerker für eine Taste am Request-Eingang will der Baustein MB_Master nicht aktiv werden.
Igendetwas scheint grundsätzlich falsch zu sein. Warum funktioniert diese Idee nicht?