(Oder ich mache die Fehler) Hat jemand Erfahrung mit dem MSCOMM Control? Ich sende vom Mikrocontroller Daten über die serielle Schnittstelle und fange diese im Excel ab. InputLen = 1 Excel untersucht jedes Zeichen: Zeichen = ; ==> nächste Spalte Zeichen = Z ==> warte auf Zeilennr. Zeichen = E ==> Ende Port schließen Das HTerminal zeichnet die Daten einwandfrei auf: Z001;025;026;027;028;039:030; Z002;025;026;027;028;039:030; Z003;025;026;027;028;039:030; Z004;025;026;027;028;039:030;E Mein Problem ist, dass Excel in manchen Feldern nach dem Wert ein Symbol (kleines Quadrat) anhängt. Da der Wert im Excel weiterverwendet wird ist dieser dann unbrauchbar. Hat jemand eine Idee oder kennt eine Verbesserung???
Gast
#1132022
Der Fehler ist in Zeile 48 deines Programms... Das Symbol (kleines Quadrat) bedeutet, dass ein Wert empfangen wurde, zu dem es kein Zeichen gibt (z.B. Steuerzeichen). Erster Tip: Überprüfe mal deine Baudraten. Insbesondere die Fehlerquote vom µC (Taktfrequenz, Quarz ja/nein, ...)
Der Fehler beträgt 0,2%. (8Mhz ---> 9600Baud) Habe herausgefunden, wenn ich nach einem gesendten Zeichen ein delay_ms(5) mache, dann ignoriert Excel das Zeichen. Benutze folgende Einstellung im MSCOMM: AutoLoad 1 DTREnable True EOFEnable True Handshaking 0 InBufferSize 1024 InputLen 1 InputMode 0 NullDiscard False ParrityReplace ? Placement 2 RThreshold 1 RTSEnable False Settings 9600,n,8,1 Ich vermute den Fehler in der MSComm-Einstellung, da es im Terminal nie Probleme gibt.
Gast
#1132508
würdest du dein Macro hier reinstellen?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
Freue mich über Verbesserungsvorschläge!!!!
Gast
#1132679
Du hast RThreshold = 1, gesetzt d. h. es wird ein OnComm-Ereignis bei eintreffen eines Zeichens ausgelöst. Im OnComm-Ereignis holst du aber mehrfach Zeichen mit "RxInput = MSComm1.Input". Beim ersten "RxInput = MSComm1.Input" in deiner OnComm-Ereignis-Prozedur wird natürlich das Zeichen gelesen, das das Ereignis ausgelöst hat. Aber du kannst doch gar nicht sicher ein, dass zu den Zeitpunkten der weiteren "RxInput = MSComm1.Input" Zuweisungen auch schon weitere Zeichen im Eingangspuffer vorhanden sind. Du must vor dem Abholen der Zeichen prüfen, ob auch welche da sind und ggfls. warten, bis eines da ist. (Dabei ein timeout nicht vergessen, damit dein Programm nicht endloos wartet).
AHA! Das heißt, ich kann in einem OnComm Ereignis keine weitere Zeichen lesen?!? Wie kann ich nun prüfen ob weitere Zeichen vorhanden sind? Oder bietet sich eine ganz andere Lösung an?
Hallo, das gehört zwar nur bedingt hier hin, aber ich habe auch ein kleines Problem zum Thema. Ich habe Visiual Studio.net 2003 installiert und MS Excel 2003. Ich habe aber diese mscomm.dll nicht. Wo finde ich die, oder ist die da gar nicht dabei? Vielen Dank Paul
Gast
#1132823
@Burns B. Entweder du stellst vor jeder "Rx = MSComm1.Input" Zuweisung sicher, dass auch mindestens ein Zeichen da ist
1 | |
2 | |
3 | |
4 | |
Oder (falls du vorher weisst, wieviele Zeichen kommen) du wartest am Anfang deiner Ereignisprozedur, bis alle Zeichen da sind
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
Gast
#1132828
@Paul P. Du kannst das MSComm-Steuerelement irgendwo als Komponente hinzufügen. Such mal in der Hilfe nach Komponenten. (War jedenfalls unter VB6 noch so, mit .NET hab ich nix mehr/noch nichts am Hut).
Hmm, Hab jetzt die erste Variante probiert, aber jetzt geht die Variable ZEILE von 0 - 9 und fängt wieder bei 0 an. Könnte es funktionieren, wenn ich RThreshold = 4 setzte und die kommenden Daten so ändere, dass immer 4 Zeichen zusammengehören? Zeile Nr. Werte Trennzeichen + 3 Ziffen Ende der Übertragung Z001 ;100 ;101 ;102 ;103 ;104 ;105 ;EEE Die Lösung sollte so einfach wie möglich sein.
Gast
#1132915
Vorschlag, wenn jede Zeile 29 Zeichen hat: (VB ist schon Jahre her....)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
Funktioniert nur, wenn ich DoEvents in die While-Schleife weglasse. Ansonsten bekomme ich einen BLUESCREEN (verwende RS232-Converter). Nun hab ich folgendes Problem: Wenn z.B. der Mikrocontroller die Zeile nicht vollständig ausgibt, oder während der Übertragung das Kabel ausgesteckt wird, wartet Excel (und hängt sich auf). Da hilft mir das Timeout auch nicht weiter. ??? Da alle Werte sehr wichtig sind, werde ich ein Zeichen an dem MC zurücksenden, wenn eine Zeile erfolgreich Übertragen wurde. Danach können die Werte aus dem EEPROM gelöscht werden.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.