# Netzlaufwerk 840d SL Weiterlauf des Programms bei Verbindungsabbruch



## röhrengertl (16 April 2020)

Hallo, 

ich habe hier ein Problem mit einem Netzlaufwerk:

Nun Vorgabe (Pflichtenheft) ist ich soll eine Verbindung zu einem Netzlaufwerk herstellen und darauf die Werkstückdaten etc. speichern,
für jedes Teil einzeln. Bei Verbindungsabbruch möchte ich nun die Daten auf der CF - Karte zwischenspeichern (Sicherung / Backup) damit
die Maschine weiter produzieren kann.

Also als Netzlaufwerk zum testen habe ich jetzt meinen Raspberry mit Linux missbraucht / verwendet .
Nach langem hin und her ging dann eine Netzwerkfreigabe über NFS, leider ging es mit Samba nicht, auch unter
Verwendung vom smbV1 - Protokoll liess sich nichts aktivieren (es konnte keine Verbindung hergestellt werden!).

Ja egal jetzt geht es unter nfs (reicht mir zum testen!).

Nun habe ich jedoch das Problem wenn ich das Netzlaufwerk trenne, dann bleibt mein NC-Programm mit der Meldung
"Warte auf externes Gerät" stehen. 

Ich öffne einen Pfad mit EXTOPEN. 

HMI - Version hier 4.07 auf einem HT8.

Nun meine Frage kann ich das externe Laufwerk im NC - Programm auf vorhanden überprüfen (ähnlich einem Ping? Mit HMI - PRO bzw.
Transline konnte man das über einen Java - Script - Befehl machen!) . Das habe ich hier leider nicht.

Problem wird schon der Eintrag des Laufwerks in der* extdrv.ini  *sein weil ja beim Hochfahren der NCU das Laufwerk vorhanden ist.
Einen Weg über die PLC sehe ich jetzt auch nicht. Der Befehl *ISFILE* geht leider nur auf der CF - Karte.

Hat irgend jemand eine Idee wie ich das vorher Abfangen könnte? Wie gesagt das ist eine Vorgabe und ich sollte dann das auf
verschiedenen HMI - Versionen machen (V4.07; V4.05; und älter etc..)


Gruß und Danke im voraus Gerhard


----------



## Peter Gedöns (16 April 2020)

EXTOPEN leifert dir doch im Result ob das Laufwerk vorhanden ist oder nicht 



> EXTOPEN: Vordefinierte Prozedur zum Öffnen eines externen Geräts/Datei
> <Result>: Parameter 1: Ergebnisvariable
> Anhand des Ergebnisvariablenwerts kann im Programm das Gelingen der Operation
> ausgewertet und entsprechend fortgefahren werden.
> ...


----------



## röhrengertl (16 April 2020)

*Dachte ich auch aber leider...*

Hallo Peter, 

das dachte ich auch leider sieht das so aus wenn  das NC-Programm mit einer Verbindung zu dem Netzlaufwerk gestartet ist  und ich die Verbindung dann Irgendwann unterbreche,
bleibt das NC-Programm nun z.B. 

