Timer zeiten über Poti einstellen??

Zuviel Werbung?
-> Hier kostenlos registrieren
Hey,

das Ding soll verkauft werden, oder?
Und ein FC zum Einlesen von Analogwerten wird doch da sein. Es gibt doch sicher noch mehr Messungen als die Poti...
Ausserdem lassen sich die Probleme die ich oben geschildert habe doch nicht leugnen...
Wenn du durch nen Drahtbruch keinen gültigen Zeitwert im MW10 stehen hast, dann funktioniert das Programm doch schon nicht mehr richtig...
 
Hallo,

ich halte die Lösung für bedenklich. Meiner Meinung nach kannst mit dem Programmcode



niemals auf eine Anlage losgehen. Probleme sind vorprogrammiert...
Was machst denn bei nem Drahtbruch?
Das Beispiel funktioniert auch nur sauber, wenn sich deine eingestellte Zeit immer innerhalb einer Zeitbasis befindet. Bei 0-20s z.B. hast schon n Problem.
Wenn du dann immer die Zeitbasis für deine "20mA" Zeit schreibst werden kleine Einstellungen sehr ungenau... Bei 0-1000s z.B. wird das Problem noch viel größer.



-> Es ist mehr Programmierung nötig, ansonsten hast meiner Meinung nach nur ne billige Bastellösung.

Ich persönlich würde die Analogwerte getrennt einlesen mit korrekter Fehlerauswertung, ggfs. Ersatzwertaufschaltung usw.
und dann anhand des eingelesenen Wertes die optimale Zeitbasis in einem separaten Fc berechnen und von dort die Zeit ausgeben (siehe Seite 1) ;)

Schöne Grüße

hallo
bei einem drahtbruch bleibt der timer immer auf 10 sek. stehen ,was nicht weiter schlimm ist. ( wie willst du bei einem analogen wert eine drahtbruchsicherheit programmieren. hätte da gar keine idee ).

die zeit kann gar nicht ausserhalb der zeitbasis,weil sie auf max 10s begrenzt ist.

welches problem meinst du genau wenn ich von 0-20 sek einstelle ist dann genau das gleiche ausser das die zeit dann auf 20 sek. begrenzt ist.(vollanschlag poti )

bei der einstellung 0-1000 sek. gebe ich dir recht das wird ungenau.

ich werde die über den poti eingestellte zeit über eine anzeige ausgeben.damit müsste man dann die zeit (0-10sek.)genau einstellen können ,auch im ms.bereich.

werde deine lösug auch mal progr. und testen.

gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn deine Zeit 20s sein soll kannst nicht mehr
l w#16#1000
schreiben, weil das die Zeitbasis 0,1s ist.
-> 999 bcd *0,1 =9,99s max.

alles drüber braucht ne andere Zeitbasis.

je kleiner deine Zeitbasis, um so genauer ist dein Timer.
Deshalb ist es interessant, abhängig vom eingestellten Wert immer die kleinstmögliche Zeitbasis zu verwenden...

Zum Drahtbruch:
Natürlich kannst du Softwaretechnisch keinen Drahtbruch verhindern, aber erkennen und darauf reagieren, indem du z.B. einen Ersatzwert schreibst...

Für mein FC von Seite 1 musst nicht viel programmieren, ist ja ne fertige AWL-Quelle. Symbol für FC anlegen übersetzen, fertig...
Ist halt für einen Eingang von 0-100% geschrieben...

Warum nimmst eigentlich die Potis wenn du eh ne Visu hast? :confused:
 
leider klappt deine programmierung nicht ohne weiteres.
die erste hälfe des potis geht nur bis 300 ms und dann macht es einen sprung auf über 5min und lauft wieder richtung o sek. runter. werde mich heute abend mal intensiver drum kümmern
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo wankeldriver,
ich hatte dich zwar gebeten, mal ein paar Eckwerte zu posten, aber leider reagierst du nicht darauf, denn es ist nicht ganz so einfach, wie es bisher dargestellt wurde.
1. Wer garantiert, dass bei Linksanschlag der Analogeingang 0 liefert. Ich gehe mal davon aus, dass das nicht so ist und definiere diesen Wert mal mit Min.
2. Hat dein Poti Rechtsanschlag bedeutet das auch nicht 32768 am Analogeingang sondern einen kleineren Wert, ich nenne ihn mal Max.
3. Den aktuellen Wert nennen ich mal Xe.
Dann berechnet sich deine Zeit nach folgender Formel:
t=900*(Xe-Min)/(Max-Min)+100
Ergebnis in ms. Dieser Wert muss nun noch in ein gültiges Zeitformat umgerechnet werden.
Nachfolgend eine AWL mit angenommenen Werten (ist aus Zeitgründen aber noch nicht komplett getestet, vor allem wäre es besser, deine Werte zugrunde zu legen!)​

