Page 1 of 1

OPC UA - přenos a zpracování proměnných (Array)

PostPosted: Thu 08. Dec 2022 8:28:14
by Jiri Kadlec
Dobrý den.
Potýkám se s potřebou číst z PLC hodnoty, které jsou prezentovány jako pole array (cca 1000 real). Komunikace běží přes OPC UA.
Ve stromu proměnných, které promotic vyhledá tuto proměnnou najdu jako Measuring. Hodnotu ukazuje 0. Jako typ jsem zkoušel dát Variant, Single, String... Výsledek pořád stejný
Zatímco PLC ji publikuje jako Measuring array(1..1000) of Real. Pole je naplněné zhruba od proměnné 40 do proměnné 287. ostatní jsou nulové.
Toto PLC je pro mne uzavřený systém a já mohu pracovat pouze s daty, která mi poskytuje přes OPCUA.

Zajímalo by mne, zda je promotic schopný toto pole zpracovat, popřípadě z tohoto pole přečíst konkrétní proměnnou. Řešil to už někdo? Byl bych rád za každou radu..
Třeba je to opravdu jednoduché a já se jen zamotal a jsem v koncích...
Zkoušel jsem se připojit k PLC programem UA Expert z PC a ten toto pole bez problémů přečte ....

Děkuji předem za každou radu

Re: OPC UA - přenos a zpracování proměnných (Array)

PostPosted: Thu 08. Dec 2022 9:10:22
by Petr Návrat
Dobrý den
Prosím sdělte mi zda v INFO systému v položce Errors máte nějaké chyby a když tak jaké.
Může to např. souviset s tím že aplikaci spouštíte jako PmFree a v tom případě nelze (bohužel) přijímat Array.

Petr Návrat
tel: +420 556 205 711
mobil: +420 606 838 746
e-mail: navrat@microsys.cz

Re: OPC UA - přenos a zpracování proměnných (Array)

PostPosted: Thu 08. Dec 2022 10:24:36
by Jiri Kadlec
Dnes jsem se k tomu vrátil (ráno moudřejší večera). A mám nový poznatek. Proměnnou v Promotiku jsem nadeklaroval jako Variant. A světe div se už ho přijmul bez chyby. Přísahal bych, že jsem to zkoušel už včera a odezva byla pokaždé s chybou.
Rozeznal to jako typ Array/Variant (dim=1, size=10000). To je super, dílčí úspěch.... Teď teda nastává otázka jak přečíst konkrétní proměnnou z pole... Lze to udělat už v Datovém rozšíření nebo na to musí být skript?

Aplikaci spouštím(zatím) s vývojovým klíčem, tak předpokládám, že tam je funkčnost Promoticu neomezená.

Re: OPC UA - přenos a zpracování proměnných (Array)

PostPosted: Thu 08. Dec 2022 10:34:57
by Petr Návrat
Ano proměnná musí být nadeklarovaná jako Variant.
Pokud však v této proměnné je pole:
- Pak nelze použít Datové vazby
- Musíte tuto proměnnou přečíst ve skriptu a zacházet s ní jako s polem.

Pozor: přístup k poli se liší podle toho zda skript je psán ve VBScript nebo JavaScript
viz www.promotic.eu/cz/pmdoc/Directions/WorkWithArray.htm

Re: OPC UA - přenos a zpracování proměnných (Array)

PostPosted: Thu 08. Dec 2022 13:42:11
by Jiri Kadlec
Celý projekt už mám rozpracovaný v JavaScript. VBScript se snažím úplně vynechat.

Nicméně, jsem stále na stejném místě. Sice už mám několik projektů za sebou, ale jsou to poměrně jednoduché věci, kde se moc scriptu nepoužívalo nebo byly jednoduché. Ale s polem jsem ještě v Promoticu nepracoval. Stále nejsem schopen proměnnou přečíst. resp. s tím polem pracovat. Z nápovědy nejsem zrovna dvakrát moudrý...

Re: OPC UA - přenos a zpracování proměnných (Array)

PostPosted: Fri 09. Dec 2022 8:14:51
by Petr Návrat
Dobrý den
Takže pokud přijmete 1-rozměrný array do PmaCommGroup nebo PmaData objektu, pak jej můžete přečíst následovně:

var oData = pMe.Pm("xx/Data");
var aPole = oData.Item("MojePole").Value;
// čtení 8. položky pole:
var vVal = aPole.GetItem(8);
// atd.

Re: OPC UA - přenos a zpracování proměnných (Array)

