15.02.2007, 13:49
(Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2007 13:53 von eg.)
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
RS232 / VISA - Und der boese NI Adapter
' schrieb:Ok,
also im Anhang mein RS232 Open VI.
Es dient ausschließlich dazu, mit den vom Benutzer selektieren Verbindungsdaten ( COM1, COM2,COM3 sowie die Baudrate) einmalig zu Programmstart eine Verbindung aufzubauen.
Danach erfolgen alle Befehle oder Abfragen einfach als direkter VISA Write / Read in jeweils eigenen VI's je Aktion. Diese werden ereignisgesteuert getriggert.
Ich DENKE ich kann den Timeout Wert innerhalb des auf dme Screenshot sichtbaren VI's, angeschlossen an VISa Seriell Port konfigurieren,
für meine Probleme verantwortlich machen.
Die Frage ist nun, welche Art von Wert macht dort Sinn.
auf dem Bild zu sehen ist einerseits die lange verwendete
- Pseudo Formel zur Timeout-Definition,
sowie die aktuell im Test befindliche Version
- eines unendlichen Timeouts
Ich denke nur ein unendlicher timeout in dem Kontext kann auch Nachteile bringen, wenn z.b. der Benutzer eine Schnittstelle selektiert, an der nichts angeschlossen ist
Ich kann mir vorstellen, dass sich das ganze jetzt leicht verwirrt anhört, aber hoffe es ist trotz allem im ansatz nachvollziehbar.
gruss
fidel
Mich würde vielmehr dein QueryVI interessieren. Ich glaube, ich verstehe dein Problem nicht ganz, weil ich meine Programme grundsätzlich ganz anders aufbaue. Mich juckt z.B. der Timeoutwert gar nicht, weil ich ihn ganz einfach und bewusst ignoriere, denn Termination ist bei mir ausgeschaltet und lesen will ich nur soviel wie am Port anliegt.
Timeout ist dazu da, um:
1) wenn du die Schnittstelle liest und sagst, gib mir 100 Zeichen vom Puffer, dort liegen aber nur 25 und kommen kene neuen Zeichen, dann bekommst du wenn dein Timeout abgelaufen ist eine Fehlermeltdung.
2) wenn du Termination Char eingeschaltet hast und dieses Zeichen kommt über die Schnittstelle nicht, dann nach dem Ablauf des Timeouts bekommst du die Fehlermeldung.
3) wenn du auf die Schnittstelle einen riesigen Datensatz (dieser Datensatz ist viel grösser als der Sendepuffer) schreibst und schaffst es nicht während des Timeouts abzuschicken, dann gibt es ebenfalls die Timeout-Fehlermeldung.
Gruss, Eugen
EDIT: IchSelbst war schneller.
|
|
|
15.02.2007, 14:05
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
RS232 / VISA - Und der boese NI Adapter
' schrieb:- Timeout Wert von unendlich geht in der Theorie, habe ich getestet.
' schrieb:Natürlich geht das.
Stimmt nicht ganz:
unendlich (als DBL) = 4294967295 (als U32)
Gruss
|
|
|
15.02.2007, 14:12
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
RS232 / VISA - Und der boese NI Adapter
Wo kommt diese 20 beim Lesen her? Bist du dir sicher, dass die Antwort genau aus 20 Zeichen bestehen soll?
Mein Rat, wenn du dein Programm nicht wirklich gross umbauen willst, dann spiele mit Termination Chars rum (wie ich es gesehen habe, wird ein einfaches ASCII-Protokoll zur Kommunikation benutzt).
|
|
|
15.02.2007, 14:18
|
fidel
LVF-Gelegenheitsschreiber
Beiträge: 247
Registriert seit: Aug 2006
8.00 // 8.2.1 // 8.5
2006
de
76185
Deutschland
|
RS232 / VISA - Und der boese NI Adapter
' schrieb:Wo kommt diese 20 beim Lesen her? Bist du dir sicher, dass die Antwort genau aus 20 Zeichen bestehen soll?
NEIN, klar ist nur dass es max. 20 Zeichen sind. aber nicht definierte 20 Zeichen in jedem Fall.
' schrieb:Mein Rat, wenn du dein Programm nicht wirklich gross umbauen willst, dann spiele mit Termination Chars rum (wie ich es gesehen habe, wird ein einfaches ASCII-Protokoll zur Kommunikation benutzt).
Das Thema sagt mir leider nichts....d.h. ich fang mal an ob ich was dazu in den Weiten des Internets finde.
Danke für eure Inputs...
|
|
|
15.02.2007, 14:20
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
RS232 / VISA - Und der boese NI Adapter
' schrieb:Im Einsatz mit diesem NI RS232 / USB Adapter sieht es so aus, als ob ich mind. eine Schleifen-Zeit von 2,0 ++ sec verwenden muss, da sonst offensichtlich die Timeout Routine nicht vollständig durchläuft.
mit allen anderen adaptern sind selbst Timings von 0,5 sec kein Problem.
Mein Rückschluss: Der Durchsatz durch diesen NI RS232 / USB Adapter ist merklich schlechter.
Jetzt verstehe ich nicht so ganz, wo das Problem ursprünglich ist. Wie schnell must du die Befehle abschicken? Geht es um hohe Frequenzen?
Schickst du die Anfragen zum Gerät denn mit 100 Hz oder so?
Was bedeutet bei dir 0,5 Sekunden? Was ist es für Timing?
0,5 Sekunden ist eine grosse Zahl wenn es um Lesen und Schreiben der seriellen Schnittstelle geht. Ich schaffe Frequenzen von bis zu 300 Hz, vielleicht auch mehr (wenn die Pakete nicht zu gross sind). 300 Hz wäre ein Timing von 3 Millisekunden, also 0,003 Sekunden.
Ich bin mir also ziemlich sicher, dass dein Problem zu lösen ist. Man braucht nur bissel mehr Erfahrung und dann geht es.
Gruss, Eugen
|
|
|
15.02.2007, 14:52
(Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2007 14:53 von fidel.)
|
fidel
LVF-Gelegenheitsschreiber
Beiträge: 247
Registriert seit: Aug 2006
8.00 // 8.2.1 // 8.5
2006
de
76185
Deutschland
|
RS232 / VISA - Und der boese NI Adapter
' schrieb:Jetzt verstehe ich nicht so ganz, wo das Problem ursprünglich ist. Wie schnell must du die Befehle abschicken? Geht es um hohe Frequenzen?
Schickst du die Anfragen zum Gerät denn mit 100 Hz oder so?
Was bedeutet bei dir 0,5 Sekunden? Was ist es für Timing?
0,5 Sekunden ist eine grosse Zahl wenn es um Lesen und Schreiben der seriellen Schnittstelle geht. Ich schaffe Frequenzen von bis zu 300 Hz, vielleicht auch mehr (wenn die Pakete nicht zu gross sind). 300 Hz wäre ein Timing von 3 Millisekunden, also 0,003 Sekunden.
Ich bin mir also ziemlich sicher, dass dein Problem zu lösen ist. Man braucht nur bissel mehr Erfahrung und dann geht es.
Gruss, Eugen
Mein Problem ist im Endeffet nur folgendes:
Der **** NI RS232/USB Adapter für > 100 EUR performt schlechter wie jeder billige Adapter.
Im Endeffekt heisst dies, dass innerhalb meines Programmes (Eventstruktur) der Timeout-Event dafür verwendet wird,
eine Reihe von abfragen abzusetzten und Werte zu aktualisieren, egal ob der User etwas macht oder nicht.
Inzwischen sind in diesem Falleeinige aktualisierungen zusammengekommen.
Ich als Anwedender kann definieren, mit welchem Zyklus dieser,nennen wir es "timeout-Event" durchloffen wird.
Der NI Adapter liefert nur saubere Ergebnisse, wenn der Durchlauf + 2 Sekunden ist....
d.h. ich kann relaltiv selten aktualisieren und somit wirkt das ganze Recht langsam.
Jeder andere Adapter kriegt die Timeout Routine in weniger wie 1 Sekunde durch.....und ich kann mir nicht im Ansatz erklären, warum dies so ist.
ich dreh mich im Kreis
|
|
|
15.02.2007, 14:59
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
RS232 / VISA - Und der boese NI Adapter
Zur Zeit verstehe ich es so:
der Hund ist schlechter als eine Katze, weil er nicht so gut Mäuse fangen kann, obwohl er grösser ist.
|
|
|
15.02.2007, 15:18
|
fidel
LVF-Gelegenheitsschreiber
Beiträge: 247
Registriert seit: Aug 2006
8.00 // 8.2.1 // 8.5
2006
de
76185
Deutschland
|
RS232 / VISA - Und der boese NI Adapter
' schrieb:Zur Zeit verstehe ich es so:
der Hund ist schlechter als eine Katze, weil er nicht so gut Mäuse fangen kann, obwohl er grösser ist.
hehe
sorry ich weiss wirklich nicht wie ich es anderst formulieren soll.
Es ist für mich nur offensichtlich das gerade der NI Adapter weniger Durchsatz hat und ich deshalb in Probleme komme.
Kann natürlich auch sein, dass mein Programmaufbau nicht optimal ist, aber naja
verzwickte situation
|
|
|
15.02.2007, 15:45
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
RS232 / VISA - Und der boese NI Adapter
' schrieb:Mein Problem ist im Endeffet nur folgendes:
Der **** NI RS232/USB Adapter für > 100 EUR performt schlechter wie jeder billige Adapter.
Im Endeffekt heisst dies, dass innerhalb meines Programmes (Eventstruktur) der Timeout-Event dafür verwendet wird,
eine Reihe von abfragen abzusetzten und Werte zu aktualisieren, egal ob der User etwas macht oder nicht.
Inzwischen sind in diesem Falleeinige aktualisierungen zusammengekommen.
Ich als Anwedender kann definieren, mit welchem Zyklus dieser,nennen wir es "timeout-Event" durchloffen wird.
Der NI Adapter liefert nur saubere Ergebnisse, wenn der Durchlauf + 2 Sekunden ist....
d.h. ich kann relaltiv selten aktualisieren und somit wirkt das ganze Recht langsam.
Jeder andere Adapter kriegt die Timeout Routine in weniger wie 1 Sekunde durch.....und ich kann mir nicht im Ansatz erklären, warum dies so ist.
ich dreh mich im Kreis
OK, ich glaube ich habe es verstanden. Du hast also eine Event-Struktur in deinem Programm, da hast du in Timeout-Event die Aktualisierung deiner Daten implementiert. Da wird also etwas zum Gerät abgeschickt und etwas vom Gerät empfangen und angezeigt.
Aber
1) das Event Timeout hat eigentlich ganz andere Bedeutung:
wenn in deinem Programm oder im Gerät ein Fehler passiert, musst du dem Benutzer(Bediener) eine Warnung oder einen Fehler melden. Der Bediener ist aber gerade weg und sieht diese Meldung nicht. Und genau da kannst du diesen Timeout benutzen um Alarm einzuschalten, weil der Bediener es nicht geschafft hat in der angegebenen Zeit diese Meldung zu lesen und die Maßnahmen zu ergreifen.
Man kann aber das Event "Timeout" so missbrauchen wie du, sprich wenn das Programm gerade nichts zu tun hat (also der Benutzer macht keine Eingaben und so), dann darf das Programm die Werte aktualisieren.
2) Ich glaube einfach nicht, dass der NI Umsetzer eine Sekunde länger braucht um ein paar kurze Befehle abzuschicken und ein paar bytes zu empfangen.
3) Wenn das aber wirklich so ist, dann würde ich mal sagen, dein Umsetzer ist defekt oder du hast ihn falsch installiert.
Gruss, Eugen
|
|
|
| |