Oder verstehe ich es immer noch falsch.
Glaub ja.
In *.DAT stehen die Strukturdefinitionen und die Variablendeklarationen. Und wenn man denen dort einen Wert mitgibt, dann wird der persistent gespeichert. Global, wenn Du willst. (Schlüsselwort "GLOBAL", ich sag's nochmal, oder eben $config.dat) Das ist der Datencontainer.
Und im Programm - in der *.SRC kannst Du diese Variablen aus der *.DAT überschreiben. Wenn Du unbedingt was mit 0 überschreiben musst, dann dort. "Initialisiert" sind die in der *.dat immer, denn es sind ja globale Persistenten, zumindest wolltest Du das bisher so. Man kann in der SRC auch Variablen deklarieren, aber die existieren dann nur zur Laufzeit der jeweiligen Routine, und müssen tatsächlich initialisiert werden. Wie Du sie mit 0 überschreibst, steht in Deinem eigenen Beitrag #3 oder in meiner Antwort #5.
Und überschreiben kannst Du sie, wann immer Du willst, zyklisch, nach Bedarf, einmal, oder nie. Ich empfehle nur: ein "Kaltstart" ist erfahrungsgemäß nicht unbedingt ein Grund, sie zu nullen. Musst Du selber wissen. Ein SPS.SUB-Start ist aber nicht dasselbe wie ein Steuerungsstart (ersterer passiert häufiger).
Weiß ja keiner, was Du vor hast. Wenn das dritte Mal ein Bediener mit 'ner Leiter 40kg schwere Motorenteile aus den Fächern holen muss weil Dein Programm willkürlich die Plätze genullt hat, dann wird er Dir unfreundlich seine Bedürfnisse übermitteln. Wenn er einfach 'nen Setzkasten in 'ne Schäferkiste ausleert ist es ihm vielleicht egal. Wenn dringend genullt werden muss, wirst Du das wissen; wenn die Zahlen einfach stehen bleiben oder überschrieben werden können, dann auch.