1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. fabulous

Beiträge von fabulous

  • Serielle Kommunikation via Modbus RTU

    • fabulous
    • 26. Januar 2021 um 18:46

    Hallo.

    Ich hatte schon in folgendem Post nach Hilfe gefragt, aber leider noch keine Antworten bekommen.

    Ich versuche es deshalb hier. Vieleicht möchte sich jemand dem Thema annehmen für eine kleine Gegenleistung.

    Das Projekt sieht grob gesagt folgendermaßen aus.

    Verbindung mittels Modbus RTU aufbauen.

    Grundeinstellungen senden.

    Auf Knopfdruck Strom einschalten und Spannung sowie Strom auslesen.

    Strom abschalten

    Auf Knopfdruck Strom einschalten und Spannung sowie Strom auslesen.

    Nach 10 Messungen die Ausgelesenen Spannungen und Ströme in Excel eintragen.

    Das mit dem Excel würde ich vermutlich alles selber hin bekommen.

    Woran es bei mir scheitert ist der Verbindungsaufbau mit dem Netzteil.

    Hierfür habe ich schon mehrere Möglichkeiten gefunden. Am Einfachsten ist es vermutlich über eine dll.

    Libmodbus oder Shortbus sind vermutlich die am bessend Passendsten.

    Über die Gegenleistung kann man sprechen je nach Umfang.

    Die minimalvariante wären drei DLL Call Implementierungen á la:

    Verbindung mit dem Netzteil herstellen

    Register Strom und Spannung beschreiben

    Register Strom und Spannung Auslesen

    Ich habe Dokumentationen zu den DLL´s, dem Netzteil, Mitgesniffte Kommunikation etc. mit der ich Unterstützen kann.

    Den Rest würde ich auch selbst hinbekommen.

    MFG Fabulous

  • DPS3005 Netzteil auslesen schlägt fehl

    • fabulous
    • 11. Januar 2021 um 19:36

    Hallo.

    Ich versuche mein Netzteil (DPS3005) mittels serieller Schnittstelle (Modbus RTU) auszulesen und einzustellen.

    Hierfür habe ich die Modbus UDF (modbus) gefunden.

    In dieser gab es zwar nur die TCP IP verbindung, die verwendete DLL(libmodbus.dll; https://libmodbus.org/docs/v3.0.8/) kann aber auch eine RTU Verbindung über die Serielle schnittstelle aufbauen.

    Ich kenne mich mit DLL´s nicht wirklich aus, habe aber basierend auf der TCP Funktion die RTU Funktion nachgebaut.

    Ich bekomme aber leider immer nur eine NULL als Antwort, was bedeutet das ein Fehler im DLL Call ist.

    Ich komme jetzt nicht mehr weiter.

    Ich weiß das es auch andere UDF´s für die Serielle Schnittstelle gibt, dort weiß ich aber nicht wie genau ich dann die Werte ändern kann.

    Bzw. Was ich dann Senden muss.

    Würde mich sehr über Hilfe freuen, egal ob bei der Modbus UDF oder auch bei einer Anderen UDF.

    Anbei mal mein Sourcecode sowie das Kommunikationsprotokoll des Netzteils.

    Code
    #include <modbus.au3>
    
    Func _Modbus_New_RTU()
        Local $aRet = DllCall($hDLL_Modbus, "ptr:cdecl", "modbus_new_rtu", "str", "COM3", "int", 9600,"str", "N","int", 8,"int", 1)
        ;modbus_t *modbus_new_rtu(const char *device, int baud, char parity, int data_bit, int stop_bit);
        _ArrayDisplay($aRet)
        Return $aRet[0]
    
    EndFunc   ;==>_Modbus_New_RTU
    
    Func _ComListPorts()
       Local $regKey = 'HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM'
       Local $regVal = ''
       Local $regDat = ''
       Local $comPortList[0]
       For $i = 1 To 256
          $regVal = RegEnumVal($regKey, $i)
          If @error Then ExitLoop
          $regDat = RegRead($regKey, $regVal)
          If @error Then ExitLoop
          ReDim $comPortList[$i]
          $comPortList[$i-1] = $regDat
       Next
       If UBound($comPortList)=0 Then Return -1
       Return $comPortList
    EndFunc    ;==>_ComListPorts
    
    HotKeySet("{ESC}", "Terminate")
    
    $comports = _ComListPorts()
    
    $search = _ArraySearch($comports, "COM3")
    
    if $search = -1 then
    MsgBox(0, "Error " & @error, "COM 3 nicht vorhanden")
    endif
    
    _example_libDll()
    
    MsgBox(0, "EXIT", "End of Sample")
    
    Exit
    
    
    ;--------------------------------------------------------------------------------------
    
    Func _example_libDll()
        _Modbus_DllOpen()
        Global $tModbus = _Modbus_New_RTU()
        $connect = _Modbus_Connect($tModbus)
        MsgBox(0, '', $connect)
        If $connect = -1 Then
    
            ConsoleWrite("! Fehler: Es konnte keine Verbindung aufgebaut werden." & @CRLF)
            _Modbus_Free($tModbus)
            Exit
        EndIf
        Global $aVal
    
        $aVal = _Modbus_Set_Debug($tModbus, 1)
    
        ;Global $aVal = _Modbus_Read_Registers($tModbus, 0, 1)
        ;Global $aVal = _Modbus_Read_Input_Registers($tModbus, 0, 1)
        ;Global $aVal = _Modbus_Read_Input_Bits($tModbus, 5)
        ;Global $aVal = _Modbus_Read_Bits($tModbus, 5)
        ;Global $aVal = _Modbus_Write_Bit($tModbus, 0, 1 )
        ;Global $aVal = _Modbus_Write_Register($tModbus, 0, 8 )
    
    
        _Modbus_Close($tModbus)
        _Modbus_Free($tModbus)
    
    EndFunc   ;==>_example_libDll
    
    
    Func Terminate()
        Exit 0
    EndFunc   ;==>Terminate
    Alles anzeigen

    Dateien

    DPS3005 CNC Communication Protocol V1.2.pdf 163,62 kB – 1.562 Downloads
  • Mehrzeiliges Panoramabild erstellen

    • fabulous
    • 18. März 2014 um 15:56

    Dankeschön

    Hat super geklappt :) :thumbup:

  • Mehrzeiliges Panoramabild erstellen

    • fabulous
    • 17. März 2014 um 21:08

    Hallo

    Ich habe eigentlich zu fast 100% das gleiche Problem.

    Ich habe 1927 Bilder mit einer Größe von je 258x258 Pixeln.


    Genauso wie beim ersten Post ist das eigentliche Gesamtbild folgendermaßen aufgebaut (horizontal 0-40; vertikal 0-46)

    0_0.jpg, 1_0.jpg, 2_0.jpg, ... 40_0.jpg
    0_1.jpg, 1_1.jpg, 2_1.jpg, ... 40_1.jpg
    0_2.jpg, 1_2.jpg, 2_2.jpg, ... 40_2.jpg
    0_3.jpg, 1_3.jpg, 2_3.jpg, ... 40_3.jpg
    u.s.w.
    ... , ... , ... , ... 40_46.jpg


    Die erste Zahl gibt die Position horrizontal an, die zweite zahl gibt die Position vertikal an.
    img0_1.jpg liegt also unter img0_0.jpg u.s.w.


    Ich habe selber schon probiert es irgendwie hinzubekommen aber es klappt nicht.

    Hier mein Code. (Testweise nur von 0-3 in der Horizontalen und Vertikalen)
    Die Datei "Karte Gesamt.jpg" ist eine blanke Datei mit den Gesamtabmaßen(10578x12126 Pixel).

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WinAPI.au3>

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()
    Local $hBitmap1, $hBitmap2, $hImage1, $hImage2, $hGraphic

    [/autoit] [autoit][/autoit] [autoit]

    ; Initialisiert (startet) Microsoft Windows GDI+
    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $hBitmap1 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Karte Gesamt.jpg")
    $hImage1 = _GDIPlus_ImageGetGraphicsContext($hBitmap1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $x = 0 To 3 Step +1
    For $y = 0 To 3 Step +1
    $hBitmap2 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "" & $x & "_" & $y & ".jpg")
    $hImage2 = _GDIPlus_ImageGetGraphicsContext($hBitmap2)

    $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)
    $save =_GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage1, $x*258, $y*258, 258, 258)
    _WinAPI_DeleteObject($hBitmap2)
    Next
    Next
    ; Speichert das neue Bild
    _GDIPlus_ImageSaveToFile($hImage1, @ScriptDir & "\Karte Gesamt1.jpg")

    [/autoit] [autoit][/autoit] [autoit]

    ; Ressourcen freigeben
    _GDIPlus_ImageDispose($hImage1)
    _WinAPI_DeleteObject($hBitmap1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Gibt die durch Microsoft Windows GDI+ verwendeten Ressourcen wieder frei
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Main

    [/autoit]
  • Wo ist die SciTE "Neu-Datei"?

    • fabulous
    • 8. Februar 2010 um 19:58

    "C:\WINDOWS\ShellNew\Template.au3"

  • unicode to "unicode zeichenfolge"

    • fabulous
    • 1. Oktober 2009 um 20:14

    Hallo ich möchte ein Programm erstellen, welches bei einem Click auf den Button "Zeichenfolge to Unicode" aus der (in einem Inputfeld stehenden) Zeichenfolge z.b.(U+)00DF in ein "ß" konvertiert und dieses in das andere Inputfeld schreibt

    Bei dem Druck auf den Button "Unicode to Zeichenfolge " solte natürlich das umgekehrte passieren.
    also aus "ß" wird (U+)00DF

    nun habe ich keine funktion gefunden welche in unicode umwandelt
    habe nur bei sql-und-xml.de funktionen gefunden welche aus einer zeichenfoge unicode und aus unicode eine zeichenfolge machen können.
    nun meine frage ist soetwas auch in autoit möglich?

  • Portal wird falsch dargestellt?

    • fabulous
    • 21. September 2009 um 22:06

    ich würd mal auf die kleinen schwarrzen + drücken
    dan gehn die dinger wieder auf

  • probleme mit den deutschen hilfedateien

    • fabulous
    • 21. September 2009 um 20:56

    versuche mal rechtsklick und dan in dem erscheinendem fenster unten auf
    sicherheit: button Zulassen

  • probleme mit den deutschen hilfedateien

    • fabulous
    • 21. September 2009 um 20:27

    da kommt doch am anfang immer ein fenster a' la
    möchten sie diese datei öffnen

    dan must du den hacken bei vor dem öffnen dieser datei bestätigen raus machen

  • bildschirm in fenster

    • fabulous
    • 15. September 2009 um 19:51

    thx
    läuft pervekt

    ich versuch des mit tcp zu senden

  • bildschirm in fenster

    • fabulous
    • 15. September 2009 um 19:02

    Hallo
    Ich möchte gerne zu erst, wie bei der Windows Bildschirmlupe; den Bereich in welchem die Maus ist vergrößert in einer Gui anzeigen.
    Ich weiß nur nicht wie ich das hinbekommen könnte da _screnncapture zu langsam ist
    für Tipps oder sogar Snippets währe ich sehr dankbar
    zweitens. Ist es möglich mit dieser Methode über tcp die Informationen zu einem 2. Pc zu senden und dort in einer GUI anzeigen zu lassen?

    ich weiß nur das es mit irgend einer Dll funktioniert
    aber ob dies dan auch mit tcpsend funktioniert weiß ich nicht

  • Ordner in Bild Packer

    • fabulous
    • 31. August 2009 um 13:42

    wie hast du des den versucht?
    rechtsklick entpacken?

    du must 7 zip öffnen und dan einfach das bild auswählen

  • Window Close erkennen

    • fabulous
    • 27. August 2009 um 21:49

    durch einen $WH_CALLWNDPROC hook

    wie des geht weiß ich jez ned

  • Ordner Verstecken

    • fabulous
    • 24. August 2009 um 15:51

    man kann auch einfach den ordner umbenennen

    und man kan das script mit

    [autoit]

    ShellExecute("test")
    WinSetTitle("test","","text")

    [/autoit]


    austricksen

  • Ordner Verstecken

    • fabulous
    • 23. August 2009 um 14:10

    nicht gerade sicher

    man kann es mit taskmanager killen
    oder wen man will kan man das fenster einfach mit einem 2. programm wieder auf @sw_show umstellen

  • Hook tutorial?

    • fabulous
    • 18. August 2009 um 23:14

    Hallo

    ich habe schon öfters im forum von z.b. bugfix gesehen das er hook funktionen um mausklicks zu sperren oder umlaute auszuschreiben

    aber dies ist im grunde immer das gleiche mit $WH_MOUSE_LL oder $WH_KEYBOARD_LL und $tagKBDLLHOOKSTRUCT

    aber es gibt auch andere hooks wie z.b. $WH_GETMESSAGE aber was verwendet man dann für ein $tag wenn man z.b. ein feld auslesen will?

    währe glücklich über hilfe oder vieleicht sogar ein tut :D

  • [spiel] Autoit.de kann nicht bis 100 zählen

    • fabulous
    • 9. August 2009 um 20:57

    zwei

  • hilfe bei scrollbalken

    • fabulous
    • 5. August 2009 um 19:45

    es geht
    thx

  • hilfe bei scrollbalken

    • fabulous
    • 5. August 2009 um 18:38

    nein tut mir leid hab ich auch schon versucht
    es sind zwar die scrollbalken da doch bewirken tun sie nichts

  • hilfe bei scrollbalken

    • fabulous
    • 5. August 2009 um 15:14

    nein der binn ich nicht^^
    also
    im anhang die kxf datei
    das script

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\test.kxf
    $Form1 = GUICreate("Wurzelimperium", 1012, 720, -76, 174, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
    GUISetBkColor(0x008000)
    $header_de = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\header.de.jpg", 0, -201, 1000, 250, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $rahmen_links_hoch_start = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\rahmen_hoch_start.jpg", 0, 49, 20, 190, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $regal = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\lager\regal.jpg", 20, 49, 220, 640, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $rahmen_links_hoch1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\rahmen_hoch.jpg", 0, 239, 20, 190, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $rahmen_links_hoch2 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\rahmen_hoch.jpg", 0, 429, 20, 262, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $garten_0 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\garten\garten_0.jpg", 261, 49, 720, 640, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $rahmen_mitte_hoch2 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\rahmen_hoch.jpg", 240, 239, 20, 190, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $rahmen_mitte_hoch3 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\rahmen_hoch.jpg", 240, 429, 20, 260, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $rahmen_rechts_hoch_start = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\rahmen_hoch_start.jpg", 980, 49, 20, 190, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $rahmen_rechts_hoch1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\rahmen_hoch.jpg", 980, 239, 20, 190, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $rahmen_mitte_hoch1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\rahmen_hoch.jpg", 240, 49, 20, 190, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $rahmen_quer = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\rahmen_quer.jpg", 0, 689, 1000, 20, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $rahmen_rechts_hoch2 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\bötschi\Desktop\auto\wi_gfx\wi_gfx\pics\rahmen_hoch.jpg", 980, 429, 20, 262, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™