# Anfängerfragee CODESYS V3.5 SP8



## mario1 (24 Mai 2016)

*Anfängerfrage CODESYS V3.5 SP8*

Hallo Forum,

ich arbeite gerne in Step7 mit dem AWL Editor und möchte das ganze auch mal mit CODESYS probieren.
Frage:
Ist es richtig das bei CODESYS einen neue Zeile nur über einen Befehl eingefügt bzw. angefügt werden kann und nicht einfach über die RETURN- Taste?
Kann man eine Sprungmarke nicht beliebig in einem AWL- Netzwerk positionieren? Bei meinen Versuchen konnten die Sprungmarken nur in das folgende Netzwerk oder in die erste Zeile des Netzwerkes eingefügt werden.
Mein Versuch ein Beispielprojekt http://www.es.hs-mannheim.de/sps/Beispiele/Kapitel4/Beispiel4_4.html zu Erstellen endete mit 584 Fehlern und 37 Meldungen eine Aktualisierung der Bibliotheken konnte die Probleme auch nicht beseitigen.

mfG
Mario


----------



## RobiHerb (30 Mai 2016)

Wahrscheinlich ist das für Codesys 2.3 geschrieben, da hilft nur Handarbeit bei der Fehlerbeseitigung, ggf. hift auch das Transfer Programm in Codesys 3.x.


----------



## HausSPSler (30 Mai 2016)

Hi,
nein das ist schon ein V3 Projekt denke du musst folgendes tun: (Wie immer wenn du ein Projekt mit neuerer CODESYS Version verwendest, würde ich empfehlen das zu tun)
1. Projekt öffnen - beim öffnen des Projekt fragt CODESYS dich ob du es mit neuem Compiler Version übersetzen willst -> Ja alles aktualisieren
2. dann rechtslick im Gerätebaum auf Control Win V3 und -> Gerät aktualisieren auf die dir angebotene Version

3. Sonderfall da es momentan einen Fehler gibt, der verhindert das man mit VisuProjekten in Simulation arbeiten kann -> VISU_NO_EXCEPTION_HANDLING  setzen als Compiler define
(dieses Problem wird dann mit dem Release im Juni ->3.5SP9 behoben sein)

Dann einloggen/also Simulation und dann geht erst mal das bestehende Projekt mit aktueller Version.
Klar alternativ kannst du dich ja auch auf der SPS (Control Win) einloggen, die ist ja immer dabei auf dem Rechner auf dem dein CODESYS installiert hast. (einfach die SPS im Tasktray starten -dann  in CODESYS dann scannen und einloggen)

Zu deiner AWL Frage: denke ja das ist so... aber ehrlich gesagt unsere Aussage zu AWL folgende:

„In der IEC 61131-3 in der dritten Edition, ist AWL als veraltet/nicht empfohlen kennzeichnet,
3S wird keine Verbesserungen mehr am AWL-Editor in V3  vornehmen"
Muss es also unbedingt AWL sein, wenn das irgendwann eventuell rausfliegt?

Grüße


----------



## mario1 (1 Juni 2016)

Hallo,

danke für die Antworten.
Schade das AWL irgendwann rausfliegt, weil mit AWL kann man sehr effektive, schlanke und besonders schnelle Maschinenprogramme erstellen.

Eine neue Frage:
Ich habe ein Projekt mit Modbus erstellt und kann nicht verstehen warum das Eingangswort %IW3 sich aus Bit %IX6.0 bis %IW7.7 zusammensetzt (siehe Bild).




mfG


----------



## Credofire (2 Juni 2016)

Wie sehen denn die ersten beiden Worte aus? Ist da irgendwo ein offset drin? Ist das vllt wegen des IW1 vom Array und noch mal IW1 als WORD das es irgendwie doppelt zählt? Dann käme das hin.
Aber Codesys hab ich noch kaum Ahnung, aber möchte das gern ändern


----------



## klaus313 (2 Juni 2016)

ich nehem an es gibt ein IW0 dann setzt sich dieses aus IB0, IB1 zusammen.
somit:
 IW1  setzt sich aus IB2 und IB3 zusammen
