IneedMoney
Level-2
- Beiträge
- 7
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo Freunde der gepflegten SPS Kultur
Ich habe folgenden Auftrag
Ich setze eine S7-1517 ein, um unter anderen, 5 Modbusteilnehmer auszulesen und zu schreiben.
Die Verbindung zu den Teilnehmern mache ich mit den MB_CLIENT Baustein.
Folgende MB Adressbereiche muss ich lesen
10001-10310 (309Bits) Register sind 1Bit lang
40001-40029 (28Wörter) Register sind 16 Bit lang
43001-43010 (9Wörter) Register sind 16 Bit lang
Schreiben
43001-43010 (9Wörter)
Einzeln kann ich alle Bereiche Lesen und 43001 auch schreiben.
MB_Client kann nur mit einer Instanz pro Teilnehmer betrieben werden deswegen kann ich pro Adressbereich nicht ein MB_Client aufrufen.
Ursprünglich habe ich eine Sequenz geschrieben die für jeden MB Adressbereich ein MB_Client aufrief. Funktionierte logischerweise nicht.
Nun habe ich einen Datenbaustein als Buffer für die Daten erstellt. Ein Array[0..308] of Word.
Die Adressen weise ich mit einem CASE dem MB_Client zu. Soweit kein Thema
Die Daten müssen entsprechend verarbeitet werden und in einen separaten Baustein verschoben werden.
Für die Adressbereiche 40001 und 43001 funktioniert das Wunderbar.
Ich stehe jetzt bei den Daten für die Adressen 10001 an.
Im Adressbereich 10001 + werden nur Bits übertragen.
Also müsste im Register 10001, 1 oder 0 in meinen Word[0] stehen. Mache ich einen Denkfehler?
Dies scheint nicht so zu sein. Die ersten 73 Bits sollten false sein. Ab Bit 74 sind die Bits true.
Ich habe jedoch nun bereits im Word[4] bereits 16#00FC stehen.
Im word[5] steht 16#3F0C.
Mit Scatter habe ich die Words ein ein Bool Array verschoben. Das Resultat passt nicht. Auch nachdem ich die Words geswapt habe in einen Zwischenspeicher.
Ich verstehe nicht was vom MB_Client in Buffer Array[0..308] of Word geschrieben wird.
Kann mir jemand helfen?
Danke und Gruss
Ich habe folgenden Auftrag
Ich setze eine S7-1517 ein, um unter anderen, 5 Modbusteilnehmer auszulesen und zu schreiben.
Die Verbindung zu den Teilnehmern mache ich mit den MB_CLIENT Baustein.
Folgende MB Adressbereiche muss ich lesen
10001-10310 (309Bits) Register sind 1Bit lang
40001-40029 (28Wörter) Register sind 16 Bit lang
43001-43010 (9Wörter) Register sind 16 Bit lang
Schreiben
43001-43010 (9Wörter)
Einzeln kann ich alle Bereiche Lesen und 43001 auch schreiben.
MB_Client kann nur mit einer Instanz pro Teilnehmer betrieben werden deswegen kann ich pro Adressbereich nicht ein MB_Client aufrufen.
Ursprünglich habe ich eine Sequenz geschrieben die für jeden MB Adressbereich ein MB_Client aufrief. Funktionierte logischerweise nicht.
Nun habe ich einen Datenbaustein als Buffer für die Daten erstellt. Ein Array[0..308] of Word.
Die Adressen weise ich mit einem CASE dem MB_Client zu. Soweit kein Thema
Die Daten müssen entsprechend verarbeitet werden und in einen separaten Baustein verschoben werden.
Für die Adressbereiche 40001 und 43001 funktioniert das Wunderbar.
Ich stehe jetzt bei den Daten für die Adressen 10001 an.
Im Adressbereich 10001 + werden nur Bits übertragen.
Also müsste im Register 10001, 1 oder 0 in meinen Word[0] stehen. Mache ich einen Denkfehler?
Dies scheint nicht so zu sein. Die ersten 73 Bits sollten false sein. Ab Bit 74 sind die Bits true.
Ich habe jedoch nun bereits im Word[4] bereits 16#00FC stehen.
Im word[5] steht 16#3F0C.
Mit Scatter habe ich die Words ein ein Bool Array verschoben. Das Resultat passt nicht. Auch nachdem ich die Words geswapt habe in einen Zwischenspeicher.
Ich verstehe nicht was vom MB_Client in Buffer Array[0..308] of Word geschrieben wird.
Kann mir jemand helfen?
Danke und Gruss