Witamy, Gość. Zaloguj się lub zarejestruj.
Aktualności:
Forum Sterowniki PLC Inteligentny dom > Podsystemy wejściowe >

Satel - Fatek komunikacja via Ether

Strony: 1 [2]
Drukuj
Autor Wątek: Satel - Fatek komunikacja via Ether  (Przeczytany 8602 razy)
Mario0658
Sr. Member
****
Wiadomości: 213


Satel - Fatek komunikacja via Ether
#15 : Lipiec 14, 2017, 09:38:04 »

macro_command main()

unsigned char zapytanie[40]
unsigned char odpowiedz[23]
bool stany_bitow[256]

unsigned short crc_
unsigned short crc_high_byte

short i,j
short li_znakow_do_wys, liczba_odeb_znakow
short nr_bitu

// pętla nieskończona - makro uruchomione raz (po uruchoeminu panela), będzie się w sposób ciąłu wykonywać
while true

//////////////////////////
// Zmiana stanów wyjść////
//////////////////////////
zapytanie[0]=0xFE
zapytanie[1]=0xFE
zapytanie[2]=0x91
// wpisanie kodu użytkownika (tu przykłąd dla kodu 1212)
zapytanie[3]=0x12
zapytanie[4]=0x12
zapytanie[5]=0xFF
zapytanie[6]=0xFF
zapytanie[7]=0xFF
zapytanie[8]=0xFF
zapytanie[9]=0xFF
zapytanie[10]=0xFF

// pobranie do tablicy, stanów bitów LB8400~8527
GetData(stany_bitow[0], "FATEK", M, 1200, 128)

// wyzerowanie wszytkich bajtów, w których mają znaleźć się informacje o numerach wyjść, których stan ma zostać zmieniony
FILL(zapytanie[11], 0, 16)

   // wypełnienie bajtów komendy, które mają wskazać na numery wyjść do zmiany stanu, stanami bitów od LB8400~do LB8527
   for i=11 to 26
      for j=0 to 7
         nr_bitu = (i-11)*8+j
         
         if stany_bitow[nr_bitu] then
            SETBITON(zapytanie, zapytanie, j)
            
         end if
      next j
   next i

// wyczyszczenie wartości bitów LB8400~8527 - inaczej za każdym kolejnym przejściu pętli, znów zostanie wysłana komenda zmiany danego stanu wyjścia
FILL(stany_bitow[0], 0, 128)
SetData(stany_bitow[0], "FATEK", M, 1200, 128)
   
   
crc_=0x147A

// obliczamy crc wysyłanej komendy
for i=2 to 26
   
   if crc_ >= 32768 then
      crc_= (((crc_ << 1)+1)^0xFFFF)
   else
      crc_= ((crc_ << 1)^0xFFFF)
   end if   
      
   HIBYTE(crc_, crc_high_byte)
   crc_=crc_+ crc_high_byte + zapytanie
next i

// wyciągnięcie starszego i młdszego bajtu z obliczonego crc i wpisanie ich, jako kolejne dwa znaki wysyłanej wiadomości
HIBYTE(crc_, zapytanie[27])
LOBYTE(crc_, zapytanie[28])

// i na koniec, dopisanie jeszcze znaków końcowych zapytania (zawsze są takie same)
zapytanie[29]=0xFE
zapytanie[30]=0x0D

// wysłanie zaptania na port
li_znakow_do_wys=31
OUTPORT(zapytanie[0], "SATEL", li_znakow_do_wys)

// wyczyszczenie informacji o odebranej wiadomości (liczbie debranych znaków i zawartość odbranych znaków)
liczba_odeb_znakow=0
FILL(odpowiedz[0], 0, 23)

// odbiór odpowiedzi na komendę zmiany stanów wyjść
INPORT(odpowiedz[0], "SATEL", 8, liczba_odeb_znakow)
// wpisanie do LW8000, kodu zwórconego przez centalkę błędu, przy czym wartość 0xFF to brak błędu
SetData(odpowiedz[3], "Local HMI", LW, 8000, 1)



//////////////////////////
// Odczyt stanów wyjść////
//////////////////////////

// wpisanie pierwszych znaków zapytania, które będzie wysyłane do centralki. Są to: dwa znaki początkowe FE, oraz kod funkcji
zapytanie[0]=0xFE
zapytanie[1]=0xFE
zapytanie[2]=0x17 // komenda odczytu stanów wejść

crc_=0x147A

// obliczamy crc tylko z jednego znaku w tym przypadku
for i=2 to 2
   
   if crc_ >= 32768 then
      crc_= (((crc_ << 1)+1)^0xFFFF)
   else
      crc_= ((crc_ << 1)^0xFFFF)
   end if   
      
   HIBYTE(crc_, crc_high_byte)
   crc_=crc_+ crc_high_byte + zapytanie
