background image

 

1/3

Laboratorium: Programowanie Sterowników Przemysłowych 

Ćwiczenie: Programowanie sterowników PLC w języku C 

 
Celem ćwiczenia jest prezentacja metod i narzędzi wykorzystywanych do implementacji 
i testowania aplikacji sterowników PLC w języku wysokiego C, na przykładzie sterowników GE 
Fanuc PacSystems RX7i.  
 
Przygotowanie projektu realizowane jest z wykorzystaniem oprogramowania Cimplity Machine 
Edition oraz pakietu GE Fanuc C Toolkit for PACSystem. Umożliwiają one kompilację programu 
w języku C oraz dołączenie go do programu w języku drabinkowym jako tzw. bloku zewnętrznego 
(ang. external block). Ponadto w skład pakietu C Toolkit wchodzi debugger, umożliwiający 
uruchamianie i testowanie programu bez użycia sterownika, w środowisku komputera PC.  

Informacje dodatkowe 
W skład programu w języku C musi wchodzić funkcja GefMain(). Jest ona wywoływana przez 
system operacyjny sterownika PLC po umieszczeniu bloku zewnętrznego w programie w języku 
drabinkowym. Parametry funkcji GefMain() muszą być zgodne co do typu i liczby z listą 
parametrów zdefiniowanych dla bloku zewnętrznego w programie Cimplicity Machine Edition. 
Wartość zwraca przez funkcję GefMain GEF_EXECUTION_OK lub GEF_EXECUTION_ERROR 
odpowiada przekazaniu (lub nie) sygnału na tzw. wyjście zezwolenia bloku (tj. występujące w 
każdym bloku wyjście binarne, nie posiadające nazwy) 
 
Praca z debuggerem wymaga dołączenia do programu dodatkowego pliku źródłowego, 
zawierającego punkt wejścia do programu (funkcję main()). Funkcja main() po zainicjowaniu 
środowiska czasu wykonania za pomocą funkcji bibliotecznej initCBlock() wywołuje funkcję 
GefMain() bloku specyfikując odpowiednie parametry. 
 
Paramery bloku GefMain() są wskaźnikami na odpowiednie typy danych. W przypadku, gdy 
w programie drabinowym nie jest określona wartość parametru, w wywołaniu GefMain() 
odpowiedni parametr przyjmie wartość NULL. Dlatego też należy zwrócić szczególną uwagę na 
kontrolę wartości parametrów w programie w języku C, aby zapobiec błędom odwołań do pamięci. 

Zadania do realizacji w trakcie ćwiczenia 
Dla każdego zadania utworzyć odrębny podkatalog w D:\PACSystemsCToolkit\Projects oraz 
osobny blok zewnętrzny w Cimplicity Machine Edition. Wszystkie bloki umieścić w jednym 
projekcie w języku drabinkowych. 
1. Napisać procedurę o trzech parametrach wejściowych typu T_WORD i trzech parametrach 

wyjściowych typu T_BOOLEAN. Parametry wejściowe określają numery badanych wejść 
sterownika (np. wartość 12 odpowiada %I12). Procedura ma ustawiać odpowiedni parametr 
wyjściowy  (pierwszy, drugi lub trzeci) na 1 w zależności od liczby wejść, na których 
występują stany 1. Np. dla dwóch aktywnych wejść należy ustawić drugim parametr wyjściowy 
na wartość 1. 
W programie w języku drabinkowym ustawić adresy odczytywanych wejść na 10, 11, 12 oraz 
połączyć wyjścia bloku z komórkami %T1, %T2, %T3. Zwrócić uwagę, aby rozwiązując 
kolejne zadania nie spowodować kolizji adresów. 

background image

 

2/3

2. Napisać procedurę, która po pojawieniu się „1” na wejściu %I9 załącza wyjście %Q9 po 15 

sekundach, a po wyłączeniu wejścia %I9 wyłącza wyjście %Q9 po 10 sekundach. Jeżeli „1” na 
wejściu %I9 trwa krócej niż 15 sekund, wyjście %Q9 nie powinno się zapalić. 

3. Zrealizować procedurę STER_ZAW sterującą pracą zaworu. 

Sygnały wejściowe: 
–  R_ZAM – rozkaz operatora: zamknij zawór, 
–  R_OTW – rozkaz operatora: otwórz zawór, 
–  ZAM – sygnalizacja zawór zamknięty, 
–  OTW – sygnalizacja zawór otwarty, 
Sygnały wyjściowe: 
–  S_ZAM – siłownik: zamykanie zaworu, 
–  S_OTW – siłownik: otwieranie zaworu, 
–  A_ZAM – awaria podczas zamykania zaworu, 
–  A_OTW – awaria podczas otwierania zaworu; 
Algorytm: 
–  rozkaz R_ZAM powinien spowodować wystawienie sygnału dla siłownika S_ZAM aż do 

