Beim Starten deiner .exe-Datei gibts nen Fehler: Invalid Portnumber. Mein COM-Port ist COM1.
Druckbare Version
Beim Starten deiner .exe-Datei gibts nen Fehler: Invalid Portnumber. Mein COM-Port ist COM1.
bekommst du nur eine Fehlermeldung, oder kannst du das Programm gar nicht starten? Eigentlich gibts in dem Programm extra einen Button mit dem du auf Com1 umstellen kannst, aber falls das Programm gar nicht startet, weil du keinen Com2 hast nutzt der Button wohl nix ;-)Zitat:
Beim Starten deiner .exe-Datei gibts nen Fehler: Invalid Portnumber. Mein COM-Port ist COM1.
Ich mach mal eine neue Version mit Com1.
@jagdfalke
HIER ist die .exe mit Com1 als Port.
Also: Deine .exe-Datei funktioniert. Liegt aber nicht daran, dass du irgendwas anders gemacht hast: Wenn ich alles in eine Memo-Box schreiben lasse:
memo1.text := memo1.text + Str;
dann funktionierts genauso wie mit deinem Program. Wenn ich aber
memo1.text := Str;
schreibe bekomme ich immer das, was er abschneidet.
Also nochmal verständlich:
Bascom-Code:
Ausgabe, die immer in der Listbox kommt:Code:$crystal = 8000000 'Quarzfrequenz
$baud = 19200
Mainloop:
Print "hallohallo";
Wait 1
Goto Mainloop
end
Ausgabe in Memo bei "memo1.text := memo1.text + Str;" :Zitat:
halloha
lo
halloha
lo
usw.
Ausgabe in Memo bei "memo1.text := Str;":Zitat:
hallohallohallohallohallohallohallohallo usw.
Es kommt wirklich nur "lo" raus. Das heißt für mich, dass der String "hallohallo" wirklich in 2 Schritten übertragen wird: erst "halloha", dann "lo".Zitat:
lo
@recycle:
Schick mir doch mal dasselbe Program mit eine Listbox, also:
listbox1.additem Str
Mal schaun ob dann dasseble rauskommt wie bei mir
mfg jagdfalke
PS: Schaut doch mal in meine Galerie. Ich hab schonmal was gebaut. Ich finde es ist mir sehr gut gelungen.
@jagdfalke
Ich habs mal mit der Listbox ausprobiert. Du hast Recht, die Daten kommen bei mir auch in Blöcken zu 8 Zeichen an.Zitat:
Schick mir doch mal dasselbe Program mit eine Listbox, also:
listbox1.additem Str
Mal schaun ob dann dasseble rauskommt wie bei mir
Da die Daten in einem normalen Terminal-Programm unzerstückelt ankommen, ist das entweder normal für eine serielle Übertragung, oder es liegt am mscomm Objekt.
Wenn du die Daten unbedingt in einer Listbox ausgeben willst, kannst du sie ja erst solange bis ein Zeilenumbruch kommt in einem String cachen und den dann in die Listboc einfügen.
merkwürdig, warum schaust du dir den output nicht einach an, die darstellung in den boxen ist nicht ascii. du kannst daran auch nichts machen, ausser den output selber zu formatieren. einen zeilenumbruch brauchst du dann aber immernoch.
Ok, das ist natürlich auch ne Möglichkeit. Am MSComm liegts nicht, da die COM-Port Komponente für Delphi genau gleich reagiert. Na wenigstens haben wir das jetzt geklärt. Kannst du dir mal das Input-Problem anschaun. Wieder gilt hier, dass VB und Delphi die gleichen Reaktionen hervorrufen. Es scheint sich aber eher um ein Bascom-Problem zu handeln, da es ja um den INPUT-Befehl geht.
mfg
jagdfalke
OK, dann ist es vermutlich ganz normal, denn in einem Terminal-Programm kommen die Strings ja unzerstückelt an.Zitat:
Am MSComm liegts nicht, da die COM-Port Komponente für Delphi genau gleich reagiert. Na wenigstens haben wir das jetzt geklärt.
In deinem Beispiel liest du den String mit Input ein und gibst ihn sofort mit Print wieder aus. Wie unterscheidest du denn da, ob der String schon beim Einlesen in Bascom oder erst nach dem Print beim Einlesen durch das mscomm-Objekt zerstückelt wird?Zitat:
Kannst du dir mal das Input-Problem anschaun. Wieder gilt hier, dass VB und Delphi die gleichen Reaktionen hervorrufen. Es scheint sich aber eher um ein Bascom-Problem zu handeln, da es ja um den INPUT-Befehl geht.
Ausserdem hast du Serial_in als Word definiert und der Datentyp Word ist eine Zahl zwischen 0 und 65535.
Ich hab geschrieben, dass es sich hier um ein anderes Problem handelt. Das zuerstückeln ist also völlig wurscht. Das Problem liegt darin, dass der Controller nach 3 empfangenen Strings keine weiteren mehr annimmt. Es sieht so aus, als ob er sich aufgehängt hat. Kannst ja bei dir mal ausprobieren. Das passiert aber wieder nur dann, wenn der String über VB bzw. Delphi geschickt wurde. Im Terminal kann ich so oft Zeichenketten schicken wie ich will und sie kommen immer wieder zurück. Ohne Probleme.
mfg
jagdfalke
Ist bei mir ähnlich.Zitat:
Das Problem liegt darin, dass der Controller nach 3 empfangenen Strings keine weiteren mehr annimmt. Es sieht so aus, als ob er sich aufgehängt hat. Kannst ja bei dir mal ausprobieren. Das passiert aber wieder nur dann, wenn der String über VB bzw. Delphi geschickt wurde.
Ich habe Serial_in als String deklariert und dabei muss man in Bascom angeben, wieviel Zeichen der String hat.
Ich kann dann genau soviele Zeichen senden wie der String aufnehmen kann.
Ob ich diese Anzahl auf einmal sende oder auf X Sendungen aufteile ist aber egal. Wenn ich den String 200 Zeichen gross mache kann ich auch 20 mal 10 Zeichen senden.
Sieht mir danach aus, als würde der Input-Befehl alle neuen Zeichen hinten an den String anhängen, anstatt den alten Inhalt zu überschreiben.
Da es mit einem nomalen Terminal-Programm funktioniert, liegt das aber vermutlich auch nicht an Controller und Bascom Programm.
Vielleicht muss man bei dem mscomm Objekt noch manuell irgendein Zeichen mitsenden, dass der Gegenseite sagt, wo eine einzelne Sendung zu ende ist.