Modbus Master für C#

eYe

Level-1
Beiträge
759
Reaktionspunkte
80
Zuviel Werbung?
-> Hier kostenlos registrieren
Nabend,

ich habe vor eine Software in C# zu schreiben mit der ich Daten aus einem Modbus Slvae auslesen möchte. Hierfür bin ich auf der Suche nach einer geeigneten Bibliothek und wollte mal fragen ob schon jemand Erfahrung in dem Bereich gesammelt hat und etwas empfehlen kann.

Open Source ist eher nicht so von interesse, da es sich um eine kommerzielle Anwendung handelt und gerne auch ein entsprechender Support in Anspruch genommen werden soll.
 
Das kannst dir in etwa ner halben Stunde selbst schreiben,
Modbus ist keine Black Box.

Specs gibts auf der Modbus Seite.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das kannst dir in etwa ner halben Stunde selbst schreiben,
Modbus ist keine Black Box.

Specs gibts auf der Modbus Seite.

Ich bin begeistert, dachte schon das ganze wird teuer. Also ich bestelle dann hiermit bei dir den entsprechenden Sourcecode. Kalkuliert hast du ja eine halbe Stunde, bei einem angenommen Stundensatz von 100€ macht das dann 50€.



Noch jemand der mir einen vernünftigen Vorschlag unterbreiten mag?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
open source würde ich nicht von vorne herein ausschließen. Auch in diesem
Umfeld findest Du Leute, welche Dich gegen Bezahlung unterstützen.

Tja selbst der große Siemens bedient sich inzwischen recht häufig im Open-Source-Lager. Schaut euch mal die Lizenzhinweise bei WinCC-Flexible an :)
Ausserdem sollte / darf man Open-Source nicht mit kostenlos und ohne kommerziellen Support gleichsetzen. Nahezu jeder große IT-Hersteller hat in der Zwischenzeit irgendwelche OS-Software im Angebot. Und die Kosten für die Wartungsverträge sind dabei genauso gesalzen wie bei Closed-Source :).

Gruß
Dieter
 
Zuletzt bearbeitet:
Ich habe grundsätzlich nicht gegen OpenSource Projekte, im Gegenteil ich bin begeistert von Menschen die ihr Wissen kostenlos mit anderen teilen :)

Nur denke ich bei Open Source immer an so einen wie mich selbst, der in seinem kleinen Büro sitzt und Abends aus Langweile und Freude am proggen ein Tool entwickelt. Das problem dabei ist dann (denke ich) das die entwickelte Software nicht ausreichend getestet ist. Und ich möchte wirklich etwas haben was funktioniert, da ich keine Zeit habe mich großartig mit dem debugging zu beschäftigen :(

(Ja ich kenne SIEMENS Software und weiß das dort auch die Kunden das debugging übernehmen :( )

@pvbrowser
Ich kenne deine Seite, aber ehrlich finde ich nichts was mir in Sachen Modbusmaster unter C# weiterhilft. Falls du da was für mich hast würde ich mich über weitere Informationen freuen :) (PN)

@Gerhard Bäurle
Die Seite habe ich mir auch schon angeguckt, ist sogar mein Favourite weil es doch einen recht professionellen Eindruck bei mir erweckt.
Hier noch zwei weitere: (Falls noch jemand anders auf der Suche ist)

http://www.modbusdriver.com/shop/product_info.php?cPath=64&products_id=66
http://www.sunlux-india.com/MODBUSProtocolSuite.htm
http://www.adontec.com/index.htm?GO=/pmodbus_d.htm
 
@pvbrowser
Ich kenne deine Seite, aber ehrlich finde ich nichts was mir in Sachen Modbusmaster unter C# weiterhilft. Falls du da was für mich hast würde ich mich über weitere Informationen freuen :) (PN)

Unser Projekt enthält eine Bibliothek, die u.a. Modbus in C++ implementiert.
http://pvbrowser.org/pvbrowser/sf/manual/rllib/html/classrlModbus.html
Die C# Anbindung sollte ja kein Problem sein, wenn Du über die Quellen verfügst.

Die Bibliothek wird zusammen mit pvbrowser durch
http://pvbrowser.de/pvbrowser/tar/install-pvbrowser.exe
installiert.

Du kannst die Bibliothek aber auch in den Quellen separat von
http://pvbrowser.de/pvbrowser/tar/rllib.tar.gz
herunterladen.

Ist es denn sooooo viel verlangt, sich mal auf der Homepage umzusehen ?
z.B. unter Download.
Deshalb bezweifele ich das "Ich kenne deine Seite" :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist es denn sooooo viel verlangt, sich mal auf der Homepage umzusehen ?
z.B. unter Download.
Deshalb bezweifele ich das "Ich kenne deine Seite" :)

Nein ist es natürlich nicht ;)
Und doch, ich kenne die Seite. (Oder vielleicht besser: Mirt ist die Seite bekannt^^) Das erstemal wo ich drauf war ist schon länger her, da war ich auf der Suche nach einer alternative zu WinCC Flexible...
Aber es sei dir gegönnt mich als Lügner oder vielleicht auch nur faul abzustempeln ^^

Und selbst jetzt wo ich deinen Direktlink kenne, komme ich nicht weiter als bis downloads. Wo finde ich den da den Link zur "rl Modbus Class Reference"?

Schönen Sonntag noch,
eYe

 
Hallo, hier der Code wie er an unseren Anlagen läuft,
als Beispiel eine UserFunction 65

Implementiert in Python, Modbus over UDP

