Das Messdatensystem

Zurück Weiter
Messung
Kalibrierung
 ↳ mit DLL
Serververbindung
Darstellung
ClearActions(); AddAction('SchrankJPG.show(); SchrankJPG.zoomOut(0);','SchrankJPG.zoomOut(700); '); AddAction('SchrankJPG.zoomIn(0.73,0.68,11,700)'); AddAction('SchrankJPG.zoomIn(0.65,0.58,11,700)'); AddAction('SchrankJPG.zoomIn(0.59,0.24,11,700)'); AddAction('SchrankJPG.zoomIn(0.64,0.14,8,700)'); AddAction('SchrankJPG.zoomIn(0.64,0.36,6,700)','SchrankJPG.zoomIn(0.64,0.36,6,0); SchrankJPG.show(); '); AddAction('Show("Software")'); StartWithAction(0,5); SchrankJPG.hide();
ClearActions(); AddAction('Show("PVSchrank")'); AddAction('Software1.show(); Software1.zoomOut(0); Software2.hide(); '); AddAction('Software2.zoomIn(Software1.getParentCoordsX(0.45),Software1.getParentCoordsX(0.53),1/20,0); Software2.show(); Software2.zoomOut(1000)','Software2.loadImg("2.jpg")'); AddAction('Software2.loadImg("3.jpg")'); AddAction('Software2.loadImg("4.jpg")'); AddAction('Software2.loadImg("5.jpg")'); AddAction('Software2.loadImg("6.jpg")'); AddAction('Software2.loadImg("7.jpg")'); AddAction('Software2.loadImg("8.jpg")'); AddAction('Software2.loadImg("9.jpg")'); AddAction('Software2.loadImg("10.jpg")'); AddAction('Software2.loadImg("11.jpg")','Software2.show(); Software1.show(); Software2.loadImg("11.jpg"); '); AddAction('Show("DLL")'); StartWithAction(1,11); Software1.hide(); Software2.hide(); Software2.loadImg("2.jpg");
ClearActions(); AddAction('Show("Software")'); AddAction('UnMark()'); AddAction('Mark(0)'); AddAction('Mark(1)'); AddAction('Mark(2)'); AddAction('Mark(3)'); AddAction('Mark(4)'); AddAction('Show("Server")'); StartWithAction(1,6); library CalibWind; {$mode objfpc}{$H+} uses Classes, Callback, Windows, sysutils; var CB : TCallback; OldMemMgr : TMemoryManager; ValueText : AnsiString = ''; Overclocking : POverclockTimes; Wind : Array [0..19] of single; WindFaktor : single = 1; VarianzFaktor : single = 1; Nullpos : integer = 0; Precision : word; my : single; va : single; Pos : byte; {$R *.res} procedure OverclockHook(Time : TDateTime); begin if (Length(Overclocking^) = 0) or (Overclocking^[0].Time = 0) then begin SetLength(Overclocking^,1); Overclocking^[0].Time := Time + 1000 / 86400000; Overclocking^[0].Value := -1; end; end; procedure Create(Params : PChar; _Callback : TCallbackProc; Board,Channel : Word; MemMgr : TMemoryManager); var i : integer; b : boolean; s,t : AnsiString; procedure InterpretST; begin if (LowerCase(s) = 'windfaktor') then begin try WindFaktor := StrToFloat(t); except end; end; if (LowerCase(s) = 'varianzfaktor') then begin try VarianzFaktor := StrToFloat(t); except end; end; if (LowerCase(s) = 'nullpos') then begin try NullPos := StrToInt(t); except end; end; end; begin GetMemoryManager(OldMemMgr); SetMemoryManager(MemMgr); CB := TCallback.Create(_Callback,Board,Channel); CB.GetOverclockingAccess(@OverclockHook,Overclocking); SetLength(Overclocking^,0); OverclockHook(Now); CB.CalibOnRequest := true; Precision := CB.GetPrecision; for i := 0 to 19 do PCardinal(@Wind[i])^ := 4294967295; Pos := 0; my := 0; va := 0; i := 0; b := false; s := ''; t := ''; while (PByte(Params+i)^ <> 0) do begin if (PByte(Params+i)^ = 10) or (PByte(Params+i)^ = Byte(' ')) then begin end else if (PByte(Params+i)^ = Byte('=')) then b := true else if (PByte(Params+i)^ = 13) then begin InterpretST; b := false; t := ''; s := ''; end else if (b) then t := t + Char(PByte(Params+i)^) else s := s + Char(PByte(Params+i)^); inc(i); end; InterpretST; end; type TCalib = record i,j : integer; end; var _Calib : TCalib; function Calib(Flag : ShortInt; Value : Word) : PChar; begin Result := nil; if (Flag = -1) then begin with (_Calib) do begin i := 0; j := 0; my := 0; va := 0; while (i <= 19) do begin if (PCardinal(@Wind[i])^ <> 4294967295) then begin my := my + Wind[i]; inc(j); end; inc(i); end; if (j = 0) then begin ValueText := '?'; exit; end; my := my / j; i := 0; while (i <= 19) do begin if (PCardinal(@Wind[i])^ <> 4294967295) then va := va + (my - Wind[i]) * (my - Wind[i]); inc(i); end; va := sqrt(va / j) * VarianzFaktor; if (my < 0) then my := 0; if (va < 0.1) then ValueText := '(konstant) ' + FloatToStrF(my,ffFixed,10,Precision) else if (va < 0.3) then ValueText := '(leicht schwankend) ' + FloatToStrF(my,ffFixed,10,Precision) else if (va < 0.6) then ValueText := '(schwankend) ' + FloatToStrF(my,ffFixed,10,Precision) else if (va < 1) then ValueText := '(leichte B%037038ouml;hen) ' + FloatToStrF(my,ffFixed,10,Precision) else if (va >= 1) then ValueText := '(starke B%037038ouml;hen) ' + FloatToStrF(my,ffFixed,10,Precision); end; Result := PChar(ValueText); end else begin if (Length(Overclocking^) = 0) then exit; if (CB.GetStarted) then Overclocking^[0].Time := Overclocking^[0].Time + 5000 / 86400000 else Overclocking^[0].Time := 0; Overclocking^[0].Value := -1; Wind[Pos] := (Value - Nullpos) * WindFaktor; inc(Pos); if (Pos >= 20) then Pos := 0; end; end; procedure Free; begin // Exit-Code hier CB.Free; if (IsMemoryManagerSet) then SetMemoryManager(OldMemMgr); end; exports Create,Calib,Free; end.
ClearActions(); AddAction('Show("DLL")'); AddAction('_UnMark(); document.getElementById("Browser").style.display = "none"; document.getElementById("BrowserFrame").src = ""; '); AddAction('_Mark(0)','document.getElementById("Browser").style.display = "none"; '); AddAction('document.getElementById("Browser").style.display = "block"; ','_Mark(0)'); AddAction('document.getElementById("Browser").style.display = "block"; document.getElementById("BrowserSrc").value = "http://www.hems-renewables.de/Messdatensystem/Messdaten.pl?GETLATESTDATA"; FBrowser(); '); AddAction('Show("Site")'); StartWithAction(1,4);
  • INITIALIZE&RSA-Public-Key

    Fordert einen Schlüssel (TempConnectKey) für den Aufbau der Verbindung mit CONNECT an. Dieser wird zufällig gewählt und mit RSA-Public-Key verschlüsselt übertragen (Siehe 4.4.1 RSA).

    Rückgabe:

    Wenn erfolgreich INITIALIZED&TempConnectKey_Crypt

    Sonst ERROR


  • CONNECT&PasswordHash&SessionKeys_Crypt

    Startet die Verbindung. Der Parameter PasswordHash berechnet sich aus Hauptpasswort und TempConnectKey (Siehe 4.4.2 Passwort-Hash). Die SessionKeys_Crypt sind die drei, für die Verbindung relevanten, Schlüssel UploadKey, UploadSeq und CheckKey, welche vom Client erstellt werden (Siehe 4.4.3 Verschlüsselung der Keys). Diese wurden mit dem TempConnectKey verschlüsselt, welcher nun nicht mehr gebraucht wird und potentiellen, anderen Verbindungspartnern zur Verfügung steht.

    Rückgabe:
    Wenn erfolgreich CONNECTED&CheckSeq

    Sonst ERROR oder WRONG KEY


  • SETCONFIG&UploadSeq&Timer&ChannelData_1&ChannelData_2& .. &ChannelData_n

    Überträgt die aktuelle Konfiguration des Messdatensystem, die für alle folgenden Messdaten gelten soll. Das ist zum einen das Interval (Timer), mit dem diese Abgefragt werden und zum anderen die Kanäle (ChannelData_1 .. ChannelData_n), die übertragen werden. Letztere bestehen aus dem Kanalnamen, einem Komma und der Einheit.

    Rückgabe:

    Wenn erfolgreich UPLOADED&CheckSeq

    Sonst ERROR oder WRONG KEY oder NOT CONNECTED


  • UPLOAD&UploadSeq&Time&Channel_1&Channel_2& .. &Channel_n

    Überträgt die Messdaten. Diese bestehen aus einem Zeitstempel (Time) sowie den Messwerten (Channel_1 .. Channel_n).

    Rückgabe:

    Wenn erfolgreich UPLOADED&CheckSeq

    Sonst ERROR oder WRONG KEY oder NOT CONNECTED


  • SETCONNECTIONINFO&UploadSeq&Connectioninfo

    Speichert Informationen zur Verbindung.

    Rückgabe:

    Wenn erfolgreich UPLOADED&CheckSeq

    Sonst ERROR oder WRONG KEY oder NOT CONNECTED


  • DISCONNECT&UploadSeq

    Schließt die Verbindung. Mit der Ausgabe von UploadKey ist die Verbindung geschlossen.

    Rückgabe:

    Wenn erfolgreich DISCONNECTED&UploadKey

    Sonst ERROR oder WRONG KEY oder NOT CONNECTED


  • GETCONFIG

    Fordert die letzte, mit SETCONFIG gespeicherte Konfiguration des Messdatensystems an.


  • GETLATESTDATA

    Fordert die neusten, mit UPLOAD gespeicherten Messwerte an.


  • GETCONNECTIONINFO

    Fordert Informationen zur Verbindung an.

ClearActions(); AddAction('Show("Server")'); AddAction('g_.hide(); document.getElementById("g0").style.visibility = "visible"; '); AddAction('g_.show(); document.getElementById("g0").style.visibility = "hidden";','g_.loadImg("g1.jpg"); '); AddAction('g_.loadImg("g2.jpg"); ','g_.loadImg("g2.jpg"); '); AddAction('g_.loadImg("g3.jpg"); '); StartWithAction(1); g_.hide();