```
;N10 BEGIN:
N10 DEF STRING[80] OUTDIR
N20 DEF INT ERROR
N30 DEF INT DATEI_ZAEHLER
;N40 DEF STRING[80] AUSGABE
;N50 DEF BOOL EXTDEVICE
;N60 DEF CHAR LF=10
N70 BEGIN:
N80 DATEI_ZAEHLER = DATEI_ZAEHLER + 1
N90  OUTDIR  ="/dev/ext/1/FRAI/_"<<"Stunde"<<$A_HOUR<<"_/"<<"MIETZE"<<"_"<<DATEI_ZAEHLER<<".csv"
N100 EXTOPEN(ERROR,OUTDIR,"ASYN","EXCL","APP")
N110 IF ERROR
N120 MSG("********* Fehler bei EXTOPEN-Befehl: "<<ERROR<< " Es wird eine Sicherung auf der CF - Karte erstelllt!")
N125   WRITE(ERROR,"/_N_WKS_DIR/_N_CSV_SICHERUNG_DIR/_N_"<<"Stunde"<<$A_HOUR<<"_/"<<"KATZE"<<"_"<<DATEI_ZAEHLER<<"_SPF","Hund  Katze Maus Elefant TEST_Protokoll vom  "<<$A_DAY<<"."<<$A_MONTH<<"."<<$A_YEAR<<"  Zeit:  "<<$A_HOUR<<":"<<$A_MINUTE<<":"<<$A_SECOND<<"'H0A'")
N130 ENDIF
N140 G4 F5
N150  WRITE(ERROR,OUTDIR,"Hund Katze Maus Elefant TEST_Protokoll vom  "<<$A_DAY<<"."<<$A_MONTH<<"."<<$A_YEAR<<"  Zeit:  "<<$A_HOUR<<":"<<$A_MINUTE<<":"<<$A_SECOND<<"'H0A'")
N160 IF ERROR
N170 MSG("Fehler bei WRITE-Befehl: "<<ERROR)
N180 ENDIF
N190 G4 F5
N200 IF ERROR
N210 MSG("Fehler bei WRITE-Befehl: "<<ERROR)
N220 ENDIF
N230 EXTCLOSE(ERROR,OUTDIR)
N240 MSG("Dateizähler = "<<DATEI_ZAEHLER)
N250 G4 F5
N260 GOTO BEGIN
```

hier schon bei der Zeile N090 stehen mit der Meldung "Warte auf externes Gerät"
oder je nach Unterbrechung bei EXTOPEN oder EXTCLOSE (N100 / N230) mit der gleichen Meldung!

Hier noch die *extdev.ini* nur die Zeile zwischen den *** Sternchen unter *UNIX Share* ist wichtig bzw. musste ich ändern


```
;Template of configuration file /oem/sinumerik/nck/extdev.ini and /user/sinumerik/nck/extdev.ini:
;Will apply for NC program comands EXTOPEN/WRITE/EXTCLOSE and ISOOPEN/ISOPRINT/ISOCLOSE

[ExternalDevices]

;V24
;===
;/dev/v24 = "baud rate, data bits, stop bits, parity, protocol"
;baud rates: (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200)
;data bits:  (5, 6, 7, 8)
;stop bits:  (1, 2)
;parity:     (none, even, odd)
;protocol:   (rts/cts, xon/xoff)
;Example (remove leading semicolon for activation):
;/dev/v24 = "9600, 8, 1, none, rts/cts"

;Windows share
;=============
;/dev/ext/[1-9] = "//[DOMAIN/]USERNAME%PASSWORD@SERVER/SHARE, /FILE_NAME [,[O|A]]"
;/dev/ext/[1-9] = "//[DOMAIN/]USERNAME%PASSWORD@SERVER/SHARE, /DIRECTORY_NAME/ [,[O|A]]"
;/dev/ext/[1-9] = "//[DOMAIN/]USERNAME%PASSWORD@SERVER/SHARE, / [,[O|A]]"
;Example (remove leading semicolon for activation):
;/dev/ext/1 = "//myDprintUser%myDprintPW@myDprintServer/DPrintShare, /myDprintFile_1"
;/dev/ext/2 = "//myDprintUser%myDprintPW@myDprintServer/DPrintShare, /myDprintDir_2/"
;/dev/ext/3 = "//myDprintUser%myDprintPW@myDprintServer/DPrintShare, /myDprintFile_3, O"
;/dev/ext/4 = "//myDprintUser%myDprintPW@myDprintServer/DPrintShare, /myDprintDir_4/, A"
;/dev/ext/5 = "'//myDprintUser%myDprintPW@myDprintServer/DPrintShare with Blank', /myDprintDir_5/, A"

;Unix share
;==========
;/dev/ext/[1-9] = "SERVER:/PATH, /FILE_NAME [,[O|A]]"
;******************************************************************************
/dev/ext/1 = "192.168.214.230:/media/csv/alfing/CSV_Test, /testcsv/"
;******************************************************************************
;/dev/ext/[1-9] = "SERVER:/PATH, / [,[O|A]]"
;Example (remove leading semicolon for activation):
;/dev/ext/1 = "myDprintServer:/export/DPrintShare, /myDprintFile_1"
;/dev/ext/2 = "myDprintServer:/export/DPrintShare, /myDprintDir_2/"
;/dev/ext/3 = "myDprintServer:/export/DPrintShare, /myDprintFile_3, O"
;/dev/ext/4 = "myDprintServer:/export/DPrintShare, /myDprintDir_4/, A"

;SIEMENS only
;============
;/dev/cyc/[1-2] = "[Windows share | Unix share]"

;Settings for local drive (CF-Card)
===================================
;LOCAL_DRIVE_MAX_FILESIZE = <max. size of file in bytes>
;LOCAL_DRIVE_FILE_MODE = ["A"|"O"]
;Example (remove leading semicolon for activation):
;LOCAL_DRIVE_MAX_FILESIZE = 10000
;LOCAL_DRIVE_FILE_MODE = "A"
```


