# Modbus Kommunikationsproblem



## Gustel (14 Dezember 2011)

Hallo,
ich habe an einer S7-400 über einen IM153-2 einen CP341-RS422/485 hängen. An den CP sind zwei Modbusslaves angeschlossen.
Busaufbau: Slave1 (150 Ohm Abschlusswiderstand) <---> CP341 <---> Slave2 (150 Ohm Abschlusswiderstand)
Die Leitungslänge von CP zu Slave ist nicht länger wie 25 Meter 
Konfiguration:
Slave 1 9600 Baud, 8 Datenbits, 1 Stopbit, Parität keine (Daten-, Stopbit und Parität sind nicht veränderbar)
Slave 2 9600 Baud, 8 Datenbits, 2 Stopbit, Parität keine (Daten-, Stopbit und Parität sind nicht veränderbar)
Master CP341 9600 Baud, 8 Datenbits, 2 Stopbit, Parität keine, Halbdublex (Zweidrahtbetrieb)
Software: Kommunikation über die S7 Standartbausteine P_RCV_RK und P_SND_RK
Was passiert: Es kommt sporadisch zu Kommunikationsfehler beim Senden, hauptsächlich mit Slave 1. Der Sendebaustein macht den SND bekommt aber keine Antwort vom Slave. Nach Ablauf der Time Responszeit wird der Fehlercode #0830 Ausgegeben d.h. Slave nicht da, Kabel unterbrochen, falsche Slaveadresse.
Bin am verzweifeln


----------



## Michael.Uray (15 Dezember 2011)

Hast du wirklich bei einem Slave 1 Stopbit und beim anderen 2, oder ist das nur ein Tippfehler?
Es müssen überall die selben Parameter auf der Schnittstelle konfiguriert werden. Falls sich bei den Slaves wirklich nichts ändern lässt, wirst du für jeden Slave eine Schnittstelle brauchen.

Die Schnittstellen Einstellungen Softwaremäßig bei jeder Kommunikation zu ändern wäre theoretisch auch noch möglich, allerdings wird es dann vielleicht früher oder später eine nicht erkannte Fehlübertragung geben da die CRC-16 des Modbus Protokolls auch nicht 100% sicher ist.


----------



## Gustel (15 Dezember 2011)

Hallo,
leider kein Tippfehler. Slave 1 hat 1 Stopbit und Slave 2 hat 2 Stopbits und beide sind nicht änderbar.
Ich hab das schon vermutet das ich einen zweiten CP brauche. Das sich die Italiener aber auch an nichts halten :-(


----------



## Oberchefe (15 Dezember 2011)

wenn das Ding Modbus-konform sein soll, dann hat es so auszusehen:


```
The format ( 11 bits ) for each byte in RTU mode is :
Coding System: 8–bit binary
Bits per Byte: 1 start bit
8 data bits, least significant bit sent first
1 bit for parity completion
1 stop bit
Even parity is required, other modes ( odd parity, no parity ) may also be used. In order to ensure a maximum compatibility with
other products, it is recommended to support also No parity mode. The default parity mode must be even parity.
Remark : the use of no parity requires 2 stop bits.
```

Das ist ein Auszug aus der Spezifikation. Dazu steht im Vorwort:

```
 "MUST" / "REQUIRED"
All requirements containing the word "MUST" are mandatory. The word MUST, or the adjective "REQUIRED", means that the item is
an absolute requirement of the implementation. These words are underlined.
```

Wenn  sich einer der Hersteller daran nicht hält einfach das Ding um die  Ohren schlagen, dann darf er nicht draufschreiben, dass das Ding Modbus  kann (auch wenn sich so mancher nicht dran hält).


----------



## Gustel (16 Dezember 2011)

Even parity is required, other modes ( odd parity, no parity ) may also be used. In order to ensure a maximum compatibility with
other products, it is recommended to support also No parity mode. The default parity mode must be even parity.
Remark : the use of no parity requires 2 stop bits.

Wenn ich das jetzt richtig deute dann ist:
- gerade Parität / 1 Stopbit (Standartwert für Modbus)
- keine Parität / 2 Stopbits (kann auch benutzt werden wegen Kompatibilität mit anderen Produkten)

Liege ich da jetzt richtig? Dann hätten die Italiener alles richtig gemacht und die Deutsche Firma den Bock geschossen


----------



## Michael.Uray (16 Dezember 2011)

Dh. dass ein Gerät zumindest 
1 Stopbit, gerade Parität und 8 Datenbits
unterstützen muss, da es sonst nicht die mindest Anforderungen für Modbus erfüllt.
Zusätzliche andere Modis sind empfohlen, um ein maximum an Kompatibilität zu anderen Geräten sicherzustellen.

Dh. weiters, dass keiner von deinen beiden Slaves Modbus unterstützt, da die geforderten Einstellungen nicht möglich sind.

Hier http://www.modbus.org/docs/Modbus_over_serial_line_V1.pdf auf der Seite 12 findest du diese Anforderungen.
Ich würde das einfach mal so an die Hersteller der Slaves weitergeben.


----------