next i

// wyciągnięcie starszego i młdszego bajtu z obliczonego crc i wpisanie ich, jako kolejne dwa znaki wysyłanej wiadomości
HIBYTE(crc_, zapytanie[3])
LOBYTE(crc_, zapytanie[4])

// i na koniec, dopisanie jeszcze znaków końcowych zapytania (zawsze są takie same)
zapytanie[5]=0xFE
zapytanie[6]=0x0D

// wysłanie zaptania na port
li_znakow_do_wys=7
OUTPORT(zapytanie[0], "SATEL", li_znakow_do_wys)

// wyczyszczenie informacji o odebranej wiadomości (liczbie debranych znaków i zawartość odbranych znaków)
liczba_odeb_znakow=0
FILL(odpowiedz[0], 0, 23)

// wywołanie funkcji INPORT, odbierającej z portu spodziewaną odpowiedź
INPORT(odpowiedz[0], "SATEL", 23, liczba_odeb_znakow)

// jeżeli odebrano jakieś znaki (zakłada się, że jest to poprawna odpowiedź), wykonywana jest pętla, która wyłuskuje z niej stany
// poszczególnych bitów a na koniec wpisuje je do stanów zmiennych LB panela
if liczba_odeb_znakow>0 and odpowiedz[0]==0xFE and odpowiedz[1]==0xFE and odpowiedz[2]==0x17 then
   for i=3 to 18
      for j=0 to 7
         nr_bitu = (i-3)*8+j
         GETBIT(odpowiedz, stany_bitow[nr_bitu], j)
      next j
   next i
   
   SetData(stany_bitow[0], "FATEK", M, 1472, 128)

end if


//////////////////////////
// Odczyt stanów wejść////
//////////////////////////

// wpisanie pierwszych znaków zapytania, które będzie wysyłane do centralki. Są to: dwa znaki początkowe FE, oraz kod funkcji
zapytanie[0]=0xFE
zapytanie[1]=0xFE
zapytanie[2]=0x00 // komenda odczytu stanów wejść

crc_=0x147A

// obliczamy crc tylko z jednego znaku w tym przypadku
for i=2 to 2
   
   if crc_ >= 32768 then
      crc_= (((crc_ << 1)+1)^0xFFFF)
   else
      crc_= ((crc_ << 1)^0xFFFF)
   end if   
      
   HIBYTE(crc_, crc_high_byte)
   crc_=crc_+ crc_high_byte + zapytanie
next i

// wyciągnięcie starszego i młdszego bajtu z obliczonego crc i wpisanie ich, jako kolejne dwa znaki wysyłanej wiadomości
HIBYTE(crc_, zapytanie[3])
LOBYTE(crc_, zapytanie[4])

// i na koniec, dopisanie jeszcze znaków końcowych zapytania (zawsze są takie same)
zapytanie[5]=0xFE
zapytanie[6]=0x0D

// wysłanie zaptania na port
li_znakow_do_wys=7
OUTPORT(zapytanie[0], "SATEL", li_znakow_do_wys)

// wyczyszczenie informacji o odebranej wiadomości (liczbie debranych znaków i zawartość odbranych znaków)
liczba_odeb_znakow=0
FILL(odpowiedz[0], 0, 23)

// wywołanie funkcji INPORT, odbierającej z portu spodziewaną odpowiedź
INPORT(odpowiedz[0], "SATEL", 23, liczba_odeb_znakow)

// jeżeli odebrano jakieś znaki (zakłada się, że jest to poprawna odpowiedź), wykonywana jest pętla, która wyłuskuje z niej stany
// poszczególnych bitów a na koniec wpisuje je do stanów zmiennych LB panela
if liczba_odeb_znakow>0 and  odpowiedz[0]==0xFE and  odpowiedz[1]==0xFE and odpowiedz[2]== 0x00 then
   for i=3 to 18
      for j=0 to 7
         nr_bitu = (i-3)*8+j
         GETBIT(odpowiedz, stany_bitow[nr_bitu], j)
      next j
   next i
   
   SetData(stany_bitow[0], "FATEK", M, 1056, 128)

end if

wend

end macro_command

GG:4010578

radmin
Full Member
***
Wiadomości: 28


Satel - Fatek komunikacja via Ether
#16 : Październik 17, 2017, 22:48:50 »

Cytat: Mario0658  Listopad 04, 2015, 14:19:40
okazuje sie  ,ze po LAN fatek moze byc slave i master jednoczesnie  .....jesli mamy  modulik CBEH.
jesli go posiadamy  to niby  wszystko jest banalnie proste  , musze pomeczyc Multiprojekt  a w szczegolnosci pana  Tylutkiego Krzysztofa 

Witam

Czy udalo ci sie zintegrowac po ETHM1 i CBEH?


Strony: 1 [2]
Drukuj
Skocz do: