webMI.data.subscribe(webMI.query["base"] + ".Data.Status", function(e) { var motor = "silnik"; var estop = e.value[0]; var off = e.value[1]; var error = e.value[2]; var inspection = e.value[3]; var maintenance = e.value[4]; var jam = e.value[5]; var running = e.value[6]; var ready = e.value[7]; estop_active = false; // set state error when node state is "bad" var unknown = (e.status > 0); if (unknown) { webMI.gfx.setFill(motor, "#e6e6e6"); state_color = "#f2f2f2"; } else if (estop){ webMI.gfx.setFill(motor, {0:"#ff0000",2:"#bb0000",4:"#ff0000",6:"#bb0000",8:"#ff0000",10:"#bb0000"}); state_color = "#bb0000"; estop_active = true; } else if (off){ webMI.gfx.setFill(motor, "#c8c8c8"); state_color = "#c8c8c8"; } else if (error){ webMI.gfx.setFill(motor, "#ff0000"); state_color = "#ff0000"; } else if (maintenance) { webMI.gfx.setFill(motor, "#0000ff"); state_color = "#0000ff"; } else if (jam) { webMI.gfx.setFill(motor, "#ffaa00"); state_color = "#ffaa00"; } else if (running) { webMI.gfx.setFill(motor, "#00c800"); state_color = "#00c800"; } else if (ready) { webMI.gfx.setFill(motor, "#007700"); state_color = "#009900"; } // unknown state else { webMI.gfx.setFill(motor, "#e6e6e6"); state_color = "#f2f2f2"; } Info.Color = state_color; });
Chcę zrozumieć ten kod. Na daną chwilę rozumiem go tak że:
webMI.data.subscribe(webMI.query["base"] + ".Data.Status", function(e)
query sprawdza zmienną Status. Base że to w tym samym folderze (czyli coś jak lokalna lokalizacja). .Data.Status to folder pod którym znajduję się zmienna.
function(e) to funkcja obsługująca zdarzenia. Zmienna Status jest jednowymiarową tablicą bitową (z wartościami Boolean).
var motor = "silnik"; var estop = e.value[0]; var off = e.value[1]; var error = e.value[2];
Tutaj następuje przypisanie wartości z tablicy do zmiennych. Np. wartość tablicy drugiej przypisana jest do zmiennej off.
Kiedy w tablicy nr 2 znajdzie się wartość True wtedy wykona się kawałek kodu:
else if (off){ webMI.gfx.setFill(motor, "#c8c8c8"); state_color = "#c8c8c8";
Dokładnie to obiekt o nazwie silnik zmieni kolor.
Ale po co jest tutaj zmienna state_color ?
Co powoduje taki zapis ? Info.Color = state_color;
e.value reaguje na zmianę wartości, a e.status ? (var unknown = (e.status > 0)