L 2.345600e+04 // Wert bei Rechtsanschlg
T #Max
L 1.234000e+03 // Wert bei Linksanschlag
T #Min
-R
T #Max_Min
// L PEW 20
L 2222 // Angenommer INT-Wert aus Analogbaugruppe
DTR
L #Min
-R
T #Xe_Min
L 9.000000e+02 // Beginn der Formelberechnung
L #Xe_Min
*R
L #Max_Min
/R
L 1.000000e+02
+R
T #Ergebnis_in_ms // Ende der Formelberechnung
L 9.995000e+02 // Wandeln in gültigen Zeitwert
<R // Kann Ergebnis in 1/100s gewandelt werden?
SPB Hund // <-- ja
L #Ergebnis_in_ms // wenn nicht, dann in 1/10s wandeln
RND
DTR
L 1.000000e+01
/R
RND
DTB
L W#16#1000 // Zehntel Sekunden
OW
T MW 10
BEA

Hund :L #Ergebnis_in_ms
RND
DTB
T MW 10


Probiers einfach mal und melde dich wieder, kostet ja nix!
 
L 2.345600e+04 // Wert bei Rechtsanschlg
T #Max
L 1.234000e+03 // Wert bei Linksanschlag
T #Min
-R
T #Max_Min
// L PEW 20
L 2222 // Angenommer INT-Wert aus Analogbaugruppe
DTR
L #Min
-R
T #Xe_Min
L 9.000000e+02 // Beginn der Formelberechnung
L #Xe_Min
*R
L #Max_Min
/R
L 1.000000e+02
+R
T #Ergebnis_in_ms // Ende der Formelberechnung
L 9.995000e+02 // Wandeln in gültigen Zeitwert
<R // Kann Ergebnis in 1/100s gewandelt werden?
SPB Hund // <-- ja
L #Ergebnis_in_ms // wenn nicht, dann in 1/10s wandeln
RND
DTR
L 1.000000e+01
/R
RND
DTB
L W#16#1000 // Zehntel Sekunden
OW
T MW 10
BEA

Hund :L #Ergebnis_in_ms
RND
DTB
T MW 10


Probiers einfach mal und melde dich wieder, kostet ja nix!

hi musste noch ein paar sachen einfügen.ich bekomme die zeit aber nicht auf 0-10 sek und bei dem sprung hund uberspringt das programm 2 sek.
links und rechtsanschlag habe ich schon eingetragen.
s7 cpu 300 er
wenn du noch daten drauchst sag bitte welche

L 5.617300e+004 // Wert bei Rechtsanschlg
T #max
L 1.040000e+003 // Wert bei Linksanschlag
T #min
L #max
L #min
-R
T #max_min
L PEW 20
ITD
T MD 50
L 0
T MW 50
L MD 50
DTR
T MD 60
L MD 60
L #min
-R
T #xe_min
L 9.000000e+002 // Beginn der Formelberechnung
L #xe_min
*R
T #zwischenwert
L #zwischenwert
L #max_min
/R
L 1.000000e+002
+R
T #ergebnis_in_ms // Ende der Formelberechnung
L 9.995000e+002 // Wandeln in gültigen Zeitwert
<R // Kann Ergebnis in 1/100s gewandelt werden?
SPB Hund // <-- ja
L #ergebnis_in_ms // wenn nicht, dann in 1/10s wandeln
RND
DTR
L 1.000000e+001
/R
RND
DTB
L W#16#1000 // Zehntel Sekunden
OW
T MW 10
BEA
Hund: L #ergebnis_in_ms
RND
DTB
T MW 10
 
