'Inteligenty' dom ze sterownikiem PLC

 Language:
Szukanie zaawansowane  

Aktualności:

Powrót do strony głównej: www.edom-plc.pl

Autor Wątek: Prędkość HTTP API w 750-880  (Przeczytany 4898 razy)

matv

  • Jr. Member
  • **
  • Wiadomości: 53
    • Zobacz profil
Prędkość HTTP API w 750-880
« dnia: Sierpnia 17, 2016, 11:07:48 am »

Cześć,

Mam kolejne pytanko, tym razem do osób, które używają HTTP api (read and write za pomocą SSI) do włączania/wyłączania wyjść w PLC. Mam w tym momencie około 30 świateł obsługiwanych normalnie z włączników ściennych i właśnie dodałem do nich możliwość włączania ze strony z wizualizacją (czyli tak naprawdę z każdego urządzenia, które otworzy tą stronę). I mam niestety taki problem, że zmiana stanu światła ze strony z wizualizacją trwa stosunkowo długo, tzn - klikam sobie na przycisk w aplikacji, który zmienia stan światła, od razu idzie request do PLC i mija 1-2 sekundy, zanim stan światła faktycznie się zmieni.
Czy miał ktoś podobny problem? Jak na PLC, który ma sterować urządzeniami przemysłowymi takie opóźnienie jest raczej niedopuszczalne...
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: Prędkość HTTP API w 750-880
« Odpowiedź #1 dnia: Sierpnia 18, 2016, 09:14:21 am »

Cześć,

Dawno już nie używałem skryptów SSI, czyli jako rozumiem, wbudowanego w plik:  <!--#READPI ADR=QX5.12&FORMAT=%d-->, ale pamiętam, że szybkość nie powalała.  Szybciej było z plikiem html, który był umieszczony na sterowniku, i który wysyłał zapytania GET z READPI?.... itd.  Jeszcze szybciej obsługiwana jest komunikacja w formacie  |0|...., pewnie dlatego, że można wysyłać/odbierać dużą liczbę informacji w pojedynczym zapytaniu.

Trzeba więc porzucić SSI... :)
Zapisane

matv

  • Jr. Member
  • **
  • Wiadomości: 53
    • Zobacz profil
Odp: Prędkość HTTP API w 750-880
« Odpowiedź #2 dnia: Sierpnia 18, 2016, 10:10:49 am »

Co masz na myśli komunikacja w formacie |0|....? Jest jeszcze inna opcja - użycie TPC_Server z WagoLibEthernet, tylko że wtedy nie mogę bezpośrednio z www nawiązać połączenia tcp - trzeba byłoby postawić np pomiędzy raspberry pi, a na razie chciałem tego uniknąć (chciałem, żeby wszystko obsługiwał na razie PLC).
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Zapisane

matv

  • Jr. Member
  • **
  • Wiadomości: 53
    • Zobacz profil
Odp: Prędkość HTTP API w 750-880
« Odpowiedź #4 dnia: Sierpnia 19, 2016, 09:31:57 am »

No widzisz, nie trafiłem na to wcześniej. Ja w ogóle mam zrobione wszystko tak, że mam taki pseudo plik z jsonem (nazywa się status.ssi) na serwerze i odczytuje mi wszystkie stany w jednym zapytaniu, wygląda to mniej więcej tak:

{
  "lights": {
    "S01_sufit": "<!--#READPI ADR=MX0.0&FORMAT=%d-->",
    "S02_sufit": "<!--#READPI ADR=MX0.1&FORMAT=%d-->",
    "S03_sufit": "<!--#READPI ADR=MX0.2&FORMAT=%d-->",
    "S04_sufit": "<!--#READPI ADR=MX0.3&FORMAT=%d-->",
    ....
  }
}
więc robię jeden request do /webserv/status.ssi i dostaję stany wszystkich wyjść za jednym razem w formacie JSON:

{
  "lights": {
    "S01_sufit": "1",
    "S02_sufit": "1",
    "S03_sufit": "0",
    "S04_sufit": "0",
    ....
  }
}

Problemem mimo wszystko nie jest odczyt tylko zapis, ponieważ zmiana stanu zajmuje tak jak wspomniałem strasznie długo.

Tak czy inaczej sprawdzę sposób opisany przez Ciebie ponieważ wygląda to obiecująco :)
Zapisane

matv

  • Jr. Member
  • **
  • Wiadomości: 53
    • Zobacz profil
Odp: Prędkość HTTP API w 750-880
« Odpowiedź #5 dnia: Sierpnia 29, 2016, 10:15:32 am »

Zastosowałem protokół |0|... i niestety wychodzi na to, że dalej jest to samo - sterownik na reakcję po wysłaniu danych potrzebuje nieraz nawet ponad sekundę. Z drugiej strony ten protokół również używa zapytań HTTP więc różnica miedzy tym sposobem, a read api może tutaj być znikoma.

I tutaj przyszło mi do głowy coś innego - może jest coś w rodzaju 'rozdzielczości' dla HTTP? Tzn może PLC ma ustawione parametry sprawdzania stanu połączenia http co powiedzmy 2s i co te 2 sekundy aktualizuje stany zmiennych przesłane przez HTTP? Może brnę trochę za daleko, ale to by tłumaczyło losowość opóźnień - czasem nie mam praktycznie żadnego opóźnienia, czasem ponad sekundę - tak jak bym po prostu 'trafiał' w dobry moment. Czy ktoś kiedyś trafił na coś takiego?
Zapisane

Tom01

  • Full Member
  • ***
  • Wiadomości: 101
    • Zobacz profil
Odp: Prędkość HTTP API w 750-880
« Odpowiedź #6 dnia: Sierpnia 29, 2016, 09:31:36 pm »

No widzisz, nie trafiłem na to wcześniej. Ja w ogóle mam zrobione wszystko tak, że mam taki pseudo plik z jsonem (nazywa się status.ssi) na serwerze i odczytuje mi wszystkie stany w jednym zapytaniu

Podłączę się pod wątek.

Czy byłoby nadużyciem, gdybym poprosił gotowy przykład takich skryptów? Czytam opis na stronie admina i gapię się jak sroka w gnat. Pojęcia nie mam jak sformułować zapytanie, gdzie powinien być skryt, jakie dodatki są potrzebne, gdzie ma lecieć zapytanie, czy w miejscu docelowym ma być coś ponad standard? Słowem podstawy, które Wam pewnie się wydają banalne.
Zapisane

matv

  • Jr. Member
  • **
  • Wiadomości: 53
    • Zobacz profil
Odp: Prędkość HTTP API w 750-880
« Odpowiedź #7 dnia: Sierpnia 30, 2016, 12:59:21 pm »

@Tom01 admin bardzo fajnie to opisał włącznie z adresowaniem więc proponuję na spokojnie przeczytać jego post ze 2 razy i próbować. Ewentualnie jak coś nie zadziała to pytaj. Gdybym miał podać konkretny przykład to myślę, że dał bym linka do opisu admina :)

Udało Ci się w ogóle wrzucić jakąkolwiek stronę na sterownik, tak żebyś mógł ją otworzyć z przeglądarki/telefonu? To jest w ogóle pierwszy krok :)
Zapisane