Rekenhulp gevraagd...

Gewoon even offtopic praten over van alles en nog wat.

Moderator: Moderators

Plaats reactie
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

meeste HMI kan bijna niets mee.... en die zitten meestal helemaal dicht getimmerd... dus bijvoorbeeld een menubalk, met een klokje en een alarmmelding zit vast op de onderste regel en kan je niet weg halen ..of veranderen... meeste schermen kunnen variabelen laten zie... als getal... of als plaatje... dus getal 0=lampje uit getal 1= lampje groen.... meestal kunnen ze dan nog iets van een wijzermeter laten zien... en een bargraph , maar dan heb je het wel gehad.... (de meeste willen ook niet meer.... ook geen gezeik.... nee sorry klant, maar dat klokje zit vast in het scherm...)

proface/XBT-g schermen konde ook nog (aan de hand van variabelen) dingen verschuiven,verschalen,roteren. dus kon je bijvoorbeeld met een polygon een wijzer tekenen voor een meter...
maar ook maar 1 ding tegelijk... dus of figuur roteren, of verschalen....niet beide.... en meestal zijn die schermen te traag om bijvoorbeeld life je process bij te houden... stel met robot, en je zou hem op het scherm realtime mee willen laten bewegen.....?? meeste schermen maar 1 keer per seconde....

Maar er bestaat ook Scada... dat is een stuk software op de PC, welke met de PLC kan praten.... en op de PC kan natuurlijk veel meer.... alleen een PC is veel gevoeliger... zo'n hmi scherm (zitten vaak geen bewegende delen in) gaat jaren mee zonder dat het fout gaat.... en als die eens vast staat...is vaak de voedingen eraf en er weer op de oplossing.... of een nieuwe hmi erin, geheugenkaartje oversteken en hop...het werkt weer....

een scada op een pc wil bijna niemand... zeker als het niet nodig is.... scada word vaak gebuikt bij grote fabrieken, en ook vooral als je veel data wil loggen.... als je elke sec temperaturen en drukken op wil slaan ja dan heb je gauw een hoop data, en dat is bijna niet mogelijk zonder die PC met harde schijf....

wij hebben wel systemen met een PC met scada... maar ja pc ... dan de voeding kapot... dan harde schijf problemen.... koelingsfannen die het na een paar jaar het opgeven enz enz.....

HMI is natuurlijk begonnen met een LCD displaytje, met 4 pijltoetsen en een enter toets.... en is uitgegroeid naar de 19 inch touchscreens... maar die zijn dus veel en veel betrouwbaarder....

dus dat doosjesverhaal is echt iets bijzonders... :-) maar ja ik had toch niets anders te doen.... Ik was ook blij dat op het end bleek dat het scherm snel genoeg was....


het is ook raar... dat hele schermen verhaal is er bij gekomen.... zit vreselijk veel werk ... van alarmmeldingen ..dat is natuurlijk allemaal typ werk.... en bij ons ook vaak nog in een paar talen.....
bovenaanzichten van machine's... dus veel met bitmaps... enz enz... vroeger had je 1 rood storingslampje... :-)

dus tegenwoordig heb je 2x zoveel tijd nodig om je scherm in orde te krijgen..... maar voor een klant kan je het allemaal wel veel duidelijker maken... met plaatjes waar een bepaalde fout zit enz enz... maar echt er zit vreselijk veel werk in.....

gelukkig ben ik goed met bitmapjes ... vergroten,verkleinen...kleuren wijzigen enz enz... Ik heb ook een paar keer met een ethernet kaart in een schneider plc gewerkt, daar zat ook een web server in.... Dus dan moet je opeens HTML pagina's maken.... en dmv java applets kon je data van uit de PLC laten zien... en dat moet je dan ook maar kunnen... dat het totaal niets met PLC te maken heeft... hun kennen het niet, maar jij ben programmeur dus dan moet je het allemaal maar snappen.... :-)

zelfs de kopieer machine val er onder.... zitten veel knopjes op... :lol:
Laatst gewijzigd door Swets op 19 jul 2022 01:56, 1 keer totaal gewijzigd.
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

toch ook nog maar even hier vragen.....

