Sterownik umożliwia komunikację z innymi sterownikami lub komputerem w celu:
odczytu zebranych danych przez komputer w celu sporządzenia raportu,
wysłania dodatkowych danych do sterownika,
odczytu zaprogramowanych parametrów stałych i paczek czasowych przez komputer,
modyfikacji zaprogramowanych parametrów stałych i paczek czasowych przez komputer,
zaktualizowania pamięci EEPROM zawierającej program technologiczny z komputera,
wymiany danych między sterownikami za pośrednictwem sieci RS-485.
Parametry techniczne transmisji podczas komunikacji sterownika z komputerem przy pomocy pierwszego portu szeregowego (zarówno w trybie RS-232, jak i RS-485):
prędkość: 9600 bps
bity danych: 8
bity stopu: 1
bit parzystości: brak
Maksymalna długość pojedynczego polecenia jest ograniczona pojemnością bufora w sterowniku i wynosi 256 bajtów.
W celu odczytu danych ze sterownika należy wysłać do sterownika następujący ciąg znaków (w przypadku platformy 3000 lub nowszej można pominąć początkowy znak [0x11]):
[0x11][0x02]P<?>[0x03]gdzie:
<?> - Numer urządzenia (1..9).
Protokół ten jest protokołem typu <-ASCII_D-> (zobacz Rozdział 16). W nawiasach kwadratowych znajdują się kody znaków ASCII.
Raport wysłany przez sterownik można przedstawić schematycznie w następujący sposób:
{NAGŁÓWEK}[0x0D]{yy/mm/dd hh:mm}[0x0D]{-DANE-}[0x0D]SUMA_KONTROLNA[0x0D][0x0D]Protokół ten jest protokołem typu <-ASCII_D-> (zobacz Rozdział 16).
Znaczenie poszczególnych elementów raportu:
{NAGŁÓWEK} - Składa się z trzech znaków ASCII oddzielonych znakami [0x0D]. Pierwszy znak to identyfikator typu raportu, drugi to identyfikator typu podraportu, a trzeci to identyfikator urządzenia. Uwaga: w platformie 3000 i nowszych typ oraz podtyp raportu nie mają żadnego znaczenia praktycznego i są przesyłane przez sterownik jedynie dla kompatybilności ze starszymi programami systemu SZARP. Przyjmują one stałe wartości odpowiednio '1' i '0'.
{yy/mm/dd hh:mm} - Odpowiednio rok/miesiąc/dzień godzina:minuta zegara czasu rzeczywistego sterownika.
{-DANE-} - Liczbowe wartości raportu w formacie ASCII. Wartości są pooddzielane od siebie znakami [0x0D].
SUMA_KONTROLNA - Szesnastobitowa suma wszystkich znaków ASCII łącznie ze znakami [0x0D], reprezentowana także w formie znaków ASCII. Jest ona liczona z następującej funkcji:
unsigned int compute_checksum(char *source) { int i; unsigned int checksum = 0; for (i = 0; source[i] != 0; i++) checksum = checksum + (unsigned int) source[i]; return checksum & 0xFFFF; }Parametrem funkcji jest ciąg znaków wysyłanych przez sterownik, natomiast wartością zwracaną jest suma wszystkich znaków (suma kontrolna).
Przykładowy ciąg znaków dla 17 przesyłanych parametrów wygląda następująco:
2[0x0D]1[0x0D]1[0x0D]00/01/14 02:34[0x0D]160[0x0D]0[0x0D]0[0x0D]0[0X0D]0[0x0D]0[0x0D]0[0x0D]0[0x0D]0[0x0D]300[0x0D]0[0x0D]100[0x0D]200[0x0D]5[0x0D]128[0x0D]300[0x0D]400[0x0D]2624[0x0D][0x0D]
W celu odczytu tak zakodowanej ramki można użyć funkcji bibliotecznej języka C strtok().
Poprzedni | Spis treści | Następny |
Zasady obowiązujące przy modyfikowaniu plików biblioteki | Zapis danych do sterownika |