Hallo wankeldriver,
Zunächst möchte ich einen Fehler korrigieren. Meine Formel berechnet die Zeit nicht in ms sondern in 1/100s. Das Programm stimmt aber!
Nun zum eigentlichen Problem:
1. Analoge Baugruppen belegen Bit 15 im PEW mit dem Vorzeichen. Das macht auch Sinn, weil ja ein Messbereich von +/-10V das Vorzeichen braucht. Dein Max-Wert liegt bei 56173. Das bedeutet, es handelt sich um eine negative Zahl. Mit dem Analogeingang kann also irgend etwas nicht stimmen. Gib einfach mal den Befehl L PEW20 ein und beobachte im Status Baustein den Inhalt von Akku1. Der Wert muss immer im positiven Bereich liegen (0...32767, gültiger Messbereich bei Widerstandsgeber 0...27648, größere positive Zahlen charakterisieren den Übersteuerungsbereich!, negative Werte sind gar nicht möglich).
2. Der von dir hinzugefügte Code ist überflüssig, er tut effektiv nämlich nichts, ausser in die MD50 und 60 etwas zu schreiben. Ich habe mein Programm noch einmal getestet -> es funktioniert und rechnet richtig!
3. Ändere die letzten 7 Befehle
Original:
OW
T MW 10
BEA
Hund: L #ergebnis_in_ms
RND
DTB
T MW 10

ab in:
OW
T MW 10
SPA Ende
Hund: L #ergebnis_in_ms
RND
DTB
T MW 10
Ende: NOP 0
Vorteil: Jetzt kann der Programmcode weitergeführt werden, im MW10 steht der gültige Zeitwert im richtigen Format.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das programm läuft jetzt.
der eindestellte messbereich ist 0- 10 v
die zusätlichen merker brauche ich um in das real zahl format zu wechseln.(eingang ist ja int. zur berechnung brauche ich real oder ??)
ohne diese umwandlung lief es gar nicht bei mir.

gruss und thx
 
Hallo wankeldriver,
nochmal zur Klarstellung:
Das PEW 20 (und überhaupt jedes Wortformat) umfasst 16 Bit (Bit15 .. Bit0). Der Befehl L PEWxxx schreibt in den Akku1 einen Integerwert, d.h. eine Zahl mit Vorzeichen. Damit umfasst der Wertebereich die Zahlen -32768 .. +32767. Zahlen außerhalb dieses Bereiches sind nicht möglich! Deine Vorgabe +56173 kann also nicht stimmen!
Und hier mal eine ausführlichere Darstellung der Befehlsfolge:
L PEW20 // Akku1 enthält den Zahlenwert im INT-Format
DTR // wandelt im Akku1 das INT-Format in das Real-Format, dieses belegt jetzt 32 Bit
Man braucht also keinerlei Hilfsmerker.
Zum Abschluss nochmals das leicht veräderte Programm, wobei immer noch das Problem des Wertes bei Rechtsanschlag besteht.

L 2.345600e+04 // Wert bei Rechtsanschlg ????
T #Max
L 1.040000e+03 // Dein Wert bei Linksanschlag
T #Min
-R
T #Max_Min // Wert Max-Min
L PEW 20 // Eingelesener Analogwert im INT-Format
// L 32767 // Angenommer INT-Wert aus Analogbaugruppe
DTR // wandelt Analogwert in das Real-Format
L #Min
-R // Berechnet Xe-Min
T #Xe_Min // Wert Xe-Min
L 9.000000e+02 // Beginn der Formelberechnung
L #Xe_Min
*R
L #Max_Min
/R
L 1.000000e+02
+R
T #Ergebnis_in_hund // Ende der Formelberechnung
L 9.995000e+02 // Beginn der Wandlung in gültigen Zeitwert
<R // Kann Ergebnis in 1/100s ausgegeben werden?
SPB Hund // <-- ja
L #Ergebnis_in_hund // wenn nicht, dann in 1/10s wandeln
L 1.000000e+01 // 1. durch 10 dividieren
/R
L 1.000000e+03 // 1000 addieren, wegen Formatwandlung
+R
RND // wandeln in DINT-Format
DTB // Wandeln in BCD-Format
T MW 10 // Zeitwert in 1/10s (10,0..13,7s)
SPA Ende
Hund :L #Ergebnis_in_hund // Ausgabe in 1/100s
RND
DTB
T MW 10 // Zeitwert in 1/100s (0..9,99s)
Ende :NOP 0
 
Und hier mal eine ausführlichere Darstellung der Befehlsfolge:
L PEW20 // Akku1 enthält den Zahlenwert im INT-Format
DTR // wandelt im Akku1 das INT-Format in das Real-Format, dieses belegt jetzt 32 Bit