IW2  setzt sich aus IB4 und IB5 zusammen
IW3  setzt sich aus IB6 und IB7 zusammen


----------



## SPS-freak1 (2 Juni 2016)

Das ist so Standard bei Codesys. Es wird, anders als bei Siemens, jeder Datentyp absolut von 0 gezählt. Heißt von Byte nach Word wird die Adresse quasi halbiert. Aus IB 300 wird IW 150 wird ID 75


----------



## mario1 (3 Juni 2016)

Da bricht für mich eine kleine Welt zusammen wenn I 300.0 Bestandteil von IB 300, IW 150 und ID 75 ist. Warum nach man denn so etwas???? Bei 3S findet man leider nur sehr wenige Informationen zu ihrem Produkt.:!:


----------



## Credofire (3 Juni 2016)

mario1 schrieb:


> Da bricht für mich eine kleine Welt zusammen wenn I 300.0 Bestandteil von IB 300, IW 150 und ID 75 ist. Warum nach man denn so etwas???? Bei 3S findet man leider nur sehr wenige Informationen zu ihrem Produkt.:!:



Ja, ich finde das auch höchst unlogisch.


----------



## Morymmus (3 Juni 2016)

Hmm,

Wenn man sich den Speicherbereich ähnlich einem Zollstock vorstellt, bei dem jede Speicherstelle einem cm entspricht und nun daneben mehrere Schablonen legt, die die Zusammengehörigkeit der Speicherstellen anzeigen, so ist diese Einteilung eigentlich gar nicht so unlogisch.
Ich habe mal versucht, meine Gedanken in einer kleinen Grafik darzustellen:




Das ganze muss natürlich so gestaltet sein, das die Datenformate kongruent bleiben. Wenn man nun auf dem Index des ersten Bytes besteht, so ergeben sich "Lücken" in der Bennung. Wie man in der Grafik sieht gäbe es dann EW0 und als nächstes wäre dann EW2, bei den Double sind die Lücken natürlich noch größer-> ED0, das nächste wäre dann ED4.

Ich denke, das ist letztlich eine Frage der Gewöhnung.

Viele Grüße

Christian


----------



## Pippen (3 Juni 2016)

Wieso interessiert eigentlich welche Adresse dahinter steht?
Man arbeitet doch mit der Variable (dem Array), oder?
Mich hat noch nie interessiert wo die genau liegt.


----------



## SPS-freak1 (3 Juni 2016)

Erschwerend kommt hinzu, dass je nach Byteorder es auch noch IX. 0-7 bzw 0-15 gibt


----------



## HausSPSler (4 Juni 2016)

Noch eine Anmerkung zu diesem Zitat:
>Bei 3S findet man leider nur sehr wenige Informationen zu ihrem Produkt.:!:
Ich weis man macht es nicht gerne (ich manchmal auch nicht ;-) - heutzutage "googelt" man erst mal los bevor man das Naheliegende (die CODESYS Hilfe mit F1) durchsucht)
Hast du mal die Hilfe aufgerufen hier findest du unter:

CODESYS Development System > Referenz Programmierung > Operanden > Adressen

Da ist es eigentlich schon auch beschrieben.
Grüße


----------



## mario1 (8 Juni 2016)

Moin,

ich habe mal wieder ein paar Fragen und Probleme bei der mir die CODESYS Hilfe mit F1 auch nicht weiter helfen kann!

Ich habe eine Modusverbindung zwischen einem Energiemessgerät und einem Raspberry hergestellt. Die Kommunikationsverbindung war sehr leicht einzurichten:TOOL:



die Register wurden gemapt auf IW9 u. IW10, IW11 u. IW12, IW13 u. IW14.


wenn mann mehrfach mit der linken Maustaste auf das IW klickt erscheint ein M im blauen Kreis. Was ist das?
Die zwei Modbusregister pro Kanal beinhalten einen Messwert in Float32. Da es leider nach IEC Programmierung nicht möglich ist das ganze als Doppelwort aufzurufen und die Wörter zu tauschen wie z.B

