logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

centralka satel integra komunikacja rs232

przemek_m 21 Wrz 2008 15:42 35581 49
  • #1 5556818
    przemek_m
    Poziom 11  
    Witam
    Czy ktoś z was próbował zasterować centralą integra z poziomu kompa
    chodzi mi o sterowanie wyjściami.
    Dokumentacja dostarczana przez satela jest jak dla mnie dość kiepsko sporządzona i nie czytelna.
    Oprogramowanie sam sobie zrobię tylko nie mogę rozgryść tego protokołu.
    Robiłem już rózne aplikacje wykorzytując sprzęt roger'a na protokole epso który jest bardzo dobrze przygtowany i opisany.
    Także nie będę już zanudzał jakby ktoś już kiedyś walczył z tym tematem to bardzo proszę o pomoc.
    Pozdrawiam wszytkich


    ............................................................
    mod:suworow
    Warto przeczytać również:

    Satel Integra -instalacja i konfiguracja systemu - wybrane zagadnienia



    Zapraszam do zapoznania się z pozostałymi poradnikami, tematami wyróżnionymi i artykułami, z zakresu systemów zabezpieczeń:
    Zabezpieczenia stacjonarne. Systemy alarmowe, Kamery, Domofony, Napędy bram i rolet, Automatyka domowa. Tematy Wyróżnione i poradniki.
    Jeżeli w w/w tematach nie znajdziesz odpowiedzi na swoje pytanie, zapraszamy na forum
    https://www.elektroda.pl/rtvforum/forum77.html


    Zachęcam również do odwiedzenia sekcji Poradniki Ogólne gdzie znajdziecie materiały z pozostałych działów forum, w tym dla rozpoczynających swoją przygodę z elektroniką:
    https://www.elektroda.pl/rtvforum/forum510.html
  • #2 6971296
    viper_lasser
    Poziom 17  
    Witam
    Ruszylo się coś w tym temacie ? Udało się komuś napisac program odczytujący i sterujący do centrali satela ?
  • #3 9531270
    michal.konopinski
    Poziom 12  
    Jeśli to jeszcze aktualne, to tak, udało mi się na bazie Arduino zrobić tak jakby moduł wyjść, ślę do centrali komendę 0x78 i czekam na ramkę z odpowiedzią (0x55) i wg tego ustawiam wyjścia.
    Największym problemem był dla mnie jest fakt, że centrala sama z siebie wysyła ciągle pewne informacje oraz to, że niektóre ramki mają różną długość a dowiedzieć się tego można tylko sprawdzając sumę crc :)
    W tej chwili wysyłam rozkaz i grzecznie czekam na odpowiedź ignorując inne ramki.

    Pozdrawiam
    Michał Konopiński
  • #4 9542427
    viper_lasser
    Poziom 17  
    Kolego Michale
    Mógłbyś udostepnić jakieś przykładowy program do komunikacji z satelem ?

    Poniżej zamieszczam obsługę satela z beckhoffem

    (odczytywanie co 3sekunk ramki*)

    Timer(IN:=TRUE, PT:=T#3s);
    IF Timer.Q OR Send.Busy THEN

    ?Send(?pSendData:=ADR(slSend),
    ???Length:=SIZEOF(slSend),
    ???TXbuffer:= TxBuffer1,?(* see global variables *)
    ???Busy=> SendBusy,
    ???Error=> SendErrorID);

    ?Timer(IN:=FALSE); (* reset timer *)
    END_IF
    (*
    Deklaracja długości ramki komunikacyjnej?
    *)

    Receive(
    ?pPrefix:=ADR(zmPrefix),
    ?LenPrefix:=3,
    ?pSuffix:=ADR(zmSuffix),
    ?LenSuffix:=2,
    ?pReceiveData:=ADR(ReceivedData),
    ?SizeReceiveData:=16,
    ?Timeout:= T#2s,
    ?RXbuffer:= RxBuffer1,
    ?DataReceived=> DataReceived,
    ?busy=> ReceiveBusy,
    ?Error=> ReceiveErrorID,
    ?RxTimeout=> ReceiveTimeout );
    IF DataReceived THEN
    ?ReceiveCounter := ReceiveCounter + 1;
    ?LastReceivedData := ReceivedData;
    END_IF

    (*
    Deklaracja komunikacji w beckhoff przez port COM
    *)
    COMportControl(
    ?Mode:= SERIALLINEMODE_PC_COM_PORT,
    ?pComIn:= ADR(COMin_COMport),???(* I/O data; see global variables *)
    ?pComOut:= ADR(COMout_COMport),??(* I/O data; see global variables *)
    ?SizeComIn:= SIZEOF(COMin_COMport),??(* I/O data; see global variables *)
    ?TxBuffer:= TxBuffer1,????(* transmit buffer; see global variables *)
    ?RxBuffer:= RxBuffer1,????(* receive buffer; see global variables *)
    ?Error=> COMportControlError,
    ?ErrorID=> COMportControlErrorID );

    ----------------------------------------------------------------------------------------------------------------------------------------------------------
    ?slSend: ARRAY [0..6] OF BYTE;
    ?zmPrefix: ARRAY [0..2] OF BYTE;
    ?zmSuffix: ARRAY [0..1] OF BYTE;
    ----------------------------------------------------------------------------------------------------------------------------------------------------------
    i teraz trzeba zrobić, aby co 3,5 sek odpytywał sterownik o konkretną ramkę, najlepiej blink'erem jeżeli jest kilka ramek do odpytania


    KONTR(IN:= O_Kontrakton, PT:=T#3.5s);
    IF O_Kontrakton THEN

    slSend[0]:=16#FE;
    slSend[1]:=16#FE;
    slSend[2]:=16#00;
    slSend[3]:=16#D7;
    slSend[4]:=16#E2;
    slSend[5]:=16#FE;
    slSend[6]:=16#0D;

    zmPrefix[0]:=16#FE;
    zmPrefix[1]:=16#FE;
    zmPrefix[2]:=16#00;

    zmSuffix[0]:=16#FE;
    zmSuffix[1]:=16#0D;
    END_IF

    IF KONTR.Q THEN
    Okno_PD_schody:=?ReceivedData[3].0;
    Okno_PD_pokoj:=??ReceivedData[3].1;
    Okno_Lazienka_B:=?ReceivedData[3].2;
    Okno_Lazienka_A:=?ReceivedData[3].3;
    Okno_Pok3_B:=??ReceivedData[3].4;
    Okno_Pok3_A:=??ReceivedData[3].5;
    Okno_Pok4_B:=??ReceivedData[3].6;
    Okno_Pok4_A:=??ReceivedData[3].7;
    Okno_Pok1_B:=??ReceivedData[4].0;
    Okno_Pok1_A:=??ReceivedData[4].1;
    Okno_Pok2_B:=??ReceivedData[4].2;
    Okno_Pok2_A:=??ReceivedData[4].3;
    Okno_Salon_NW:= ?ReceivedData[4].4;
    Okno_Salon_A:=??ReceivedData[4].5;
    Okno_Salon_B:=??ReceivedData[4].6;
    Drzwi_Wejsciowe:=?ReceivedData[4].7;

    Okno_Kuchnia_NW:=?ReceivedData[5].0;
    Okno_Kuchnia_PL:=?ReceivedData[5].1;
    Okno_Kuch_B:=??ReceivedData[5].2;
    Okno_Kuch_A:=??ReceivedData[5].3;

    Okno_Uchylne1:=??ReceivedData[9].2;
    Okno_Uchylne2:= ?ReceivedData[9].3;
    Okno_Uchylne3:=??ReceivedData[9].4;
    Okno_Uchylne4:=??ReceivedData[9].5;
    END_IF
  • #5 9542485
    michal.konopinski
    Poziom 12  
    Jasne
    Kod poniżej wysyła zapytanie o stan wyjść a następnie wysyła jeden z bajtów z odpowiedzi do expandera PCF 8574 po i2c. Kod napisany w dwa wieczory więc nie jest to jakaś wysoka sztuka programistyczna ale u mnie działa :)
    Kod jest napisany w środowisku Arduino.

    Pozdrawiam
    Michał Konopiński

    Kod: text
    Zaloguj się, aby zobaczyć kod
    [/code]
  • #6 9609692
    ser1983
    Poziom 12  
    Dołączam się do tematu. Ja mam trochę bardziej rozszerzony problem. W moim przypadku satel będzie rozbudowany o moduł kontroli dostępu. Potrzebuję wyciągnąć informację o osobie przechodzącej przez przejście i wyświetlenie tego w SCADA. Może ktoś próbował czegoś podobnego? Będę wdzięczny za wszelkie materiały.
  • #7 9690689
    viper_lasser
    Poziom 17  
    @micha_ł.konopinski: W jaki sposób łączysz się z centralka i jakiego typu ?
    Integrę można odpytać tylko i wyłącznie po rs-int czy jednak da się albo poprzez expaner albo jakoś inaczej - np poprzez manipulator (ustawiony w tryb downloading) ?
    Aktualnie mam w domu integre 32 i jedynie jest możliwość dostania się do niej po rs232 (rj12)
  • #8 9690699
    michal.konopinski
    Poziom 12  
    Mam Integre 128WRL i aktualnie łączę się przez manipulator
  • #9 9690755
    viper_lasser
    Poziom 17  
    Nie łączyłem się jeszcze w ten sposób z manipulatorem.
    Mógłbyś udostępnić jakiś schemat kabla pc z manipulatorem ?
    Konieczne jest ustawienie manipulatora w tryb downloading czy nie jest to potrzebne ?
    Udostępnione przez Ciebie źródła działają z każdym manipulatorem ?
  • #10 9690838
    michal.konopinski
    Poziom 12  
    Schemat znalazłem w instrukcji obsługi alarmu, więc pewnie w dokumentacji na stronie satela też będzie.
    Dobre pytanie, mam w trybie downloadingu,
    z ciekawości właśnie wyłączyłem downloading, moje sterowanie dziala nadal, ale na wyświetlaczu pojawiła się informacja o usterce : brak sygnału DTR na porcie RS, ciekawe :)
    Po właczeniu downloadingu usterka ustąpiła. Muszę to kiedyś zbadać dokładnie.
    Ja mam int-klcd-gr, z innymi nie mam jak sprawdzić.
  • #11 9690879
    viper_lasser
    Poziom 17  
    Mówisz o instrukcji od manipulatora czy ogólnie od integry ? Jest tak jakiś konwerter ttl->rs232 ?
    To prawda że ten tryb downloading po zaniku napięcia też jest pamiętany ? Dopiero zworka reset podobno go kasuje ....
    Twoim zdaniem łatwe jest przeniesienie tego kodu z andruino na jakiegoś linuxa do c/c++ ?

    Ustawienia portu komunikacyjnego można zmieniać czy zawsze na 4800 baudów trzeba to ustawić ?
    Jak rozpoznam schemat kabla i format wymiany danych to pobawię się moją integrą :)
  • #12 9691498
    michal.konopinski
    Poziom 12  
    W instrukcji od centrali, konwerter nie jest potrzebny, sygnał jest w standardzie RS232 wiec wystarczy kabelek i dwie wtyczki, o ile dobrze pamiętam to wtyczka od strony manipulatora była w komplecie.
    Nie wiem kiedy resetują się te ustawienia.
    Łatwiej chyba przenieść niż napisać :P
    Tam zawsze jest 4800.
  • #13 9691785
    viper_lasser
    Poziom 17  
    Właśnie przed chwilą pobawiłem się GuardX'em podłączonym po rs232 do portu w centrali - w integrze 32
    Zastanawiam się czy obojętne jest dla Twojego programu na andruino czy to będzie podpięcie do manipulatora czy do portu w centrali ?
    Spróbuję dzisiaj przełożyć ten program do windowsa w codeblocku
  • #14 9691904
    michal.konopinski
    Poziom 12  
    Próbowałem, mi nie działało, poza tym wolę ten port mieć wolny do programowania centrali.
    A docelowo planuję kupić ethm-1 i łączyć się po sieci :)
  • #15 9692055
    viper_lasser
    Poziom 17  
    A próbowałeś może zrobić taki numer żeby z tego portu do manipulatora puścić komunikację przez konwerter rs232/eth ?

    W jaki sposób patrzyłeś co leci na pocie. Odpaliłeś guardx'a i podpatrzyłeś port mon'em czy jakoś inaczej.

    Oficjalnie satel daje tylko dokumentację do modułu int-rs :)
  • #16 9692566
    michal.konopinski
    Poziom 12  
    Komunikacja centrala -> rs/eth -> eth/rs ->guardx pewnie zadziała jeśli konwertery będą przyzwoite.
    Znalazłem jakiś inny program do podglądania tego co się dzieje bezpośrednio na porcie com bo z samej dokumentacji ciężko to wywnioskować, a portmon nie działa na 64-bit Windows. Tzn mnie się nie udało, program napisany na podstawie samej dokumentacji nie działał, źle zrozumiałem o co chodzi z tą synchronizacją :)
    Więcej, niż w pliku z początku wątku, się nie dowiesz z nowszej dokumentacji.
  • #17 9692856
    viper_lasser
    Poziom 17  
    A co to za nowy program do monitoringu na 64 bitowym windowsie ?
    Podpatrzyłeś ramki odpalajać guardx'a ?
    Wydaje mi się że tak chyba najprościej ...
  • #18 9693827
    michal.konopinski
    Poziom 12  
    nie, portmon - to program do monitorowania portów com, nie działa pod win 64bit, a tylko takim systemem wtedy dysponowałem, żeby podglądać guardx-a.
  • #19 9693862
    viper_lasser
    Poziom 17  
    Domyślam się że z 64bitowym windows nie jest łatwo. Pół roku temu używałem przez chwilę 64 bitów ale zrezygnowałem bo sporo aplikacji nie chodziło i stwierdziłem że jeszcze za wcześnie i powróciłem do 32 bitów.

    Możesz się pochwalić co to za program ?
    Którą bibliotekę do obsługi portu szeregowego byś polecił pod c/c++ tak żeby można było bez problemu przeportować aplikację z windowsa na linuxa ?
  • #20 9695015
    michal.konopinski
    Poziom 12  
    Advanced Serial Port Monitor - Trial, bo niestety jest płatny.
    Nie znam takiej biblioteki, obsługę com-a napisałbym bezpośrednio dla każdego z systemów osobno.
  • #21 9761999
    viper_lasser
    Poziom 17  
    Zna ktoś jakąś uniwersalną bibliotekę do obsługi rs232 tak żeby można było napisać program żeby dawał się kompilować pod linuxa i pod windowsem ?

    Jakie biblioteki byś polecił kolego Michale żeby nie uzależniać się od MS ?
    Pod MS znalazłem coś takiego...
    http://support.microsoft.com/?scid=kb%3Ben-us%3B39501&x=9&y=11#top
  • #22 9763991
    michal.konopinski
    Poziom 12  
    To co znalazłeś to jakaś porażka,
    pod win używasz funkcji CreateFile, SetCommState, SetCommTimeouts, ReadFile, WriteFile itp
    a pod linuxa open,tcsetattr,read,write
  • #23 9765762
    viper_lasser
    Poziom 17  
    Tobie też port com przy ustawieniach 4800,8,N,1 sypał ciągle takimi danymi ?

    00000000: 06 78 9E 66 E6 78 E6 FE | FE 78 E0 00 00 00 00 78 .xžfćxćţţxŕ....x
    00000010: E0 18 E6 7E FE 66 E0 FE | F8 78 FE FE FE F8 80 00 ŕ.ć~ţfŕţřxţţţř€.
    00000020: 00 00 00 1E E6 06 98 FE | 00 86 E0 FE FE 80 E0 00 ....ć.˜ţ.†ŕţţ€ŕ.
    00000030: 00 00 00 80 E0 60 E6 80 | FE 06 F8 1E F8 E6 FE FE ...€ŕ`ć€ţ.ř.řćţţ
    00000040: FE FE FE 98 E0 00 00 00 | 00 66 E6 60 F8 FE FE E0 ţţţ˜ŕ....fć`řţţŕ
    00000050: E6 86 FE FE FE FE 98 E0 | 86 F8 18 F8 00 F8 7E 86 ć†ţţţţ˜ŕ†ř.ř.ř~†
    00000060: 7E 80 06 E0 18 98 78 E6 | 1E 80 60 7E 06 CC 18 F8 ~€.ŕ.˜xć.€`~.Ě.ř
    00000070: FE FE FE FE 00 00 00 00 | 00 7E E6 18 18 9E 86 1E ţţţţ.....~ć..ž†.
    00000080: FE FE FE 18 E0 00 00 00 | 00 80 E6 18 60 66 18 F8 ţţţ.ŕ....€ć.`f.ř
    00000090: FE FE 18 E0 00 00 00 18 | E0 00 86 E6 66 FE 9E F8 ţţ.ŕ....ŕ.†ćfţžř
    000000a0: E6 98 7E F8 FE FE 60 E0 | 00 00 00 00 98 E6 1E 80 ć˜~řţţ`ŕ....˜ć.€
    000000b0: 9E 80 9E 80 FE FE 66 E0 | 00 00 00 00 9E E6 1E 98 ž€ž€ţţfŕ....žć.˜
    000000c0: 7E 86 06 80 FE FE 86 E0 | 00 00 00 00 E0 E6 60 E0 ~†.€ţţ†ŕ....ŕć`ŕ
    000000d0: 7E 9E E6 98 FE FE 80 E0 | 00 00 00 00 E6 E6 60 F8 ~žć˜ţţ€ŕ....ćć`ř
    000000e0: 1E FE 98 86 FE FE E0 E0 | 00 00 06 80 00 00 F8 E6 .ţ˜†ţţŕŕ...€..řć
    000000f0: 98 FE 66 E6 9E 7E 06 FC | FE FE E0 E0 06 80 00 00 ˜ţfćž~.üţţŕŕ.€..

    Jak to wogóle interpretować ?
  • #24 9765848
    michal.konopinski
    Poziom 12  
    Tak, pisałem to w 3 poście, a jak to interpretować masz w pierwszym poście w PDF-ie :)
  • #25 9765867
    viper_lasser
    Poziom 17  
    A to hasło w Twoim programie do czego się tyczy "123456" ?
    Masz może jakąś wersję parsowania tych danych na pc. Narazie jestem jeszcze w trakcie przenoszenia pod c#
  • #26 9765890
    michal.konopinski
    Poziom 12  
    Tam musisz podać hasło jednego z użytkowników, nie napisałem jeszcze nic na pc.
  • #27 9770084
    viper_lasser
    Poziom 17  
    W c# odczytuję już sobie jakąś odpowiedź ale jeszcze daleka droga

    Nie potrafię zrozumieć dlaczego synchronizację uzyskujesz w taki sposób

    if ((lastreadbyte == 0xfe) && (readbyte == 0x55))

    a w dokumentacji piszą że muszą być pod rząd 2 bajty tj. FE FE

    Jak zminiłem sobie w Twoim kodzie FE 55 na FE FE to chociaż wyłapuje mi synchonizację.

    W Twoim kodzie po mojej zmianie synchornizacji jest cos takiego

    if ((lastreadbyte == 0xfe) && (readbyte == 0xfe))
    {
    insync = true;
    toget = 18;
    cnt = 0;
    buf[cnt++] = lastreadbyte;
    buf[cnt++] = readbyte;
    }

    Skąd wiesz że odpowiedz przyjdzie zawsze 18 bajtowa ?


    Zna ktos jakieś gotowe produkty
    Natknąłem się na firmę ibms i coś tam mają.
  • #28 9770832
    michal.konopinski
    Poziom 12  
    Wg dokumentacji jest przynajmniej jedna 0xfe, nie udało mi się odgadnąć kiedy centrala wysyła więcej.
    Ja czekam tylko na ramkę 0x55 dlatego początek ramki to dla mnie 0xfe 0x55,
    mój program wyłapuje tylko ten typ ramek. I dla ramki 0x55 długość jest właśnie 18.
  • #29 9786980
    viper_lasser
    Poziom 17  
    A jak zrobić tak żeby centrala wysyłała tylko ramkę fe fe 55 ?
    U mnie wogole ta ramka nie jest wysyła

    Gdzie mogę znaleść jakąś informację co jest w tych 16 bajtach po odebraniu początku ramki fe fe 55 ?
  • #30 9787009
    michal.konopinski
    Poziom 12  
    Chyba się tak nie da zrobić, ramka 55 jest odpowiedzią na ramkę 78 (patrz mój przykład), a opis masz w pdf-ie w pierwszym poście. Czytałeś tego pdfa? Tam wszystko jest napisane :)
REKLAMA