# Wie Spannungssignal auswerten?



## Skilppy (21 Dezember 2009)

Hallo,
schreibe gerade mein erstes Programm mit Twincat (ST) aufgrund einer Projektarbeit.
Zur verfügung habe ich für das eine Teilprogramm einen Lichtsensor, welcher ein Spannungssinal von 0-10V an die Beckhoff-SPS liefert.

Jetzt meine frage, wie kann ich dieses analoge Signal in ein für mich brauchbares digitales Signal umwandeln? (Nur anhand des Programmes, keine zusätzliche Hardware)
Vll. gibt es in ST ja einen A/D-Umwandler????

Danke schonmal im vorraus.

Gruß


----------



## trinitaucher (21 Dezember 2009)

Wie kommen die 0..10V denn in die SPS?


----------



## Skilppy (21 Dezember 2009)

Soweit ich weis, über eine analoge Eingangsklemme.

Werde morgen oder übermorgen nochmal genau gucken auf welchen Baustein der Sensor geht.

Oder kann man sowas garnicht auswerten??


----------



## McNugget (22 Dezember 2009)

Wenn Du es von einer analogen Klemme bekommst hast Du ja ein Word. Dieses müsstest Du dann auf einen für Dich brauchbaren Wert 
0-100% 

oder

X-Y Lux 
(wobei X der Lux-Anfangswert und Y der Lux-Endwert des Sensors wären) 

skalieren.

Dafür gibt es in der OSCAT.LIB zum Beispiel den Baustein Scale_D.

Ist in der OSCAT-Doku sehr gut dargelegt.


----------



## Skilppy (22 Dezember 2009)

Ui, die OSCAT.LIB habe ich nicht, muss man die extra kaufen?

Habe aber auch eine interesssante Funktion in der Standart-LIB gefunden.

undzwar kann man da

Word in Bool konvertieren

könnte ja dann z.b 

9V bzw. 90%=>1
7V bzw. 70%=>0

damit ausgeben.

Aber wie kann ich denn den Wert des Lichtsensors überhaupt in dem Programm aufrufen?


----------



## Larry Laffer (22 Dezember 2009)

Hallo,
die genannte Bibliothek kannst du unter www.oscat.de herunterladen ...
Das Ding stellt dir eine ganze Menge Funktionen zur Verfügung. Ich würde dir allerdings zunächst empfehlen, die Elementar-Kenntnisse selbst zu erarbeiten.

Wenn du deinen Lichtsensor auswerten willst, so geht das nicht über WORD_TO_BOOL sondern über einen Vergleich. Also z.B. :
	
	



```
myAction := Wert_Lichtsensor >= 4377 ;
```
Gruß
LL


----------



## MasterOhh (22 Dezember 2009)

Du musst eine Eingangsvariable in deinem Programm deklarieren. 
z.B. Lichtschranke : Word  AT %I*  (Der * bedeutet das Twincat selber eine Adresse zuweist)

Dann musst du im Systemmanager deine Analog Klemme einlesen und die Variable Lichtschranke mit dem entsprechenden Eingang verknüpfen. Die neue Zuordnung erzeugen und diese dann auf die SPS laden.

Danach erhält die Variable Lichtschranke automatisch den Spannungswert der an der Klemme anliegt. Meines wissens nach wir der direkt in mV angegeben, ohne das man den noch umrechnen muss.


----------



## Skilppy (22 Dezember 2009)

Ah super, danke.

Könnte mir noch einer sagen, wie ich den Vergleichswert schreiben muss?


IF A_LS1>=8  THEN;  //Falls Analog_input größer/gleich 8V
E0_B1_1_AJ1_1:=1;  //Ausgang 1 zuweisen

Also reicht es wenn ich nur die 8 schreibe oder muss da nochwas bei


----------



## MasterOhh (22 Dezember 2009)

```
IF A_LS1 >= 8 THEN
   E0_B1_AJ1_1:=1;    (oder E0_B1_AJ1_1:=TRUE wenn es ein BOOL ist)
END_IF
```