uzyskania potwierdzenia otwarcia ZAM, analogicznie dla rozkazu R_OTW 

–  maksymalny dozwolony czas pracy siłownika to 10 sekund; w przypadku jego 

przekroczenia procedura powinna zatrzymać pracę siłownika wystawić odpowiedni sygnał 
alarmu: A_ZAM lub A_OTW 

–  skasowanie alarmu powinno nastąpić po prawidłowo wykonanym cyklu pracy (zamykania 

lub otwierania) zaworu 

–  polecenie otwarcia zaworu otwartego lub zamknięcia zaworu zamkniętego należy 

zignorować 

4. Wykorzystując przygotowaną procedurę sterowania zaworem napisać program sterujący 

dwoma zaworami, przyjmując następujące przyporządkowanie wejść/wyjść: 

ZAWÓR 1 

ZAWÓR 2 

R_ZAM %I1 R_ZAM %I5 

R_OTW %I2 R_OTW %I6 

ZAM %I3 ZAM %I7 

OTW %I4 OTW %I8 

S_ZAM %Q1 S_ZAM %Q5 

S_OTW %Q2 S_OTW %Q6 

A_ZAM %Q3 A_ZAM %Q7 

A_OTW %Q4 A_OTW %Q8 

Tworzenie i kompilacja programu 

– skrót 

uruchamiający linię poleceń środowiska C Toolkit jest dostępny na pulpicie, zmienić 

bieżący folder na odpowiedni dla zadania 

– utworzyć program w języku C, zapisać plik źródłowy 
– kompilacja 

programu 

języku C, program do uruchamiania przez sterownik PLC 

CompileCPACRX7i <nazwa utworzonego pliku c bez rozszerzenia> 

– utworzyć plik zawierający funkcję main() 

/* IncludeFiles */ 

#include "ctkInitCBlock.h" 

#include "PACRX7iPlc.h" 

background image

 

3/3

#include <stdio.h> 

 

/* forward declaration */ 

int GefMain (T_WORD  *param1);    /* Input Param 1  */ 

int main(int argc, char *argv[]) 

  T_WORD  param = 1; 

  int result; 

 

  initCBlock(); // inicjalizacja środowiska 

  result = GefMain(&param); // wywołanie zależne od parametrów procedury 

  if(result != GET_EXECUTION_OK.) printf(“Error”); 

– utworzyć plik o nazwie sourcesDebug (bez rozszerzenia), zawierający listę plików 

źródłowych projektu 

CFILENAMES = plik1.c plik2.c 

– kompilacja 

programu 

języku C, program do uruchamiania na komputerze PC 

CompileCDebugPACRX7i  

–  uruchomienie programu za pomocą debuggera i testy 

DebugPACRX7i pc\program.exe 

– utworzenie 

bloku 

zewnętrznego programu wykorzystując wygenerowany plik 

plc\program.gefElf (widok projektu, prawy klawisz myszy na Logic->Program Blocks; Add 
C Block), zdefiniować parametry wejściowe bloku za pomocą opcji Parameters 

5. utworzyć główny blok programu sterownika (_MAIN) wykorzystując zdefiniowany blok 

zewnętrzny i przetestować pracę programu 

Sprawozdanie 

– skład osobowy sekcji wykonującej ćwiczenie, 
– rozwiązania zadań: pliki źródłowe w języku C i skompilowane  
–  kopia projektu Cimplicity Machine Editon (funkcja Backup). 
– wnioski. 
 

Wszystkie składniki sprawozdania należy skompresować w formacie *.zip tworząc plik o nazwie 
gXsYcZ.zip, gdzie X jest numerem grupy, Y sekcji a Z ćwiczenia 
 
Sprawozdanie należy umieścić na serwerze ftp w terminie nie dłuższym niż 2 tygodnie od odbycia 
zajęć. Adres serwera: 157.158.57.50, user: labplc, pass: plclab. Studenci zobowiązani są do 
przechowywania kopii sprawozdania, na wypadek awarii serwera lub innych nieprzewidzianych 
zdarzeń. 

Instrukcje do ćwiczenia  
http://www.iinf.polsl.gliwice.pl/iinf/infprzem/_teaching/teaching_activity.htm 

1.  GE Fanuc PACSystems C Toolkit 
2.  GE Fanuc PACSystems RX7i 
3. Cimplicity ME