Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wczytywanie zmiennej ze sterownika przemysłowego w javascript
Forum PHP.pl > Forum > Po stronie przeglądarki
tomaszmarcin
Witam,

Jestem automatykiem więc z góry przepraszam za używanie niepoprawnych webmasterowych pojęć.

Mam sterownik przemysłowy (takie urządzenie do sterowania w przemyśle) siemensa serii s7-1200.
Sterownik ten posiada wbudowany server www.

Działa to tak że tworzę strone w HTML i wgrywam ją na sterownik.
Następnie poprzez wpisanie w przegladarce numeru IP tego sterownika dostaję się na tą stronę.
Na takiej stronie mam możliwość sterowania urządzeniami podłączonymi do tego sterownika - np pompami, zaworami itp. oraz odczytywania ich stanów.

Wszystko działa jeśli stronę mam zrobioną w HTML'u.
Jednak takie rozwiązanie powoduje wolne ładowanie się strony przy wyświetlaniu większej ilości danych ze sterownika na stronie.
Dzieje się tak dlatego że każda dana jest pobierana osobno.
Dla wyświetlania stanu na przykład lampy używam takiej konstrukcji (PIE_O_SCH_KIN_ST jest to nazwa zmiennej w sterowniku; strona wyświetla obrazek lampa00.jpg lub lampa01.jpg w zależności od wartości zmiennej)
<td align="left" WIDTH="100px" HEIGHT="72px" VALIGN="middle">
<img src="Images/lampa0:="PIE_O_SCH_KIN_ST":.jpg"/> <cr>
</td>


Wedle producenta mogę na mojej stronie stosować skrypty java script.
Chciałbym więc zakodować stany 16'tu urządzeń w jednej zmiennej 16 bitowej i następnie w skrypcie "wyciągać" te stany i wyświetlać na stronie obrazki je ilustrujące.
I tutaj mam problem gdyż nie wiem w jaki sposób odwołać się do zmiennej ze sterownika.

Próbowałem tak:

var wynik;
var PIE_O_OPTI; // zmienna 16'to bitowa ze sterownika

wynik = PIE_O_OPTI & 1; // iloczyn bitowy, maska nałożona na pierwszy bit w zmiennej ze sterownika
if (wynik == 0)
document.getElementById('PIE_O_SCH_PKT').src = "Images/lampa00.jpg";
else
document.getElementById('PIE_O_SCH_PKT').src = "Images/lampa01.jpg";

wynik = PIE_O_OPTI & 2; // iloczyn bitowy, maska nałożona na pierwszy bit w zmiennej ze sterownika
if (wynik == 0)
document.getElementById('PIE_O_SCH_KIN').src = "Images/lampa00.jpg";
else
document.getElementById('PIE_O_SCH_KIN').src = "Images/lampa01.jpg";


i niestety to nie działa.
Wydaje mi się że moja zmienna PIE_O_OPTI nie jest poprawnie wczytywania do skryptu (w sterowniku jest ona ustawiana prawidłowo i poprzez HTML mogę wyświetlić jej wartość bez problemu).

Prosiłbym o jakieś pomysły co może być źle i jak to powinno wyglądać.

Dziękuję z góry i pozdrawiam
tomek
owca_82
A w jaki sposób wyświetlasz wartość tej zmiennej w Html ?

Musisz w jakiś sposób przekazać te dane (ze strony serwera do przeglądarki) i przypisać ją zmiennej js np. tak. var = <?php echo $zmienna ?>;

i potem już z górki => http://jsfiddle.net/AFN4Q/17/
destroyerr
Czy kod js na pewno umieściłeś w tagu script?
Druga sprawa to taka, że nie masz nigdzie w js przypisanej wartości odczytywanej ze sterownika. Powinno być coś takiego:
Kod
var PIE_O_OPTI = ":="PIE_O_OPTI":";

Ewntualnie zmienić nazwę zmiennej na tą właściwą, którą sterownik ma Ci wstawić. Kolejna sprawa to format w jakim ta liczba będzie wstawiana. Przy pojedynczej lampce nie miałeś problemu bo bit był reprezentowany 0 i 1. W przypadku liczby jest większy problem bo mogą być różne sposoby reprezentacji, ja założyłem, że jest standardowy ("16#0000").
Trzeba to przekonwertować na int:
Kod
PIE_O_OPTI = parseInt(PIE_O_OPTI.split('#')[1], 16);


Zobacz źródło strony jaka została wygenerowana przez sterownik. Załącz sobie też konsole javascript w Twojej przeglądarce, dowiesz się wtedy o ewentualnych błędach.
aniolekx
Ok to moze zacznijmy od podstaw.

Obrazki maja nazwy: lampa00.jpg lub lampa01.jpg

Biorac pod uwage kod: <img src="Images/lampa0:="PIE_O_SCH_KIN_ST":.jpg"/>

Wioskuje ze zmienna PIE_O_SCH_KIN_ST przyjmuje wartosci 1 lub 0

HTML nie obsluguje zmiennch i pierwszy raz widze takie znaczniki :="jakas_zmienna":
Powiedziales ze sterownik obluguje wbudowany serwer www, jaki jezyk jest po stronie tego serwera?


Podejrzewam ze taka konstrukacja: var PIE_O_OPTI; nie da ci dostepu do zmiennej ze sterownika

Raczej powinno byc: var PIE_O_OPTI = :="PIE_O_OPTI":

mozesz wykorzystac funkcje alert(PIE_O_OPTI) aby sprawdzic czy przechwyciles wartosc tej zmiennej.

Mam nadzieje ze to pomoze.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.