----------



## gravieren (22 Dezember 2009)

Hi

Einmal brennen  --> immer brennen   ?


Falls ja, ist der Code richtig  




Jedoch praktisch  ?


----------



## MasterOhh (23 Dezember 2009)

von einer Rücksetzbedingung hat er ja nix geschrieben 

meinetwegen auch so:


```
IF A_LS1 >= 8 THEN
   E0_B1_AJ1_1:=1;    (oder E0_B1_AJ1_1:=TRUE wenn es ein BOOL ist)
ELSE
   E0_B1_AJ1_1:=0;    (oder E0_B1_AJ1_1:=FALSE wenn es ein BOOL ist)
END_IF
```


----------



## Skilppy (23 Dezember 2009)

Hehe, ja ging eigentlich erstmal nur darum, das ich weis wie ich das Signal verarbeiten kann

Im Endeffekt soll es dann natürlich ein-/ausgehen, muss mir da aber nochmal Gedanken machen, wie ich da eine kleine Hysterese einbaue um den undefinierten Zwischenwert zu überbrücken.


----------



## gravieren (23 Dezember 2009)

Hi


Ich bin ein Spielverderber.   *ROFL*



```
IF A_LS1 >= 8 THEN
   E0_B1_AJ1_1:=1;    (oder E0_B1_AJ1_1:=TRUE wenn es ein BOOL ist)
END_IF
 
IF A_LS1 <= 5 THEN
   E0_B1_AJ1_1:=0;    (oder E0_B1_AJ1_1:=FALSE wenn es ein BOOL ist)
END_IF
```
 
Ich hoffe, das "kleiner gleich" richtig geschrieben zu haben.   


Gruss


----------



## MasterOhh (23 Dezember 2009)

```
IF A_LS1 >= 8 THEN
   E0_B1_AJ1_1:=1;    (oder E0_B1_AJ1_1:=TRUE wenn es ein BOOL ist)
ELSIF A_LS1 <= 5 THEN
   E0_B1_AJ1_1:=0;    (oder E0_B1_AJ1_1:=FALSE wenn es ein BOOL ist)
END_IF
```



Frohes Fest !!!!


----------



## Skilppy (23 Dezember 2009)

Danke Leute, ihr habt mir sehr geholfen

Meine vorerst letzte Frage ist, wie ich einen TOF in ST aufrufen kann. Habe es anhand der Eingabehilfe probiert, allerdings sagt er beim übersetzen immer das es keine Funktion sei 

TOF(IN:=E0_B1_T1_1 , PT:=t#10s , Q=>Merker1 , ET=> );

Habe jetzt schon sehr lange nach etwas gesucht aber nicht gefunden:-|


----------



## gravieren (23 Dezember 2009)

Skilppy schrieb:


> Danke Leute, ihr habt mir sehr geholfen
> 
> Meine vorerst letzte Frage ist, wie ich einen TOF in ST aufrufen kann. Habe es anhand der Eingabehilfe probiert, allerdings sagt er beim übersetzen immer das es keine Funktion sei
> 
> ...


 
Hast du die LIB "standard.lib" eingebunden   ?


----------



## Skilppy (23 Dezember 2009)

Also unter Resourcen habe ich die standart.LIB

Wenn ich den TOF als FB aufrufe funktioniert er auch.

Oder wie muss ich das mit dem einbinden verstehen, muss man den TOF erst deklarieren?


----------



## McNugget (23 Dezember 2009)

Ja, Du musst jede Instanz von TOF deklarieren:


Deklaration:

mein_TOF         :         TOF  ;


Und dann belegst Du "mein_TOF" mit Deinen Variablen im Anweisungsteil.


----------



## Skilppy (23 Dezember 2009)

Jo, das Problem ist allerdings, dass ich den TOF nicht deklarieren kann, normalerweise fragt er ja immer direkt nach der Deklaration​


----------

