Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
23.05.2016, 10:12 (Dieser Beitrag wurde zuletzt bearbeitet: 23.05.2016 10:15 von Woodeye.)
ich benötige einen Denkanstoß für den Einsatz der TCP Verbindungs-ID. Zum Hintergrund, bis jetzt habe ich Geräte nur über RS232 / GPIB angesteuert, dies über ein VI in Form einer globalen funktionalen Variable. In der ersten Schleife werden die Geräte gesucht und der Ressourcenname wird auf ein nicht initialisiertes Schieberegister gegeben, ist somit also für folgende VI Aufrufe vorhanden.
Bei TCP gelingt mir diese Vorgehensweise nicht, auch der Einsatz von lokalen Variablen oder Eigenschaftsknoten bringt keinen Erfolg. Kann mir jemand auf die Sprünge helfen, wie ich die ID / das VI an mehreren Stellen des übergeordneten VIs verwenden kann ohne eine feste Verdrahtung anzulegen?
Eine weitere Frage wäre ob es bei TCP eine Möglichkeit gibt auf ein "ETX" zu reagieren?
vielleicht habe ich mich etwas unverständlich ausgedrückt....
Angenommen ein Oberprogramm soll an verschiedenen Stellen auf ein Sub-VI (FGV)"Gerätesteuerung XY" zugreifen. Bis jetzt habe ich im Init des Ober_VIs ein Init des SUB-VIs durchgeführt und alle Verbindungsparameter der Hardware auf das Schieberegister gelegt, das SUB-VI wird geschlossen, die Verbindungen nicht. Somit erspare ich mir eine immer wiederkehrende Konfiguration der Eingänge und brauche nur den jeweiligen Sendewert schreiben. Mein Problem ist, dass diese Methode mit VISA funktioniert, bei TCP bekomme ich es nicht auf die Reihe.
Die Kommunikation mit der Hardware funktioniert soweit, ich muss aber im SUB-VI immer den Port öffnen und wieder schließen oder die Referenz direkt verkabeln. Ich bekomme derzeit noch keine Übergabe der Verbindungs-Id über lokale Variable, Eigenschaftsknoten bzw. Schieberegister hin.
Wenn Du in LV Hilfe unter TCP: Verbindung herstellen suchst, werden dir zwei Beispiele angeboten.
Eines für Server und eines für Client.
Du hast dich für die Client Methode entschieden. Da ist die IP die Deines Rechners. Der ignorierte Fehler ist 66 nicht 56.
Schau dir mal die beiden Beispiele an.
Gruß
Freddy
vielleicht habe ich mich etwas unverständlich ausgedrückt....
Angenommen ein Oberprogramm soll an verschiedenen Stellen auf ein Sub-VI (FGV)"Gerätesteuerung XY" zugreifen. Bis jetzt habe ich im Init des Ober_VIs ein Init des SUB-VIs durchgeführt und alle Verbindungsparameter der Hardware auf das Schieberegister gelegt, das SUB-VI wird geschlossen, die Verbindungen nicht. Somit erspare ich mir eine immer wiederkehrende Konfiguration der Eingänge und brauche nur den jeweiligen Sendewert schreiben. Mein Problem ist, dass diese Methode mit VISA funktioniert, bei TCP bekomme ich es nicht auf die Reihe.
Die Kommunikation mit der Hardware funktioniert soweit, ich muss aber im SUB-VI immer den Port öffnen und wieder schließen oder die Referenz direkt verkabeln. Ich bekomme derzeit noch keine Übergabe der Verbindungs-Id über lokale Variable, Eigenschaftsknoten bzw. Schieberegister hin.
OK, das hört sich korrekt an. Prinzipiell sollte das so funktionierenJetzt stellt sich die Frage, was für eine Gegenstelle hast du? Es gibt durchaus Geräte, die die TCP-IP-Verbindung wieder selber kappen, wenn eine gewisse Totzeit überschritten wurde. Es könnte also durchaus sein, dass bei deinem zweiten Aufruf nach "init" die TCP-Refnum einfach nicht mehr gültig ist.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
ich habe deine Antwort übersehen und jetzt haben wir beide geschrieben. Anlage ist eine Klimakammer von Feutron, ich kann bei sequentieller Abarbeitung der Befehle nach 30 Sek. noch mit ihr arbeiten.
Ich benutze das VI als ganz normale FGV, welche mit dem Befehl Init eine beliebige Hardware konfiguriert. Bei VISA gebe ich im ersten (Init-)Durchlauf die gefundene COM Schnittstelle auf das Schieberegister und habe somit, bei nachfolgenden Aufrufen der FGV, die aktuelle Schnittstelle am Eingang der nächsten Befehlsschleife, hier lesen. Die späteren Eingangswerte der FGV sind somit nur noch der Befehl und ein eventueller Übergabewert, wie einzustellende Spannung o.ä..
Wie schon geschrieben funktioniert die Kommunikation mit der angeschlossenen Anlage einwandfrei, ich kann in der Initschleife jeden Befehl / Abfrage senden und bekomme eine richtige Antwort, auch im zweiten und den folgenden Abrufen. Bei dem ersten Aufruf der FGV im Lesencase kann die Übergabe-Id aber nicht verarbeitet werden und ich bekomme die bereits beschriebene Fehlermeldung. Eine Bearbeitung mit Client/Server oder Listener erschließt sich mir noch nicht ganz, da die Anlage nur auf direktes Ansprechen über das Netzwerk reagiert.
Ich habe mal kurz bei Feutron gegoogelt.
Die Syntax ist falsch.
Hier ein Ausschnitt aus dem Handbuch:
Zitat:Eine Anweisung besteht aus einem Befehl, einer geöffneten Klammer "(", einer
optionalen Liste von Parametern sowie einer geschlossenen Klammer ")". Einzelne
Anweisungen werden durch Semikola ";" getrennt.
Du solltest zunächst mal das Handbuch lesen. Da gibt es bestimmt einige Hilfen.