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

Beiträge von Lyki

  • Problem mit Rs232, "CommAPI" / "WinAPI"

    • Lyki
    • 21. Februar 2014 um 08:36

    Hi

    mein Srcipt soll eine RS232 Verbindung erstellen, das macht sie leider nur wenn ich vorher Putty auf dem jeweiligen Port einmal geöffnet habe. Danach kann ich immer zwischen den Ports hin und her schalten.

    hätte vielleicht jemand eine Idee voran das liegt, dass bei meinem Script keine verbinden ensteht. Wird vielleicht die .dll nicht geladen?


    hier ein Teil von meinem Script


    Spoiler anzeigen

    #include "CommInterface.au3"
    #include <MsgBoxConstants.au3>
    #include <WinAPI.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <array.au3>
    #include <string.au3>
    #Include <File.au3>
    #include "CommAPI.au3"

    $LabelNewTxt = ""

    $aRes = _GetGlobalResolution()

    $hight = $aRes[Ubound($aRes)-1] - $aRes[Ubound($aRes)-1] ; Gui an Monitor anpassen
    $wight = $aRes[Ubound($aRes)-2] - $aRes[Ubound($aRes)-2]
    $hightwin = $aRes[Ubound($aRes)-1] - 170
    $wightwin = $aRes[Ubound($aRes)-2] - 10
    $Buttonhight = 150 * $aRes[Ubound($aRes)-1] / 900
    $Buttonwight = 200 * $aRes[Ubound($aRes)-2] / 1440
    Opt("GUIOnEventMode", 1);Die Gui auf den OnEventMode umschalten

    $Form1 = GUICreate("Master Blaster V 2.00", int($wightwin),Int ($hightwin),Int($wight),Int($hight))

    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUISetFont(22)
    GUICtrlCreateLabel("TC-SIA Steuerung über RS-232", 20, 10, 500, 40)
    GUISetFont(10)

    $sedit=GUICtrlCreateEdit ("First line"& @CRLF, 4*$Buttonwight + $Buttonwight/2 + 10,10,$wightwin - (4*$Buttonwight + $Buttonwight/2+10) ,$hightwin-20,$ES_AUTOVSCROLL+$WS_VSCROLL)
    ;GUICtrlSetOnEvent($myedit,"$LOG")

    $Btn1 = GUICtrlCreateButton("ChargeH", 20, $Buttonhight + 130, $Buttonwight, $Buttonhight)
    GUICtrlSetOnEvent($Btn1,"ChargeH") ; Hier wird dem Button die Funktion "Button1" zugewiesen. Das gleiche macht man dann auch mit dem zweiten Button.....

    GUICtrlCreateLabel("COM-Port Auswählen:", 20, $hightwin-60, 200, 25)
    $AuswahlCOM = GUICtrlCreateCombo("", 20, $hightwin-40, 100, 25)
    GUICtrlSetOnEvent($AuswahlCOM,"PortNeu")
    GUICtrlSetData(-1, " COM 1| COM 2| COM 3| COM 4| COM 5| COM 6| COM 7| COM 8")

    GUISetState()

    $iP = 4
    Global Const $iBaud = 115200
    Global Const $iParity = 0
    Global Const $iByteSize = 8
    Global Const $iStopBits = 1

    If FileExists("Port.txt") Then FileDelete("Port.txt") ;Wenn die Datei vorhanden ist wird sie gelöscht!!!
    _FileCreate("Port.txt") ;Erstellt die Datei
    $hFile = _CommAPI_OpenCOMPort($iP, $iBaud, $iParity, $iByteSize, $iStopBits)

    Func PortNeu() ;Neuen Com-Port wählen
    _CommAPI_ClosePort($hFile)
    If @error Then Return SetError(@error, @extended, @ScriptLineNumber)
    $iP = StringRight(GUICtrlRead($AuswahlCOM),1)
    filewrite("Port.txt", $iP)
    global $hFile = _CommAPI_OpenCOMPort($iP, $iBaud, $iParity, $iByteSize, $iStopBits)
    EndFunc

    While True
    sleep(100)
    If Not _CommAPI_WaitCommEvent($hFile) = "0" Then ;Antwort in Edit schreiben
    $sResult = _CommAPI_ReceiveData($hFile)
    _GUICtrlEdit_AppendText($sedit, $sResult)
    EndIf
    WEnd

    Func ChargeH()
    _CommAPI_TransmitData($hFile, "$C00:chargeh:00" & @CRLF); Befehl senden
    _GUICtrlEdit_AppendText($sedit, "$C00:chargeh:00" & @CRLF)
    EndFunc
    Func _GetGlobalResolution(); Auslesen der Monitorgröße
    Local $aRes[4], $hWindow, $stRET
    $hWindow = _WinAPI_GetDesktopWindow()
    $stRET = _WinAPI_GetWindowPlacement($hWindow)
    If Not @error Then
    $aRes[0] = DllStructGetData($stRET, 'rcNormalPosition', 1) ; left
    $aRes[1] = DllStructGetData($stRET, 'rcNormalPosition', 2) ; top
    $aRes[2] = DllStructGetData($stRET, 'rcNormalPosition', 3) ; right
    $aRes[3] = DllStructGetData($stRET, 'rcNormalPosition', 4) ; bottom
    Return $aRes
    Else
    Return SetError(1, 0, 0)
    EndIf
    EndFunc ;==>_GetGlobalResolution

    Func CLOSEClicked() ;Damit man auch das Fenster wieder schliessen kann, da im OnEventMode ohne dies nix passiert.
    MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...")
    Exit
    EndFunc


    schon Mal Danke im Voraus

    Lyki


    edit: Problem gelöst. Erst nen _CommAPI_CreateModeString verwenden dann geht es.

  • "CommAPI_ReceiveData" auswerten und in TXT schreiben

    • Lyki
    • 18. Februar 2014 um 13:25

    Hi

    danke für die Antwort, hab was gefunden "CommAPI". Die kommunikation über RS232 funktoniert soweit, ich sende einen Befehl und erhalte eine Anwort.

    Und hier mein Problem, kann mir einer erklären wie ich den Buffer oder die erhaltenen Daten richtig auswertet.

    1.) Ich würde gern selbst bestimmen wie viele Zeilen der Anwort ich auslesen möchte. Meist bekomm ich nur ein Fragment oder die Ersten 1-3 Zeilen.

    2.) Oder die komplette kommunikation in einer TXT aufzeichnen?


    Spoiler anzeigen

    #include "CommInterface.au3"
    #include <array.au3>
    #include <string.au3>
    #include <MsgBoxConstants.au3>


    Main()

    Func Main()
    Local $iErrorLine = Example()
    If @extended Then
    MsgBox(32, "Error", _WinAPI_GetLastErrorMessage())
    ElseIf @error Then
    MsgBox(32, "Error", "Error in line " & $iErrorLine)
    EndIf
    EndFunc

    Func Example()
    Local Const $iPort = 4
    Local Const $iBaud = 115200
    Local Const $iParity = 0
    Local Const $iByteSize = 8
    Local Const $iStopBits = 1
    Local Const $sCommand = "$C00:chargeh:00" & @CRLF

    Local $hFile = _CommAPI_OpenCOMPort($iPort, $iBaud, $iParity, $iByteSize, $iStopBits)
    If @error Then Return SetError(@error, @extended, @ScriptLineNumber)

    _CommAPI_ClearCommError($hFile)
    If @error Then Return SetError(@error, @extended, @ScriptLineNumber)

    _CommAPI_PurgeComm($hFile, 15)
    If @error Then Return SetError(@error, @extended, @ScriptLineNumber)

    _CommAPI_TransmitData($hFile, $sCommand)
    If @error Then Return SetError(@error, @extended, @ScriptLineNumber)

    Local $sResult = _CommAPI_ReceiveData($hFile, 100)
    If @error Then Return SetError(@error, @extended, @ScriptLineNumber)

    _CommAPI_ClosePort($hFile)
    If @error Then Return SetError(@error, @extended, @ScriptLineNumber)

    MsgBox(64, "Result", $sResult)
    EndFunc


    schon Mal Danke im Voraus

    Lyki

  • SLider abfragen im "OnEventMode"

    • Lyki
    • 17. Februar 2014 um 15:52

    danke Schnitzel


    hab ne Lösung gefunden

  • "CommAPI_ReceiveData" auswerten und in TXT schreiben

    • Lyki
    • 17. Februar 2014 um 15:08

    Hi,

    ich versuche ein Rs232 Schnittstelle zum Laufen zu bekommen (ohne Putty) und dabei bin ich auf folgenden Beitrag gestossen

    https://autoit.de/index.php?page…s232#post354655

    leider kann ich die Include rs232.au3 nicht finden kann mir da jemand weiterhelfen.


    schon Mal Danke im Voraus

    Lyki

  • SLider abfragen im "OnEventMode"

    • Lyki
    • 17. Februar 2014 um 13:23

    Hi,

    ich versuche einen Wert von einem Slider abzufragen, nachdem er eingestellt wurde. Danach soll er in einem Input angezeigt werden (input weil auch direkt Eingabe möglich sein soll).

    Desweiteren soll der Wert auch noch in der Function LED1 bzw. LED2 verwendet werden.

    In einem test von mir Funktioniert es, aber wen ich es mein Script einbau geht es nicht. In meinem Test benutzte ich kein "OnEventMode".

    Hat vielleicht jemand eine Idee wo mein Fehler liegt?


    Spoiler anzeigen

    #include <EditConstants.au3>
    #include <WinAPI.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <array.au3>
    #include <string.au3>


    Opt("GUIOnEventMode", 1);Die Gui auf den OnEventMode umschalten

    $Form1 = GUICreate("Master Blaster V x.x", 900, 600, 0, 0)
    ;GUICreate("Master Blaster V x.x", 900, 600, 0, 0)


    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUISetFont(22)
    GUICtrlCreateLabel("eeeee", 20, 10, 500, 40)
    GUISetFont(10)

    $Btn8 = GUICtrlCreateButton("LED1 ON", 460, 440, 95, 70)
    GUICtrlSetOnEvent($Btn8,"LED1")
    $Btn9 = GUICtrlCreateButton("LED2 ON", 460, 520, 95, 70)
    GUICtrlSetOnEvent($Btn9,"LED2")


    $slider1 = GUICtrlCreateSlider (680,440,200,30)
    GUICtrlSetLimit(-1,255,0) ; change min/max value
    ;$Slider1value = GUICtrlCreateLabel("LED 1 OFF", 720, 480, 236, 25)
    $Slider1value = GUICtrlCreateinput("", 680, 480, 200, 25)
    $slider2 = GUICtrlCreateSlider (680,520,200,30)
    GUICtrlSetLimit(-1,255,0) ; change min/max value
    ;$Slider2value = GUICtrlCreateLabel("LED 2 OFF", 720, 560, 236, 25)
    $Slider2value = GUICtrlCreateinput("", 680, 560, 200, 25)

    GUISetState()
    ;~ GUICtrlSetData($slider1,45) ; set cursor
    ;~ GUICtrlSetData($slider2,45) ; set cursor

    While True
    sleep(100)
    WEnd


    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $slider1
    GUICtrlSetData($Slider1value, GUICtrlRead($slider1))
    Case $Slider1value
    GuiCtrlSetData($slider1, GUICtrlRead($Slider1value))
    GUICtrlSetData($Slider1value, GUICtrlRead($slider1)) ; für ungültige Werte
    Case $slider2
    GUICtrlSetData($Slider2value, GUICtrlRead($slider2))
    Case $Slider2value
    GuiCtrlSetData($slider2, GUICtrlRead($Slider2value))
    GUICtrlSetData($Slider2value, GUICtrlRead($slider2)) ; für ungültige Werte

    EndSwitch
    sleep(100)

    WEnd


    Func LED1()
    $slider1neu = hex(GUICtrlRead($slider1),2)
    GUICtrlSetData($Slider1value, $slider1neu & " [min = 00 max = FF]")
    WinActivate(" - KiTTY","")
    send("$c00:LED0" & $slider1neu & ":00")
    send("{ENTER}")
    sleep(300)
    EndFunc
    Func LED2()
    $slider2neu = hex(GUICtrlRead($slider2),2)
    GUICtrlSetData($Slider2value, $slider2neu & " [min = 00 max = FF]")
    WinActivate(" - KiTTY","")
    send("$c00:LED1" & $slider2neu & ":00")
    send("{ENTER}")
    EndFunc


    Func CLOSEClicked() ;Damit man auch das Fenster wieder schliessen kann, da im OnEventMode ohne dies nix passiert.
    MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...")
    winclose(" - KiTTY")
    WinActivate("KiTTY Exit Confirmation")
    send("{ENTER}")
    Exit
    EndFunc


    schon Mal Danke im Voraus

    Lyki

  • Kitty/Putty Fenster auslesen

    • Lyki
    • 13. Februar 2014 um 15:08

    Super danke für die schnelle hilfe.

    Jetzt läuft erstmal :) alles

  • Kitty/Putty Fenster auslesen

    • Lyki
    • 13. Februar 2014 um 14:02

    hier mein gekürztes Script.

    ich würde gern den gefunden Wert "aWert" im Label1 ausgeben.


    Spoiler anzeigen

    #include <StaticConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    #include <array.au3>
    #include <string.au3>


    Opt("GUIOnEventMode", 1);Die Gui auf den OnEventMode umschalten


    $Form1 = GUICreate("Form1", 1000, 438, 192, 124)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")


    $Ipt1 = GUICtrlCreateInput("", 16, 344, 233, 21)
    GUICtrlSetOnEvent($Ipt1,"NewCommand")

    $Label1 = GUICtrlCreateLabel("", 304, 344, 236, 25)

    GUISetState()


    While True

    WEnd


    Func SW()
    $sText = FileRead("C:\kitty_log.txt")
    $aWert = _StringBetween($sText,'show','c')

    ;GUICtrlSetData($aWert)
    ;if IsArray($aWert) then GuiCtrlSetData($aWert[0],$Label1)
    EndFunc


    Func NewCommand()
    WinActivate(" - KiTTY","")
    send(GUICtrlRead($Ipt1))
    send("{ENTER}")
    EndFunc


    Func CLOSEClicked() ;Damit man auch das Fenster wieder schliessen kann, da im OnEventMode ohne dies nix passiert.
    MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...")
    Exit
    EndFunc


    Danke für deine Hilfe

    Lyki

  • Kitty/Putty Fenster auslesen

    • Lyki
    • 13. Februar 2014 um 13:21

    Hi

    hab leider noch ein Problem. Ich suche in einem Text nach einem String diesen finde ich auch und kann auch mit msgbox ausgeben.

    Aber ich würde gern den String in meiner Gui ausgeben, z.B. über ein Label. Könnte mir vielleicht jemand eine Lösung zeigen?

    Wie ich den das gefundene Array "aWert" ausgeben kann, am besten immer die letzte Zeile aus dem Array.

    Ich hatte es mit GUICtrlSetData probiert aber das hat nicht Funktioniert.


    Code
    $sText = FileRead("C:\kitty_log.txt") 
    $aWert = _StringBetween($sText,'main','c')


    P.S. Oder wäre es besser einen neuen Beitrag zu eröffnen?

    schon Mal Danke im Voraus

    Lyki

  • Kitty/Putty Fenster auslesen

    • Lyki
    • 12. Februar 2014 um 22:00

    Danke für die schnellen Antworten. Ich werde mal beide Ideen ausprobieren.

  • Kitty/Putty Fenster auslesen

    • Lyki
    • 12. Februar 2014 um 14:11

    Hallo zusammen,

    hab Gestern Autoit gefunden und find es Interessant. Leider bin ich ein Software Anfänger.

    Ich hab ein Problem beim auslesen des offenen Kitty/Putty Fensters.

    Ich steuere über eine RS232-Schnittstelle einen Controller, nun möchte gern die Debug-Infos und die Antworten auf meine Kommandos auswerten.

    Bis jetzt kann ich:

    1. Kitty öffnen

    2. Einstellungen vornehmen

    3. Verbindung erstellen

    4. Kommandos senden

    Nun meine Frage, gibt es eine Möglichkeit den Text aus dem offenen Fenster auszulesen oder diesen in eine TXT zu schreiben und den auszuwerten.

    schon Mal Danke im Voraus

    Lyki

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™