Das ist leider wieder mal falsch.
Das mit dem Zahlenbereich stimm schon, aber wenn du eine Integerzahl, die ja negativ sein kann, in Real umwandeln willst, musst du vorher das VZ entsprechend in das Ganzzahlformat überführen, DTR wandelt nämlich (wie der Name ja ganz klar sagt) GANZZAHLEN (D, 32 Bit) in Realzahlen um, keine
INTEGERZAHLEN (16 Bit)

Richtig ist also:

Code:
L PEW20
ITD                       // [B]16 bit Integer nach 32 Bit GANZZAHL wandeln, nur dann stimmt ein negatives Vorzeichen ![/B]
DTR
Ich glaub, du hast mal geschrieben, du wärst 65 Jahre alt und Lehrer...

Mein Tip: Setzt dich zur Ruhe und züchte Rosen.
Die Feinheiten der SPS - Programmierung scheinen dir nicht mehr vermittelbar.

Sorry.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo unbekannt,
schade, dass es in diesem Forum immer wieder unsachliche Kommentare gibt. Besser wäre die Klarstellung eines Fehlers, wenn denn einer da wäre:
L PEW20 // liesst eine 16 Bit INT-Zahl in den Akku1 und macht dabei die Bit 16..31 des Akku=0. Da es sich im vorliegenden Falle nur um pos. Zahlen handeln kann, steht im Bit 15 ebenfalls eine 0. Damit sieht die Codierung der eingelesenen Zahl im INT-Format genau so aus wie im DINT-Format. Das pos. VZ wird durch eine 0 repräsentiert und ob diese nun im Bit 15 oder 31 steht, ist egal. Ergo, der Befehl ITD kann weggelassen werden, denn er ist nutzlos.
DTR // wandelt die pos. INT-Zahl in eine Realzahl mit pos. VZ.
Was soll daran falsch sein? Falls möglich, bitte eine sachliche Antwort.
Im Übrigen, wieso funktioniert mein Programm eigentlich, wenn es doch angeblich falsch ist?
Auch hier bitte nur sachliche Antworten.
Und an wankeldriver: Lass dich nicht verunsichern, mein Programm ist RICHTIG und hilft dir hoffentlich!
 
Ergo, der Befehl ITD kann weggelassen werden, denn er ist nutzlos.

Ich zitiere mich hier gerne selbst mit den Worten:

Die Feinheiten der SPS - Programmierung scheinen dir nicht mehr vermittelbar.

Wenn du deinen "Schülern" Halbwahrheiten und offensichtliche Fehler beibringst und nachher dich wie ein Wurm mit Scheinargumenten herauszuwinden suchst, warum soll ich da noch Zeit mit dir verschwenden ?

Ich weis lieber auf deine Fehler hin, so dass die Antwortsuchenden in diesem Forum nicht von dir in die Irre geführt werden.
 
vom prinzip habt ihr beide recht.
wenn man es korrekt machen will ist das was ug schreibt richtiger.
für unerfahrene leute die das nicht wissen führt das evtl zum grossen ? falls doch ein negativer wert im pew steht.
 
Hallo,
ich melde mich gerne nochmal.
So wie Volker argumentiert, tut es richtig gut. Das hat Niveau!
In diesem Forum gibt es aber leider Leute, die grundsätzlich ein Haar in der Suppe finden wollen. Hätte ich nun (nur bezogen auf die vorliegende Aufgabe versteht sich) die Befehlsfolge ITD, DTR verwendet, dann hätte garantiert jemand festgestellt, dass der ITD-Befehl überflüssig ist und dies angemeckert.
Wenn man im Forum jemandem helfen will (kostenlos versteht sich), dann schreibt man ein Programm. Das ersetzt aber keine Unterrichtsstunde, in der man alle Besonderheiten ausführlich besprechen könnte. Falls der "Geholfene" dann noch Verständnisschwierigkeiten haben sollte, kann er das ja gerne posten. Dann würde ich ihm eine sachliche Erklärung nachliefern.
In einem Punkt habe ich leider keine Erfahrung nämlich:
Wenn ein externer Programmierer einem Auftraggeber ein Programm abliefert (Problem ist ja mit der vorliegenden Aufgabenstellung vergleichbar), inwieweit wird der Auftraggeber in die exakte Programmierstrategie (Befehl für Befehl) eingewiesen. Ich würde eher erwarten das gesagt wird:"Hier ist das Programm, es ist getestet, alles i.O. Die Aufgabe ist damit abgeschlossen".
 
