Kommunikationsproblem mit ct'lab und ADA-IO Platine

Hier werden Themen zur Programmierung des Port-Motherboards ADA-IO und seiner Tochterplatinen IO8-32, Optoschaltstufe, AD16-8 und DA12-8 diskutiert.
Antworten
Hans-Günther
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 5
Registriert: 20.05.2011, 18:57

Kommunikationsproblem mit ct'lab und ADA-IO Platine

Beitrag von Hans-Günther »

Hallo zusammen,

ich hoffe ihr könnt mir helfen.

Mein ct'lab ist via USB mit meinem Windows 7 Laptop verbunden. Auf dem Laptop läuft eine in Qt geschriebene Software, welche mit einem Takt von 100ms die Werte vom ct'lab ausliest und neue Parameter zum ct'lab überträgt.

Das Ganze funktioniert grundsätzlich wohl und die Befehle werden die meiste Zeit korrekt abgearbeitet. Mein Problem tritt nur sporadisch und unvorhersehbar auf und äußert sich durch falsche Daten an den Mess- und Regelleitungen. So springt ein Bit plötzlich grundlos auf 1, am DA Wandler liegen statt 3 für einen ganz kurzen Moment 10 Volt an und beim Aufzeichnen des AD Wandlers habe ich im Graphen eine unerklärliche Spitze.

Ich habe schon mehrere Rechner und ct'Lab Platinen getestet und würde einen Hardware Fehler demnach ausschließen.

Beim virtuellen COM Port kann man Einstellungen vornehmen. Ich glaube dass das geschilderte Verhalten weniger häufig autritt, wenn ich dort kleinere Werte bei Wartezeit und Größe der übertragenen Dateien einstelle. Leider lassen sich die Probleme aber auch damit nicht komplett abstellen.

Ich kommuniziere ansonsten mit den Einstellungen 38400 8n1.

Hat vielleicht noch jemand einen Tipp für mich, wie die Kommunikation stabiler laufen könnte?

Danke und Gruß
Hans-Günther

PS: Ich liefere gerne weitere Infos zu, bitte einfach mitteilen, was benötigt wird!
Dateianhänge
Einstellung COM Port
Einstellung COM Port
ctlab.png (61.77 KiB) 3720 mal betrachtet
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: Kommunikationsproblem mit ct'lab und ADA-IO Platine

Beitrag von psclab38 »

Hallo Hans-Günther,

ohne Deine Software zu kennen vermute ich Pufferüberlauf im Modul.
Hast Du die Pascal- oder die C-Firmware? Verwendest Du die Checksummen?

In der C-Firmwaren habe ich eine Ausgabe eingebaut, wenn die Checksumme nicht paßt: So ungefähr:

Code: Alles auswählen

#1:Command was "1:idn$00" CS:68
#1:255=7 [CHKSUM]
Es wird das Kommando ausgegeben, so wie es im Puffer drinstand und die berechnete Checksumme.

Es kommt immer drauf an, was das Modul grade macht und dann kann ein Kommando schon mal etwas länger dauern. Wenn Du dann bei den Abfragen einfach senden solltest ohne die Antwort abzuwarten, dann läuft da schon mal was über. Der Puffer hat nur 128 Zeichen und der Chip kein FIFO.

Grüße
Paul
Hans-Günther
träumt vom eigenen c't-Lab
träumt vom eigenen c't-Lab
Beiträge: 5
Registriert: 20.05.2011, 18:57

Re: Kommunikationsproblem mit ct'lab und ADA-IO Platine

Beitrag von Hans-Günther »

Vielen Dank für deine Antwort!

Ich verwende keine Checksummen. Werde als Nächstes gleich mal nachschauen, wie ich die einschalte und damit arbeite :oops:

Das mit dem "kleinen" Puffer ist auch sehr interessant.

Ich habe testweise mal ein WaitForBytesWritten() in meinem Code ergänzt. Die Applikation friert dadurch ganz kurz ein aber die sporadischen Fehlsignale bleiben.

Hier mal Fragmente von meinem Code. Ich lese die Werte vom Port und schicke dann direkt eine große Datei ans ct'lab, in etwa so:

void myProgram::readPort(){
QByteArray data;
data = serial->readAll();
writePort();
}

void myProgram::writePort(){
QByteArray data;
data = "0:ALL0?";
data = data.append(CR);
data = data.append("0:VAL31?");
data = data.append(CR);
data = data.append(0:VAL20=0.5);
data = data.append(CR);
data = data.append(0:VAL31=6);
data = data.append(CR);
data = data.append(0:VAL30=160);
data = data.append(CR);
serial->write(data);
}

Alle 100 ms wird readPort aufgerufen. Ist das vielleicht der ganz falsche Ansatz?
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Re: Kommunikationsproblem mit ct'lab und ADA-IO Platine

Beitrag von psclab38 »

Hans-Günther hat geschrieben:Alle 100 ms wird readPort aufgerufen. Ist das vielleicht der ganz falsche Ansatz?
Wenn ich das richtig sehe, dann liest readPort die empfangenen Daten aus dem PC-Empfangspuffer ein und schickt dann die ganze Liste der Kommandos (sind so 50 Byte) auf einen Schwung raus, für die nächste Abfrage?

Verhalten sich Pascal- und C-Firmware gleich?
Benutzeravatar
Bart
kann c't-Lab-Bausätze löten
kann c't-Lab-Bausätze löten
Beiträge: 45
Registriert: 11.01.2014, 10:44

Re: Kommunikationsproblem mit ct'lab und ADA-IO Platine

Beitrag von Bart »

Ich würde die Kommandos nicht am "Stück" schicken, sondern einzeln.
Ich häng mal meine Pythonlib ran, da sollte sich ein Stückchen Code abschauen lassen...

Viele Grüße,
Bart
ctlab_py.zip
(1.45 KiB) 208-mal heruntergeladen
Antworten