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

Toto je hlavní technické fórum pro diskusi o problémech při vytváření PROMOTIC aplikací a jejich řešení.

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

Postby Jiri Kadlec » Thu 08. Dec 2022 8:28:14

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
Jiri Kadlec
 
Posts: 12
Joined: Wed 04. May 2022 7:21:00

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

Postby Petr Návrat » Thu 08. Dec 2022 9:10:22

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
Petr Návrat
Administrátor
 
Posts: 79
Joined: Thu 13. Dec 2012 14:32:08

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

Postby Jiri Kadlec » Thu 08. Dec 2022 10:24:36

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á.
Jiri Kadlec
 
Posts: 12
Joined: Wed 04. May 2022 7:21:00

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

Postby Petr Návrat » Thu 08. Dec 2022 10:34:57

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
Petr Návrat
Administrátor
 
Posts: 79
Joined: Thu 13. Dec 2012 14:32:08

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

Postby Jiri Kadlec » Thu 08. Dec 2022 13:42:11

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ý...
Jiri Kadlec
 
Posts: 12
Joined: Wed 04. May 2022 7:21:00

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

Postby Petr Návrat » Fri 09. Dec 2022 8:14:51

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.
Petr Návrat
Administrátor
 
Posts: 79
Joined: Thu 13. Dec 2012 14:32:08

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

Postby Jiri Kadlec » Thu 15. Dec 2022 11:25:00

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....?
Jiri Kadlec
 
Posts: 12
Joined: Wed 04. May 2022 7:21:00

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

Postby Pavel Klimíček » Fri 16. Dec 2022 10:40:23

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
Pavel Klimíček
 
Posts: 73
Joined: Thu 13. Dec 2012 15:35:59

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

Postby Jiri Kadlec » Wed 21. Dec 2022 8:38:39

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
Jiri Kadlec
 
Posts: 12
Joined: Wed 04. May 2022 7:21:00

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

Postby Pavel Klimíček » Fri 06. Jan 2023 9:37:42

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").
Pavel Klimíček
 
Posts: 73
Joined: Thu 13. Dec 2012 15:35:59


Return to Nevím jak...

Who is online

Users browsing this forum: No registered users and 5 guests