Sida 1 av 2

IF och ARRAY i Structured Text [LÖST]

Postat: 26 november 2013, 21:16:57
av Magnus_K
Nu har jag tröttnat på att försöka hitta svar på detta på internet. Vet inte riktigt vad jag ska söka efter.

Jag vill skriva ett IF statement med innebörden: Om en eller flera variabler i array'en är sann, sätt då min variabel som sann annars falsk. (?).
Har försökt lite med nedan

Kod: Markera allt

VAR_BLOBAL

i : INT;
minarray : array[1..5] OF BOOL;
minvar : BOOL;

END_VAR

IF (array[i] := TRUE) THEN
       minvar := TRUE;
ELSE
       minvar := FALSE;
END_IF


Re: IF och ARRAY i ST

Postat: 26 november 2013, 21:32:54
av ie
Känner inte igen språket, men om jag ska gissa...

Jag gissar att := är en tilldelning och att du ska använda = vid jämförelse.

Du loopar inte igenom arrayen, dvs testar varje element. I måste gå från 1 till 5.

Sen kommer minvar endat att innehålla resultatet från den senast testen, då den hela tiden skrivs över.

i t ex BASIC skriver man istället

Kod: Markera allt

minvar = false
for i=1 to 5
  if (minarray(i)=true)
    then minvar = true
  end if
next i

Re: IF och ARRAY i ST

Postat: 26 november 2013, 22:02:33
av johano
Det är pascal ju :D
Såhär kanske (om jag minns rätt - det är en 25 år sen jag sist skrev pascal)

Kod: Markera allt

for i :=0 To 5 do
begin
  minvar := array[i];
  if minvar=True then break;
end
/johan

Re: IF och ARRAY i ST

Postat: 26 november 2013, 22:13:01
av JimmyAndersson
Pascal? Ja iofs.... Det ser lite bekant ut, men inte mycket. Man glömmer tydligen väldigt fort. :)

Din kod ser iallfall rimlig ut.
Om det inte skulle fungera så har jag en bra och tjock Pascal-bok, så jag kan kolla i såfall.

Det kan eventuellt vara så att for-loopen ha en 6a istället för 5a.
En del språk stoppar ett steg innan, så att säga,
och en del språk tycker inte om semikolon på IF-rader.
Men det lär trådskaparen märka isåfall.

Re: IF och ARRAY i ST

Postat: 26 november 2013, 22:54:42
av sodjan
Trådskaparen har ingen loop alls. Var kommer
värdet av "i" från i "IF (array := TRUE)" ??

Re: IF och ARRAY i ST

Postat: 26 november 2013, 23:26:24
av Magnus_K
Jag får be om ursäkt sodjan om det låter som om jag inte vet vad jag håller på med, för det vet jag knappt...

Jag TROR svaret på din fråga är att tidigare så deklarerade jag att i : INT för att sedan deklarera array[1..5].
I programmet räcker det således att skriva array. Stämmer?


Tack för era svar och efter lite modifiering av johano's kod så fick jag det att fungera. Break hittar jag inte i hjälpfilen för strukturerad text men jag fann EXIT och RETURN istället. EXIT fungerar bra :tumupp:

@JimmyAndersson, vilken bok är det? Om det är en bra nybörjarbok och du vill få mer plats i bokhyllan så är jag väldigt intresserad att köpa den.

Kod: Markera allt

FOR i := 1 TO 5 DO
	minvar := array[i];
	IF minvar THEN
	EXIT;
	END_IF
END_FOR

Re: IF och ARRAY i ST

Postat: 26 november 2013, 23:42:21
av sodjan
> Jag TROR svaret på din fråga är att tidigare så deklarerade jag att i : INT för att sedan deklarera array[1..5].
> I programmet räcker det således att skriva array. Stämmer?

Nej.

> ...efter lite modifiering av johano's kod så fick jag det att fungera.

Efter att bl.a ha rättat det jag påpekade, ja. :-)
Du saknade loop och i gavs aldrig något värde...

Behövs END_IF för en "one liner"? Om inte så bör även detta fungera:

Kod: Markera allt

minvar = false
FOR i := 1 TO 5 DO
   IF array[i] THEN minvar := true;
END_FOR

Re: IF och ARRAY i ST

