 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
1
 
 
 
 
 
 
Notatka aplikacyjna NA190PL 
Raportowanie w PLC XSystem
 
Autor:  
Jacek Zarzycki
©Moeller Electric Sp. z o.o.  
04/2006 
 
 
www.moeller.pl
www.moeller.pl
NA190PL
Raportowanie
w sterownikach serii XSystem
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
2
Spis treści 
 
1. Wstęp......................................................................................................................3
2. Przygotowanie rekordów. .....................................................................................3
2.1. Funkcje operowania na ciągach znaków (STRING) .........................................3
2.2. Tworzenie stempli czasowych ..........................................................................4
2.2.1. Formaty czasu............................................................................................4
2.2.2. Funkcje operujące na czasie......................................................................5
2.2.3. Konwersja na format tekstowy zgodny MS Excel .......................................6
2.3. Tworzenie struktury rekordu .............................................................................7
2.4. Znaki specjalne.................................................................................................8
2.6. Przygotowanie całego rekordu..........................................................................9
3. Zapis danych na nośniku (MMC, USB, FLASH) ..................................................9
3.1. Rodzaje nośników i ścieżki dostępu. ................................................................9
3.2. Funkcje sterujące zapisem danych. ..................................................................9
3.4. Użycie TASK’ów. ............................................................................................12
 
 
 
 
 
 
 
 
 
 
 
 
  
 
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
3
1. Wstęp 
 
Sterowniki serii XSystem, a zwłaszcza sterownik XC200 posiadający ogromne
możliwości z branży IT, pozwalają na tworzenie rejestrów danych. Raporty te mogą 
być  zapisywane  na  karcie  MMC,  na  wewnętrznym  dysku  FLASH  lub  na  napędzie 
PENDRIVE.  Zapisane  dane  można  odczytywać  przekładając  nośnik  do  komputera, 
bądź pobierać pliki przez ETHERNET za pomocą protokołu FTP. Sterowniki potrafią 
też samodzielnie wysyłać dane na serwer FTP. 
 
Rejestrowane
przez
sterownik
mogą
być
zdarzenia
takie
jak
załączenie/wyłączenie maszyn, obwodów, zalogowanie się użytkownika, wszelkiego 
rodzaju  sytuacje  alarmowe,  ostrzeżenia.  Można  rejestrować  również  dane 
pomiarowe,  stany  liczników  rejestrujących  liczbę  wyprodukowanych  elementów  itp. 
Zbieranie  zmiennych  może  odbywać  się  zatem  cyklicznie,  co  ustalony  przez 
użytkownika odstęp czasu bądź zdarzeniowo. 
 
Format w jakim pliki zostają zapisane zależy od programisty. Dane można
zapisywać  przykładowo  w  formacie  tekstowym.  Nadając  rozszerzenie  .xls  i 
oddzielając  poszczególne  pozycje  znakami  tabulacji,  a  całe  rekordy  znakami  końca 
linii  uzyskujemy  plik  który  można  otworzyć  bezpośrednio  w  aplikacji  MS  Excel. 
Wykorzystując  ponadto  funkcje  danych  zewnętrznych  Excela  możemy  „zasysać” 
dane do wstępnie sformatowanego arkusza. 
 
Niniejsza notatka aplikacyjna ma na celu przedstawienie metodyki tworzenia
aplikacji  do  akwizycji  danych.  Pokazano  również  zasady  działania  z  danymi 
zewnętrznymi w MS Excel. 
 
Najnowsze wersje dokumentacji, a także aktualizacje oprogramowania
dostępne są w: "
http://www.moeller.net/en/support/index.jsp
"
2. Przygotowanie rekordów.
 
2.1. Funkcje operowania na ciągach znaków (STRING) 
Aby przygotować sensownie zapisany plik raportu należy poznać zasady operacji na 
ciągach  znaków,  czyli  STRING’ach.  Tworząc  aplikację  należy  pamiętać,  aby 
wszystkie  operacje  na  ciągach  znaków  wykonywane  były  w  jednym  Task’u.  Użycie 
tej  samej  funkcji  w  dwóch  różnych  Task’ach  spowodować  może  nadpisywanie  się 
ciągów  znaków.  Wszystkie  wskazane  poniżej  funkcje  dostępne  są  z  biblioteki 
standard.lib 
 
