Hallo,
ich bin gerade dabei einige FBs aus der OSCAT-Lib auf dem WAGO 750-837 CANopen-Controller zu verwenden. Dabei habe ich festgestellt, dass z.B. der FT_PID ohne zu murren auf das Zielsystem geladen wird dort aber nicht läuft.
Was mach ich falsch, bzw. kann mein Zielsystem den Baustein überhaupt verwerten?
Gruß
Jürgen
was bekommst du den für meldungen fehler warnungen?
bist du sicher das der baustein auch aufgerufen wird?
Ich bekomme weder Warnings noch Errors. Habe das Problem weiter eingegrenzt und festgestellt, dass die Funktion T_PLC_US nur eine 0 zurückliefert. Ich vermute der 750-837 hat auch garkeine RTC. Habe inzwischen den PID-Regler aus der util.lib verwendet, dieser funktioniert.
die t_plc_us() benutzt auch gar keine RTC, sie liest den hardware timer der sps aus.
jede sps hat so einen hardware timer sonst wäre sie auch gar keine sps.
bei wago wirtd der befeht time() zum auslesen dieses timewrs benutzt.
der sps timer ist ein 32 bit zähler der millisekunden vom start an nach oben zählt.
mich würde gerne interessieren warum das auf der 837 nicht funktioniert.
der spos timer ist streng von der iec vorgeschrieben und auch auf allen sps en vorhanden.
lkannst du bitte mal prüfen ob die funktion time() funktioniert und dieses millisekunden timer ausliest.
kann nes sein das dein controller (750-837) keine dword unterstützt?
welche version des codesys verwendest du?
hast du die aktuelle firmware des conrtrollers
Bei Verwendung der Funktion TIME liefert mir Codesys den Fehler 4338 "Baustein 'TIME' hat keine echten Eingänge" zurück.
Codesys-Version: 2.3.4.7
Firmware: 1.11
HW-Version: 7
Den Controller habe ich vor zwei Wochen direkt von WAGO geliefert bekommen, denke die Version ist aktuell. Deiner Vermutung mit dem DWORD werde ich mal weiter nachgehen.
Das Addieren zweier DWORDS klappt
time kannst du nicht im cfc editor anwenden weil eine funktion ohne eingang dort aus welchem grund auch immer nicht zulässig ist.
time() kannst du nur im st verwenden
Danke, jetzt funktioniert es. Ich bekomme die Zeit in ms
Korrektur, Bekomme die Zeit im normalen Format m s ms
ja das ist richtig, es ist ein ms 32 bit wert, den du als m, s, ms angezeigt bekommst
aber dann muss auch unsere t_plc_us() diesen wert auslesen koennen
Ja, ich habe gerade mal folgendes ausprobiert:
systime:=TIME();
tx:=TIME_TO_DWORD(systime)*1000;
es funktioniert
-------------------------------------
tx:=T_PLC_US();
funktioniert nicht;
???
probier bitte mal folgende zeile aus das ist exact der code den wir in t_plc_us verwenden:
T_PLC_US := TIME_TO_DWORD(TIME())*1000;
der einzige unterschied ist das time() als argument in einer funktion verwendet wird was ja auch zulässig ist.
Habe es ausprobiert, es funktioniert nicht
genau wie bei
tx:=T_PLC_US();
Rückgabewert ist konstant 0
dann solltest du auf einen neueren compiler updaten weil dann sicherlöich etliches probleme machen wird.
wir werden für ältere compiler diese funktion anders schreiben damit es funktioniert.
eine saubere lösung ist das aber nicht.
anbei findest du eine zwischenversion 234 die die geänderte routine t_plc_us und t_plc_ms enthält
danke nochmals für deine inputs
[gelöscht durch Administrator]
Vielen Dank, ich werde es testen und Dir an dieser Stelle davon berichten
hat die geaenderte funktion t_plc_ms() bei dir nun funktioniert?
wenn ja wuerden wir das gerne in der naechsten release freigeben
Hallo, wurde dummerweise aus dem Projekt rausgerissen. Werde mich leider erst Ende Dezember dazu äussern können.
Viele Grüße
Jürgen