Ausgang ist auch Eingang ?

Begonnen von martin.k, 16. November 2008, 12:32:43

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

martin.k

Hallo !

Ich versuche derzeit die Lib 3 einzuarbeiten.  :)
Bisher bin ich immer zurechtgekommen, aber mit den neuen Begriffen und Variabeln komme ich nicht mehr mit. Siehe auch  http://www.oscat.de/community/index.php/topic,491.0.html.

Ich bekomme bei die Ausgänge nicht mehr dargestellt. Z.B. Ontime hat keinen Ausgang, verlangt jedoch einen Eingang der auch Ausgang ist.  ???  Anbei zwei Screenshots.
Actuator_pump ist noch besser. Da stehen im Kästen (des Bausteins) zwar noch die Ausgangsbeschreibung es wird aber kein Strich als Ausgangsankopplung angezeigt.  :-\

Könnte mir jemand einen Tipp geben?
DANKE !

Software: CoDeSys 2.3.6.2

Grüße
Martiin



[gelöscht durch Administrator]

hugo

am besten liest du dir mal die basics zu codesys durch.

es ist aber ganz primitiv.
es gibt verschiedene variablen definitionen:
1. var_input (wird von aussen geschrieben und von innen gelesen)
2. var_output (wird von innen geschrieben und von aussen gelesen)

die typen 1 und 2 sind eigenständige speicherbereiche wo die variablen abgelegt sind.

3. var_in_out (kann sowohl gelesen als auch geschrieben werden)
dieser typ 3 hat keinen speicherbeicht wo die variable liegt, sondern er gibt nur einen pointer auf die exteren variable weiter die dann geschrieben als auch gelesen werden kann.

in deinem fall ganz einfach definiere die variable extern in deinem programmheader.
z.b.
var
   test : byte;
end_var
legt sie über ein input symbol auf den eingang der i/O variable.
der eingang liefert der instanz keinen wert sondern den pointer auf test.

in deinem beispiel unten:
laufzeit umwälzpumpe und anzahl_startungen_umwälzpumpe legst du mittels eines input symbols auf die eingänge runtime und cycles.
der baustein schreibt dann die werte in deine externen variablen wie gewünscht.

bitte nimm dir mal das codesys manual vor das sind grundlagen der programmierung.

auszug aus der codesys hilfe:
EinAusgabevariablen
Zwischen den Schlüsselwörtern

VAR_IN_OUT und END_VAR werden alle Variablen deklariert, die als Ein- und Ausgabevariablen eines Bausteins dienen.

Achtung: Bei dieser Variablen wird direkt der Wert der übergebenen Variablen verändert ("Übergabe als Pointer", Call-by-Reference). Deshalb kann der Eingabewert für eine solche Variable keine Konstante sein. Deshalb können auch VAR_IN_OUT Variablen eines Funktionsblocks nicht von außen direkt über <Funktionsblockinstanz>.<Ein-/Ausgabevariable> gelesen oder beschrieben werden !Beispiel:

Beispiel:

VAR_IN_OUT

iInOut1:INT; (* 1. EinAusgabevariable *)

END_VAR


martin.k

Hallo Hugo,

danke für Deine schnelle Antwort. Auch für Deinen Beitrag in den
Anwendungsbeispielen: http://www.oscat.de/community/index.php/topic,511.0.html.

Jetzt habe ich aber noch ein Problem bekommen:
Fehler 3555: Taskkonfiguration: Der Taskeintrag ist falsch parametriert.

In der Hilfe von CoDeSys steht dazu:
Wenn das ausgewählte Programm Eingabevariablen erfordert, dann geben Sie diese in der üblichen Form, und vom deklarierten Typ (z.B. prg(invar:=17)) an.

