Hallo,

Is hier iemand die ervaring heeft met VBScript schrijven in een HMI( die op windows draait). Het gaat om data logging uit een HMI van een PLC.

Merk HMI is wel handig, er zijn 10tallen.

Het gaat me meer om de VBScript. De hmi is van Emerson( GE FANUC) maar de HMI is het probleem niet. Het gaat om de script die erin staat.

Vb draait alleen in Windows zover ik weet; is een Microsoft product.

Dus welke versie Windows je hebt en welke versie van .net.
Vaak is het namelijk een Windows CE/mobile /embedded en die zijn op zijn zachtst gezegd nogal traag...

VBscript zelf heeft nogal wat resources nodig, zoals je wellicht weet. Het draait namelijk op een interpretor ipv een gecompileerde code. Dus je hebt je OS, dan draaien daar minimaal 3 processen: je HMI, je logger en die interpretor, waarbij de HMI wellicht nog wel meerdere threads heeft......

Dat HMI'tje heeft het zwaar!!

Op 1 december 2023 06:11:13 schreef High met Henk:
Vaak is het namelijk een Windows CE/mobile /embedded en die zijn op zijn zachtst gezegd nogal traag...

Embedded compact 7 op een 1 GHz ARM Cortex. (goede gok)

Meestal zijn het maar kleine scriptjes en dan valt het allemaal wel mee.

Hangt ervan af hoe hij de logging wil doen..

Csv files via flash valt wel mee.

Maar een SQL database vullen is hele andere koek!

Op 1 december 2023 06:11:13 schreef High met Henk:
Vb draait alleen in Windows zover ik weet; is een Microsoft product.

Dus welke versie Windows je hebt en welke versie van .net.
Vaak is het namelijk een Windows CE/mobile /embedded en die zijn op zijn zachtst gezegd nogal traag...

VBscript zelf heeft nogal wat resources nodig, zoals je wellicht weet. Het draait namelijk op een interpretor ipv een gecompileerde code. Dus je hebt je OS, dan draaien daar minimaal 3 processen: je HMI, je logger en die interpretor, waarbij de HMI wellicht nog wel meerdere threads heeft......

Dat HMI'tje heeft het zwaar!!

Klopt hij draait op Windows Embedded Compact 7. Het script werkt wel. De logging(cvs file) wordt via flash/sd card gedaan. Alleen de waardes (integer) van de plc vertoont die in de cvs niet goed. (-28977 bijvoorbeeld) Ik kan de tags van de hmi ook niet omzetten naar unsiged. Dus dacht misschien in het script wat aanpassen. Als bijvoorbeeld de waarde onder 0 is dat daar die 32767 bij de waarde op telt. In de hmi krijg ik het niet voor elkaar om de waarde om te zetten.

Op 1 december 2023 10:46:00 schreef Semsim:
Als bijvoorbeeld de waarde onder 0 is dat daar die 32767 bij de waarde op telt.

Dat getal moet 65536 zijn.

Is het te loggen getal van de PLC een 16-bits of 32-bits of meer bits en is het een signed of unsigned getal?

Op 1 december 2023 14:57:50 schreef Bobosje:
Is het te loggen getal van de PLC een 16-bits of 32-bits of meer bits en is het een signed of unsigned getal?

Het is dint (32bits) en signed getal. Ik wil dit in de hmi naar een unsigned getal maken. Maar de hmi heeft die functie niet om een unsigned integer te kiezen. De plc wel. Ik heb in de plc van het getal een unsigned getal gemaakt. Maar zelfs dan lukt het niet. Ik zal zelf te denken om dit in de vbscript te laten schrijven. Ben er al een tijdje mee bezig, maar krijg het niet voor elkaar.

En ik wil waarde van boven de 140.000 laten zien. Dit wordt denk ik helemaal een probleem.

Dat getal boven 140k is geen probleem
Een signed 32 bit getal kan tot 2.147.483.647
Ik zie je daar nog niet komen.

Maar terug naar je negatieve getal wat stiekem positief is.
Vraag 1; kan het getal negatief worden?
Zo ja... Dan gaat mijn idee niet

Zo nee; welke waarde krijg je in je HMI als het getal in de PLC 0 is (wel even terug zetten op signed dan)
Trek dit getal van je waarde af en het moet kloppen...

Op 1 december 2023 20:57:22 schreef High met Henk:
Dat getal boven 140k is geen probleem
Een signed 32 bit getal kan tot 2.147.483.647
Ik zie je daar nog niet komen.