CONCAT –   funkcja łączenia dwóch ciągów znaków – STR1 i STR2; 
 
format: CONCAT(STR1, STR2), np. 
VarSTRING1 := CONCAT ('poczatek','koniec'); 
Po wykonaniu takiej funkcji zmienna VarSTRING1 zawierać będzie ‘poczatekkoniec’ 
 
DELETE –   funkcja usuwająca LEN znaków z ciągu STR rozpoczynając od pozycji 
wskazanej w POS; 
format: DELETE(STR,LEN,POS), np. 
VarSTRING1 := DELETE ('abcdefg',2 ,3); 
Po wykonaniu takiej funkcji zmienna VarSTRING1 zawierać będzie ‘abefg’ 
 
FIND –  
funkcja odszukująca w STR1 występującego jako pierwszy w kolejności 
ciągu  STR2.  Zwraca  pozycję  od  której  rozpoczyna  się  poszukiwany 
ciąg znaków; 
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
4
format: FIND(STR1, STR2), np.
VarINT1 := FIND (‘abcdeabcde’,’cd’)
Po wykonaniu takiej funkcji zmienna VarINT1 zawierać będzie wartość 3. 
 
INSERT –   funkcja  włączająca  STR2  do  ciągu  znaków  STR1  rozpoczynając  po 
pozycji POS;
format: INSERT(STR1, STR2, POS), np. 
VarSTRING1 := INSERT ('test','k',2); 
Po wykonaniu takiej funkcji zmienna VarSTRING1 zawierać będzie ‘tekst’. 
 
LEFT –  
funkcja obcinająca ciąg znaków STR do SIZE znaków z lewej strony;
format: LEFT(STR, SIZE), np. 
VarSTRING1 := LEFT ('testowanie', 4); 
Po wykonaniu takiej funkcji zmienna VarSTRING1 zawierać będzie ‘test’. 
 
LEN –  
funkcja zwracająca długość (liczbę znaków) ciągu STR;
format: LEN(STR), np.
VarINT1 := LEN ('testowanie')
Po wykonaniu takiej funkcji zmienna VarINT1 zawierać będzie wartość 10. 
 
MID –  
funkcja  wyodrębniająca  fragment  ciągu  znaków  z  ciągu  STR.  Zwraca 
LEN znaków rozpoczynając od pozycji POS. 
format: MID(STR, LEN, POS), np. 
VarSTRING1 := MID ('testowanie', 3,5); 
Po wykonaniu takiej funkcji zmienna VarSTRING1 zawierać będzie ‘owa’. 
 
REPLACE –  funkcja  zamieniająca  L  znaków  z  ciągu  znaków  STR1  ciągiem  STR2 
począwszy od znaku P.
format: REPLACE(STR1, STR2, L, P), np. 
VarSTRING1 := REPLACE ('testowanie', 'rak' 2,2); 
Po wykonaniu takiej funkcji zmienna VarSTRING1 zawierać będzie ‘traktowanie’. 
  
RIGHT –  
funkcja obcinająca ciąg znaków STR do SIZE znaków z prawej strony;
format: RIGHT(STR, SIZE), np. 
VarSTRING1 := RIGHT ('testowanie', 4); 
Po wykonaniu takiej funkcji zmienna VarSTRING1 zawierać będzie ‘anie’. 
 
2.2. Tworzenie stempli czasowych 
Podstawowym  elementem  rekordu  jest  zwykle  pole  opisujące  datę/godzinę 
wystąpienia  zdarzenia,  czy  pobrania  próbki  danych.  Aktualny  czas  pobierany  jest 
zwykle z zegara czasu rzeczywistego RTC (RealTimeClock). 
 
