Jednokrotne użycie funkcji

0

Witam,
jestem początkującym programującym i tworzę pewną wizualizację w języku C i napotkałem pewien problem, a mianowicie przy przełączaniu z pracy automatycznej na ręczną dalej wykonywana jest jedna funkcja (tylko przy spadku wartości o1 o 5) a mianowicie p1==1 gdzie w tym wypadku chciałbym aby była JEDNORAZOWO wykonana funkcja p1=0. Jest to w chwili przełączenia z pracy automatycznej na ręczną i wtedy chciałbym aby zawór p1 przyjął wartość równą 0 ale w dalszej pracy nie podtrzymywał tej wartości.

p1 to zawór
wybordan1 to przełącznik między pracą manualną a automatyczną
o1 to zbiornik (napełnianie lub zmniejszanie ilości cieczy)


{PRACA RĘCZNA}

IF p1==1 AND wybordan1==0 AND o1>0 THEN
o1=o1 - 5;
ENDIF;

IF o1<0 THEN
o1=0;
ENDIF;

IF o1==0 THEN
p1=0;
ENDIF;

{PRACA AUTOMATYCZNA}


IF p1==1 AND wybordan1==1 AND o1>0 THEN
o1=o1 - 5;
ENDIF;


IF o1>75 AND wybordan1==1 THEN  
       p1=1;
   ENDIF;

   IF o1<20 AND wybordan1==1 THEN
       p1=0;
   ENDIF; 

IF p1==0 AND wybordan1==1 THEN
o1=o1 + 5;
ENDIF;

Problem występuje tylko, gdy wartość o1 jest zmniejszana o 5 a ja chcę w tym momencie przejść do pracy manualnej to dalej wykonywana jest funkcja zmniejszania o 5 aż do osiągnięcia 0. A chciałbym żeby przy przełączeniu wyburdan1 (czyli z pracy automatycznej na ręczną lub odwrotnie) jednorazowo otrzymać wartość p1=0 ale żeby nie była ona podtrzymywana tylko wykonywana przy przełączeniu.

Moim pomysłem było

IF wybordan1==0 THEN
p1=0;
ENDIF;

Ale wtedy przy wybordan1==0 czyli pracy ręcznej ciągle jest p1=0 a ja chcę żeby tylko RAZ zostało to wykonane.

Dodam tylko że to jest skrypt, który jest powtarzany co 1000ms.

Dziękuję za odp

0

Nie mam pojęcia co to jest, ale jeżeli chcesz coś wykonać raz to użyj zmiennej logicznej (boolean), która będzie określać, czy już wykonano to coś "raz". Początkowo jej wartość to fałsz i jeżeli jest taka wartość to wykonujesz to "raz". Po tym wykonaniu ustaw ją na wartość logiczną prawda, co spowoduje, że już więcej się to coś nie wykona.

Brzmisz jak byś robił coś związanego z automatyką, ale nie wygląda to na żaden znany mi język programowania sterowników PLC. Co to jest?

0

w c nie ma zmiennej boolean (można ja zdefiniować, ale mniejsza o to). A może autorowi chodzi o coś takiego? (też za bardzo nie zrozumiałem)

int ILE_RAZY = 0;

void funkcjaZaleznaOdIleRazy()
{
  if (!ILE_RAZY)
    return;
  // tutaj dizeje sie to co powinno gdy ILE_RAZY == 0;
}

void funkcjaZwiekszajacaIleRazy()
{
  //cos tam sobie funkcja robi
  ILE_RAZY = 1;
}

void funkcjaZmniejszajacaIleRazy()
{
  //cos tam sobie funkcja robi
  ILE_RAZY = 0;
}

chodzi o użycie zmiennej globalnej. Nie jest to ładne rozwiązanie. Można jako parametr funkcji przekazywać IleRazy został wykonany dana funkcja. Ale nie wiem czy w tym przypadku by to nie zaciemniło jeszcze bardziej obrazu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1