PostPosted: Thu 15. Dec 2022 11:25:00
by Jiri Kadlec
Děkuji za "nakopnutí"... Už se mi to daří číst... (Mimochodem jsem to tak v podstatě měl i před tím, akorát mi chyběla za závorkou zásadní věc .Value)
Akorát mi to stále hází chybu skriptu. A to i přes to, že to v pořádku přečte.

PmaTimer: /PokusOPC/Priprava, Event: onTick, [7,1] 'undefined' má hodnotu null nebo není objekt.

Řádek 7 vypadá následovně
pMe.Pm("../Data/#vars/v0").Value = aPole.GetItem(850);

Zbytek je v podstatě to samé co jste mi radili výše.... Chybu to píše i přes to, že to v pořádku přečte proměnnou z pole a vloží do příslušné proměnné v0.. Je možné se té hlášky zbavit?

A ještě dotaz. Umí některá z předkonfigurací zobrazit celé toto pole v grafu? Ať už sloupcovém nebo jako trend, ale ne v závislosti na čase, ale na počtu proměnných v poli....?

Re: OPC UA - přenos a zpracování proměnných (Array)

PostPosted: Fri 16. Dec 2022 10:40:23
by Pavel Klimíček
Dobrý den.
1. Pokud se jedná o chybu, tak to nedokážeme bez analýzy samotného projektu určit.
Pošlete mi prosím Váš projekt, a já se pokusím chybu detekovat a odstranit.
2. Pro grafické zobrazení hodnot máte v Promoticu více možností:
- můžete v PmgTrendViewer pomocí vlastnosti "TimeType" změnit časovou osu na numerickou.
Inspiraci najdete v této předkofiguraci: https://www.promotic.eu/cz/pmdoc/Subsys ... nction.htm
- nebo můžete použít technologii "Canvas" z předkofigurace: https://www.promotic.eu/cz/pmdoc/Subsys ... hBar01.htm
- ale také externí Widget viz: https://www.promotic.eu/cz/pmdoc/Subsys ... artBar.htm

Pavel Klimíček
tel: +420 556 205 713
e-mail: klimicek@microsys.cz

Re: OPC UA - přenos a zpracování proměnných (Array)

PostPosted: Wed 21. Dec 2022 8:38:39
by Jiri Kadlec
Dobrý den...
1. V podstatě co se týče té chyby ve scriptu kterou mi vykazuje INFO, kterou jsem popisoval výše, tak jsem si založil úplně nový projekt.
Mám proměnnou Pole, kterou čtu přes komunikaci OPCUA a deklarovanou jako Variant a proměnnou v0, kterou mám deklarovanou jako Integer . V PmaTimer v události OnTick Jsem napsal script který mi výše poradil p. Návrat. Jediný rozdíl je v řádku 7 který jsem také popisoval výše.

2. Co se týče toho grafického zobrazení, tak v tom tápu. Ve scriptech jsem začátečník a i ty examply mi přijdou složité... Navíc každý je řešený úplně jinak a postrádám v tom nějaké jasné (jednoduché) vodítko... Pro mne by byl ideální graf, do kterého zadám pole, počet proměnných v poli( nebo rozsah od - do ) a on mi vykreslí křivku nebo sloupce... Je možné, že ty předkonfigurace to umí, ale je okolo toho ještě hodně programování, ve kterém se ještě tolik neorientuji...

Jinak moc děkuji za snahu poradit... Vážím si toho

Re: OPC UA - přenos a zpracování proměnných (Array)

PostPosted: Fri 06. Jan 2023 9:37:42
by Pavel Klimíček
Dobrý den.
1. Zkuste změnit datový typ proměnné v0 na variant nebo double.

2. Nejjednodušší je použít z předkonfigurace grafických objektů "Graf, funkce/ Sloupcový graf".
Je to předkonfigurace objektu "Canvas", ve kterém se v proměnných "titles" a "colors" určí názvy a barvy sloupců.
Samotné hodnoty pro sloupce jsou pak nastaveny v podobjektu "Dynamic" v proměnné "values".
Všechny tři proměnné musí mít stejný počet hodnot oddělených středníkem ve stringu.

Plnění hodnotami můžete vyřešit tak, že "string" s hodnotami připravíte do nové proměnné v PmaData již v aplikaci a na tuto proměnnou se v proměnné "values" napojíte vazbou PP.
Nebo ve skriptu grafického objektu zavoláte uživatelskou metodu obrazu, která Vám tento string připraví a vrátí.
Ten pak skriptem do této proměnné zapíšete (Například takto: pMe.Items("/GraphBar/Dynamic").Vars("values").Value = "string hodnot").