ging altijd goed.... (beter als op meeste programmeer pagina's)

het volgende... ik zoek een routine die het volgende doet....

ik heb een array (lijst) met daarin getallen..... bijvoorbeeld x-coördinaten..
nu wil ik een andere array vullen met getallen in de volgorde van groot naar klein....
maar dus niet met de x-coördinaten, maar gewoon met bijvoorbeeld op plek 1 het getal 10, als in de array met x-coördinaten op plek 10 de grootste x staat... en dan bijvoorbeeld op de 2de plek het getal 28, als in de array met x-coördinaten op de 28 plaats de op 1 na grootste x-coördinaat staat....

iemand enig idee? dus ik wil niet die eerste x-coördinaten array sorteren, ik wil een 2de array, met daarin de volgorden ....

alvast bedankt voor het mee denken....
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Breaker
Donateur
Berichten: 1956
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Breaker »

Ik zou het persoonlijk even omzetten naar een 'tussenhash', waarbij de waarde de key wordt en je als element de positie aangeeft. Die sorteer je makkelijk op de key maar je gooit de positie in een nieuwe array.

Concept in perl...

Code: Selecteer alles

# Perl Script

$position=0;
@start_array = (10,3,17,22,6,19,4,25,26,11);
@sorted_array;

for (@start_array) {
        $hash{$_} .= $position;
        $position++;
}
print "start array: @start_array\n";

foreach $value ( sort { $b <=> $a } keys %hash) {
        print "v: $value - p: $hash{$value}\n";       
        push (@sorted_array, $hash{$value});
}

print "sorted array: @sorted_array\n";
Als uitput geeft dit:

Code: Selecteer alles

start array: 10 3 17 22 6 19 4 25 26 11
v: 26 - p: 8
v: 25 - p: 7
v: 22 - p: 3
v: 19 - p: 5
v: 17 - p: 2
v: 11 - p: 9
v: 10 - p: 0
v: 6 - p: 4
v: 4 - p: 6
v: 3 - p: 1
sorted array: 8 7 3 5 2 9 0 4 6 1
Je kan ook overwegen om direct met een hash te werken. Hangt een beetje af wat je het beste uitkomt...
Geduld is een schone zaak, frezen niet...
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

hmmm misschien een beetje lullig antwoord.... maar ik weet niet wat een hash is...? :oops:

ik geloof ook niet of mijn (plc) pakket dat begrijp? :roll:
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11014
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Da's een associatief array, een array met key<->value paren.

Als jouw spul dat niet snapt kun je naast je bestaande array van N items er een array naast maken en die vullen met de getallen 1..N. Daarna gewoon sorteren zoals je altijd al deed, maar dan beide waarden swappen.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

jaja...

ik heb een array met x-coördinaten..... die loopt van 1 tot 50.... met daarin dus allerlei getallen, niet op volgorde, ik heb een tweede array, met daarin de getallen 1 tm 50...

ik heb een bestaande sorteerroutine

Code: Selecteer alles

 While  DO

     While (vPatternMoveTemp.Layer[vLayout][TempLow].PlacePosX > pivot) & (TempLow < inHigh) DO
        TempLow := TempLow + 1;
     end_while;

     While (pivot > vPatternMoveTemp.Layer[vLayout][TempHigh].PlacePosX) & TempHigh >inlow DO
        TempHigh := TempHigh - 1;
     end_while;

     If (TempLow <= TempHigh) Then
        
        temp1:=vPatternMoveTemp.Layer[vLayout][TempLow];
        temp2:=vMoveBoxVolgorde[TempLow];
        
       vPatternMoveTemp.Layer[vLayout][TempLow]:=vPatternMoveTemp.Layer[vLayout][TempHigh] ;
        vMoveBoxVolgorde[TempLow]:=vMoveBoxVolgorde[TempHigh];

       vPatternMoveTemp.Layer[vLayout][TempHigh]:=temp1;
        vMoveBoxVolgorde[TempHigh]:=temp2;
        
        TempLow := TempLow + 1;
        TempHigh := TempHigh - 1;
     End_If;

  end_while;

  If (inLow < TempHigh) Then 
    QuickSort(inLow:=inLow, inHigh:=TempHigh);
  end_if;
  
  If (TempLow < inHigh) Then
    QuickSort(inLow:=TempLow, inHigh:=inHigh);
  end_if;

zoiets.... vPatternMoveTemp zit de x-coördinaten in.... vMoveBoxVolgorde zat 1 t/m 50 in, en als die klaar is, zit in vMoveBoxVolgorde 1 tot met 50 op de goede volgorde ???

ga ik morgen eens testen.... althans als ik het goed begrepen heb....
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11014
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Ik heb het stukje code niet zo goed bekeken, maar het idee zou moeten werken
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

:lol: bedankt... ga het zo proberen....
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

bovenstaande is dus ook goed gekomen....
jammer dat dropbox er voor gezorgd heb dat de plaatjes weg zijn.... daar was die juist zo handig voor....




bij deze is het draaien ook nog pneumatisch.... bij den nieuwere zit er een stappenmotor op.... werkt veel en veel mooier....


Dabit...help... :-) nee iedereen die wil mee denken.... moet zeggen dat ik aardig begin op te knappen..... maar denken is nog niet op het oude niveau...

