LabVIEWForum.de - CanOpen Netzwerk, VI schließen

LabVIEWForum.de

Normale Version: CanOpen Netzwerk, VI schließen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Forumsnutzer,

ich habe für ein CanOpen Netzwerk ein VI kreiert. Ich setze die NI CanOpen Library ein. Es funktioiert alles sehr gut. Nur eine mögliche Fehlermöglichkeit kann ich nicht abfangen. Unzwar, wenn das VI geschlossen wird ohne vorher die CAN-Verbindung zu schließen. Dann harrt das Netzwerk im letzten Zustand aus. Zumindest in der CanOpen Library scheint es keine Funktion zu geben die das verhindern kann. Was kann man machen?

Gruß Kalle
Hallo Kalle,

Zitat:Unzwar, wenn das VI geschlossen wird ohne vorher die CAN-Verbindung zu schließen
Warum machst du auch sowas? Beende doch einfach die CAN-Verbindung (mit etwaigem Setzen neuer Werte für die Signale) und beende dann erst das VI...
Üblicherweise wird dass auch so geschehen, nicht zuletzt weil ich das VI "nicht schließbar" mache, wenn der Verbindungsknopf gedrückt ist. Dennoch, wenn der Rechner hängt oder das VI im Taskmanager rausgeschmissen wird bliebe eine E/A Station im Netzwerk auf den alten Stand stehen. Schöner wäre es wenn sie in Störung ginge und die Ausgänge auf null setzt, oder?
Hast du keinen Heartbeat?
Hallo Kalle,

(07.02.2012 15:25 )kalle schrieb: [ -> ]..., nicht zuletzt weil ich das VI "nicht schließbar" mache ...

Wieso machst du denn sowas? Du kannst doch einfach eine Eventstruktur nutzen und dann das "Panel-Close" discarden und zuerst das Netzwerk schliessen und dann das Programm beenden. Des Weiteren sollten Programme nicht mittels Taskmanager geschlossen werden. Damit das nicht geschieht sollten die Progs einfach so Fehlerfrei als Möglich laufen und somit das Schliessen per Taskmanager garnicht notwendig machen.

Wer es dennoch per Taskmanager schließt, der ist es halt selbst schuld, wenn dann das Netzwerk abschmiert.

Darüber hinaus sollte deine Hardware eventuell einen Watchdog/Timeout haben, der dann automatisch zum Abschalten der Ausgänge bei zu langer Pause führt. Dies ist wahrscheinlich bei dem "Einstellungsknoten" einstellbar.

Ich hatte einmal eine Kommunikation zwischen einem PC und einem Roboter per Can-Bus herstellen müssen. Dort gab es einen Methodenknoten zum einstellen eines Timeouts. Wurde die dort eingestellte Zeit überschritten, so wurde die Verbindung geschlossen. Könnte ja bei dir eventuell auch so in der Art eine Möglichkeit geben.

MfG Carsten
Das Schließen über den Taskmanager nehm ich nur als mögliche Fehlerquelle an, regulär ist das VI nur schließbar wenn die CAN-Verbindung getrennt wurde.

Heartbeat nutze ich auch und die Teilnehmer gehen in Störung wenn man zum Beispiel das Bus-Kabel zum Teilnehmer trennt. Beendet man das VI nun aber ohne die Verbindung zu trennen, dann läuft der Bus weiter, auch ohne VI. Die CAN-Karte hält den Bus am laufen, unabhängig ob weiter oben ein VI läuft oder nicht.

Mich beunruhigt dies da man mit einer E/A-Einheit zum Beispiel eine Heizung steuern könnte. Wird das VI irregulär beendet wenn der Digitalausgang gerade die Heizung angeschalten hat, würde die Heizung nicht wieder ausgehen. Aber letztlich ist ein VI auf einem Windows PC keine SPS, oben beschriebene Sicherheitslücken muss man einfach mit Hardwaremaßnahmen (Temperaturwächter) schließen.

Gruß Kalle
Ok, mach folgendes: Benutze nicht das Heartbeat-VI von NI, sondern bau dir ein eigenes VI, welches den Heartbeat softwaregesteuert versendet. Soll heißen, du lässt deine Schleife mit meinetwegen 2 Hz laufen und greiftst pro Iteration zweimal auf CAN-Write zu, um einen Heartbeat in die Write-Queue zu schieben. NI hat glaube ich den Heartbeat auf die CAN-Karte ausgelagert. Gibt dazu ja Funktionen, die von der API bereitgestellt werden. Schont die Ressourcen, allerdings würde der Verzicht darauf ebenfalls Ressourcen schonen.
Referenz-URLs