L ED9
TAK
T Real

habe ich das ganze versucht so zu lösen



Die zwei Wörter nach Schmiermerker und dann Merkerdoppelwort laden.
So, nun alles in richtiger Reihenfolge in temp2 (Datentyp Real)
Erwarteter Wert 213.41623 . Wieso wird mir der falsche Wert angezeigt?
Im Netzerk 12 habe ich versucht einen Float32 in dualer Darstellung (2#0100001101000111111100100001010) = (199.97281dez) in die Variable temp4 (Datentyp Real) zu übertragen.
Ich bekomme aber einen Wert angezeigt (siehe Bild) der einer ganz anderen Dualzahl entspricht.

mfG


----------



## excelite (8 Juni 2016)

==== gelöscht ====


----------



## HausSPSler (8 Juni 2016)

Hi,
das blaue 'M' bedeutet das du manuell Adressen festlegen willst/kannst würde ich nie tun... das kann doch CODESYS selber automatisch besser. (steht in der Hilfe, schimpf mich nicht dafür ;-) )
ja, ja Modbus kennt halt nur Wörter sonst nichts darum musst du die reals eben selber zusammenbauen IEEE
Standard 754 format. Das kann ja auch von Slave zu Slave unterschiedlich sein ob du noch swappen musst oder eben nicht. Ein gepfrickel eben... (Vielleicht hört man das ich nicht so der Modbus Fan bin... geht noch nichts über einen modernen Feldbus mit dem man auch die SLaves einfach scannen usw... kann)
Grüße


----------



## mario1 (9 Juni 2016)

Hallo,

jetzt habe ich nur noch das Problem mit der Gleitpunktzahl. 
Float32 ist doch das selbe wie Datentyp Real. Nach dem move wird doch die Dualzahl nur anders interpretiert. 

mfG


----------



## PN/DP (9 Juni 2016)

Zeigt Codesys beim Beobachten des AWL-Programms die Werte der Operation oder das was am Zyklusende in der Variable steht? Vielleicht ist der falsch angezeigte Wert in "temp2" nur ein Beobachtungsproblem?

16#4355_6A8E = 2#01000011_01010101_01101010_10001110 = 213.41623

Harald


----------



## mario1 (9 Juni 2016)

Ich habe es auch mit einem Merkerdoppelwort versucht und in der Visu angezeigt.
In der Visualisierung habe ich aber keine Möglichkeit gefunden das Merkerdoppelwort bei der Textvariable s%MD40 als Gleitpunktzahl interpretieren zu lassen.
Gibt es bei CoDeSys die Möglichkeit die Typprüfung auszuschalten?

mfG


----------



## PN/DP (9 Juni 2016)

Ich kenne mich mit Codesys nicht aus, habe aber eine Idee: Kann man in Codesys eine REAL-Variable und eine DWORD-Variable per UNION oder AT auf die selbe Adresse legen?

Alternativ: Kann man in Codesys-AWL sowas programmieren?

```
VAR
  dwVar : DWORD;
  rVar : REAL;
  pt_REAL : POINTER TO REAL;
END_VAR

LD 16#43556A8E
ST dwVar

LD dwVar
ADR
ST pt_REAL
LD pt_REAL^
ST rVar
```

Wenn es in AWL nicht funktioniert, dann programmiere in ST:

```
dwVar := 16#43556A8E;  //Testwert

pt_REAL := ADR(dwVar);
rVar : = pt_REAL^;     //sollte hier 213.41623 ergeben
```

Harald


----------



## mario1 (10 Juni 2016)

Schade für die Lebendszeit!!!!
Ich bekomme es einfach nicht hin (mit CoDeSys) ein Doppelwort als 32 Bit Gleitpunktzahl zu interpretieren.
Vor meinen Versuchen mich mit einer standardisierten Software zu beschäftigen hätte ich nie gedacht das dass überhaupt Probleme bereiten kann.
Vielleicht liegt es daran das die Software so schlau ist und einfach nicht akzeptieren will das ich ein Doppelwort (32 Bit) in einer globalen Real Variable (32 Bit)abspeichern will. Ich finde es besser wenn der Programmierer die Möglichkeit hat selbst zu entscheiden ob er die Überprüfung einschaltet oder auch nicht.



