• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Programowanie PLC w ST (Structured Text)

+1 głos
38,006 wizyt
pytanie zadane 27 kwietnia 2015 w Inne języki przez sajmon_szy Nowicjusz (170 p.)
edycja 27 kwietnia 2015 przez sajmon_szy
Cześć!

Programuje ktoś z Was PLC-ki w ST?
Rozpoczynam naukę i napotkałem problem. Piszę program obsługujący bramę wzjadową (przesuwną). Jak na razie uzyskałem efekt, że po kliknięciu w przycisk brama otwiera się, a po ponownym kliknięciu - zamyka się. Jednak w rzeczywistości działa to troszkę inaczej, a mianowicie - po kliknięciu brama otwiera się, po ponownym klikcięcu brama zatrzymuje się, kolejne klikcięcie - brama zamyka się, kolejne- zatrzymuje , i od początku. Jest tu trochę więcej opcji okodowanych rzecz jasna, ale z powyższym mam problem. Wszystko napisane przy pomocy zmiennych BOOL, ruch bramy REAL. Zastosowano multum warunków IF. Nie wiem jaki typ zmiennej dać który obsłuży mój problem.
Programowanie w ST jest całkiem podobne do c++, więc powinniście mieć na to jakiś sposób. A na samą logikę to już na pewno :-).

Pozdrawiam

2 odpowiedzi

0 głosów
odpowiedź 5 maja 2015 przez kudlatyzbik Nowicjusz (200 p.)
Musisz podać troszke więcej szczegułów.

Może fragment kodu , który sprawia Ci problem.

Musi to być w ST? Na początek sugerowałbym drabinkowy. Bedzie łatwiej.
0 głosów
odpowiedź 9 maja 2015 przez andrzey13 Nowicjusz (140 p.)

Cześć.

W pierwszych słowach pragnę Ci podziękować za poruszenie tematu programowania sterowników PLC.

Osobiście poleciłbym Ci język FBD (Function Block Diagram) zamiast ST, czyli w skrócie bloczki. Dlaczego?

Ludzie są głównie wzrokowcami, zatem obraz kilku bloczków jest łatwiej przyswoić i przeanalizować niż obraz kodu tekstowego napisanego w kilku linijkach. Ponadto w ST musisz pamiętaćo deklaracjach, połączeniach, funkcjach, itp., natomist FBD realizuje część kodu za Ciebie.

Z Twojego opisu wynika, że system ma realizować 4 stany (otwieranie, stop_otwieranie, zamykanie, stop_zamykanie) po każdorazowym kliknięciu.

Można użyć np. licznika od 0 do 3. Wejście licznika poprzedzone bloczkiem wykrywającym zbocze narastające, czyli po każdym kliknięciu licznik zwiększa wartość o 1 do wartości 3. Na wejście resetujące licznik podaj zależność, gdy wyjście licznika równe_większe 4. W ten sposób licznik zacznie od 0.

Poniżej prezentuje prosty sytem napisany w FBD w środowisku CoDeSys 2.3.

Pozdrawiam, Andrzej

komentarz 18 maja 2015 przez sajmon_szy Nowicjusz (170 p.)

Witam,

Przepraszam, że dopiero odpowiadam, ale po kilku dniach sprawdzania forum zrezygnowałem z uzyskania odpowiedzi. Jak widać był to błąd. Poniżej załączam aktualny kod programu.

Na chwilę obecną zajmuję się językiem ST, gdyż jest dla mnie bardziej zrozumiały i przyjazny niż FBD (może dlatego, że wcześniej dziubałem trochę do C++), chociaż jak sądzę nie ominie mnie zaprzyjaźnienie się z tym językiem.

Moje pytanie nadal aktualne.

Zmienne:

Kod:

// Zerowanie zmiennych wychodzących poza zakres <0,1>
	IF Ruch_bramy > 10 
		THEN
			Ruch_bramy:=10;
	END_IF
	
	IF Ruch_bramy < 0
		THEN
			Ruch_bramy:=0;
	END_IF
	
// Ustawienie aktywnej krańcówki1 przy bramie zamkniętej	
	IF Ruch_bramy = 0
		THEN
			Krancowka1:= TRUE;
		ELSE
			Krancowka1:= FALSE;
	END_IF
	
	
(* Imitacja przycisku i ruch bramy (otwieranie) ze stałą inkrementacją, oraz zapalaie lampki sygnalizującej otwieranie bramy.
Dodatkowo wprowadzono warunek który zatrzymuje otwieranie bramy gdy czujnik swietlny lub czujnik przeciazenia zostanie aktywowany. W stanie otwierania bramy-
aktywacja czujnika świetlnego nie spowoduje jej zatrzymania (brama nadal będzie się otwierać). Podczas zamykania - tak *)	
				
	IF Czujnik_oporu = FALSE
		THEN
			IF 	PrzyciskOpenClose = TRUE AND Ruch_bramy < 10 
				THEN
					Ruch_bramy:=Ruch_bramy + 0.01;
					Otwieranie:= TRUE;
					STOP:=FALSE;
				ELSE
					Otwieranie:= FALSE;
			END_IF
		ELSE
			Otwieranie:=FALSE;
			STOP:=TRUE;
	END_IF

	
// Ustawienie aktywnej krańcówki1 przy bramie otwartej	 
	IF Ruch_bramy >= 10
		THEN
		Krancowka2:= TRUE;
	ELSE
		Krancowka2:= FALSE;
	END_IF; 
	 
	
(* Imitacja przycisku i ruch bramy (zamykanie) ze stałą inkrementacją, oraz zapalaie lampki sygnalizującej zamykanie bramy.
	Dodatkowo wprowadzono warunek który zatrzymuje otwieranie bramy gdy czujnik swietlny lub czujnik przeciazenia zostanie aktywowany. *)

	IF Czujnik_swietlny = FALSE AND Czujnik_oporu = FALSE AND Furtka= FALSE
		THEN
			IF PrzyciskOpenClose = FALSE AND Ruch_bramy > 0 AND Ruch_bramy <= 10
				THEN	
					Ruch_bramy:=Ruch_bramy - 0.01;
					Zamykanie:= TRUE;
					STOP:=FALSE;
				ELSE
					Zamykanie:= FALSE;
			END_IF
		ELSE
			Zamykanie:= FALSE;
			STOP:=TRUE;
	END_IF


(*Funkcja furtki (ang. wicket) *)
		
	IF Furtka = TRUE
		THEN
			Ruch_bramy:=Ruch_bramy + 0.01;
		IF Ruch_bramy >= 2 
			THEN 
				Ruch_bramy:=2;
				CounterON:= TRUE; 
				TON_01( IN:=CounterON, PT:=T#5s );
				Powrot_bramy:= TON_01.Q;
					IF Powrot_bramy = TRUE
						THEN 
							Furtka:=FALSE;
					END_IF
		END_IF
		
	END_IF 
	
	
END_PROGRAM

 

Podobne pytania

0 głosów
1 odpowiedź 304 wizyt
pytanie zadane 18 lipca 2019 w Inne języki przez Tholin Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 420 wizyt
pytanie zadane 24 lutego 2021 w Offtop przez Paweł123 Nałogowiec (33,540 p.)
0 głosów
0 odpowiedzi 272 wizyt

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...