Cześć,
Templatka, jak piszesz, jest opensource do ściągnięcia.
Dopisałem skrypt php, który wg parametru p (np. index.php?p=dashboard) importuje do kontentu templatki jakąś podstronę, Innymi słowy: górny pasek jest stały, menu po lewej jest stałe, zmienia się kontent po prawej.
Każda z takich podstron to też plik php, choć PHP jest wykorzystywany TYLKO do weryfikacji uprawnień. Sam w sobie zwraca kontent HTML składający się z elementów i załączonych plików js. Przykładowo podstrona z głownym dashboardem dashboard.php wygląda tak:
<?php
defined('_DASH') or die;
echo '
<script src="js/raphael.2.1.0.min.js"></script>
<script src="js/justgage.1.0.1.min.js"></script>
<script src="js/bootstrap-slider.js"></script>
itd..
Każda pod-storna ma dedykowany skrypt js zawierający definicje obiektów i funkcje specyficzne dla danej strony.
Każdy 'klocek' na podstronie jest osobnym obiektem, np na dashboardzie element odpowiedzialny za wyświetlanie ostatniego ruchu:
{"id" : "LastMovement", "movement" : "PLC_PRG.Move_lastMoveTime", "time" : ".CURRENT_TIME", "moveID": "PLC_PRG.Move_lastMoveID", "RefreshInterval": 1000},
Skrypt startowy w $(document).ready(function() {... zbiera wszystkie nazwy zmiennych (np. PLC_PRG.Move_lastMoveTime) i wysyła je do pliku checkAddresses.php prosząc o sprawdzenie adresów w pamięci PLC. Ów plik php zczytuje z PLC plik wizualizacji.xml, na której muszą być umieszczone obiekty odpowiadające za potrzebne zmienne, parsuje go i zwraca listę adresów w postaci:
4|63024|4|20;4|175300|4|20;4|62627|1|2;4|62328|2|3;1|14|2|1;4|76708|2|1;4|76718|2|1;
Te adresy przypisywane są do obiektów i uruchamiana jest funkcja odśwież, która przez plik read.php komunikuje się z PLC. read.php zwraca listę stanów w JSONie . Zwrócone dane są parsowane w JS. Uniwersalna funkcja read wygląda tak:
function read(readAddresses, onSuccess) {
var start = new Date();
ReadAjax = $.ajax({
type: 'POST',
url: "WAGO/read.php",
timeout: 8000,
dataType : "json",
data: {ADRs: readAddresses},
success: function(data){
var finish = new Date();
var duration = finish-start;
if (typeof onSuccess !== "undefined") onSuccess(data, duration);
}
}); // -ajax
}
Po prawdzie to wszystko jest trochę bardziej skomplikowane bo kolejkuję zapytania read i wykonuję je kolejno, by nie zasypać PLC kwerendami.
... no i tak to się wszystko kręci. Nie ma modbusa. Można czytać wiele zmiennych na raz. Można zapisywać kilka równocześnie.
Co do edytora - korzystam wyłącznie z Notepad++. Przykłady widgetów zawarte w templacie w zasadzie są gotowe do wykorzystania.
Pozdrawiam,