Das war ja eigentlich der Plan! Sonst wäre es ja einfach gewesen!!! 


Gruß Gerhard


----------



## Peter Gedöns (16 April 2020)

so wie das aussieht ist das ja ein endlos Programm,das ist ja hoffentlich nur zum testen.

die genaue Unterbrechungsstelle des Programms wird dir erst angezeigt wenn du auf Programm Korrektur gehst. 
kann es gerade nicht nachstellen hab keinen IPC hier.
was für eine NC Version ist das ?


----------



## röhrengertl (16 April 2020)

Ja das ist das Problem ich hab keine Unterbrechungsstelle, das NC-Programm wartet auf die externe Verbindung.
HMI - Version (Operate) 4.07 / CNC - Version V4.07 SP4 HF05 / NCU 4.71 

Ja klar das ist nur ein Testprogramm, das richtige läuft zwar auch die ganze Zeit solange kein Fehler auftaucht. Wenn ein Fehler auftaucht Stoppt es natürlich.
Ist hier nur zum Test ob die Verzeichnisse geschrieben werden etc. wird jetzt hier nach jeder Stunde ein neues Verzeichnis soll dann mal die Kalenderwoche und der Tag werden.
Oder das Datum als Verzeichnis. Das steht noch nicht fest, aber es geht auf jeden Fall mal schon. Die CSV - Dateien sollen ja dann auch nicht MIETZE oder KATZE heissen 
Wie gesagt das Programm ist nicht unterbrochen sondern wartet, wie wenn es auf einen anderen Kanal warten würde der noch nicht fertig ist nur eben wartet es auf das externe Laufwerk!


----------



## Peter Gedöns (16 April 2020)

ich glaube ja das dein programm bei einem write oder extclose steht und nicht bei extopen.
lösche mal deine write befehle  im Programm und mach mal ein m0  nach Extopen wenn du im m0 stehst unterbrichst du das netzwerk und machst NC Start.
dann wird auch mal klar bei welchem befehl es hängt .


----------



## röhrengertl (16 April 2020)

Mein Programm steht auch schon beim 



```
N90  OUTDIR  ="/dev/ext/1/FRAI/_"<<"Stunde"<<$A_HOUR<<"_/"<<"MIETZE"<<"_"<<DATEI_ZAEHLER<<".csv"
```

Je nachdem ich das Kabel kappe, er kann ja dann bei N90 schon keine Zuweisung mehr machen.

Ich mach mal nen Screenshot


----------



## röhrengertl (16 April 2020)

Und wenn ich das Netzwerkkabel wieder anschliesse dann läuft es normal weiter!

Das ist dann auch das erste mal das ich mir eine Fehlermeldung Wünsche


----------



## Peter Gedöns (16 April 2020)

in der Zeile 90 wird ein String zusammen gebaut sonst nix
und dabei ist der NC egal ob das Laufwerk da ist oder nicht.
da du ja asynchron schreibst wird es so sein das man in einem Schreib befehl oder extclose steht der vorlauf aber schon zeile 90 Anzeigt 
deshalb mein vorschlag mit dem m0


----------



## röhrengertl (16 April 2020)

Ja ja versteh schon, ich probiere das mal, geht aber erst am Montag bzw. Dienstag wieder, Sorry hatte bei #6 das mit dem Netzwerk trennen überlesen!
Werde ich so machen wenn ich wieder in der Arbeit bin, morgen ist gezwungenermassen frei, und Montag hab ich eventuell einen Termin.
Also spätestens Dienstag um 8.00 Uhr früh gibt es eine Rückmeldung! 

