Problem mit Rs232, "CommAPI" / "WinAPI"

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

    2 Mal editiert, zuletzt von Lyki (25. Februar 2014 um 22:44)