COM Objekt für RS232 Kommunikation

  • Vor _ReceiveStringWait wartest Du jeweils 500ms.
    Bist Du sicher, dass Du den Buffer auf der seriellen Schnittstelle aktiviert hast? (Standardmässig ist er aktiviert)

    Sonst wird die Antwort nicht zwischengespeichert, die über die serielle Schnittstelle reinkommt.
    Reicht die Wartezeit von 800ms?

  • Hallo nochmals!

    Aber Du weisst schon, dass Du mit Deiner MsgBox

    [autoit]


    MsgBox(0, string(_ReceiveStringWait($ComPort, $MinBufferSize, $MaxWaitTime)), 100, 100)

    [/autoit]


    Den Empfangenen String in die Titelzeile der Messagebox schreibst?
    In den eigentlichen Textkörper schreibst Du 100 rein!
    Und das Timeout ist ebenfalls 100.

    Ist das wirklich so gewollt?

  • Stimmt, du hast recht, hab mich dort verschrieben und habe das nun abgeändert, war auch schon leicht verwundert woher die 100 immer kommt :pinch:
    Aber weiterhin gibt er mir kein Antworttelegramm aus.
    Stimmt irgendwas an der Syntax nicht?

    Normalerweise müsste das Antworttelegramm beim einschalten und ausschalten des Lasers genau dem Befehl der Eingabe entsprechen.
    Im späteren Verlauf möchte ich damit aber Distanzen messen und dafür muss ich dann später die Antwort auswerten.

    Was du nun genau meinst mit dem Buffer versteh ich nicht ganz ?(
    Die Ansprechzeit des Sensors beträgt aber 1250 Mikrosekunden.

  • Nach dem _SendSerialString hast Du ein Sleep.
    Was passiert, wenn Du das entfernst?

    Denn mit dem _ReceiveStringWait wartest Du ja sowieso, bis die Antwort kommt. (Das Timeout muss natürlich genug lange inkl. Reserve sein!)

  • Nach dem _SendSerialString hast Du ein Sleep.
    Was passiert, wenn Du das entfernst?

    Denn mit dem _ReceiveStringWait wartest Du ja sowieso, bis die Antwort kommt. (Das Timeout muss natürlich genug lange inkl. Reserve sein!)


    Habe den sleep entfernt und die Wartezeit mal auf 8 Sekunden erhöht (8000), jedoch ändert das nichts daran, dass ich keinen String erhalte.

  • Ach ja, noch einen Fehler gefunden:
    Bei _ReceiveStringWait muss als $ComSerialPort der Rückgabewert von _OpenCOMPort eingetragen werden. Nicht der COM-Port selber!


    Das wars, danke hat sich hiermit nun erledigt! :D
    Ich danke dir vielmals! :)
    Und super lieben Dank für die superschnellen Antworten!

  • Hiho
    Ich hab mal deine UDF ausprobiert.
    Allgemein hat alles gut geklappt, als ich, geteste habe. Dann hatte ich den PC am nächsten Tag angemacht und es ging nicht. ich habe komische Antworten erhalten....
    Dann hab ich ein anderes Programm benutzt, um das Gerät anzusprechen und dann wieder meins und es ging.
    Hast du pauschal mal ne Ahnung wie das sein kann?


    EDIT:
    hab den Fehler gefunden. Lag am Stopbit.... hab 1.5 gehabt nicht 1 -.-

    2 Mal editiert, zuletzt von Kijan (8. Dezember 2011 um 06:55)

  • Hey,

    ich nutze jetzt auch mal deine UDF.
    Ich hab ein seltsames Verhalten mit dem Stopbit. Im Hyperterminal verwende ich 1, da klappt es. Da gibts zur Auswahl auch nur 1, 1.5 und 2.
    Mit der UDF klappt es aber nicht mit 1 sondern nur mit 0, 1.5 und 2.
    Weißt du woran das liegt?

  • Hallo Veronesi,

    vielen Dank für für deine super Arbeit. Sie hat mir in den letzten Wochen viel weitergeholfen.
    Evtl. ist es für dich interessant zu wissen, dass ich deine Vorlage aufgegriffen und fortgeführt habe.
    Veröffentlicht habe ich das ganze hier: http://www.autoitscript.com/wiki/CommAPI
    Wenn du mal wieder mit seriellen Ports arbeiten musst, kannst du ja darauf zurückgreifen.
    Und vielleicht fallen dir ja noch ein paar neue Funktionen zum Erweitern ein. ;)

    Viele Grüße
    TheRealHanuta

    PS: Ich bin mir durchaus bewusst, dass ich einen alten Thread wiederbelebe. Da dieser Thread bei der Suche aber immer oben mit dabei ist, ist es besser ihn zu ergänzen als einen neuen zu öffnen.