Ja, der unterschied liegt daran, das Du den CTU mit einer Variable von außen beschaltest - diese ist im Hauptprogramm deklariert oder global.
Interne Variablen einer Funktion oder eines Unterprogramms sind aber nur in diesem bekannt.
Die Variable CV ist als Var_out deklariert - damit stellt sie (bei FUP-Darstellung) einen Ausgang aus dem Funktionsblock zur Verfügung an denen Du Deine Variable (nennen wir sie mal ZÄHLWERT) schreibst, in die das Ergebnis geschrieben werden soll. Diese Ergebnis-Variable ZÄHLWERT könnte man speichernd machen, das hat aber zur Folge, das in Deiner Variable ZÄHLWERT beim Wiederanlauf ein Wert drin steht, Dein Zähler aber bei null startet...
Beim nächsten schreiben auf die Variable wird diese auf den aktuellen Wert des Zählers gesetzt - ist also keine Lösung für Dein Problem.
Um das Problem besser zu verstehen:
Versuch mal die Variable CV global zu deklarieren und dann als Retain bzw. Persistent. Dann solltest Du diese Variable direkt weiterverwenden können in anderen Programmteilen und der Zähler sollte beim Wiederanlauf den Wert noch haben.
Problematisch bei dieser Lösung ist, das Du den Schreibzugriff auf CV dann nicht auf bestimmte Programmteile (z.B. Deinen Zähler) beschränken kannst - d.h. wenn irgendein anderes Code-Schnippsel auf die Variable CV SCHREIBEND zugreift, so zerhaut es Dir den Zähler.
Ich denke die "sauberste" Lösung wäre, CV global zu machen und damit den aktuellen Wert über den Spannungsausfall zu retten - gleichzeitig im Zähler eine Out-Variable zu haben, die den Wert von CV abbildet. Damit kannst Du außerhalb des Zählers mit Deiner Variable ZÄHLWERT weiterarbeiten.
ABER: Wenn Du das Programm kopierst, weil Du einen zweiten, unabhängigen Zähler brauchst musst Du zwingend CV umbenennen - sonst greifen alle Deine Zähler auf die selbe globale Variable zu...
Ich hoffe das hat ein klein wenig weitergeholfen