tis dus voor het wat in het bovenstaande filmpje geshowd word.....
in het 2de filmpje zie je dat de doosje gepakt worden met vacuüm... maar nu heb ik een machine die pakt (de veel zwaardere dozen) met een klem.... maar nu kan die dus de dozen niet meer op elke manier tegen elkaar zetten omdat die klem aan 1 kant in de weg zit....

dus ik ben nu het 1 en ander aan het wijzigen....

nu het volgende.... misschien is het wel veel simpeler als ik denk:

Afbeelding

ik werk in de software nu met 2 virtuele rechthoeken... op het plaatje de zwarte en 1 groene....
van de rechthoeken weet ik alleen x1,y1 en x2,y2....
en wat ik nu wil weten of de groene de zwarte ergens raakt..... en dat van alle kanten (vandaar dat er 4 groene staan....:-) )
maar bij mij wordt het een gigantische vergelijking... vandaar dat ik dacht... zal het eens in de groep gooien....

trouwens ik zie geen youtube filmpjes meer in de browser... ligt dat aan mijn instellingen?!?
Laatst gewijzigd door Swets op 19 jul 2022 01:59, 1 keer totaal gewijzigd.
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11014
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Als 1 van de groene hoekpunten zich in de zwarte bevind overlappen ze, mits de groene altijd kleiner is dan de zwarte. Is dat niet het geval dan kijk je welke groter is, en als groen groter is dan zwart dan draai je ze om.

Dat zou dan zoiets worden:

Code: Selecteer alles

// X1 altijd kleiner dan X2, Y1 altijd kleiner Y2, (0,0) linksboven.
typedef struct Rechthoek
{
	int x1, y1;
	int x2, y2;
};

// Kijk of een punt in de rechthoek zit
bool testpunt(int x, int y, Rechthoek zwart)
{
	if (x > zwart.x1 &&
	    x < zwart.x2 &&
		y > zwart.y1 &&
		y < zwart.y2)
		return true;
	else
		return false;
}

bool vierkantjesraken(Rechthoek groen, Rechthoek zwart)
{
	if (testpunt(groen.x1, groen.y1, zwart)) return true;
	if (testpunt(groen.x1, groen.y2, zwart)) return true;
	if (testpunt(groen.x2, groen.y1, zwart)) return true;
	if (testpunt(groen.x2, groen.y2, zwart)) return true;
	return false;
}
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

bedankt, ik ga het bekijken....

tis ietsje korter dan wat ik gemaakt had.... :-) dacht wel dat het korter moest kunnen...
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

DaBit schreef:Als 1 van de groene hoekpunten zich in de zwarte bevind overlappen ze, mits de groene altijd kleiner is dan de zwarte. Is dat niet het geval dan kijk je welke groter is, en als groen groter is dan zwart dan draai je ze om.

Dat zou dan zoiets worden:

Code: Selecteer alles

// X1 altijd kleiner dan X2, Y1 altijd kleiner Y2, (0,0) linksboven.
typedef struct Rechthoek
{
	int x1, y1;
	int x2, y2;
};

// Kijk of een punt in de rechthoek zit
bool testpunt(int x, int y, Rechthoek zwart)
{
	if (x > zwart.x1 &&
	    x < zwart.x2 &&
		y > zwart.y1 &&
		y < zwart.y2)
		return true;
	else
		return false;
}

