Sonstiges SCL R_TRIG in einer Struktur

Neurorancer

Level-2
Beiträge
572
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Sehr geehrte Forum-Mitglieder,

habe ein Problem, im Scout-TIA v4.5, eine Struktur mit dem Funktionsbaustein R_TRIG anzulegen.

in Codesys klappt es wunderbar.

Hier ist der Ausschnitt des Codes:

Code:
INTERFACE
    
       
        
        TYPE DW :
            STRUCT
                
                S_Manual            : ARRAY [1..3] OF BOOL;
                S_Stop              : ARRAY [1..3] OF BOOL;
                S_Auto              : ARRAY [1..3] OF BOOL;
                Operation_Mode      : ARRAY [1..3] OF INT;


               
                fb_S_Manual         : ARRAY [1..3] OF R_TRIG;
                //fb_S_Stop           : ARRAY [1..3] OF R_TRIG;
                //fb_S_Auto           : ARRAY [1..3] OF R_TRIG;
        
            END_STRUCT
        END_TYPE

Der Compiler meldet:

Fehler dDW(14) : 5008 :FUNCTION_BLOCK oder CLASS "R_TRIG" als Datentyp unzulässig


Bitte um einen Rat!
 
Was ich eigentlich brauche ist Folgendes:

Ich habe eine "ST-Quelle" mit dem Namen: dDW
Darin habe ich globale Variablen, siehe Code darunter.

Code:
INTERFACE
           
    VAR_GLOBAL        
        //Tests
        test1   :BOOL;   
        test2   :R_TRIG;
    END_VAR
END_INTERFACE


IMPLEMENTATION   
END_IMPLEMENTATION

Nun will ich das dDW 3mal haben.

Also im Programm will ich dann sagen:
Code:
dDW.test1[0] := TRUE;
dDW.test1[1] := FALSE;
dDW.test1[2] := TRUE;

dDW.test2[0](CLK := dDW.S_Manual[0]);
dDW.test2[1](CLK := dDW.S_Manual[1]);
dDW.test2[2](CLK := dDW.S_Manual[2]);

Ich hoffe Ihr versteht worauf ich hinaus will.
Ich will eine Struktur von den Variablen in dDW erzeugen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Anmerkung dazu :
Ich weiß jetzt gerade nicht, ob R_Trig überhaupt zu instanzieren geht (und nicht einfach nur ein Befehl ist) und, wenn es zu instanzieren ginge TIA mittlerweile ein Array_of_FB zuläßt.
Aber :
Wenn es dir nur um eine Flankenauswertung geht, warum hinterlegst du dann nicht einfach den Flankenmerker mit in deiner Struktur ?

Gruß
Larry
 
Viel Dank für Interesse!

R_TRIG ist sehr angenehm um eine Steigende Flanke zu detektieren.
Ich könnte die Flankenauswertung auch mit einem Zusatands-Automaten realisieren
aber das wäre dann der letze Ausweg.

Was ich vor habe ist ein Programm, welches auf x-gleichen Anlagen ablaufen kann:
So sieht es minimal aus:

In Codesys klappt sowas:
Ich werte die Flanken mit R_TRIG und gehe dann in die Verarbeitung. Und das für zwei Anlagen.

Code:
TYPE DW :
	STRUCT


	
	
		S_Manual		: ARRAY [1..2] OF BOOL;
		S_Stop			: ARRAY [1..2] OF BOOL;
		S_Auto			: ARRAY [1..2] OF BOOL;
		Operation_Mode 	: ARRAY [1..2] OF INT;


		fb_S_Manual 	: ARRAY [1..2] OF R_TRIG;
		fb_S_Stop 		: ARRAY [1..2] OF R_TRIG;
		fb_S_Auto 		: ARRAY [1..2] OF R_TRIG;
		
	END_STRUCT
END_TYPE

Code:
FOR i := 1 TO 2 BY 1 DO
	dDW.fb_S_Manual[i](CLK := dDW.S_Manual[i]);
	dDW.fb_S_Stop[i](CLK := dDW.S_Stop[i]);
	dDW.fb_S_Auto[i](CLK := dDW.S_Auto[i]);
	
	IF dDW.fb_S_Manual[i].Q THEN 
		dDW.Operation_Mode[i] := 1;
	END_IF;
	
	IF dDW.fb_S_Stop[i].Q THEN 
		dDW.Operation_Mode[i] := 2;
	END_IF;
	
	IF dDW.fb_S_Auto[i].Q THEN 
		dDW.Operation_Mode[i] := 3;
	END_IF;
END_FOR;

Vielleicht erzeuge ich bei Siemens die Struktur an falscher Stelle?
R_TRIG lässt sich innerhalb der Tags VAR...END_VAR instanzieren.
Meine Struktur, wo auch R_TRIG ist, , liegt außerhalb von VAR...END_VAR.
Ich bin da noch nicht so fit.
 
Ich kenne mich leider in Scout nicht aus. Wenn sich Siemens da an die eigene Notation hält müsst es so aussehen:

Code:
INTERFACE
           
    VAR_GLOBAL        
        //Tests
        test1   :BOOL;   
        test2   :ARRAY [0..3] OF R_TRIG;
    END_VAR
END_INTERFACE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kenne mich leider in Scout nicht aus. Wenn sich Siemens da an die eigene Notation hält müsst es so aussehen:

Code:
INTERFACE
           
    VAR_GLOBAL        
        //Tests
        test1   :BOOL;   
        test2   :ARRAY [0..3] OF R_TRIG;
    END_VAR
END_INTERFACE

Ahh! Ich glaube ich habs begriffen! Ich muss das mal testen!
 
Zurück
Oben