2.2.1. Formaty czasu. 
Czas może być zapisywany w różnych formatach danych. Każdy z nich opera się na 
wielkości DWORD. 
TIME – ogólny format czasu. Zmienne w tym formacie rozpoczynają się od znaku „t” 
lub „T” (albo „time” lub „TIME”) oraz znaku #. W dalszej części podawane są wartości 
wraz ze znacznikami określającymi wymiar, np. „d” – dni, „h” – godziny, „m” – minuty, 
„s”  –  sekundy,  „ms”  –  milisekundy.  Należy  pamiętać  aby  znaczniki  podane  były  we 
właściwej kolejności (d przed h itd.), ale nie trzeba podawać wszystkich składników. 
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
5
Przykładowe, poprawnie zapisane zmienne formatu TIME: 
TIME1 := T#14ms; 
TIME1 := T#100s12ms;   (*najwyższy składnik może przekroczyć limit*) 
TIME1 := t#12h34m15s; 
 
Błędnie zapisane zmienne formatu TIME: 
TIME1 := t#5m68s;   
(*niższy składnik ma przekroczony limit*)
TIME1 := 15ms;
(*brak przedrostka T#*)
TIME1 := t#4ms15d;
(*zła kolejność składników*)
 
DATE  –  format  zapisu  daty.  Fizycznie  jest  to  liczba  wyrażająca  liczbę  sekund 
począwszy od godziny 00:00 1 stycznia 1970r. W zapisie rozpoczyna się od „d”, „D”, 
„date” lub „DATE” oraz od znaku „#”. W dalszej części zapisana jest data w formacie 
rok-miesiąc-dzien, np. 
DATE#1996-05-06 
d#2001-03-29 
 
TIME_OF_DAY  –  format  zapisu  godziny.  Fizycznie  jest  to  liczba  ms  od  godziny 
00:00.  W  zapisie  rozpoczyna  się  od  „tod#”,  „TOD#”,  „TIME_OF_DAY#”  lub 
„time_of_day”.  W  dalszej  części  jest  godzina:minuta:sekunda.  Sekundy  można 
wyrazić jako liczbę całkowitą bądź ułamkową, np.: 
TIME_OF_DAY#15:36:30.123 
tod#00:00:00 
 
DATE_AND_TIME – format zapisu daty i godziny. Fizycznie jest to liczba wyrażająca 
liczbę sekund począwszy od godziny 00:00 1 stycznia 1970r. W zapisie rozpoczyna 
się  od  „dt”,  „DT”,  „date_and_time”  lub  „DATE_AND_TIME”  oraz  od  znaku  „#”.  W 
dalszej  części  zapisana  jest  data  w  formacie  rok-miesiąc-dzien,  znak  „-”,  godzina 
zapisana w formacie godzina:minuta:sekunda, np.: 
DATE_AND_TIME#1996-05-06-15:36:30 
dt#1972-03-29-00:00:00 
 
Zmienne  zapisane  w  formacie  czasu  (podobnie  jak  inne  zmienne)  można  przerobić 
na  ciąg  znaków  za  pomocą  komendy  xxx_TO_STRING,  gdzie  xxx  to  format 
zmiennej. Przykładowo DT_TO_STRING. 
 
2.2.2. Funkcje operujące na czasie 
Podstawowym  elementem  rekordu  jest  zwykle  pole  opisujące  datę/godzinę 
wystąpienia  zdarzenia,  czy  pobrania  próbki  danych.  Biblioteką  obsługującą  zegar 
czasu  rzeczywistego  w  sterownikach  XSystem  jest  SysLibRtc.lib.  Zawiera  ona  4 
funkcje związane z zegarem: 
 
SysRtcCheckBattery  –  funkcja  sprawdzająca  stan  baterii  podtrzymującej  zegar 
czasu  rzeczywistego.  Stan  baterii  jest  istotny  ze  względu  na  konieczność 
podtrzymywania  zegara  na  wypadek  zaniku  zasilania.  Na  wejście  funkcji  trzeba 
podać dowolną wartość boolowską (funkcja wymaga wejścia). 
Przykład użycia: xStanBaterii:=SysRtcCheckBattery(FALSE);  
 
SysRtcGetHourMode  –  funkcja  sprawdzająca  w  jakim  trybie  działa  zegar  (12,  czy 
24 godzinnym). Sterowniki XSystem działają w trybie 24h. 
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
6
 
SysRtcGetTime – funkcja pobierająca aktualny czas z zegara czasu rzeczywistego. 
Funkcja  zwraca  czas  w  formacie  DT  (DATE_AND_TIME)  Na  wejście  funkcji  trzeba 
podać dowolną wartość boolowską (funkcja wymaga wejścia). 
Przykład użycia dtAktualnyCzas:=SysRtcGetTime(FALSE); 
 
SysRtcSetTime – funkcja ustawiająca zegar w sterowniku. Na wejście należy podać 
czas  w  formacie  DT  (DATE_AND_TIME).  Funkcja  zwraca  TRUE,  gdy  operacja 
ustawiania czasu zakończy się pomyślnie. 
Przykład użycia xUstawiono:=SysRtcSetTime(dtCzasDoUstawienia); 
 
2.2.3. Konwersja na format tekstowy zgodny MS Excel 
Aby  program  MS  Excel  mógł  przyjąć  dane  bez  konieczności  ich  konwertowania 
należy  je  zapisać  w  formacie:  „YYYY-MM-DD  HH:MM:SS”.  Oznacza  to,  że  datę 
zapisaną w sterowniku w formacie DT należy „przerobić” na format czterocyfrowego 
roku  oraz  dwucyfrowego  oznaczenia  miesiąca,  dnia,  godziny,  minuty,  sekundy. 
Między  poszczególnymi  składnikami  muszą  być  wstawione  odpowiednio  znaki  „-”, 
spacja,  „:”.  Konwersji  dokonuje  się  za  pomocą  znanych  już  funkcji  operacji  na 
ciągach  znaków.  Można  w  tym  celu  utworzyć  funkcję  konwersji.  Na  wejście  będzie 
podawany czas w formacie DT, na wyjściu uzyskamy 19 znakowy STRING: 
 
FUNCTION DT_TO_xlsDT : STRING(19) 
VAR_INPUT 
 
datagodzina:DT;
END_VAR 
VAR 
 
sTEMP:STRING;
END_VAR 
 
 
(*program*) 
sTEMP:=DT_TO_STRING(datagodzina); 
sTEMP:=DELETE(sTEMP,3,1); 
sTEMP:=REPLACE(sTEMP,' ',1,11); 
DT_TO_xlsDT:=sTEMP; (*YYYY-MM-DD HH:MM:SS*) 
 
Po  konwersji  czasu  na  format  STRING  kolejne  linie  programu  będą  modyfikowały 
zmienną sTEMP nadając jej format zgodny ze zrozumiałym przez MS Excel. Jeżeli w 
oczekiwanym formacie czas ma być określony jedynie przez godzinę i minutę należy 
dopisać przed ostatnią linią: 
 
sTEMP:=LEFT(sTEMP,16); 
 
Dzięki  możliwości  zagnieżdżania  funkcji  w  języku  ST  program  można  również 
zapisać w formie: 
DT_TO_xlsDT:=LEFT(REPLACE((DELETE(DT_TO_STRING(datagodzina),3,
1)),' ',1,11),16);  (*YYYY-MM-DD HH:MM*) 
 
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
7
 
2.3. Tworzenie struktury rekordu 
Dla  ujednolicenia  próbki  danych  można  stworzyć  odpowiednią  strukturę.  Należy  w 
tym  celu  wybrać  zakładkę  „Data  types”  i  w  lewym  oknie  wybrać  prawym  klawiszem 
myszki „Add object...”. W dalszym etapie należy stworzyć nową strukturę i wypisać w 
niej poszczególne składniki, np.: 
 
TYPE record : 
STRUCT 
 
data: STRING(19);
nr_fabr: STRING(7);
czas: STRING(8);
imie: STRING(10);
nazwisko: STRING(20);
wart1: STRING(5);
wart2: STRING(5);
wart3: STRING(5);
wart4: STRING(5);
wart5: STRING(5);
END_STRUCT 
END_TYPE 
Po stworzeniu nowego typu można deklarować odpowiednie zmienne globalne, np. 
 
VAR_GLOBAL 
 
DoZapisu: record;
record_arr: ARRAY [1..10] OF record;
END_VAR 
 
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
8
2.4. Znaki specjalne 
Aby  oddzielać  poszczególne  wiersze  i  kolumny  w  rejestrze  (zwłaszcza,  gdy  plik  ma 
być  kompatybilny  z  XLS)  należy  użyć  znaków  specjalnych.  Najpopularniejsze  znaki 
to  znak  tabulacji  i  końca  linii.  Warto  zadeklarować  najczęściej  używane  znaki,  czy 
ciągi znaków jako stałe. Zależnie od potrzeb mogą być one lokalne bądź globalne. 
 
VAR CONSTANT 
 
tab:STRING(1):='$T';
end:STRING(1):='$L';
END_VAR 
 
Zestawienie dostępnych znaków specjalnych: 
$$  
- znak dolara
$’
- apostrof
$L
- znak przesuwu o jedną linię (line feed)
$N
- znak nowej linii (new line)
$P
- znak nowej strony (page feed)
$R
- znak przełamania linii (line break)
$T
- tabulator
 
Do opisu powyższych znaków można użyć też małych liter, np. $t. 
 
 
 
 
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
9
2.6. Przygotowanie całego rekordu. 
 
Przed zapisem znaków do pliku najlepiej jest zebrać cały pakiet danych które 
chcemy zapisać do jednego pliku, np. 
 
PackedRecord:=CONCAT('',DoZapisu.data); 
PackedRecord:=CONCAT(PackedRecord,tab); 
PackedRecord:=CONCAT(PackedRecord,DoZapisu.nr_fabr); 
PackedRecord:=CONCAT(PackedRecord,tab); 
PackedRecord:=CONCAT(PackedRecord,DoZapisu.czas); 
PackedRecord:=CONCAT(PackedRecord,tab); 
PackedRecord:=CONCAT(PackedRecord,DoZapisu.imie); 
PackedRecord:=CONCAT(PackedRecord,tab); 
PackedRecord:=CONCAT(PackedRecord,DoZapisu.nazwisko); 
PackedRecord:=CONCAT(PackedRecord,tab); 
PackedRecord:=CONCAT(PackedRecord,DoZapisu.wart1); 
PackedRecord:=CONCAT(PackedRecord,tab); 
PackedRecord:=CONCAT(PackedRecord,DoZapisu.wart2); 
PackedRecord:=CONCAT(PackedRecord,tab); 
PackedRecord:=CONCAT(PackedRecord,DoZapisu.wart3); 
PackedRecord:=CONCAT(PackedRecord,tab); 
PackedRecord:=CONCAT(PackedRecord,DoZapisu.wart4); 
PackedRecord:=CONCAT(PackedRecord,tab); 
PackedRecord:=CONCAT(PackedRecord,DoZapisu.wart5); 
PackedRecord:=CONCAT(PackedRecord,end); 
 
Zmienna PackedRecord jest w tym przykładzie zmienną globalną.  
 
VAR_GLOBAL 
 
PackedRecord: STRING(100);
END_VAR
 
 
 
3. Zapis danych na nośniku (MMC, USB, FLASH)
 
3.1. Rodzaje nośników i ścieżki dostępu. 
W sterownikach serii XC200 dostępne są trzy rodzaje nośników danych: 
disk_sys – systemowy dysk FLASH (w XC200 8MB) 
disk_mmc – karta MMC lub SD włożona w sterownik 
disk_usb – napęd pendrive podłączony do złącza USB 
 
Ścieżka  dostępu  zawsze  zaczyna  się  od  powyższej  nazwy  rodzaju  dysku.  Aby 
upewnić  się  czy  wprowadzony  format  ścieżki  jest  poprawny  można  połączyć  się  ze 
sterownikiem za pomocą protokołu ftp – powinien być tam taki sam układ folderów. 
 
3.2. Funkcje sterujące zapisem danych. 
Do zapisu (odczytu) danych na nośnikach służą funkcje z biblioteki SysLibFile.lib. 
 
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
10
SysFileOpen  –  funkcja  służy  do  otwierania  istniejącego  pliku,  bądź  pliku  który  ma 
zostać  utworzony.  Zwracany  jest  numer  pliku  za  pomocą  którego  odwołują  się  inne 
funkcje  z  grupy  SysFile...  .  Jeśli  funkcja  zwraca  wartość  0  oznacza  to  błąd  (np.  źle 
podana  ścieżka  dostępu).  Funkcja  ma  dwa  wejścia  typu  STRING.  Należy  podać 
ścieżkę  dostępu  oraz  zależnie  od  zadania  odpowiedni  tryb  w  jakim  plik  zostaje 
otwarty: 
w  
– zapis (write) – zostanie zaktualizowany stary plik bądź utworzony nowy
r
– odczyt (read) – plik zostanie otworzony tylko do oczytu
rw
– zapis/odczyt (read and write)
a
– dopisywanie (append) – następuje otwarcie w trybie zapisu ze znacznikiem 
zapisu ustawionym na koniec pliku. 
Przykład użycia:  
dwHandle:=SysFileOpen('disk_sys\project\raport.xls', 'a'); 
 
SysFileClose – funkcja służy do zamknięcia otwartego uprzednio pliku. Od momentu 
zamknięcia  dane  są  dostępne  i  bezpieczne  na  wypadek  zaniku  zasilania.  Należy 
zamykać  plik  każdorazowo  po  wykonanej  operacji  zapisu/odczytu.  Funkcja 
potrzebuje  na  wejściu  numer  zwrócony  przez  uruchomiony  uprzednio  SysFileOpen. 
Zwracane  jest  natomiast  potwierdzenie  zamknięcia  pliku  (TRUE)  lub  sygnalizacja 
błędu (FALSE). 
Przykład użycia:  
xFileClosed:=SysFileClose(dwHandle); 
 
SysFileWrite  –  zadaniem  funkcji  jest  zapis  danych  do  pliku.  Zwracana  jest  liczba 
zapisanych  bajtów  (DWORD).  Na  wejścia  funkcji  trzeba  podać  trzy  zmienne  typu 
DWORD: 
File – numer pliku zwrócony przez SysFileOpen 
Buffer – adres bufora zapisu. Pozyskiwany jest on za pomocą funkcji ADR.  
Size  –  liczba  bajtów  do  zapisu.  Można  pozyskać  go  za  pomocą  funkcji  SIZEOF 
(funkcja  ta  zwróci  liczbę  bajtów  z  ilu  składa  się  zmienna)  lub  LEN  (funkcja  LEN 
zwraca  liczbę  znaków  w  zmiennej  typu  STRING).  Jeżeli  zmienna  varSTRING1  jest 
zadeklarowana w sposób następujący: 
VAR 
 
varSTRING1: STRING(20):=’abcdefg’;
END_VAR
funkcja SIZEOF zwróci 21 – wynika to z obszaru pamięci jaki musi być dla zmiennej 
zarezerwowany,  funkcja  LEN  zwróci  natomiast  7.  Funkcja  SIZEOF  jest  bardziej 
pomocna gdy zapisujemy dane bez konwersji na postać tekstową.  
Przykład użycia:  
dwWrittenBytes:=SysFileWrite(dwHandle,ADR(PackedRecord),LEN(PackedRecord));
gdzie PackedRecord jest zmienną typu STRING. 
 
SysFileRead  –  funkcja  realizująca  odczyt  danych  z  pliku.  Zwracana  jest  liczba 
odczytanych  bajtów.  Na  wejścia  funkcji  należy  podać  podobne  zmienne  jak  w 
przypadku funkcji zapisu: 
File – numer pliku zwrócony przez SysFileOpen,  
Buffer – adres bufora odczytu pozyskany za pośrednictwem funkcji ADR 
Size – liczba bajtów które mają zostać odczytane. 
Przykład użycia:  
dwRededBytes:=SysFileRead(dwHandle,ADR(ReadBuffer),SIZEOF(ReadBuffer));
gdzie ReadBuffer jest zmienną typu STRING.
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
11
SysFileDelete  –  za  pomocą  tej  funkcji  można  usunąć  plik.  Funkcja  zwraca  TRUE, 
gdy  operacja  usuwania  zostanie  zakończona  pomyślnie.  Na  wejście  należy  podać 
ścieżkę dostępu do pliku w formacie STRING. 
Przykład użycia:  
xFileDeleted:=SysFileDelete('disk_sys\project\raport.xls'); 
 
SysFileGetPos  –  za  pomocą  tej  funkcji  można  odczytać  na  którym  bajcie  znajduje 
się  znacznik  zapisu.  Gdy  plik  zostanie  otwarty  z  parametrem „a”  (append)  znacznik 
ten  zostanie  automatycznie  ustawiony  na  koniec  pliku.  Funkcja  zwraca  pozycję  w 
formacie DWORD. 
Przykład użycia:  
dwCurPOS:=SysFileGetPos(dwHandle);
 
SysFileSetPos – za pomocą tej funkcji można ustawić znacznik zapisu na wskazaną 
pozycję. Funkcja zwraca TRUE, gdy ustawienie znacznika będzie dokonane. 
Przykład użycia:  
xSetPosOk:=SysFileSetPos(dwHandle,10);
 
SysFileEOF  –  funkcja  sprawdzająca  czy  osiągnięto  koniec  pliku  (End  Of  File). 
Zwracana  jest  wartość  TRUE,  gdy  znacznik  zapisu  ustawiony  jest  na  końcu  pliku. 
Przykład użycia:  
xEOF:=SysFileEOF(dwHandle);
 
SysFileGetSize  –  funkcja  sprawdzająca  rozmiar  pliku.  Zwracana  jest  wartość  typu 
DWORD określająca liczbę bajtów.  
Przykład użycia:  
dwFileSize:=SysFileGetSize('disk_sys\project\raport.xls');
 
SysFileCopy  –  za  pomocą  tej  funkcji  można  skopiować  plik  z  jednej  lokalizacji 
(nazwy)  do  drugiej.  Zwracana  jest  wartość  typu  DWORD  określająca  liczbę 
skopiowanych bajtów.  
Przykład użycia:  
dwCopiedBytes:=SysFileCopy('disk_sys\project\raport.xls', 
'disk_sys\project\zrodlo.txt'); 
 
SysFileRename  –  funkcja  służy  do  zmiany  nazwy  pliku.  Zwracana  jest  wartość 
TRUE jeżeli operacja zakończy się pomyślnie.  
Przykład użycia:  
xFileNameChanged:=SysFileRename('disk_sys\project\oldname.txt', 
'disk_sys\project\newname.txt'); 
 
Raportowanie w PLC XSystem
Moeller Electric Sp. z o.o.
NA190PL 04/2006
12
3.3. Użycie TASK’ów. 
Proces  zapisywania  na  karcie  w  porównaniu  z  czasem  cyklu  programu  jest  zwykle 
długotrwały. Aby nie zakłócał on wykonywania programu głównego zaleca się użycie 
TASK’ów.  Należy  w  tym  celu  otworzyć  zakładkę  „Resources”,  wybrać  „Task 
Configuration”  i  skonfigurować  oddzielnie  zadanie  dla  programu  wykonywanego 
cyklicznie  (z  wyższym  priorytetem  –  niższa  cyfra)  i  dla  programu  zapisu  na  karcie 
(niski  priorytet).  Zapis  na  karcie  jest  zwykle  wyzwalany  zdarzeniowo  –  od 
odpowiedniej  zmiennej  globalnej  (jej  zbocze  narastające).  Należy  ustawić  ponadto 
odpowiednie czasy watchdog’a. 
 
 
 
4.0 Współpraca z MS EXCEL.