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. funkey

Beiträge von funkey

  • Visible Text auslesen

    • funkey
    • 15. Januar 2013 um 16:26

    Anstelle von WinActive könntest du auch WinExists verwenden, oder du nimmst gleich WinGetText

    [autoit]

    StringInStr(WinGetText("Skype"), "Skype Test Call")

    [/autoit]
  • Return-Befehle in ein Array mit-speichern

    • funkey
    • 14. Januar 2013 um 18:39

    Funktioniert doch schon.
    Was du noch machen kannst, ist das @CR aus dem @CRLF zu entfernen, damit nur noch ein Symbol (@LF) übrigbleibt.
    Angezeigt werden kann da ja nur ein Kästchen.

    Beim nächsten Mal poste ein lauffähiges Beispiel zum Testen, und nicht nur eine Zeile!


    [autoit]

    #include <Array.au3>
    #include <EditConstants.au3>

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

    GUICreate("", 500, 350)
    $rohTextFeld = GUICtrlCreateEdit("", 10, 10, 480, 300, $ES_WANTRETURN)
    $nBtn = GUICtrlCreateButton("Lese in Array", 10, 320, 480, 20)

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

    GUISetState()

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

    Global $iMsg

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

    Do
    $iMsg = GUIGetMsg()
    If $iMsg = $nBtn Then
    $rohText = StringSplit(StringReplace(GUICtrlRead($rohTextFeld), @CRLF, @LF), '', 2)
    _ArrayDisplay($rohText)
    EndIf
    Until $iMsg = -3

    [/autoit]
  • DLL - Was Jetzt?

    • funkey
    • 8. Januar 2013 um 14:40

    Ohne Beschreibung der Funktionen der DLL wirst du keine Chance haben, sie benutzen zu können.
    Du kannst eigentlich nur nach den Funktionsnamen googlen und hoffen, dass du was findest.

  • Desktop effects - 22 Effekte mit BitBlt (früher Melting Desktop)

    • funkey
    • 6. Januar 2013 um 12:57
    Zitat von Andy

    hmm, die Verwendung von Windows-Standard-Funktionen funktioniert nicht bei Win8? Btw. was funktioniert nicht bzw. was ist der Fehler?
    Bestätigt mein bisheriges Vorgehen, immer nur jede 2. BS-Version zu verwenden.


    [Blockierte Grafik: http://www.globalnerdy.com/wordpress/wp-content/uploads/2011/09/windows-good-and-shit.jpg]

  • Desktop effects - 22 Effekte mit BitBlt (früher Melting Desktop)

    • funkey
    • 5. Januar 2013 um 10:36

    Sowas geht doch auch sicher ohne temporäre Datei. ;)
    Oder zumindest könnte man die Datei nach dem Ausführen wieder löschen.

  • Frage zu Array

    • funkey
    • 2. Januar 2013 um 20:25

    Ich glaube er meint so:

    [autoit]

    #include <Array.au3>

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

    Global $value1a[3] = ['1a','2a','3a']
    Global $value1b[3] = ['1b','2b','3b']
    Global $value1c[3] = ['1c','2c','3c']

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

    Global $aValue[3] = [$value1a, $value1b, $value1c]

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

    _ArrayDisplay($aValue[0])
    _ArrayDisplay($aValue[1])
    _ArrayDisplay($aValue[2])

    [/autoit]


    Aber natürlich ist ein 2-dimensionales Array besser. (Noch, bis zur nächsten AutoIt-Version)

  • 2012 --> 2013

    • funkey
    • 1. Januar 2013 um 09:35

    Ich wünsche auch allen hier ein gutes, neues Jahr! Bleibt gesund!

  • Alternative Weihnachtslieder =:o)

    • funkey
    • 26. Dezember 2012 um 15:53

    http://www.youtube.com/watch?v=PyEVuLBtI5A 8o
    :D

  • letsgo, der Applehasser, wird 16

    • funkey
    • 24. Dezember 2012 um 16:18

    Alles Gute zum Geburtstag, letsgo! :party::party:

  • GUICtrlCreateButton ohne $WS_TABSTOP

    • funkey
    • 17. Dezember 2012 um 07:58
    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <WinAPI.au3>

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

    GUICreate("My GUI Button") ; will create a dialog box that when displayed is centered

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

    Opt("GUICoordMode", 2)
    Global $Button_1 = GUICtrlCreateButton("Run Notepad", 10, 30, 100)
    Global $Button_2 = GUICtrlCreateButton("Button Test", 0, -1)
    Global $Button_3 = GUICtrlCreateButton("Without Tabstop", 0, -1)
    Global $hButton_3 = GUICtrlGetHandle(-1)

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

    Global $iStyle = _WinAPI_GetWindowLong($hButton_3, $GWL_STYLE)
    _WinAPI_SetWindowLong($hButton_3, $GWL_STYLE, BitXOR($iStyle, $WS_TABSTOP))

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

    GUISetState()

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

    Global $msg

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button_1
    Run('notepad.exe')
    Case $msg = $Button_2
    MsgBox(0, 'Testing', 'Button 2 was pressed')
    Case $msg = $Button_3
    MsgBox(0, 'Testing', 'Button 3 was pressed')
    EndSelect
    WEnd

    [/autoit]
  • Eigener Style fürs Forum mit Firefox (per AddOn Stylish) -- mein Entwurf: "Maroon" + "futurex_blue" + "futurex_darkblue"

    • funkey
    • 15. Dezember 2012 um 17:44

    Gefällt mir sehr gut, danke!! :thumbup:

  • DllCall Hilfe !

    • funkey
    • 12. Dezember 2012 um 09:25

    :D
    Bitte.

    Ich habe die DLL im Netz nicht gefunden, deshalb hab ich sie mir selbst kompiliert. Habe gehofft, dass sie mit deiner Version größtenteils übereinstimmt.

  • DllCall Hilfe !

    • funkey
    • 12. Dezember 2012 um 07:16

    Danke vivus, werde ich zwar nicht brauchen, aber vllt jemand anderes. es ist immer gut, wenn man mehrere brauchbare Funktionen in einem Thread findet.
    Du könntest ja eine richtige universale MpdbisTCP-UDF daraus machen.

    BTW: Ich habe mir jetzt auch libModbus zu einer DLL kompiliert und ein paar Funktionen daraus gewrappt, um es zu testen. Läuft einwandfrei.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Global $hDLL_Modbus = DllOpen("libModbus.dll")

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

    Global $tModbus = _Modbus_New_TCP("192.168.0.1")
    If _Modbus_Connect($tModbus) = -1 Then
    ConsoleWrite("! Fehler: Es konnte keine Verbindung aufgebaut werden." & @CRLF)
    _Modbus_Free($tModbus)
    Exit
    EndIf

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

    Global $aVal = _Modbus_Read_Registers($tModbus, 65, 2)
    _ArrayDisplay($aVal)

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

    _Modbus_Close($tModbus)
    _Modbus_Free($tModbus)

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

    Func _Modbus_New_TCP($sIP, $iPort = 502)
    Local $aRet = DllCall($hDLL_Modbus, "ptr:cdecl", "modbus_new_tcp", "str", $sIP, "int", $iPort)
    Return $aRet[0]
    EndFunc ;==>_Modbus_New_TCP

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

    Func _Modbus_Connect($tModbus)
    Local $aRet = DllCall($hDLL_Modbus, "int:cdecl", "modbus_connect", "ptr", $tModbus)
    Return $aRet[0]
    EndFunc ;==>_Modbus_Connect

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

    Func _Modbus_Close($tModbus)
    DllCall($hDLL_Modbus, "none:cdecl", "modbus_close", "ptr", $tModbus)
    EndFunc ;==>_Modbus_Close

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

    Func _Modbus_Free($tModbus)
    DllCall($hDLL_Modbus, "none:cdecl", "modbus_free", "ptr", $tModbus)
    EndFunc ;==>_Modbus_Free

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

    Func _Modbus_StrError($iError)
    Local $aRet = DllCall($hDLL_Modbus, "str:cdecl", "modbus_strerror", "int", $iError)
    Return $aRet[0]
    EndFunc ;==>_Modbus_StrError

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

    Func _Modbus_Read_Registers($tModbus, $iAddr, $iNum)
    Local $tBuffer = DllStructCreate("WORD[" & $iNum & "]")
    Local $aRet = DllCall($hDLL_Modbus, "int:cdecl", "modbus_read_registers", "ptr", $tModbus, "int", $iAddr, "int", $iNum, "struct*", $tBuffer)

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

    Local $aRes[$iNum]
    For $i = 0 To $iNum - 1
    $aRes[$i] = DllStructGetData($tBuffer, 1, $i + 1)
    Next
    Return $aRes
    EndFunc ;==>_Modbus_Read_Registers

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • DllCall Hilfe !

    • funkey
    • 11. Dezember 2012 um 10:43

    Hab jetzt noch eine Funktion für's Lesen von Bits (Inputs - Funktionscode 2) geschrieben. Hoffe, die funktioniert bei dir.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>

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

    TCPStartup()

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

    Global $ModbusTCP_Debug_Send = 1
    Global $ModbusTCP_Debug_Recv = 1

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

    Global $iSock = TCPConnect("172.18.65.159", 502)

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

    If $iSock = -1 Then
    ConsoleWrite("Fehler Verbindungsaufbau" & @LF)
    Exit
    EndIf

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

    Global $iRet = _ModbusTCP_ReadDiscreteInputs($iSock, 0, 16)
    ConsoleWrite("Bits = " & $iRet & @CRLF)

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

    TCPCloseSocket($iSock)

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

    TCPShutdown()

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

    Func _ModbusTCP_ReadDiscreteInputs($mainsocket, $iStartAddress, $iNumOfCoils)
    Local Static $TI = 0
    $TI += 1

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

    Local $iBytesToSend = 6, $iFunctionCode = "02"

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

    If $iNumOfCoils < 1 Then Return SetError(1, 0, 0)

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

    _ModbusTCP_Send($mainsocket, "0x" & Hex($TI, 4) & "0000" & Hex($iBytesToSend, 4) & "01" & $iFunctionCode & Hex($iStartAddress, 4) & Hex($iNumOfCoils, 4))
    If @error Then Return SetError(2, 0, 0)

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

    Local $sRecv

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

    Do
    $sRecv = _ModbusTCP_Recv($mainsocket, 512)
    Until @error Or $sRecv <> ""
    If @error Then Return SetError(3, 0, 0)

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

    If Int(String(BinaryMid($sRecv, 1, 2))) <> $TI Then Return SetError(4, 0, 0)

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

    Local $iAnzahlBytes = Int(String(BinaryMid($sRecv, 9, 1)))

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

    ConsoleWrite("Anzahl der erhaltenen Daten: " & $iAnzahlBytes & " Byte(s), max " & $iAnzahlBytes * 8 & " Bits." & @CRLF)

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

    Return _Convert_To_Binary(Int(String(BinaryMid($sRecv, 10, $iAnzahlBytes))))
    EndFunc ;==>_ModbusTCP_ReadDiscreteInputs

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

    Func _ModbusTCP_Send($mainsocket, $data)
    If $ModbusTCP_Debug_Send Then ConsoleWrite("_ModbusTCP_Send(" & $mainsocket & ", """ & $data & """)" & @CRLF)
    Local $Send = TCPSend($mainsocket, $data)
    Return SetError(@error, 0, $Send)
    EndFunc ;==>_ModbusTCP_Send

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

    Func _ModbusTCP_Recv($mainsocket, $maxlen = 256, $flag = 0)
    Local $sRecv = TCPRecv($mainsocket, $maxlen, $flag)
    Local $error = @error
    If $sRecv <> "" And $ModbusTCP_Debug_Recv Then ConsoleWrite("_ModbusTCP_Recv: " & $sRecv & @CRLF)
    Return SetError($error, 0, $sRecv)
    EndFunc ;==>_ModbusTCP_Recv

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

    Func _Convert_To_Binary($iNumber)
    Local $sBinString = ""
    Do
    $sBinString = BitAND($iNumber, 1) & $sBinString
    $iNumber = BitShift($iNumber, 1)
    Until $iNumber <= 0
    If $iNumber < 0 Then SetError(1, 0, 0)
    Return $sBinString
    EndFunc ;==>_Convert_To_Binary

    [/autoit]
  • DllCall Hilfe !

    • funkey
    • 11. Dezember 2012 um 10:10

    Bitte.
    Nein Schreiben musste ich noch nie. Immer nur lesen.
    Hier ist eine Seite mit einer einfachen Beschreibung des Modbus-Protokolles: http://www.simplymodbus.ca/TCP.htm

  • DllCall Hilfe !

    • funkey
    • 10. Dezember 2012 um 17:31

    Hallo vivus,
    für Modbus-TCP brauchst du keine DLL. Das geht mit AutoIt auch ganz einfach.

    Hier mal ein Beispiel-Code. Wird bei dir zwar so nicht laufen, aber du kannst dir daraus sicher was basteln.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>

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

    TCPStartup()

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

    Global $ModbusTCP_Debug_Send = 1
    Global $ModbusTCP_Debug_Recv = 1

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

    Global $iSock = TCPConnect("192.168.0.1", 502)

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

    If $iSock = -1 Then
    ConsoleWrite("Fehler Verbindungsaufbau" & @LF)
    Exit
    EndIf

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

    $aTest = _ModbusTCP_ReadValues($iSock, 4, 1, 4, "float") ;Functioncode 4, Register 1, Länge 4 Resiter lesen, als float zurückgeben

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

    TCPCloseSocket($iSock)

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

    TCPShutdown()

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

    Func _ModbusTCP_ReadValues($mainsocket, $FC, $iStart, $iNum, $sType)
    Local Static $TI = 0
    $TI += 1

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

    Local $iBytesToSend = 6

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

    _ModbusTCP_Send($mainsocket, "0x" & Hex($TI, 4) & "0000" & Hex($iBytesToSend, 4) & "01" & Hex($FC, 2) & Hex($iStart, 4) & Hex($iNum, 4))
    If @error Then Return SetError(1, 0, 0)

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

    Local $sRecv

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

    Do
    $sRecv = _ModbusTCP_Recv($mainsocket, 512)
    Until @error Or $sRecv <> ""
    If @error Then Return SetError(2, 0, 0)

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

    If Int(String(BinaryMid($sRecv, 1, 2))) <> $TI Then Return SetError(3, 0, 0)

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

    Local $iSize = 4 ; default

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

    Switch $sType
    Case "word"
    $iSize = 2
    Case "float"
    $iSize = 4
    Case "double"
    $iSize = 8
    EndSwitch

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

    Local $aRet[$iNum / ($iSize / 2)], $iTemp

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

    For $i = 0 To UBound($aRet) - 1
    $iTemp = BinaryMid($sRecv, 10 + $i * $iSize, $iSize)
    Switch $sType
    Case "word"
    $aRet[$i] = Int(String($iTemp))
    Case "float"
    $aRet[$i] = _WinAPI_IntToFloat(Int(String($iTemp)))
    Case "double"
    $aRet[$i] = _WinAPI_Int64ToDouble(Int(String($iTemp)))
    EndSwitch
    Next
    Return $aRet
    EndFunc ;==>_ModbusTCP_ReadValues

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

    Func _ModbusTCP_Send($mainsocket, $data)
    If $ModbusTCP_Debug_Send Then ConsoleWrite("_ModbusTCP_Send(" & $mainsocket & ", """ & $data & """)" & @CRLF)
    Local $Send = TCPSend($mainsocket, $data)
    Return SetError(@error, 0, $Send)
    EndFunc ;==>_ModbusTCP_Send

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

    Func _ModbusTCP_Recv($mainsocket, $maxlen = 256, $flag = 0)
    Local $sRecv = TCPRecv($mainsocket, $maxlen, $flag)
    Local $error = @error
    If $sRecv <> "" And $ModbusTCP_Debug_Recv Then ConsoleWrite("_ModbusTCP_Recv: " & $sRecv & @CRLF)
    Return SetError($error, 0, $sRecv)
    EndFunc ;==>_ModbusTCP_Recv

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _WinAPI_Int64ToDouble
    ; Description ...: Returns a 8 byte integer as a double value
    ; Syntax.........: _WinAPI_IntToFloat($iInt64)
    ; Parameters ....: $iInt64 - 8 byte Integer value (64 bit)
    ; Return values .: Success - 8 byte integer value as a double
    ; Author ........: funkey
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _WinAPI_Int64ToDouble($iInt64)
    Local $tInt64 = DllStructCreate("INT64")
    Local $tDouble = DllStructCreate("double", DllStructGetPtr($tInt64))
    DllStructSetData($tInt64, 1, $iInt64)
    Return DllStructGetData($tDouble, 1)
    EndFunc ;==>_WinAPI_Int64ToDouble

    [/autoit]
  • RegEx matches aus Text Datei löschen

    • funkey
    • 10. Dezember 2012 um 10:27

    StringRegExpReplace gibt den neuen String zurück. Diesen musst du dann auswerten oder in eine Datei schreiben.

  • RegEx matches aus Text Datei löschen

    • funkey
    • 10. Dezember 2012 um 09:06

    Du schreibst ja nicht auf $sDatei!

  • Alles gute Sprenger!

    • funkey
    • 9. Dezember 2012 um 09:12

    Alles Gute zum Geburtstag!!

    [url]http://www.youtube.com/watch?v=q4mJL-O5djg[/url]

  • ComboBox ausblenden

    • funkey
    • 7. Dezember 2012 um 19:44

    Das funktioniert nicht, weil du die UDF-Funktion zum Erstellen des Controls verwendest. Und die gibt das Handle des Controls zurück und ist generell nicht kompatibel zur eingebauten Funktion GUICtrlCreateCombo().

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™