meine offline Ansicht der Visu


meine online Ansicht der Visu



mfG


----------



## PN/DP (10 Juni 2016)

Hast Du meine Programmvorschläge aus Beitrag #20 ausprobiert?
Du kannst nicht DWORD_TO_REAL benutzen --> Erklärung siehe hier

Harald


----------



## mario1 (10 Juni 2016)

Danke Harald,

so dumm muss man erst mal denken.
Ich war der Meinung das mit dem Platzhalter %...f die Interpretation geklärt ist.

mfG
Mario


----------



## mario1 (23 Juni 2016)

Hallo zusammen,

ich habe eine Frage zu persistenten Speicherbereichen.

Ich habe eine persistente Var vom Typ String angelegt (Bild1)


Danach habe ich eine temporäre Var vom Typ String angelegt und der persistenten Var einmal den String 'Alles OK' zugewiesen. 




Test 1 Online Change
Erg 1 String bleibt erhalten

Test 2 u. 3 Reset warm und kalt
Erg 2 u. 3 String bleibt erhalten

Test 4 Reboot Raspberry
Erg 4 
Beim einloggen ohne Änderung bleibt der String erhalten aber in der Speicheransicht kann die Adresse der persistenten Var nicht gefunden werden.
Bei einem Einloggen mit Online Change (unverändertes Projekt) ist die persistente Var gelöscht.

Gibt es eine Erklärung dafür?


----------



## nl_tmp (24 Juni 2016)

Beitrag gelöscht


----------



## nl_tmp (24 Juni 2016)

Beitrag gelöscht


----------



## mario1 (24 Juni 2016)

CoDeSys nach IEC61131 ?

mfG
Mario


----------



## nl_tmp (24 Juni 2016)

Beitrag gelöscht


----------



## mario1 (27 Juni 2016)

Ist es nun möglich bei CoDeSys auf einem Raspberry einen remanenten Speicherbereich anzulegen, der auch nach einem Reboot seine Daten nicht verliert?

Laut Meldung wurden persistente Daten alloziert.






Oder geht das mit einem Raspberry nicht?

mfG
Mario


----------



## Pippen (27 Juni 2016)

Hast Du auch mal versucht die Variable nur als "PERSISTENT" zu deklarieren und nicht gleichzeitig als "RETAIN" und "PERSISTENT"?
Ich wusste gar nicht, dass der Compiler dies zulässt.


Auf meinen Beckhoff Rechnern funktioniert dies tadellos.


----------



## mario1 (28 Juni 2016)

Morgen,

das Objekt Persistent Retain legt der Kompiler beider Erstellung der PersistentVars an.

VAR_GLOBAL PERSISTENT RETAIN
    Test_Persistent:STRING;
END_VAR

Wenn ich die Var nur Flag Persistent deklariere kommt die Meldung Persitent Var müssen auch Retain deklariert werden.
Ich habe aber meinen Fehler gefunden. Der lag darin, dass ich die Variable mit dem Objekt  PersistentVars. aufrufen muss.

Lösung: PersistentVars.Test_Persistent

Dann bleiben die Daten auch nach einem Reboot erhalten.

mfG
Mario


----------



## mario1 (6 Juli 2016)

Hallo Forum,

wie bekommt man die Uhrzeit und das Datum an die X-Achse von einem Trace?




mfG
Mario


----------



## mario1 (8 Juli 2016)

Ist das bei CoDeSys V3 nicht möglich auf der X-Achse andere Werte abzutragen. Ist nur die Zeit möglich?

mfG
Mario


----------



## HausSPSler (11 Juli 2016)

Hi Mario,
Im Trace ist nur X-Achse Zeit möglich, ist ja so wie ein Oszi,
irgendwann wird es ein XY Visu-Element geben, aber das dauert vermutlich noch.
Aktuell kannst du nur was selber bauen siehe Projektbeispiel.

Grüße


----------