Hätte ich nun (nur bezogen auf die vorliegende Aufgabe versteht sich) die Befehlsfolge ITD, DTR verwendet, dann hätte garantiert jemand festgestellt, dass der ITD-Befehl überflüssig ist und dies angemeckert.

Naja, auch wenn es nix nutzt, Herr Oberleerer, hir nochmal kurz als nähere Erläuterung:

ERST schreibst du (richtig) das Integer +/- 32k darstellt.

DANN willst du eben dieses Integer direkt nach real wandeln und gehst mit keinem Wort darauf ein, dass dass eben nur mit POSITIVEN Integertzahlen funktionieren kann.

Aus deinem Kontext heraus muss es aber so erscheinen, dass das auch mit den von dir einen Satz zuvor erwähnten NEGATIVEN Zahlen auch geht.

Schon im Siemens - Kindergarten lernt man die Bedeutung des ITD vor einer DTR - Wandlung !

Deine Darstellung ist und bleibt grob Falsch.
Das ist kein "Haar" in der Suppe, sondern ne ganze Perrücke.

Wer hier den Lehrer raushängen lassen will, der muss auch schon in der Oberliga mitspielen können !

Du bietest nur 2-klassige Kreisliga.

So, diese Unterrichtstunde kostet dich die Kleinigkeit von 327 Euro Plus Abmahngebühr.... :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@eNDe

Hallo,
ich melde mich gerne nochmal.
So wie Volker argumentiert, tut es richtig gut. Das hat Niveau!
In diesem Forum gibt es aber leider Leute, die grundsätzlich ein Haar in der Suppe finden wollen. Hätte ich nun (nur bezogen auf die vorliegende Aufgabe versteht sich) die Befehlsfolge ITD, DTR verwendet, dann hätte garantiert jemand festgestellt, dass der ITD-Befehl überflüssig ist und dies angemeckert.
Wenn man im Forum jemandem helfen will (kostenlos versteht sich), dann schreibt man ein Programm. Das ersetzt aber keine Unterrichtsstunde, in der man alle Besonderheiten ausführlich besprechen könnte. Falls der "Geholfene" dann noch Verständnisschwierigkeiten haben sollte, kann er das ja gerne posten. Dann würde ich ihm eine sachliche Erklärung nachliefern.
In einem Punkt habe ich leider keine Erfahrung nämlich:
Wenn ein externer Programmierer einem Auftraggeber ein Programm abliefert (Problem ist ja mit der vorliegenden Aufgabenstellung vergleichbar), inwieweit wird der Auftraggeber in die exakte Programmierstrategie (Befehl für Befehl) eingewiesen. Ich würde eher erwarten das gesagt wird:"Hier ist das Programm, es ist getestet, alles i.O. Die Aufgabe ist damit abgeschlossen". Heute 16:48
Ich stimme dir zu, ich vesuche auch immer, es den Fragestellern korrekt darzulegen, gelingt natürlich nicht immer, ich wollte ja nie Lehrer werden, hab zu wenig Geduld dazu ;).

@ug
Sei nicht ungerecht, Fehler korrigieren ist ok, aber nicht persönlich werden (wenn schon, dann per pn oder bei uns im Chat (wo du ja nicht hinwillst:ROFLMAO:/hintraust:cool:)) Ich persönlich bin über jeden froh, der helfen will und wenn er einen Fehler macht, kann ich glänzen, ist doch auch schick, oder?:ROFLMAO:
 
@ug
Sei nicht ungerecht, Fehler korrigieren ist ok, aber nicht persönlich werden (wenn schon, dann per pn oder bei uns im Chat (wo du ja nicht hinwillst/hintraust:cool:))

Ich werd doch nicht persönlich ??
Aber wenn ich nen Dummkopf sehe, muss ich ihm das auch sagen ... :ROFLMAO:

Das mit dem Chat hatte ich dir doch per PM erklärt, oder ??

Ich persönlich bin über jeden froh, der helfen will und wenn er einen Fehler macht, kann ich glänzen, ist doch auch schick, oder?:ROFLMAO:

Klar !
Du bist einfach zu gut für diese Welt ...

;)
 
Zurück
Oben