Vorerst mal Danke für den Tipp und schönes Wochenende!


----------



## röhrengertl (21 April 2020)

Hallo, ich bin heute (Freitag) extra nochmal in die Fa. und habe das getestet! Konnte es erst heute reinsetzen!

Also es sieht so aus:

M0 nach EXTOPEN / Netzlaufwerk unterbrechen / Cycle Start   --> NC - Programm bleibt bei N230 EXTCLOSE stehen mit "Warte auf externes Gerät"
M0 nach EXTCLOSE / Netzlaufwerk unterbrechen / Cycle Start   --> NC - Programm bleibt bei N90 stehen mit "Warte auf externes Gerät"
(also beim zusammenfügen des String´s mit der Laufwerksangabe -> Anscheinend erkennt das der Interpreter durch den SLASH oder so)
M0 nach N90 "String zusammenbauen" / Netzlaufwerk unterbrechen / Cycle Start   --> NC - Programm bleibt bei N100 EXTOPEN  stehen mit "Warte auf externes Gerät"

unterbrechen kann ich das nur mit einem Reset, dann erfolgt auch eine Fehlermeldung "Warten auf externes Gerät Fehlercode 90 (90 = Timeout) in der Hilfe der NC gefunden!
Helfen tut mir das jetzt nicht´s, da ich den Fehler während der Laufzeit brauche.

Wenn ich die Anlage ohne dem Netzlaufwerk starte dann erhalte ich auch die "normalen Fehler" bei EXTOPEN und EXTCLOSE
Hinzuzufügen ist noch das der Write - Befehl auch wenn er einen ERROR verursacht das Programm nicht stoppt, man den Fehler allerdings auswerten kann wenn man
mit der SYNC - Methode arbeitet bei ASYNC ist der Fehlerwert immer 0.

Helfen tut mir das allerdings jetzt auch nicht!

Noch ein paar Screenshot´s:


----------



## Peter Gedöns (21 April 2020)

Hallo 
der NCK bleibt nicht beim String zusammen bauen stehen, 
der bleibt bei EXTOPEN / CLOSE oder WRITE stehen.

ich habe mir dein Testprogramm noch mal angesehen.
der Plan war wohl wenn EXTOPEN scheitert auf die CF Karte schreiben, und dann wieder weiter mit einem EXTOPEN versuch.
das macht das Programm aber nicht , selbst wenn EXTOPEN einen Fehler meldet schreibst du auf das Laufwerk


```
;N10 BEGIN:
N10 DEF STRING[80] OUTDIR
N20 DEF INT ERROR
N30 DEF INT DATEI_ZAEHLER
;N40 DEF STRING[80] AUSGABE
;N50 DEF BOOL EXTDEVICE
;N60 DEF CHAR LF=10
N70 BEGIN:
N80 DATEI_ZAEHLER = DATEI_ZAEHLER + 1
N90  OUTDIR  ="/dev/ext/1/FRAI/_"<<"Stunde"<<$A_HOUR<<"_/"<<"MIETZE"<<"_"<<DATEI_ZAEHLER<<".csv"
N100 EXTOPEN(ERROR,OUTDIR,"ASYN","EXCL","APP")
N110 IF ERROR
N120    MSG("********* Fehler bei EXTOPEN-Befehl: "<<ERROR<< " Es wird eine Sicherung auf der CF - Karte erstelllt!")
N125    WRITE(ERROR,"/_N_WKS_DIR/_N_CSV_SICHERUNG_DIR/_N_"<<"Stunde"<<$A_HOUR<<"_/"<<"KATZE"<<"_"<<DATEI_ZAEHLER<<"_SPF","Hund  Katze Maus Elefant TEST_Protokoll vom  "<<$A_DAY<<"."<<$A_MONTH<<"."<<$A_YEAR<<"  Zeit:  "<<$A_HOUR<<":"<<$A_MINUTE<<":"<<$A_SECOND<<"'H0A'")
      [COLOR=#ff0000]  G4 F5
        GOTOB BEGIN[/COLOR]
N130 ENDIF
N140 G4 F5
N150 WRITE(ERROR,OUTDIR,"Hund Katze Maus Elefant TEST_Protokoll vom  "<<$A_DAY<<"."<<$A_MONTH<<"."<<$A_YEAR<<"  Zeit:  "<<$A_HOUR<<":"<<$A_MINUTE<<":"<<$A_SECOND<<"'H0A'")
N160 IF ERROR
N170    MSG("Fehler bei WRITE-Befehl: "<<ERROR)
N180 ENDIF
N190 G4 F5
N200 IF ERROR
N210     MSG("Fehler bei WRITE-Befehl: "<<ERROR)
N220 ENDIF
N230 EXTCLOSE(ERROR,OUTDIR)
N240 MSG("Dateizähler = "<<DATEI_ZAEHLER)
N250 G4 F5
N260 GOTO BEGIN
```

