środa, 10 grudnia 2014

TwinCAT - pierwsze kroki

Środowisko TwinCAT firmy Beckhoff działa na systemie Windows. Jest ono obecne w produktach tej firmy. Posiada lokalny runtime, więc można uruchamiać stworzone przez siebie programy nie posiadając sterownika PLC. Obecnie do pobrania są dwie wersje:

  • TwinCAT2 - rozwiązanie oparte o Codesys 2
  • TwinCAT3 - rozwiązanie oparte o Visual Studio

Domyślnie TC3 zainstaluje Visual Studio Shell. Jeśli na komputerze mamy już VS, TC3 może się do niego doinstalować. W drugim przypadku pracujemy na nowszej wersji produktu Microsoft, więc warto to zrobić.

Najprostsza konfiguracja dla TC3:
  1. Instalujemy Visual Studio Shell (Integrated)
  2. Instalujemy Visual Studio Shell (Isolated)
  3. Instalujemy TwinCAT3 XAE

Warto wybrać odpowiedni adres AMS dla maszyny, na której pracujemy. Adres ten wykorzystują instancje TwinCAT do wzajemnej komunikacji (poprzez protokół ADS). Będzie to konieczne na przykład przy wgrywaniu programu. Można zmienić adres AMS klikając na ikonę TwinCAT w zasobniku systemowym. Następnie rozwijamy menu Router i wybieramy opcję Change AMS.

Po uruchomieniu Visual Studio, tworzymy nowy TwinCAT XAE Project. Utworzona zostaje podstawowa struktura projektu. W pierwszej kolejności interesuje nas SYSTEM, gdzie można dokonać wyboru runtime. W tym celu należy kliknąć na przycisk Choose Target. W tym miejscu możemy wybrać lokalny runtime, bądź wyszukać w sieci sterownik. W drugim przypadku należy wybrać opcję Search Ethernet.

Utworzenie projektu PLC:
  1. PLC (prawy przycisk myszy)
  2. Add New Item
  3. Standard PLC Project

Podstawowa struktura projektu PLC:
  • POUs - podprogramy i bloki funkcjonalne
  • DUTs - typy danych
  • VISUs - elementy wizualizacji
  • GVLs - zmienne globalne
  • References - dołączone biblioteki

Najważniejsze funkcje środowiska:
  • Activate Configuration - wgranie konfiguracji
  • Login - zalogowanie
  • Logout - wylogowanie

Kiedy jesteśmy zalogowani, niemożliwa jest edycja. Możliwy jest natomiast podgląd wartości zmiennych oraz sterowanie przebiegiem aktualnie wgranego programu:
  • Start - uruchomienie lub wznowienie pracy programu po zatrzymaniu
  • Stop - zatrzymanie pracy programu
  • Reset - zatrzymanie pracy programu i przywrócenie wartości początkowych
  • Force - wymuszenie wartości zmiennej
  • Unforce - zakończenie wymuszania
  • Write - wpisanie wartości do zmiennej

czwartek, 4 grudnia 2014

Podstawy ST - składnia

Szybki jak utwory grupy Behemoth przegląd składni rozpoczniemy od prostych typów danych:
  • BOOL
  • BYTE (1 bajt), WORD (2 bajty), DWORD (4 bajty), LWORD (8 bajtów)
  • SINT (1 bajt), INT (2 bajty), DINT (4 bajty), LINT (8 bajtów)
  • USINT (1 bajt), UINT (2 bajty), UDINT (4 bajty), ULINT (8 bajtów)
  • REAL (4 bajty), LREAL (8 bajtów)
  • TIME
  • DATE, TIME_OF_DAY, DATE_AND_TIME
  • STRING (liczba znaków podawana przy deklaracji w "()" lub w "[]")

Konwersji w wiekszości przypadków dokonujemy odpowiednią funkcją postaci TYP1_TO_TYP2(wyrażenie).

