Komunikacja komputera ze sterownikiem odbywa się przy pomocy interfejsu RS-485 przy następujących parametrach transmisji:
prędkość: 9600 bps
bity danych: 7
bity stopu: 1
bit parzystości: PARZYSTY (EVEN)
UWAGA 1! W dokumentacji do sterownika znajdują się pewne niejasności odnośnie połączenia sterownika z komputerem. Sterownik komunikuje się z komputerem przy pomocy interfejsu RS-485. Oznaczenia tego interfejsu są jednak niejasno opisane (Tx1,Tx2, natomiast standardowymi oznaczeniami są: "A" lub "+" oraz "B" lub "-"). W wyniku przeprowadzonych prób ustalono, że oznaczeniu Tx1 odpowiada "B", natomiast oznaczeniu Tx2 odpowiada "A"
UWAGA 2! W celu testowania komunikacji ze sterownikiem nie jest polecany terminal term95, wchodzący w skład programu Norton Commander 5.0 firmy Symantec ze względu na niemożliwość uzyskania siedmiobitowej danych dla określonych ustawień
W celu odpytania sterownika w celu uzyskania wartości parametrów należy wysłać następujący ciąg znaków:
:ID_STEROWNIKA 65 KOD_FUNKCJI CRC [0x0D][0x0A]Protokół ten jest protokołem typu <-ASCII_D-> (zobacz Rozdział 16) UWAGA! - Długość ramki jest stała. Puste pola są wypełniane zerami [0x30].
ID_STEROWNIKA - Numer identyfikacyjny sterownika. (Jest on ustawiany w sterowniku 0..31)
KOD_FUNKCJI - Numer parametru, którego wartość chcemy odczytać
CRC - Suma kontrolna. Jest ona liczona według następującego algorytmu:
Zsumowanie wszystkich znaków ASCII na lewo z pominięciem znaku dwukropka (:)
Dokonanie operacji iloczynu logicznego z liczbą 255 (0xFF)
Logiczne zaprzeczenie (NOT) uzyskanego wyniku
Dodanie do wyniku 1
Przekonwertowanie na postać ASCII HEX
Sumę kontrolną można policzyć przy pomocy następującej procedury:
char *CRC(char *inSTR) { const int CRC_LEN = 3; /* CRC ma 2 bajty +\0 */ unsigned int tmpCRC ; /* Zmienna przechowująca CRC z przeniesieniem */ char *oCRC ; /* wskaźnik do sumy CRC */ int i; tmpCRC = 0; for (i=0;i< strlen(inSTR); i++){ tmpCRC+=inSTR[i] ; /* Sumowanie wszystkich kodów ASCII */ } tmpCRC&=0x00ff ; /* konwersja na sumę bez przeniesienia */ tmpCRC = ~tmpCRC ; /* negacja */ tmpCRC&=0x00ff ; /* konwersja na sumę bez przeniesienia */ tmpCRC++; /* Dodanie 1 */ oCRC = (char *)malloc(CRC_LEN); sprintf(oCRC,"%02X",tmpCRC); return oCRC; }Przykładowy ciąg znaków wygląda następująco:
:036527CB[0x0D][0x0A]
Poprzedni | Spis treści | Następny |
Tabela funkcji licznika | Odczyt danych ze sterownika |