ich habs mal ein wenig geändert versuch das mal.


----------



## Heinileini (22 April 2020)

Peter Gedöns schrieb:


> ```
> ;N10 BEGIN:
> ...
> [COLOR=#ff0000]  G4 F5
> ...


GOTOB und GOTOF kenne ich, aber GOTO mit ohne Angabe, ob ab ProgrammAnfang oder ab der aktuellen Stelle das "Label" gesucht werden soll?


----------



## Peter Gedöns (22 April 2020)

der NCK kann das auch,  braucht nur länger da keine Richtung vorgegeben


----------



## Heinileini (22 April 2020)

Peter Gedöns schrieb:


> der NCK kann das auch,  braucht nur länger da keine Richtung vorgegeben


Was bedeutet das konkret für die WirkungsWeise von GOTO?
Sucht er ab ProgrammAnfang bis ProgrammEnde oder ab aktueller Stelle bis zum ProgrammEnde und dann ab ProgrammAnfang bis zur aktuellen Stelle?
Diese vermeintlichen ProgrammZeilen Nxxxx sind doch in Wirklichkeit Labels, die mehrfach im Programm verwendet werden können (aber nicht sollten?).
In den G-Code-Varianten steckt immer noch sehr viel LochstreifenDenkweise ... das kann sich natürlich mittlerweile geändert haben.


----------



## Peter Gedöns (22 April 2020)

das GotoB oder GotoE ist noch aus der Zeit als mit Lochstreifen hantiert wurde , man mußte ja wissen in welche Richtung gespult werden muß.
der GOTO wird immer vom ausgangs Punkt suchen.
ich habe den Interpreter aber nicht geschrieben , kann auch gerade keinen der alten Herren auftrieben.
die Zeilennummern  sind nur aus nostalgischen Gründen vorhanden (hatten wir schon immer so )


----------



## röhrengertl (29 April 2020)

Sorry war leider krank, (keine Coro... ) 

Ja das Progromm war nur zum testen und ich bin ja dann eben hängen geblieben, weil sich das Programm stehen bleibt! 
Bis zum RESET, dann dauert es ca. 1min. dann kommt eben der Fehler 90 mit Timeout, und dann geht nix mehr nur mehr General RESET Aus- und Einschalten
da auch noch ein Systemfehler ansteht.
 Der Cursor steht auf jeden Fall bei N90 und nichts geht mehr.
Beim Write - Befehl bleibt er nicht stehen bei einem Fehler sondern das Programm wird weiter abgearbeitet (steht auch so in der DOKU DocOnCD).
Mir ist da noch was eingefallen, wie ich das lösen kann, aber das ist ein Umweg. Das Maschinenzentrum das ich "beliefere" hat eine PCU mit HMI-Pro Transline, da
kann ich über Java-Skript einen "Ping" senden und den auswerten und mir über den DP/DP-Koppler zurück geben lassen und Ihn wieder auf die NC übertragen.
Aber.... wie gesagt das ist so eine Art Forschungsauftrag was alles geht und wie.
Eigentlich wollte ich die Daten mit WinCCflex2008 wegschreiben, was auch schon geht, aber das möchte der Kunde nicht ........

Ich melde mich sobald ich an der Anlage war

Wenn ich an der Anlage bin teste ich das noch einiges


----------

