Rozdział 8. Protokół komunikacyjny regulatora LUMEL RE-31

Spis treści
8.1. Odpytywanie sterownika
8.2. Odczyt danych ze sterownika
8.3. Tabela funkcji sterownika
8.4. Konfiguracja demona lmldmn

Komunikacja komputera ze sterownikiem odbywa się przy pomocy interfejsu RS-485 przy następujących parametrach transmisji:

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ń

8.1. Odpytywanie sterownika

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].

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]