bool vierkantjesraken(Rechthoek groen, Rechthoek zwart)
{
	if (testpunt(groen.x1, groen.y1, zwart)) return true;
	if (testpunt(groen.x1, groen.y2, zwart)) return true;
	if (testpunt(groen.x2, groen.y1, zwart)) return true;
	if (testpunt(groen.x2, groen.y2, zwart)) return true;
	return false;
}
ff kijken wat je doe...

je maakt een struct rechthoek ... 4 int.. x1,y1,x2,y2

tot zover snap ik het nog :-)

oke... en dan die functie tespunt... die int X en Int Y wat zijn dat.... in die rechthoek zwart zitten x1,y1 en x2,y2 van de zwarte rechthoek...
die functie komt terug met een 1 als x,y in het zwarte rechthoek vallen....

volgende functie, geef ik de x1,y1x2,y2 van het groene rechthoek mee... en de x1,y1,x2,y2 van het zwarte rechthoek... oja... vanuit hier word die bovenste functie aangeroepen...

oke... ik ga eens kijken of ik het in de Sigmatek Structured text formaat aan de gang krijg....

bedankt...
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

Jammer dat de plaatjes weg zijn... de schuld van dropbox...

maar ik kan wel weer wat hulp gebruiken....
ben een functie aan het (proberen) te schrijven, maar wil niet erg lukken.....

ik heb een teller, van 0 tot 360 graden lopen....

en de functie moet 255 terug geven als die teller gelijk is aan een setpoint.... en 0 als hij 90 graden voor of voorbij dat setpoint is...
maar ik krijg het maar niet lekker voor elkaar.... en ik heb ondertussen een heel zooitje... terwijl ik denk dat het in een paar regels moet kunnen.... ik heb nu dit:

Code: Selecteer alles

	VAR_INPUT
		CurrentAngle 	: DINT;
		BrightestAngle 	: DINT; // hoek waar dit vlak op zijn helderst moet zijn
		Maxlength 	: DINT;     // totaal aantal graden waarin de kleur varieert (midden is het helderst)
		ColorSpread 	: DINT;   // stappen tussen licht en donker ( max 255)
	END_VAR
	VAR_OUTPUT
		colorBack 	: UINT;
	END_VAR
  VAR
    ColorStep : real;
  END_VAR
 
  if ColorSpread>255 then
    ColorSpread := 255;
  end_if;
  
  ColorStep := to_real(ColorSpread)/(to_real(Maxlength)/2.0); // kleurniveau uitrekenen per graad afwijking

  colorback:=0;

  if (CurrentAngle+360)< (BrightestAngle+360) then
    if CurrentAngle>(Maxlength/2) then
      colorback:= to_uint(to_real(ColorSpread)-(to_real(abs((CurrentAngle+360)-(BrightestAngle+360)))*ColorStep));
    else
      if CurrentAngle>BrightestAngle then
        colorback:= to_uint(to_real(ColorSpread)-(to_real(abs(BrightestAngle-(CurrentAngle+360)))*ColorStep));
      else
         colorback:= to_uint(to_real(ColorSpread)-(to_real(abs(BrightestAngle-CurrentAngle))*ColorStep));
      end_if;
    end_if;
  else
    if CurrentAngle+(Maxlength/2)<360 then
      colorback:= to_uint(to_real(ColorSpread)-(to_real(abs(BrightestAngle-CurrentAngle))*ColorStep));
    else
      if CurrentAngle<BrightestAngle then
        colorback:= to_uint(to_real(ColorSpread)-(to_real(abs((BrightestAngle+360)-CurrentAngle+360))*ColorStep));
      else
        colorback:= to_uint(to_real(ColorSpread)-(to_real(abs(CurrentAngle-BrightestAngle))*ColorStep));
      end_if;
    end_if;
  end_if;

END_FUNCTION
Dabit!!! help... :-)
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »



ben bezig nu met blikken/emmers...

alleen worden ze nu nog opeens geel?
Laatst gewijzigd door Swets op 17 nov 2021 23:27, 1 keer totaal gewijzigd.
http://www.arjan-swets.com (met cnc filmpjes)
Plaats reactie