Maar terug naar je negatieve getal wat stiekem positief is.
Vraag 1; kan het getal negatief worden?
Zo ja... Dan gaat mijn idee niet

Zo nee; welke waarde krijg je in je HMI als het getal in de PLC 0 is (wel even terug zetten op signed dan)
Trek dit getal van je waarde af en het moet kloppen...

Wat betreft je vraag. Bedoel je of dat mag? Nee de waarde/getal hoeft niet negatief te zijn. Het zijn telling die steeds met 1 omhoog gaan. Als je dat bedoeld?

Betreft je tweede vraag, snap ik het niet helemaal. Welk getal moet ik van mijn waarde afhalen?

Bedoel je de waarde/getal van de plc en de hmi die zijn van 0 tot 32767 gelijk. Daarna niet meer. De PLC loopt door en de hmi gaat verder in de min.

Zie voorbeeld de foto van 1 dezelfde waarde maar die van de plc en de hmi

Dat is dus een 16 bit getal en geen 32 bits getal!
Ook definieer je een DINT en geen UINT of UDINT.

Wat gebeurt er als je dat wel doet?

[Bericht gewijzigd door High met Henk op (47%)]

De dint is een 32bit maar de plc heeft een 16bit register. Dus hij slaat dit in 2 registers op wat ik er van begreep. Dus zodra ik een tag aanmaak in de hmi pakt die alleen de eerste 16bit waardoor dit waarschijnlijk komt. Bij uint zal die max tot 65535 gaan.

Welke data typ zou ik moeten gebruiken?

De udint is niet mogelijk in de plc. Alleen een Uint. Maar daarmee is het probleem dus niet helemaal verholpen. Want dan is het maximum 65535.

Ik ga deze week weer proberen om de dint te converteren naar een real of lreal.

Zouden deze register weer samen kunnen worden gevoegd om er een 32bit van te maken in een vbscript?

Of zou dit op een andere manier kunnen?

Wat voor PLC is het? En wat voor soort communicatie? (Modbus, Profinet, Mpi enz) Tot we die info hebben zitten we allemaal maar wat in de ruimte te zwetsen.

Zitten die twee 16 bits registers b.v. niet omgewisseld? Zet eens wat getallen in de belendende register en kijk of er wat gebeurt.

In het geval van bv een Siemens:
Stel dat je dat 16 bits getal uit MW12 lepelt, dan zit het 32 bits getal in MD10. Dat kán verwarrend zijn :-)

Het gaat om een RX3i van emerson (de oude GE FANUC) de HMI ook. Alles loopt via een ewon cosy 131

Via profinet als het goed is.

PLC ( de 2 de 305):

https://www.emerson.com/documents/automation/product-data-sheet-pacsys…

HMI (de 7inch):

https://www.emerson.com/documents/automation/product-data-sheet-quickp…

Ewon cosy 131 :

https://www.ewon.biz/docs/librariesprovider10/ewon-english/datasheets/…

Verder kreeg ik vandaag dit als antwoord/oplossing op me vraag vanuit Emerson:

Kijk naar de registers naast R2429 (dus R2430 of R2428). Het kan R2429 + R2430 or R2428 + R2429 zijn.

Deze registers zijn 16bit. Systeem maakt gebruikt van 2 van deze registers om een DINT (32bit) te creëren.

In het script moet je dus 2 registers gebruiken. Een daarna een berekening maken om de juiste waarde te krijgen.

Ik ben niet thuis in vbscript.

Is hier iemand dit ik prive het script kan sturen en dit kan aanpassen? De tags kan ik zelf verder erin zetten.

Op 3 december 2023 22:55:10 schreef GJ_:
Wat voor PLC is het? En wat voor soort communicatie? (Modbus, Profinet, Mpi enz) Tot we die info hebben zitten we allemaal maar wat in de ruimte te zwetsen.

Zitten die twee 16 bits registers b.v. niet omgewisseld? Zet eens wat getallen in de belendende register en kijk of er wat gebeurt.

In het geval van bv een Siemens:
Stel dat je dat 16 bits getal uit MW12 lepelt, dan zit het 32 bits getal in MD10. Dat kán verwarrend zijn :-)

Ik zal hier een aantal foto’s plaatsen van wat getallen in het register. Zie foto.

Je ziet dat die 401 en 402 voor DINT worden gebruikt. De script laat alleen 401 zien. Deze moet dus samen met de 402 worden gelezen in het script doormiddel van een formule of iets dergelijks.