Domyślny jest zapis dziesiętny, ale można używać innych i liczbę 10 zapisać w kodzie jako 16#A, 8#12 lub 2#1010. Podobnie jest z zapisem czasu, godziny i daty, kilka przykładów:
  • T#1s
  • T#1d2h3ms
  • D#2014-12-24
  • TOD#21:30:50.66
  • DT#2014-12-24-21:30:50.66

Jeśli chodzi o typy złożone, przykład deklaracji tablicy:
Tab : ARRAY [1..10] OF BYTE;

i struktury:
TYPE ST_Odczyt :
STRUCT
 Command : STRING(5);
 Name : STRING(15);
 Address : WORD;
 RegisterCount : WORD;
END_STRUCT
END_TYPE

Wskaźniki to wyżej wymienionych tworzymy poprzedzając nazwę typu frazą POINTER TO. Adres dla wskaźnika możemy uzyskać używając funkcji ADR. Dereferencja natomiast następuje po dołożeniu "^" na końcu nazwy zmiennej

Komantarze:
(* to jest komentarz *)

Operatory:
  • Operator przypisania: :=
  • Operatory porównania: =, <>, <, >, <=, >=
  • Operatory logiczne: NOT, AND, OR, XOR
  • Operatory arytmetyczne: +, -, *, /, MOD

Instrukcja warunkowa:
IF warunek THEN
 instrukcje
ELSIF warunek THEN
 instrukcje
ELSE
 instrukcje
END_IF

Przykładowa instrukcja wyboru:
CASE krok OF
1:
 instrukcje
2,3:
 instrukcje
4..6:
 instrukcje
ELSE
 instrukcje
END_CASE

Pętla for:
FOR przypisanie TO wyrażenie BY krok DO
 instrukcje
END_FOR

Pętla while:
WHILE warunek DO
 instrukcje
END_WHILE

Pętla repeat:
REPEAT
 instrukcje
UNTIL warunek
END_REPEAT

Wyjście z każdej z nich umożliwia instrukcja EXIT.

Na koniec kilka podstawowych funkcji:
  • ABS - wartość bezwzględna
  • LIMIT - wartość zawężona do granic przedziału
  • MIN, MAX - mniejsza/większa z podanych wartości
  • SHL, SHR - przesunięcia bitowe w lewo i w prawo
  • SIZEOF - rozmiar
  • SIN, COS, TAN, ASIN, ACOS, ATAN - funkcje trygonometryczne
  • SQRT - pierwiastek kwadratowy
  • TRUNC - część całkowita

Operacje na napisach:
  • CONCAT - połączenie napisów
  • FIND - pozycja znaku w napisie
  • LEN - długość napisu
  • MID - fragment napisu

wtorek, 2 grudnia 2014

Podstawy ST - parę słów wstępu

W pierwszym z serii postów napiszę parę słów o samym języku ST (ang. Structured Text). Jest on częścią normy IEC 61131 opisującej języki programowania dla sterowników PLC. Przypomina klasycznego już Pascala, od którego duża część z nas rozpoczynała naukę programowania. Norma IEC 61131 definiuje także cztery inne formy zapisu programów, a konkretnie:
  • LD - drabinkowy
  • FBD - blokowy
  • IL - tekstowy (przypomina Asembler)
  • SFC - mieszany
Jak widać, dla każdego coś miłego. Co więcej, języki te są ze sobą wymienne, a w jednym projekcie może być użytkich kilka z nich. Dlaczego akurat ST? To dobry wybór dla osób lubiących języki wysokiego poziomu (lub średniego, jak niekiedy określa się taki na przykład C++), których los pchnął/poprowadził w kierunku automatyki.

Z góry zakładam, że osoby zainteresowane tematyką poruszaną w tej serii znają postawy programowania i rzeczy takie jak instrukcja warunkowa czy pętla to dla nich normalna sprawa. Prezentacja podstawowej składni bedzię zatem krótka, a kolejne posty skoncentrują się na nauce elementów bardziej charakterystycznych dla PLC.