DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Zuweisung eines Kanals an eine Variable

Ich habe versucht diese Sequenz aus Diadem 8 auf Diadem 2017 umzuschreiben. In Abhängigkeit vom Vorzeichen von M01 sollen Berechnungen durchgeführt werden.

ch(fxp)        := (ch(M01)>=0)*(ch(M01)*2+ch(M02)*7;

ch(fxn)        := (ch(M01)<0)*(ch(M01)*8+ch(M02)*4;

ch(Fx)         := (ch(fxp)+ch(fxn));

 

Mit der unteren Sequenz erhalte ich den Fehler „Die Variable verwendet einen Automatisierungstyp, der von VBScript nicht unterstützt wird“ (Zeile 10, Spalte 1, erste If-Anweisung). Ich weiß nicht wie ich der Variablen „ifwert“ den Wert des Kanals M01 zuweisen kann. Ich könnte auch auf die Variable verzichten, wenn die If-Anweisung direkt den Wert des Kanals M01 akzeptieren würde, wie in Diadem 8. Kann mir jemand hierbei helfen?

Vielen Dank, Christian

 

Option Explicit  'Erzwingt die explizite Deklaration aller Variablen in einem Script.

Dim ifwert

Ifwert = Ch("[1]/M01")

If (ifwert >= 0) Then

Call Calculate("Ch(""[1]/fxp"") = Ch(""[1]/M01"")*2+Ch(""[1]/M02"")*7")

End If

If (ifwert < 0) Then

Call Calculate("Ch(""[1]/fxn"") = Ch(""[1]/M01"")*8+Ch(""[1]/M02"")*3")

End If

Call Calculate("Ch(""[1]/Fx"") = Ch(""[1]/fxp"")+Ch(""[1]/fxn"")")

0 Kudos
Message 1 of 6
(309 Views)

Die Überschrift des Threads ist mißverständlich und vielleicht auch der Grund, warum die Umsetzung nicht funktioniert. Wenn der Wert eines Kanals einer Variablen zugewiesen werden soll, dann lautet die Syntax für den ersten Wert des Kanals M01 in der ersten Kanalgruppe:

 

Ifwert = Data.Root.ChannelGroups(1).Channels("M01").Values(1)

 

Nur mit dieser Syntax macht der anschließende Vergleich "If (ifwert >= 0)" dann auch Sinn.

 

Geht es tatsächlich um die Zuweisung eines Kanalobjekts an eine Variable, sähe das so aus:

 

set objKan = Data.Root.ChannelGroups(1).Channels("M01")

DIAdem experience since 1996

Turn-key applications - Remote and on-site trainings - On-the-job training

| müller+krahmer GmbH | Koenitzer Straße 14, 07338 Kaulsdorf / Germany |
| Phone: +49 36733 / 2328 - 6 | Mobile: +49 160 / 287 7294 |
| Email: mueller@mueller-krahmer.de | Web: www.mueller-krahmer.de |
Message 2 of 6
(289 Views)

Guten Morgen,

vielen Dank für die Antwort. Es geht tatsächlich um die Zuweisung aller Werte des Kanals M01 an die Variable Ifwert. Für jeden Wert von M01 soll entschieden werden, mit welcher Formel gerechnet wird. Das hat in Diadem 8 sehr einfach funktioniert.

Mit dem Befehl "set objKan = Data.Root.ChannelGroups(1).Channels("M01")" bekomme ich die Fehlermeldung

"das Argument ist nicht optional".

Die Variante mit dem ersten Wert von M01 funktioniert, ist aber hier nicht zielführend.

VG

Christian

Option Explicit  'Erzwingt die explizite Deklaration aller Variablen in einem Script.

Dim objKan

' Variable objKan nimmt den Wert des Kanals M01 an

set objKan = Data.Root.ChannelGroups(1).Channels("M01")

' Berechnungen durchführen

If (objKan >= 0) Then

Call Calculate("Ch(""[1]/fxp"") = Ch(""[1]/M01"")*2+Ch(""[1]/M02"")*7")

End If

If (objKan < 0) Then

Call Calculate("Ch(""[1]/fxn"") = Ch(""[1]/M01"")*8+Ch(""[1]/M02"")*3")

End If

Call Calculate("Ch(""[1]/Fx"") = Ch(""[1]/fxp"")+Ch(""[1]/fxn"")")

 

0 Kudos
Message 3 of 6
(280 Views)

Nun, alle Werte eines Kanals können nicht einer einzelnen Variable zugewiesen werden, es sei denn, es handelt sich um eine Objekt- oder Array-Variable. Der Vergleich mit einem Einzelwert funktioniert wiederum nur mit dem einzelnen Kanalwert:

 

set objKan = Data.Root.ChannelGroups(1).Channels("M01")

 

If (objKan.Values(i) >= 0) Then ...

 

wobei i der Index des Kanalwerts ist, der Werte 1 bis Kanallänge (objKan.Properties("length").Value) annehmen kann.

DIAdem experience since 1996

Turn-key applications - Remote and on-site trainings - On-the-job training

| müller+krahmer GmbH | Koenitzer Straße 14, 07338 Kaulsdorf / Germany |
| Phone: +49 36733 / 2328 - 6 | Mobile: +49 160 / 287 7294 |
| Email: mueller@mueller-krahmer.de | Web: www.mueller-krahmer.de |
0 Kudos
Message 4 of 6
(274 Views)

Danke für die Antwort, ich werde es damit versuchen. Es ist schon ernüchternd, wie viel aufwändiger die Programmierung im Vergleich zu Diadem 8 geworden ist. Da konnte man so eine Aufgabe mit drei Zeilen erledigen, ohne tiefere Programmierkenntnisse.

0 Kudos
Message 5 of 6
(260 Views)

Die Erfahrung aus unseren DIAdem-Schulungen (https://www.mueller-krahmer.de/diadem-schulungen/) besagt in der Tat, daß die objektorientierte Syntax für Anwender ohne tieferen Programmierhintergrund nicht so einfach zu handhaben ist. Allerdings vereinfacht sich der Umgang mit dieser Syntax deutlich, wenn man benötigte Elemente konsequent per Drag&Drop aus dem Datenportal erzeugt oder das Autovervollständigen im Script-Editor nutzt.

DIAdem experience since 1996

Turn-key applications - Remote and on-site trainings - On-the-job training

| müller+krahmer GmbH | Koenitzer Straße 14, 07338 Kaulsdorf / Germany |
| Phone: +49 36733 / 2328 - 6 | Mobile: +49 160 / 287 7294 |
| Email: mueller@mueller-krahmer.de | Web: www.mueller-krahmer.de |
0 Kudos
Message 6 of 6
(251 Views)