Cocoa AMSerialPort ObjC

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Cocoa AMSerialPort ObjC

    Ich schreibe gerade ein Tool mit dem AMSerialPort. Ich habe jetzt ein kleines Problem. Folgendes sollte im Program ablaufen: Ich schreibe ein String auf die Serielle Schnittstelle,
    was auch funktioniert. Es wird daraufhin ein String zurückgesendet, und dieser sollte dann ausgewertet werden. Was ich jetzt benötige , da ja am AMSerialPort die Daten
    im hintergrund gelesen werden, wenn ich einen String übermittle, habe ich hier Probleme die Daten die ich erhalte nicht vollständig übermittelt werden.

    Ich wurde vom Entwickler auf das waitForInput hingewiesen. Jedoch ist hier gar nichts dokumentiert. Die Funktion readUpToChar:'@' läuft, aber beim lesen
    werden zeichen abgeschnitten, was nicht sein darf. Das readInBackground kann auch nicht mit dieser Funktion readUpToChar verwendet werden.
    Also muss ich warten bis ich das Endzeichen erhalte, und darf dann erst den Datensatz auswerten.

    Es soll nach dem Synchron prinzip arbeiten.Es wird was geschrieben, ich warte bis die Antwort bis zum ende des String gelesen wurde, und dann erst dürfen die Daten ausgewertet werden.

    Hat jemand erfahrung mit dem AMSerialPort? Und das auch schon so realisiert?

    Wäre dankbar für vorschläge und Hilfe.
  • Ja, an das habe ich auch schon gedacht. Habe es auch Parallel als Source am Laufen, jedoch bekomme ich folgende compiler warnung.

    Method definition for 'sendRequest:' not found

    'requestWithDataToSend:userInfo:timeoutInterval:responseEvaluator:' is deprecated

    Kannst du mir hier einen Typ geben.
  • macsven schrieb:

    Ja, an das habe ich auch schon gedacht. Habe es auch Parallel als Source am Laufen, jedoch bekomme ich folgende compiler warnung.

    Method definition for 'sendRequest:' not found

    'requestWithDataToSend:userInfo:timeoutInterval:responseEvaluator:' is deprecated

    Kannst du mir hier einen Typ geben.
    Da sind doch Beispiele dabei und das sieht auf den ersten Blick gut gepflegt aus.

    'requestWithDataToSend:userInfo:timeoutInterval:responseEvaluator:' is deprecated - Weißt Du was deprecated bedeutet? - Du hast doch die Quellen! Da steht drinnen was Du statt dessen benutzen musst.
  • Die Beispiele habe ich mir angeschaut, jedoch komme ich damit irgendwie nicht klar.
    Ich habe noch eine 2. Variante mit ORSSerialPort:
    Hier habe ich das Problem, mit didReceive....
    es wird erkannt, wenn ein USB Port angeschlossen wird, oder entfernt wird. Jedoch beim empfang der Daten hapert es genauso.

    @manoh: Kannst du mir ein Besipiel zeigen wie das mit dem AMSerialPort genau funktioniert? Damit ich mal sehe wie das geht?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von macsven ()

  • Hallo manoh,

    Ich habe ja schon mit dem Entwickler von AMSerialPort schon unterhalten, der hat mir eine ganz andere Lösung zurückgesentet.
    Mit was kleinerem ist gut. Asyncron fuktioniert ja alles und das mit dem kleineren habe ich schon hinter mir, sonst würde ja alles andere auch nicht hinbekommen.
    Der Entwickler meinte dann ich solle mich doch mal in diversen Foren umschauen, einer weis es bestimmt.

    Ich muss aber die DATEN eben snychron ansprechen, das ist ja auch nicht schwierig. Und im übrigen, das Beispiel was bei AMSerialPort
    dabei ist, ist Asynchron, und mehr gibt es da auch nicht.

    Beim ORSSerialPort ist es das selbe. wenn ich es genau so mache wie es auf
    der Wikiseite ist, dann läuft es nicht, wenn es funktionieren würde , dann würde ich mich ja auch nicht melden, und wenn man dann solche antworten erhält, dann
    ist das erst recht nicht hilfreich.

    Ich lerne zwar jeden Tag dazu, aber ab und zu brauche ich einfach mal einen kleinen hinweis.Denn nur so lerne ich am besten.
    und eine richtige Antwort zu geben wenn man was nachfragt, ist sollte doch für dich kein Problem sein.Wenn du das nicht willst, dann musst du ja nur schreinen: ja oder nein. Oder hast du dich an das Programieren gemacht und auf anhieb alles gewusst?
  • Du must dich vom synchronen Denken verabschieden.
    Du schreibst deine Daten raus und im Delegate (ORSSerial) verarbeitest du die Antwort.
    Wenn noch nicht alle Daten angekommen sind speicherst du zwischen was da ist und beim nächsten Aufruf des Delegates machst du weiter.
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • Wieso muß das denn zwingend synchron laufen? Asynchron kannst Du das gleiche erreichen mit dem Vorteil, daß Dein Programm nicht blockiert. Und wenn das da funktioniert..?

    Ohne da jetzt mit großem Fachwissen aufwarten zu können, das klingt für mich danach, daß der Rückgabe-String des Devices schlichtweg zu groß ist, um in einem Rutsch überittelt zu werden, und das in Blöcke aufgesplittet wird. Vielleicht mußt Du nur in einer Schleife das Gerät pullen, bis tatsächlich das Ende erreicht ist... KA.

    Dein Tonfall @manoh gegenüber im letzen Post gefällt mir nicht. Niemand ist hier verpflichtet zu schreien oder vorgefertigte Lösungen zu präsentieren.
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • Jupp, wie @Chris sagt, eigentlich macht man sowas immer asynchron. Wenn du eine GUI programmierst, dann sollte das mit dem asynchronen auch nicht so das Problem sein.

    macsven schrieb:

    Es soll nach dem Synchron prinzip arbeiten.Es wird was geschrieben, ich warte bis die Antwort bis zum ende des String gelesen wurde, und dann erst dürfen die Daten ausgewertet werden.
    Das geht doch wunderbar im Delegate. Du speicherst dir die den Empfang zwischen und wenn alles da ist, dann verarbeitest Du alles. Oder Du machst das wie in der Readme beschrieben. Siehe Abschnitt ORSSerialPacketDescriptor dazu.
  • Das mit dem Empfangen funktioniert auch soweit, das habe ich im AMSerialPort am Laufen.
    Das Problem ist, das wenn ich die Daten sende bekomme ich auch was zurück.
    Das ganze sieht so aus: Es gibt ein prompt

    > GETADC(0) abgeschlossen wird das mit einem \n.

    danach muss ich warten bis das prompt wider erscheint

    > ADCWERT: 0F30

    will ich jetzt mehrere befehle nacheinander ausführen kommt die gegenseite durcheinander,
    und ich empfange statt der Daten, nur sowas:

    > ADCWERT:
    0F30>> ADCWERT:
    0FFF
    >

    Sorry wenn ich hier beleidigend war. Wazu sind denn Forums da, wenn man nicht mal Informationen bekommt, wie man ein Problem gelöst bekommt. Das ist aber auch nicht das erste mal gewesen.
  • macsven schrieb:

    Wazu sind denn Forums da, wenn man nicht mal Informationen bekommt, wie man ein Problem gelöst bekommt.

    Foren (nicht Forums!) sind dazu da, sich gegenseitig zu Themen auszutauschen. Ein Forum ist keine Q&A-Plattform, auf der man einseitig unentgeltlich fremde Leistungen einfordern kann...

    macsven schrieb:

    Danke für die paar Informationen, ich weis jetzt wie ich es hinbekomme.

    Das ist genau das, was ich unter Austausch meine. Du sagst: "Danke für den Fisch. Der stinkt, und ich erzähle Euch nicht, wie ich mein Problem gelöst habe."

    macsven schrieb:


    PS: Ich war dann das letzte mal hier.

    *Schulterzuck* Ich nehm's auf meine Kappe...

    Und wo ich schon mal dabei bin: Sieht Dein Code genauso leserlich und sprachlich korrekt aus, wie das, was Du in Deiner natürlichen Sprache schreibst..?
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?