• 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)

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
37,604 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ź 216 wizyt
pytanie zadane 18 lipca 2019 w Inne języki przez Tholin Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 317 wizyt
pytanie zadane 24 lutego 2021 w Offtop przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
0 odpowiedzi 219 wizyt

93,188 zapytań

142,204 odpowiedzi

322,027 komentarzy

62,515 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2581p. - dia-Chann
  2. 2537p. - Łukasz Piwowar
  3. 2528p. - Łukasz Eckert
  4. 2514p. - CC PL
  5. 2476p. - Tomasz Bielak
  6. 2445p. - Łukasz Siedlecki
  7. 2443p. - rucin93
  8. 2373p. - Marcin Putra
  9. 2310p. - Michal Drewniak
  10. 2258p. - Adrian Wieprzkowicz
  11. 2210p. - Mikbac
  12. 2156p. - Anonim 3619784
  13. 1733p. - rafalszastok
  14. 1701p. - Michał Telesz
  15. 1580p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...