Step 7 NullDivision abfragen SCL

gout

Level-1
Beiträge
28
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
programmiere gerade in SCL ein wenig for mich hin und habe mich gefragt ob ich einen div0 abfragen kann. Hab es schon probiert, mit <> 0 das kann ich schonmal aber was schreibt die SPS genau rein, damit ich ganz genau nach einer Div0 abfragen kann.
Problematisch wrid es ja, wenn ich eigentlich einen Wert ausrechnen will, und die Variablen des Wertes über eine Array und eine Schleife laufen lasse. Dann Kann ja einfach mal ein Wert in dem Array 0 sein.
Also ist <>0 eher Schlecht geeignet um eine Nulldivision abzufragen.
Hat da Jemand eine idee?
Danke Schonmal im vorraus.

Gout
 
Hallo,
ich würde entweder dafür sorgen, dass deine Werte mit denen du dividierst nicht "0" werden (also z.B. 0,000001 darufaddieren) oder die Berechnung verhindern wenn es zu der Konstellation kommt (Überprüfung in der Schleife) - es ist ja wahrscheinlich so, dass du als Berechnung weiterhin einen verwertbaren Wert erhalten willst und nicht die Programm-Abarbeitung abbrechen willst.

Gruß
Larry
 
Hab ich jetzt auch so gemacht einfach das Array über eine Schleife abgefragt, allerdings scheint es so als ob man als Wert immer den Maxwert, bei Real halt 2147483647, rausbekommmt.
Hab es einfach mal geschrieben wer es ausprobieren möchte.
Bin nur bei MATLAB gewesen und dachte es gibt auch die möglichkeit wie bei MATLAB Inf abzufragen.
Danke schonmal für die hilfe

FUNCTION_BLOCK FB704
VAR
x : REAL := 0.0;
y : REAL := 12.0;
z: REAL;
n: INT;
END_VAR

BEGIN
z := y/x ;
IF z <> 0 THEN
n := 1;
ELSE
n:=0;
END_IF;
END_FUNCTION_BLOCK
 
Hab ein Algorithmus geschrieben der mit knapp 100 Arrays(Bzw. Matrizen) Arbeitet und und diese im Gewissen maße auch miteinander Verknüpft usw.
Nun war es eine ganze menge Arbeit, bei jeden Rechenschritt herauszufinden welche Bedingung dafür sorgt das der nenner 0 wird, und diese Auszuschließen.
Es wäre einfach gewesen die SPS da (wie in MATLAB) "Inf" eintragen zu lassen und im nachhinein die vollständige Schlußmatrix darauf zu prüfen.
Wie es der Kollege gemacht hat der mir den MATLAB code gegeben hat. Leider habe ich die Aktuelle und letzte Version auch gerade erst bekommen. Hatte mich schon gefragt wie er den Fehler nachher rausholen will :-( jetzt ist es an mir hängen geblieben.
Trotzdem danke für die Antworten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
da die SPS dem IEEE 754 standard folgt und ein real=single=float ist kannst du z.B. auf (32Bit)0x7f800000 Prüfen

Code:
float a=10.0f;
float b=0.0f;
float c=a/b;
if( c == std::numeric_limits<float>::infinity() )
{
  // ist "1.#INF000"
}
 
Ne, ich wollte ja Wissen was in die Variable z geschrieben wird. Ob das eindeutig und damit Abfragbar ist.
Nur nochmal um die frage zu erklären, bei MATLAB wird bei z.b. 4/0 = inf, und man kann dann direkt abfragen
ob x/y = inf ist. Sowas wäre super gewesen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja, was die SPS intern macht, meinte ich ja nicht... Aber die Matlabprogrammierung ist was ganz Anderes als SPS-Programmierung. Dabei meine ich jetzt dieses Matlab m-Script, was vermutlich auch der TE verwendet.

Gruß.
 
Wirklich komisch:

Ich finde keine SCL Funktion die auf NaN oder +/-INFINITY testen kann - die gehören aber ganz klar zum Standard und alle Programmiersprachen die auf der IEEE 754 aufsetzen
haben auf Support für diese Funktionen, nur SCL nicht?

Man darf die Zustände in der SPS erzeugen aber kann nicht ohne Tricks (selbst mit den Bits spielen) darauf testen???
 
jo, naja aber bevor ich zu jeder Variablen z noch ne Variable n hinzufüge, in der steht, ob z=0 ist, kann ich auch gleich vor jeder Division abfragen, ob der Divisor 0 ist.

Und was wollte uns LowLevelMan sagen? :confused:

Gruß.

Da ich am der Berechnungen immer Array (Bzw. Matrizen) da stehen habe kann ich dann aber besüber das Array abfragen, das wäre weniger arbeit. (Denke Ich :roll:)
Aber genug davon.
Besser ist verhindern, das stimmt schon.
Prinzipiell kann man auch 7f800000 abfragen, was auch für 99,99999% aller fälle Funktioniert.
 
Die Sprache kann man fast 1:1 übernehmen. (Kleine syntaktische ausnahmen gibt es)

naja ich weiss nicht... Wenn ich in Matlab an die ganzen Operationen mit Array oder Matritzen denke? A*B oder A.*C sowas gibt's in SCL garnicht. weiterhin sind ja viele Funktionen, welche ich in Matlab verwende in einer SPS nicht vorhanden. Dann die ganzen Besonderheiten mit den DBs/Merkern/EAs in der SPS... ich sehe da mehr Unterschiede als die grundlegenden Dinge Gemeinsamkeiten bieten...

Gruß.
 
Zuletzt bearbeitet:
Zurück
Oben