Postat: 26 november 2013, 23:56:21
av Magnus_K
Provade, men compilern klagade på "Expecting ELSIF, ELSE or END_IF before 'END_FOR'."

Ska spara ditt svar till jag pluggat lite mer Pascal/ST, då kanske jag förstår vad du säger ;)

Re: IF och ARRAY i ST

Postat: 27 november 2013, 00:23:45
av sodjan
Vad var oklart?
I ditt *första* inlägg gav du aldrig i något värde.
Du bara deklarerade den som INT, det räcker inte.

> Provade, men compilern klagade på "Expecting ELSIF, ELSE or END_IF before 'END_FOR'."

OK, men lägg till det då... :-)

Kod: Markera allt

minvar = false
FOR i := 1 TO 5 DO
   IF array[i] THEN minvar := true;
   END_IF
END_FOR
Notera att jag inte är 100% säker på att "false" och "true" ska vara så där,
kanske "False" resp "True" med versal. Om du är intresserad kan du testa...

Re: IF och ARRAY i ST

Postat: 27 november 2013, 11:34:28
av JimmyAndersson
Magnus_K:
"vilken bok är det? Om det är en bra nybörjarbok och du vill få mer plats i bokhyllan så är jag väldigt intresserad att köpa den."

Det är egentligen brorsans böcker, men de har blivit kvar hos mig, så jag kan inte sälja dem. :D
Boken jag tänkte på är visst bland de grejer som är nedpackade. (Ska göra om i ett rum).
Den andra är "Building Delphi Applications" på 780 sidor och den är mer riktad till
"advanced Delphi programmers and professional programmers switching to
Delphi from languages like Visual Basic or C++."



"ST" (i t.ex rubriken), står det för Structured Text? Eller är det en annan variant?

Re: IF och ARRAY i ST

Postat: 27 november 2013, 12:48:15
av adent
Det är inte Pascal heller, vad tusan är det för språk?!?

MVH: Mikael

Re: IF och ARRAY i ST

Postat: 27 november 2013, 12:51:36
av Magnus_K
Det jag syftade på med "ST" var just Structured Text enligt IEC 61131-3 ofta verkar nyttjas till PLC programmering. Sorry om jag var lite otydlig där.
Dock så har jag förstått att ST bygger på Pascal vilket gör att undervisningsmaterialet växer ganska mycket jämfört med ST.

Det var ju synd det där med din brorsas bok. Men om han inte har saknat den än sååååå......? :badgrin:
Nej då, skämt åsido. Jag har önskat mig en i julklapp så vi får väl se!

Re: IF och ARRAY i ST

Postat: 27 november 2013, 12:53:29
av JimmyAndersson
:lol:


Intressant det här med ST <-> Pascal.

Re: IF och ARRAY i ST

Postat: 27 november 2013, 13:14:00
av sodjan
> Det jag syftade på med "ST" var just Structured Text enligt IEC 61131-3 ofta verkar nyttjas till PLC programmering...

Jahaja, ja det hör nog inte till de vanligare språken här. :-)
Då får du nog ta på dig att fixa skitproblem som ett saknat "END_IF". :-)

Och eftersom det är så pass ovanligt (borde ha varit uppenbart även för dig)
så hade en kort förklaring med t.ex länk till någon dokumentation varit på
plats redan i första inlägget. T.ex:
http://en.wikipedia.org/wiki/Structured_text
http://www.plcopen.org/pages/tc1_standa ... /index.htm
Nerladningar verkar kosta, som det brukar med IEC publikationer...

Hur som helst, du verkar väl ha en lösning som fungerar nu (?).

Re: IF och ARRAY i ST

Postat: 27 november 2013, 22:01:34
av Magnus_K
Du ska då alltid få en att hänga med öronen, sodjan!

Nej då, inga problem. Hade bara inte en blekaste att det var okänt/ovanligt. Det var därför jag kort och gott skrev ST i ämnet...

Slutresultatet:

Kod: Markera allt

minvar := FALSE;
FOR i := 1 TO 5 DO
   IF minarray[i] THEN
	minvar := TRUE;
   END_IF
END_FOR
Nu ska jag inte göra den här tråden mer långranding än vad den redan är men det ni har sagt kanske har fått mig att inse att jag ska lägga mer krut på just böcker om ST och inte om Pascal, fastän språken baseras på det...

Tack för hjälpen!