CommMg.au3 Fehler

  • Hallo Leute,
    ich habe ein Problem mit der CommMG.au3 UDF. Ich möchte mein Arduino mit AutoIt verbinden. Das heißt, ich will, das Arduino einen String (in meinem Falle "Hallo CommMG.au3!") an den PC (mit AutoIt) sendet. Wie das Arduino Programm aussieht weiß ich. Falls es einer wissen will:

    Arduino Code
    Code
    void setup() //Einmal-Schleife
    {
        Serial.begin(9600); //Baudrate 9600
    }
    void loop() //Schleife
    {
        Serial.println("Hallo CommMG.au3!"); //Hallo CommMG.au3 schreiben
        delay(1000); //1 Sekunde warten
    }


    und mein AutoIt Code:

    AutoIt Code
    [autoit]


    #include "CommMG.au3"

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

    _CommSetport(20,0,9600,8,0,1,0) ;Mein COM-Port ist 20.

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

    While 1
    $instr = _CommGetString()
    ConsoleWrite($instr)
    WEnd

    [/autoit]


    Da sagt SciTE aber immer:

    Scite Error


    C:\Users\Jonathan Verbeek\Documents\test.au3(3,31) : ERROR: _CommSetPort() called with Const or expression on ByRef-param(s).
    _CommSetport(20,0,9600,8,0,1,0)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^
    D:\AutoIt3\Include\CommMG.au3(202,85) : REF: definition of _CommSetPort().
    Func _CommSetPort($iPort,ByRef $sErr,$iBaud=9600,$iBits=8,$iPar=0,$iStop=1,$iFlow=0)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Jonathan Verbeek\Documents\test.au3 - 1 error(s), 0 warning(s)
    !>18:16:59 AU3Check ended.rc:2


    Was ist mein Fehler?

    Danke

    MfG button421

    Meine fertigen Projekte:
    VirtualCash
    Monopoly Digital

    Daran arbeite ich gerade:
    Einem Skript, womit man ohne Programmierkentisse eigene Programme machen kann (habe ich selber früher gesucht :D ) Stand: ||||||||||||||||||||||||| 6%

    Einmal editiert, zuletzt von button421 (5. August 2011 um 22:39)

  • Der zweite Parameter, den du an die Funktion übergibts ist ByRef, das heißt die Funktion verändert den Wert, dafür muss natürlich eine Variable übergeben werden.

    [autoit]


    $var=0
    _CommSetport(20,$var,9600,8,0,1,0) ;Mein COM-Port ist 20.

    [/autoit]
  • Danke, aber die Konsole gibt jetzt immer das zurück:
    error in _commgetstring

    Was tun?

    Meine fertigen Projekte:
    VirtualCash
    Monopoly Digital

    Daran arbeite ich gerade:
    Einem Skript, womit man ohne Programmierkentisse eigene Programme machen kann (habe ich selber früher gesucht :D ) Stand: ||||||||||||||||||||||||| 6%

  • der Exit-Code ist 0, SciTE hat kein Error zu meckern, nur in der Konsole steht immer
    error in _comgetstring

    Meine fertigen Projekte:
    VirtualCash
    Monopoly Digital

    Daran arbeite ich gerade:
    Einem Skript, womit man ohne Programmierkentisse eigene Programme machen kann (habe ich selber früher gesucht :D ) Stand: ||||||||||||||||||||||||| 6%

  • Dann guck dir mal an, was passiert ist. Wenn du in Scite auf die Funktion bei dem Aufruf klickst und Strg+J drückst, springt Scite zu der Funktion.
    Da kannst du dann gucken, was passieren muss, damit die Funktion den Error Aus-/Zurück-gibt

  • Include-Beschreibung


    ;================================================================================
    ;
    ; Function Name: _CommGetstring()
    ; Description: Get whatever characters are available received by the port for the selected channel
    ; Parameters: none
    ; Returns: on success the string and @error is 0
    ; if input buffer empty then empty string returned
    ; on failure an empty string and @error set to the error set by DllCall
    ; Notes: Use GetLIne to get a whole line treminated by @CR or a defined character.
    ;=================================================================================

    Func _Commgetstring()
    ;get a string NB could be part of a line depending on what is in buffer
    Local $vDllAns
    ;$sStr1 = ''
    ;$vDllAns = DllCall($hDll,'str','GetByte')
    $vDllAns = DllCall($hDll,'str','GetString')

    If @error <> 0 Then
    SetError(1)
    ConsoleWrite('error in _commgetstring' & @CRLF)
    Return ''
    EndIf
    Return $vDllAns[0]
    EndFunc


    Wenn @error ungleich mit 0 ist.
    Daraus kann ich nicht viel schließen

    Meine fertigen Projekte:
    VirtualCash
    Monopoly Digital

    Daran arbeite ich gerade:
    Einem Skript, womit man ohne Programmierkentisse eigene Programme machen kann (habe ich selber früher gesucht :D ) Stand: ||||||||||||||||||||||||| 6%

    Einmal editiert, zuletzt von button421 (7. August 2011 um 18:22)

  • Habs probiert, der Exit Code ist nicht mehr 1 aber es steht immer noch error in _comgetstring

    Meine fertigen Projekte:
    VirtualCash
    Monopoly Digital

    Daran arbeite ich gerade:
    Einem Skript, womit man ohne Programmierkentisse eigene Programme machen kann (habe ich selber früher gesucht :D ) Stand: ||||||||||||||||||||||||| 6%