-Menü

Beiträge anzeigen

Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.

Beiträge anzeigen-Menü

Beiträge - hugo

#1
Ich schlage vor wir bauen einen Baustein wie folgt:

Eingänge:
Start: Eingang Bool, wenn aktiviert, startet mit einem Strich, indem intern ein Offset auf den Wert von Run gesetzt wird. Wir starten also immer mit dem Strich!
on: Strichlänge in Meter
off: Lücke in Meter
run: die Lauflänge in Meter
out: True, wenn der Strich aufgetragen wird.

Code:
if start and not active then // steigende Flanke am start erkannt
   offset := run; // offset wird auf run gesetzt, damit wir bei 0 beginnen
endif

active := start; // active merkt sich den Zusatnd für die Flankenerkennung

if (active and ((off + on) >= 0)) then // wir müssen division durch 0 verhindern
   out := ((run - offset) mod (off + on) <= on; // die eigentliche Funktion die den Ausgang steuert
else out := false;
endif



#2
franz, ich denke das if kannst du dir sparen

OUT := (Run mod (Off + On)) >= Off; dieser Baustein beginnt mit einer Lücke.
OUT := (Run mod (Off + On)) <= On; und der beginnt mit einem Strich.

für einen Kombibaustein würde ich Folgendes vorschlagen:

X: interne variable
Offset: Interne Variable // dient zum Kalibrieren um bei beliebigem Run anfangen zu können
Cal: Boolscher Eingang // setzt Offset auf Run wenn True
Start: Eingang Bool // wenn True starten mit Lücke, wenn 0 starten mit Strich
On, Off: Eingänge
Out: Booscher Ausgang

If Cal Offset := Run;
if (Off+On) > 0 then X := ((Run-Offset) mod (Off + On)); wir dürfen nicht durch 0 teilen!
If Start then OUT := X <= On; else OUT := X >= Off;

Mit dem Eingang Cal kann man zu Beginn die Logik Kalibrieren, damit man mit beliebigem Run starten kann.
#3
wenn ich das richtig verstehe benötigen wir folgendes:

Anschlüsse
Off: ist der Abstand der Linien
On: ist die markierte Länge der Linie
Run: ist die gefahrene Strecke
Out: wird True, wenn bemalt wird.

Damit hätte der Baustein lediglich folgende Funktion:

OUT := (Run mod (Off + On)) >= Off;

#4
Ich verstehe die Anforderung leider nicht ganz,
welche Eingänge / Ausgänge sollte der Baustein haben und welche mathematische Funktion?
#5
Böser Wille ist hier definitiv nicht am Werk.
Damit wir das Forum am Laufen halten und dabei nicht im Gefängnis landen, haben wir immer mehr Aufwand mit Überwachung und Einschränkungen.
Wenn wir aus Versehen einiges gelöscht haben tut uns das leid, aber teilweise haben wir an einem Tag tausende von Spamversuchen die wir irgendwie in den Griff bringen müssen.
Leider ist es heute nur noch mit drastischen Maßnahmen möglich, solche Foren zu betreiben.
#6
oscat.lib fuer CoDeSys 3 / Re: Codesys 3.5 SP16
04. Februar 2021, 17:27:38
In der kommenden Release 3.3.4 werde LDT, LTOD und LDATE umbenannt in LOCAL_...
#7
Wenn Ihre UMlaute falsch dargestellt sind dann stellen Sie bitte in Ihrem User Profil die Sprache von Englisch auf Deutsch um.
#8
das neue Release der Network LIB 1.21 steht im Download Bereich zur Verfügung
#9
Das Relaese 3.33 der Oscat basic library steht im Download Bereich zur Verfügung.

mit wenigen fixes entspricht die 3.33 der version 3.32
#10
das ist richtig,
twincat 2.x ist codesys 2.x
twincat 3.x ist codesys 3.x
#11
twincat ist zu 100% codesys, twincat 2.x ist codesys 2.x alle libs sind 100% compatibel auch wenn beckhoff meinst ihnen eine andere endung geben zu müssen.
für twincat6 2.x bistte einfach die codesys *.lib als library einbinden.
die *.lib könnt ihr natürlich auch als normales projekt in twincat wie auch codesys öffnen.
#12
is our english manual sufficient for you?
#13
if you are really interested in optimization:
consider the following:

1. why dont you subtrakt your offset before you convert to a real a floating point operation takes more ressources then a integer opertation the result is going to be the same

2. if you rename your ft_pt1 to Oil_temp you can reference your oil temperature by OIL_TEMP.Out in your project saving the continuous transfer of out to the final output

optimization is never done it can always be improved
#14
your simple program can be even made more efficient by using the multiplier K of FT_PT1 instead of your additional div in front of the ft_pt1 the factor K of ft_pt1 simply multiplies the input in your case this could be 0,101... of course the offset is still needed.

this saves one operation and very important it replaces a division by a multiplication (a division takes approx 3 times more clock cycles as a multiplication does)
#15
whats strange on your project is the fact that you are using a real and then a dword filter.

a filter for real values would be  ft_pt1 !!!!
on the other hand i think i found your problems
in codesys you can see a strange number on the top right corner of any symbol used.
this number defines the execution sequence of the code in your case you multiply first and then you subtract which is obviously not meant to be and will lead to strange results.
you can change the execution sequency by right clicking on any signal and then change the sequence number (not 100% sure whats it called in the english version).

this the sequence problem is your problem with filter_I also