Matrizen in Codesys?

Christian68

New member
Beiträge
2
Punkte Reaktionen
1
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

ich möchte eine Rotationsmatrix in Codesys V2.3 erstellen.

Offenbar kann man Matrizen wohl direkt nicht erstellen, sondern muss irgendwelche Umwege über Arrays gehen. Das Rechnen mit Matrizen muss man dann auch noch selbst programmieren.
Deshalb habe ich folgende Fragen:
a) Gibt es eine Bibliothek oder ähnliches, die Matrizen und Matrizenrechnen unterstützt?
b) Einige Matrixelemente müssten "COS(alpha)" heißen. Es steht also kein direkter Zahlenwert dort, sondern es soll der Kosinus des Winkels alpha berechnet werden. Da erscheint in meiner zusammengeschusterten "Array-Matrix" immer eine Fehlermeldung bezügl. eines fehlerhaften Initalwerts.
Geht das irgendwie?

Danke schonmal fürs lesen. Ich wäre euch wirklich sehr dankbar, wenn einer von euch dafür eine Lösung hat. Weder die Forumssuche noch google hat das was brauchbares ausgespuckt. Bin darüber ehrlichgesagt ziemlich verwundert, da ich ja wohl nicht der erste sein werde, der damit zu kämpfen hat.

viele Grüße
Christian
 

M_o_t

Well-known member
Beiträge
148
Punkte Reaktionen
22
Hallo,

zu den Berechnungen kann ich dir nicht wirkich weiterhelfen, aber zu dem Fehler: die Größe der Arrays können während der Laufzeit nicht verändert werden. Wenn du also z.B. ein Array definierst mit array [0...Variable] of INT muß die Variable zuvor schon einen Wert haben. Es ist also oftmals einfacher das Array ausreichend groß zu definieren und dann halt nur den notwendigen teil wirklich nutzen

Gruß
M_o_t
 

PLC-Gundel

Well-known member
Beiträge
165
Punkte Reaktionen
97
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Christian,

was hast Du vor, möchtest Du den Wert Deiner Matrix bzw. Determinante mit der Regel von Sarrus berechnen ?

Habe in der Oscat Bibliothek unter Vector Mathematik sehr viele Vektor Funktionen gefunden, allerdings keine Wertberechnung einer einzelnen Determinante. Schau mal unter: Oscat Basic Doku.German

Hilfe bietet vielleich auch dieser Beitrag über Matrizenberechnung.
 

PLC-Gundel

Well-known member
Beiträge
165
Punkte Reaktionen
97
Hallo,

zu den Berechnungen kann ich dir nicht wirkich weiterhelfen, aber zu dem Fehler: die Größe der Arrays können während der Laufzeit nicht verändert werden. Wenn du also z.B. ein Array definierst mit array [0...Variable] of INT muß die Variable zuvor schon einen Wert haben. Es ist also oftmals einfacher das Array ausreichend groß zu definieren und dann halt nur den notwendigen teil wirklich nutzen

Gruß
M_o_t

Habe es so verstanden - er möchte einige Arrayelemente anstatt mit einer Variable oder Konstante mit "COS(a)" etc. füllen.
Hab zwar kein Codesys, aber hab's interessehalber mal in TwinCAT ausprobiert. Dort geht es einwandfrei, allerdings muß das Arrayelement
unbedingt ein REAL sein!
 

DaHauer

Well-known member
Beiträge
78
Punkte Reaktionen
13
Hallo,

am ehesten bekommst Matrizennotation, wenn du mit mehrdimensionalen Arrays arbeitest (hier denke ich 3). Die Verwendung der Indizes kannst du so verwenden wie es im allgemeinen für Matrizen gemacht wird.
Weder in CoDeSys noch in TwinCAT gibt es aber fertige Funktionen, die mit Matrizen umgehen können. Hier musst du dir die Funktionen selber bauen (Bsp. Skalarprodukt und Matrizenprodukt).

Vom Datentyp her musst Du sehen was für dich sinnvoll ist. Bei Rotationen und Verschiebungen nehme ich gerne ganzzahlige Datentypen, Komma wird nach rechts verschoben, und rechne die Ergebnisse dann in Real mit den gewünschten Nachkommastellen um.

cheers
 
Zuletzt bearbeitet:
OP
C

Christian68

New member
Beiträge
2
Punkte Reaktionen
1
Hallo,

erstmal vielen Dank für alle Antworten.
Hab ja jetzt die Antwort, dass es keine fertigen Algorithmen für Matrizenrechnungen gibt. Is zwar nicht das was ich gehofft habe, aber zumindest hab ich jetzt Gewissheit.

Ich wollte einige Matrixelmente ursprünglich und einmal zu beginn mit COS(alpha) initialieren. "alpha" sollte dann als globale Variable zur Verfügung stehen und sich ca alle 100ms ändern.
Es sollte einfach eine halbwegs elegante Lösung her. Letztendlich mach ich es jetzt halt so "MATRIX[2,2]:=COS(alpha);
MATRIX[2,3]:=-SIN(alpha);
MATRIX[2,4]:=dz2*SIN(alpha);" usw.
und schreib gemäß dem Link zum "Beitrag über Matrizenberechnung" eine Matrizenmultiplikation.
Nochmals danke für die kompetente Hilfe.
 
Oben