Siemens führt "Mister Automation" ein.
Meine Frage dazu:
Bin ich hier eigentlich im Kindergarten, Baumarkt oder Ikea?
Meine Frage dazu:
Bin ich hier eigentlich im Kindergarten, Baumarkt oder Ikea?
library VbsExt;
// Provides methods to manipulate Bits in VB-Script
{$mode objfpc}{$H+}
uses
Classes, Windows;
TYPE
VbsBitLogic = class
public
constructor Create;
Function GetBit (Value:DWORD; NoOfBit:Smallint): WordBool; stdcall;
Function SetBit(Value:DWORD; NoOfBit:Smallint; BitValue: WordBool):DWORD; stdcall;
end;
constructor VbsBitLogic.Create;
begin
inherited Create;
end;
function VbsBitLogic.GetBit(Value:DWORD; NoOfBit:Smallint): WordBool; stdcall;
Begin
// WordBool erzeugt in Pascal 0=FALSE; &FFFF=TRUE, was in VB (-1) ist
// ist nötig, da VB 16Bit Bool verwendet
GetBit := ((1 SHL NoOfBit) AND VALUE) <> 0;
end;
Function VbsBitLogic.SetBit(Value:DWORD; NoOfBit:Smallint; BitValue:WordBool):DWORD; stdcall;
// var in PACAL is same as ByRef in VB, so VB has to pass it's Variable ByRef
BEGIN
IF BitValue THEN BEGIN
SetBit := (1 SHL NoOfBit) OR Value;
END
ELSE BEGIN
SetBit := (NOT (1 SHL NoOfBit)) AND Value;
END;
end;
exports
VbsBitLogic;
end.
FUNCTION_BLOCK Buffer_Uebersetzen
VAR_INPUT
Buffer: ARRAY [0..3000] OF BYTE;
ByteCount: UDINT;
END_VAR
VAR_OUTPUT
sText: STRING(255);
END_VAR
VAR
i: INT;
sBuffer: STRING;
ByteCount_INT: INT;
END_VAR
ByteCount_INT := UDINT_TO_INT(ByteCount);
sText := '';
FOR i := 0 TO ByteCount_INT DO
sBuffer := WagoSysString.ASCIIByte_To_String(b:= Buffer[i]); // Wandelt den ASCII-Byte-Array zu einzelnen Strings um
sText := CONCAT(String_1:=sText , String_2:=sBuffer ); // Setzt die einzelnen Strings zu einem String zusammen (Concat-Befehl)
END_FOR
{"status":"ok","result":[{"time":1524146846301,"energy":2787704584452000,"power":-22614000,"power1":-7422000,"power2":-8088600,"power3":-7103400,"energyOut":553326052714800}]}
VAR
Buffer: ARRAY [0..3000] OF BYTE;
DatenArray: ARRAY [0..6] OF INT;
ArrayCounter: INT;
END_VAR
FOR i := 0 TO ByteCount_INT DO
IF Buffer[i] := eineZahl THEN
DatenArray[ArrayCounter] := DatenArray[ArrayCounter] * 10 + Buffer[i];
ELSE ArrayCounter = ArrayCounter +1;
END_IF
END_FOR