• Hi @ all !


    Ich hab hier ein kleines Paket Zusammengeschnürt um Via AutoIt das Modbus Protokoll zu verwenden. Und somit unzählige Hardware Anzusprechen.


    Enthalten sind:


    meine UDF


    das Simple_Sample


    die einfache Visualisierung welche für die kleinste Konfiguration einer Wago 750-341 mit Di Modul 750-430 und Do Modul 750-530 läuft.


    die Modbus.udf läuft entweder über die im Netz verfügbare libmodbus.dll von libmodbus.org


    Oder "Native" nur über den TCP-Stack von Autoit ( allerdings nur ein paar wichtige Grundfunktionen )


    Da die libmodbus noch viel Funktionen beinhaltet, die ich so noch nie verwendet habe, sind nicht alle umgesetzt.
    Diese Funktionen finden sich im "doc_offen" Ordner im Zip File.


    Fragen / Änderungen / Wünsche sind gerne gesehen.


    Viel Spaß damit !!

  • Ich hab deinen Thread gelesen im SPS-Forum und hab mich dann hierhin durchgeklickt ;)
    Hab mir dann mal dein Beispielskript angesehen.
    So wäre es ein wenig sinnvoller, wenn schon Array, dann richtig.


    Und Checkboxen am besten immer mit BitAND und $GUI_CKECKED abfragen. Nicht nur einfach mit GuiCtrlRead.


    Ansonsten sehr schön und weiter so.

  • Ich hab deinen Thread gelesen im SPS-Forum und hab mich dann hierhin durchgeklickt ;)


    Und Checkboxen am besten immer mit BitAND und $GUI_CKECKED abfragen. Nicht nur einfach mit GuiCtrlRead.


    Ansonsten sehr schön und weiter so.


    Erläutere er es näher ! :D

  • Eigentlich sagt es schon der Absatz in der Hilfe von GuiCtrlRead unter Bemerkungen.

    Code
    Bei Checkboxen und Radiobuttons können mehrere Statuse als $GUI_FOCUS und $GUI_CHECKED zurückgegeben werden. So ist z. B. BitAnd(GUICtrlRead($Item),$GUI_CHECKED) zu verwenden um zu sehen ob ein Control markiert ist.
  • 8) ich bekenne mich schuldig .. 8|


    war eher mit der Richtigkeit des UDF's beschäftigt, als mit der Visualisierung. :rolleyes:


    wenn ich das mit dem Schrittmotor implementiert habe ( in die UDF ) wird eine ansprechendere Visualisierung incl. deiner Verbesserungen folgen ..


    lust mit zu helfen ?

  • Ich kann gerne mithelfen. Bin auch gerade dabei ein Visu zu machen mit eigenen Buttons und Grafiken. Hab auch drangedacht die Funktion der Buttons so zu machen wie es auch ein Taster bzw. Schalter macht. Also beim Drücken eine 1 und beim Loslassen wieder 0. Die normalen Buttons reagieren ja nur beim loslassen.


    Willst du auch Serverfunktionen mitreinnehmen in die UDF?

  • Serverfunktionen ?


    Das Script / UDF ist doch der Server im Modbus .. oder meinst du jetzt was anderes ?


    d.h. du brauchst nur einen Feldbuskoppler ( ich habe hierzu den WAGO 750-341 verwendet ) und das Autoit "Programm".


    sonst keine Andere Software mehr. Du Steuerst mit der UDF direkt die IO's des Feldbuskopplers an.


    ..

  • Ich kann dazu auch meine SPS nehmen ;), muss ja nicht unbedingt von Wago sein. Über Modbus habe ich mit der auch schon kommuniziert. Mit Hilfe von AutoIt natürlich. Der Server ist dabei die SPS, oder wie in deinem Fall der Koppler. Das Script ist der Client. Aber um Sachen zu testen, wäre es mal schön den Server zu stellen und dann mit der SPS darauf zuzugreifen.

  • wäre dann der PC(die Software) nicht der client ? ... wenn du mit der SPS darauf zugreifen willst ?


    wäre natürlich auch ne geile Sache .. dann wäre das Thema mit dem Realtime auch gegessen ..


    für die Zeitkritischen sachen oder Sicherheitsrelevanten Abläufe könnte man die SPS nehmen ... und für die Visu das Script ..


    mmm .. hab ich habe leider nicht die Hardware um das zu testen .. aber können wir ja im Hinterkopf behalten !! wäre n Geiles Feature ...

  • Wenn ich mit dem PC auf die SPS zugreifen möchte, ist der PC der Client. So wie du es jetzt hast. Der Server stellt ja die Register bereit.
    Das Codesys Zeugs brauchst du eigentlich garnicht.
    Ich hab momentan den Fall das eine SPS von Phoenix auf eine SPS von Sick zugreifen soll über Modbus und die Register lesen bzw. schreiben soll.
    Dabei ist die SPS von Sick der Server, weil er stellt ja die Daten bereit, und die SPS von Phoenix ist der Client.
    Nun ist es so, dass ich die Seite mache der Phoenix SPS, Auf der Sick-Seite läuft ja alles. Da ist der Server in der Firmware hinterlegt. Nun hab ich aber (noch) nicht die Sick SPS, möchte ich aber gerne testen. Somit wollte ich mir dann einen Server in AutoIt basteln, der den Server der Sick SPS simuliert, also die Register bereistellt. Bis jetzt hatte ich immer die Hardwares da, aber nun dauert das Paket ein wenig länger.

  • mmm .. seltsam .. das habe ich anderst gelernt. ?(


    und zwar so : ...
    es gibt immer nur einen Server(Master) im System, welcher das "Programm" steuert.
    alles andere sind die Client(Salve) Systeme.


    also wäre bei mir die IO-Hardware egal in welcher Anzahl und welcher Hersteller der Client(Slave).
    Weil der Client ja ohne Server nix macht.( gar nix machen kann, weil er ja "dumm" ist.)


    und der Server wäre hier das Autoit Programm .. weil diese den Programmteil abarbeitet / Steuert.


    aber ist ja auch wurst .. wie wir das definieren ich weis jetzt was du jetzt willst.
    Du willst mit einem Modbus-Master auf Register zugreifen, welche der PC als Slave bereitstellt. ;-)


    müsste doch gehen .. mit meinem "nativ" Code teil.


    Dort poole ich den TCP-Port bis wieder eine Antwort auf meine Frage kommt.


    Das könntest du als "Slave" umbauen.


    eine POOL-schleife, welche auf ein bestimmten Modbus String-Wartet.


    und entsprechend wie du es wünscht darauf Antworten.


    ich hab leider keinen anderen Master vor Ort. ich guck mal, ob ich vielleicht nen Zweiten Rechner als Master Startklar bekomme.


    Jetzt muss ich aber erst mal das mit dem Steppercontroller hin bekommen ;-)

  • Das ist wie bein einem NAS-Server an einem Router. Auf dem NAS-Server liegen verschiedene Daten (Filme, Musik, Bilder, ...). Wenn dein PC darauf zugreift und z.B. einen Film streamt, ist dein PC der Client (Slave). Und es können ja mehrere PCs darauf zugreifen. Aber es gibt immer nur einen Server (Master).


    Genauso ist das mit deinem Koppler. Er stellt die Register bereit mit den Werten drin. Der Clint bekommt dann mit Hilfe von Anfragen die Werte aus den Registern des Servers.

  • Danke für's Beispiel.
    Bei Modbus TCP ist der Server ein Slave (reagiert nur auf Anfragen) und der Client ein Master (aktiv)
    der Client verbindet sich zum Server. Es kann auch mehrere Master geben!

  • vivus: Erst einmal Danke für dein spitzen ModBus-UDF! Allerdings habe ich noch zwei kleine Probleme, wo du mir, oder auch gerne ein anderer, ggf. helfen könntest.


    Ich habe einen Beckhoff Koppler BK9050 und einige Module zum Testen zu Verfügung. Der Koppler mit Digitalen IO's funktioniert grundsätzlich mit deiner UDF (mit DLL) schon sehr gut. Allerdings wenn ich einen Disconnect mache, dann geht der Koppler in Störung, die sich nur durch AEG (ausschalten, einschalten, geht) lösen lässt. Das passiert allerdings nur, wenn ich nach einem Connect einen Ausgang gesetzt hatte.


    Zudem schaffe ich es einfach nicht einen Analogausgang zu beschreiben. Eigentlich dachte ich, das ich dem WriteRegister lediglich eine andere Adresse mitgeben muß, aber das funktioniert so leider nicht.


    Vielen Dank schon mal für deine (eure) Hilfe!


    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Homer J. S.: vivus = Letzte Aktivität 6. Mai 2015, also kein Grund hier die Leichen auszugraben.


    @chip: Prinzipiell gebe ich dir ja recht, aber da es so ein spezielles Thema ist, wollte ich keinen neuen Thread erstellen. Zudem bekommt @vivus im Regelfall eine E-Mail Benachrichtigung, wenn sich was in diesem Thread tut. Was wäre den deiner Meinung nach der richtige Weg?


    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Zudem bekommt @vivus im Regelfall eine E-Mail Benachrichtigung

    Wie kommt darauf? Wenn er das Thema nicht bewusst abboniert hat bekommt er keine Email.


    Was wäre den deiner Meinung nach der richtige Weg?


    Neuer Thread mit einem Verweis auf diesen hier.

  • Hmm, als relativer Neuling hier zögere ich zwar, einem gestandenen (und geschätzten, stets hilfbereiten) Poweruser zu widersprechen, aber ich möchte sagen, dass ich es optimal finde, so wie Homer es gemacht hat.
    Einerseits aus den von ihm schon genannten Gründen, andererseits weil man so alles, was thematisch zusammen gehört, schön in einem einzelnen Thread hat. Das ist sehr vorteilhaft, wenn man die Suchfunktion benutzt.
    Statt abertausender Threads, mit losen Informationshäppchen, hat man am Ende weniger Threads, aber die sind voller Gehalt und alle vielleicht wichtigen Nebenaspekte werden mit angesprochen.


    Übrigens wusste ich noch gar nicht, dass der Modbus so ein verbreiteter Standard ist. Ich dachte immer, jeder SPS-Hersteller kocht sein eigenes Süppchen. Für mich war dieser Thread hier daher sehr wertvoll, weil er Anstoß gab, mal anderweitig kurz zu recherchieren. Dabei stellte ich fest, dass der Modbus genau das bringt, was ich als Projekt (eigene SPS) schon jahrelang vor mir her schiebe und dass meine Eigenentwicklung eines Busprotokolls obsolet ist. Mein eigenes Protokoll war, wie ich hier & heute feststellte, zu praktisch 100% identisch mit dem, was in Form des Modbusses bereits ewig existiert.
    Das wäre mir vermutlich entgangen, hätte Homer einen neuen Thread aufgemacht; trotz Verweis, auf den alten Thread, gemäß chips Vorschlag.

  • Wie kommt darauf? Wenn er das Thema nicht bewusst abboniert hat bekommt er keine Email.

    ...da gebe ich dir recht. Habe mich diesbezüglich im Forum geirrt - Sorry.



    aber ich möchte sagen, dass ich es optimal finde, so wie Homer es gemacht hat.
    Einerseits aus den von ihm schon genannten Gründen, andererseits weil man so alles, was thematisch zusammen gehört, schön in einem einzelnen Thread hat. Das ist sehr vorteilhaft, wenn man die Suchfunktion benutzt.

    ...das war auch mein Denken bezüglich "Leiche ausgraben" ;)


    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...