Code:
#------------------------------------------------------------------------#
# Function _ModbusF65
#------------------------------------------------------------------------#
    def _ModbusF65(self, transid, protid, unitid,  data):
            # Modbus Header
            mbus = ""
            mbus += chr(transid << 8) + chr(transid & 0xFF) # Transaction ID
            mbus += chr(protid << 8) + chr(protid & 0xFF) # Protocol Identifier
            mbus += chr(len(data)+1 << 8) + chr(len(data)+1 & 0xFF) # Datalength
            mbus += chr(unitid) # Unit Identifier
            mbus += chr(65) # Function Code
            # Send
            self._udp1.sendto(mbus + data, ("192.168.0.106", 20101))
Um einen Slave zu lesen musst du die dementsprechenden Function Code mit den passenden Daten senden, und den Response parsen - fertig.

Wenn du mir deinen Slave schickst programmier ich dir das ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Um einen Slave zu lesen musst du die dementsprechenden Function Code mit den passenden Daten senden, und den Response parsen - fertig.

Wenn du mir deinen Slave schickst programmier ich dir das ;)

Danke für dein Beispiel :)
In meinem Fall handelt es sich allerdings um Modbus RTU und nicht TCP, dementsprechend müssen Dinge wie z.B. CRC beachtet werden.
Aber auf dein Angebot komme ich gerne zurück, wenn ich irgendwo nicht weiterkomme :)
 
Code:
#------------------------------------------------------------------------#
# Function _ModbusF65
#------------------------------------------------------------------------#
    def _ModbusF65(self, transid, protid, unitid,  data):
            # Modbus Header
            mbus = ""
            mbus += chr(transid << 8) + chr(transid & 0xFF) # Transaction ID
            mbus += chr(protid << 8) + chr(protid & 0xFF) # Protocol Identifier
            mbus += chr(len(data)+1 << 8) + chr(len(data)+1 & 0xFF) # Datalength
            mbus += chr(unitid) # Unit Identifier
            mbus += chr(65) # Function Code
            # Send
            self._udp1.sendto(mbus + data, ("192.168.0.106", 20101))

Und das funktioniert ?

Nach meinem Wissensstand wird Modbus über TCP und Port 502 gefahren und nicht über UDP.

Siehe auch:
http://modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@PvBrowser:

Auf der anderen Seite horcht natürlich ein in SPS Code selbstgeschriebener UDP Modbus Server, ich weis das Modbus eigentlich nicht für UDP spezifiziert ist. Gibt allerdings einige Implementierungen in UDP.
 
Hallo,
ich stehe vor einem ähnlichen Problem. Ich will eine Modbus- TCP- Kommunikation zwischen einer ELAU- STeuerung (Slave) und einem B&R- Panel (Master) herstellen. Nun existiert für die Steuerung ein ModbusTCP- Baustein, nur für das Panel nicht.
Eine Möglichkeit wäre ein C++ -Programm für den Master zu verwenden, allerdings hab ich noch nichts wirklich brauchbares gefunden.
Ich hoffe mir kann da jemand weiter helfen, Quelltext wäre gut:).
 
Hallo,
ich stehe vor einem ähnlichen Problem. Ich will eine Modbus- TCP- Kommunikation zwischen einer ELAU- STeuerung (Slave) und einem B&R- Panel (Master) herstellen. Nun existiert für die Steuerung ein ModbusTCP- Baustein, nur für das Panel nicht.
Eine Möglichkeit wäre ein C++ -Programm für den Master zu verwenden, allerdings hab ich noch nichts wirklich brauchbares gefunden.
Ich hoffe mir kann da jemand weiter helfen, Quelltext wäre gut:).

Hab ich doch schon angegeben:

http://pvbrowser.org/pvbrowser/sf/manual/rllib/html/classrlModbus.html
ist Teil von
http://pvbrowser.org
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, hab ich wohl übersehen. Wenn ich das richtig verstehe ist das aber doch Modbus ASCII bzw. RTU wegen CRC und LRC.? Müsste ich dann für Modbus TCP noch was rausnehmen oder ergänzen, um mal dumm zu fragen?
Könnte ich die cpp- und die h- Datei einfach in die Software des Panels integrieren, die Kommunikationsvariablen ansprechen und fertig?
DAnke für die schnelle Antwort!
 
Googel mal mit "Wago Modbus".

Wago stellt eine komplette DLL inklusive Doku zu Verfügung.

Vielleicht für Dich ganz brauchbar.
 
Wenn ich das richtig verstehe ist das aber doch Modbus ASCII bzw. RTU wegen CRC und LRC.? Müsste ich dann für Modbus TCP noch was rausnehmen oder ergänzen, um mal dumm zu fragen?
Könnte ich die cpp- und die h- Datei einfach in die Software des Panels integrieren, die Kommunikationsvariablen ansprechen und fertig?

Die Klasse kann sowohl über die serielle Schnittstelle kommunizieren, als auch über TCP/IP. Du rufst vorher einfach ein
void registerSocket (rlSocket *socket)
bzw.
void registerSerial (rlSerial *serial)
auf.

Du kannst ebenfalls auswählen, ob die Klasse Ascii oder RTU machen soll.

Wenn Du einen C++ Compiler für das Panel hast ist das kein Problem.
Die Klasse funktioniert unter allen Unix-artigen Betriebssystemen, Windows und OpenVMS.

Solltest Du nur einen C Compiler haben, lässt sich das aber auch einfach übertragen.
 
Zurück
Oben