Ich glaube hier läuft was falsch. Es kann doch nicht sein ontime schon werte vorzugeben  :-[

Grüße

hugo

keine ahnung was da dein problem ist mit ontime hat das eher nichts zu tun

gravieren

>Fehler 3555: Taskkonfiguration: Der Taskeintrag ist falsch parametriert

Geh doch mal unter den "Reiter"   Ressorcen

Taskkonfiguration.

Hast du die "Zeit" richtig eingetragen ?

Oder andersweitig fehlerhate einträge in der "Liste"  ?

gravieren

Du kannst auch das Progi hier mal "reinstellen".


martin.k

Hallo Hugo,
hallo Gravieren.

CoDeSys beschwert sich erst seit der Verwendung der VAR_IN_OUT's
Nach etwas suchen habe ich die Ursache gefunden.

In den Zielsystemeinstellungen gibt es
VAR_IN_OUT als Referenz
was DEAKTIVIERT sein muss.

Grüße

hugo

da ist bei dir was anderes faul.

1. var in_out ist ein standard konstrukt der iec61131-3 und sollte ohne besondere einstellungen funktionieren.
var_in_out wurde auch vor der 3.0 in der oscat lib verwendet, es ist also nichts neues.

ich nutze verschiedene Targets: wago 841 und wago 849
bei beiden ist var_in_out als referenz angekreuzt, ich kann es auch nicht abwählen da grau hinterlegt.

var_in_out ist eine referenz und das häckchen sollte auch gesetzt sein

auszug aus der hilfe von codesys target einstellungen:
VAR_IN_OUT als Referenz
aktiviert: VAR_IN_OUTs werden beim Funktionsaufruf als Referenz übergeben (Pointer);
deshalb keine Zuweisung von Konstanten und kein lesender oder schreibender Zugriff von außen möglich

martin.k

Ja das ist was faul.
Mein Wettersenor meldet Fehlercode 31 wenn ich das Häkchen rausgemacht habe...  :-(

Hilfe!

Grüße


[gelöscht durch Administrator]

gravieren

>Mein Wettersenor meldet Fehlercode 31 wenn ich das Häkchen rausgemacht habe...  :-(

1FHex --> Komunikationsabbruch.



Wie ich sehe, hast du noch die FW11 ?

Welche CoDeSys-Version hast du  ?

Aktuell ist die  2.3.9.9  .




Mach dir mal eine Kopie deines Projektes.
Lösche in der Taskkonfiguration alle PRG-Aufrufe heraus.

Übertrage dein Programm  --> Kommt ein Fehler ?

Nein --> nächstes PRG eintragen.

gravieren

Welche OSCAT-LIB  hatest du vorher benutzt.

(Bevor der Fehler auftrat)
Bitte nutze diese und sage uns, ob der Fehler immer noch auftritt.




Hast du zwischenzeitlich etwas an deinem Programm verändert ?

hugo

also habe mir dein projekt mal angesehen.

du hast in programmen I/O definiert.
ein programm ist oberste ebene wo bitte sollen diese i/O den hinzeigen?

programme koennen nur über globale vars kommunizieren.

wenn ein baustein ein i/O hat darft du extern nicht wieder ein i/O anschliessen, du musst normale vars anschliessen.

hugo

Beipiel für ontime:

programm test
var
   sec, cycl : udint;
end_var


ontime(in := in, seconds := sec, cycles := cycl);

und schon wird wenn in = true die sec hochgezählt.

seconds:= sec übergibt dem baustein lediglich einen pointer auf sec damit der baustein ontime weiss welche variable er hochzählen muss.

in einem programm wie bei dir kannst du keine I/O deklarieren, welchen sinn soll das ganze den haben?

deine probleme haben niochts mit der release 3 zu tun, sondern du musst erst einmal nachlesen wie man var_in_out benutzt




gravieren

Hi Martin


Das Bedeutet für dich:

- xGarten
- xTagesdaten
- zGerätesteuerung


Alle VAR_IN_OUT  Variablen, in diesem PRGs  nach GLOBALE VARIABLEN rüberschieben.



 

gravieren

#14
Hi Martin


Hat zwar NICHTS mit deinem Problem zu tun.


Schau dir mal die geänaderte Anordnung der Werte,

die du in die Datei "Temp_wetter.txt" schreibst an.


So wird der Code Übersichtlicher.



Nur mal so aus Interesse: 
- Löscht du die Dateien irgendwann wieder.
- Kopierst du die Dateien über FTP-Zugriff auf einen anderen Rechner.




Ansonsten ein nettes Programm.



[gelöscht durch Administrator]