R-Tronic
Easy come, easy go.
Goedenavond,
Kan het kwaad dat ik in 2 volledig separaat en niet tegelijk werkende macro's dezelfde variabelen naam gebruik?
Ziet er zo uit:
Macro 1:
Main()
int i = 0
int Stabiel = 0
for i = 0 to 3
blabla
if Stabiel == 32 then
doe iets
break
delay(1000)
next i
Start Macro 2
end Main()
Macro 2:
[code]
Main()
int i = 0
int Stabiel = 0
for i = 0 to 3
blabla
if Stabiel == 32 then
doe iets anders
break
delay(1000)
next i
end Main()
Als ik alleen macro 1 draai, werkt ie prima. Alleen macro 2 ook.
Maar samen krijg ik vreemde resultaten.
Als ik alleen macro 1 draai ziet de debug er zo uit:
10 (0x0A)
87 (0x57)
13 (0x0D) Deze 3 samen zijn een gewichtverzoek aan een weegschaal: <LF>W<CR>
77 Response weegschaal: Gewicht niet stabiel
77 Response weegschaal: Gewicht niet stabiel
32 Response weegschaal: Gewicht stabiel.
Dit is goed.
Draai ik de 2de macro erna, dan zie je dit:
10 (0x0A)
87 (0x57)
13 (0x0D) Deze 3 samen zijn een gewichtverzoek aan een weegschaal: <LF>W<CR>
77 Response weegschaal: Gewicht niet stabiel
77 Response weegschaal: Gewicht niet stabiel
32 Response weegschaal: Gewicht stabiel.
10 (0x0A)
87 (0x5a)
13 (0x0D) Deze 3 samen zijn een Zero verzoek aan een weegschaal: <LF>Z<CR>
Maar als dan bij de volgende weging weer het verzoek van de eerste macro gedaan wordt, dan krijg je dit:
10 (0x0A)
87 (0x57)
13 (0x0D) Deze 3 samen zijn een gewichtverzoek aan een weegschaal: <LF>W<CR>
32 Response weegschaal: Gewicht stabiel.
Direct stabiel dus, terwijl ik kan zien dat de weegschaal dat niet is.
Heb mij vandaag suf gezocht, maar ik kom er niet uit. De eerste keer werkt het wel, maar zodra macro 2 een keer heeft gedraaid, werkt het niet meer.
B.v.d.
benleentje
Golden Member
Ja je kan in beide macro's dezelfde variabele naam gebruiken, maar het is en blijven totaal verschillende variabelen.
Als je een macro ingaat dan word elke keer de variabele i en stabiel opnieuw aangemaakt en als je de macro verlaat dan worden die variabelen weer vernietigd en bestaan ze niet meer.
En vertel dan ook eens welke programmeertaal je nu gebruikt want volgens mij is dit een soort basic.
[Bericht gewijzigd door benleentje op (17%)]
R-Tronic
Easy come, easy go.
Hoi benleentje,
Dankjewel voor de opheldering.
Weintek HMI macro. Waar dat op gebaseerd is weet ik niet. Het is onderdeel van hun hmi programmeersoftware.
Dan wordt het weer verder zoeken. Het zal wel weer zo'n oooh ja momentje worden denk ik.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Macro's zijn vaak re-entrant bij assemblers en compilers, maar dat hoeft niet, verschilt per compiler/assembler.
R-Tronic
Easy come, easy go.
Op woensdag 8 januari 2025 21:08:18 schreef Arco:
Macro's zijn vaak re-entrant bij assemblers en compilers, maar dat hoeft niet, verschilt per compiler/assembler.
Ik ben er vandaag inderdaad achter gekomen dat een al draaiende macro opnieuw gestart kon worden. Dit was het geval in een andere HMI dan waar het topic over gaat, maar het kan dus wel.
In de HMI waar het topic over gaat, is dat niet het geval.
Ik heb mij suf gezocht maar het gaat echt in deze volgorde:
* 1ste macro leest gewicht uit, slaat dit op in de HMI.
* De een-na-laatste regel van macro 1 is het starten van macro 2. Hierna volgt macro_end.
Alleen de 1ste macro werkt wel, zodra macro 2 een keer gelopen heeft, werkt macro 1 niet meer. Niet dat het vastloopt, de macro wordt wel uitgevoerd, maar de response klopt niet.
Er is nog een andere situatie: Na inschakelen van de weegfunctie.
* 2de macro voert eerst een leeg check uit en indien nodig een zero commando
* Macro 1 werkt dan direct niet meer zoals het hoort.
Het zit 'm dus in de 2de macro zou je zeggen.
Ik clear alle buffers na declareren van variabelen, ook de hele array van de weegschaal response.
Ik heb zelfs geprobeerd om alleen de delen van de array te clearen die de Stabiel response bevatten, het haalt allemaal niks uit.
Ik baal hier wel van, want ik heb de weegfunctie nu geblokkeerd omdat ik geen controle kan uitvoeren.
Frustrerend, want het is vast weer zo'n klein dingetje wat je net ff over 't hoofd ziet.