Fazit:
TRIXI lebt und läuft.
Anbei C# Code, mal eben schnell zusammengeklöppelt, man möge mir die Unordnung verzeihen, aber wir haben Besuch…
Wenn mehr gewünscht ist, bitte melden.
Update 2010-11-22:
Die Callbacks gehen jetzt mit TRIXI 0.13.2. Beispiel hängt dran. Wer eine fertige TRIXIAccess mit C# Delegates will die man nur noch aufrufen braucht, bitte melden.
TRIXIAccess.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;
namespace IPS
{
class TRIXIAccess
{
[DllImport("TRIXI.dll")]
static extern bool Connect(String IP, int Port);
[DllImport("TRIXI.dll")]
static extern bool Disconnect();
[DllImport("TRIXI.dll")]
static extern int GetScriptIDByName(String Script, int ParentID);
[DllImport("TRIXI.dll")]
static extern int GetVariableIDByName(String Variable, int ParentID);
[DllImport("TRIXI.dll")]
static extern bool IsOnline();
[DllImport("TRIXI.dll")]
static extern bool ReadBoolean(int VariableID);
[DllImport("TRIXI.dll")]
static extern double ReadFloat(int VariableID);
[DllImport("TRIXI.dll")]
static extern int ReadInteger(int VariableID);
[DllImport("TRIXI.dll")]
static extern String ReadString(int VariableID);
[DllImport("TRIXI.dll")]
static extern int RunScript(int ScriptID);
[DllImport("TRIXI.dll")]
static extern bool ScriptExists(int ScriptID);
[DllImport("TRIXI.dll", CallingConvention = CallingConvention.StdCall)]
static extern void SetSimpleVarCallback(SimpleVarCallback svc);
[DllImport("TRIXI.dll", CallingConvention = CallingConvention.StdCall)]
static extern void SetVarChangeCallback(VarCallback vc);
[DllImport("TRIXI.dll", CallingConvention = CallingConvention.StdCall)]
static extern void SetVarUpdateCallback(VarCallback vc);
[DllImport("TRIXI.dll")]
static extern bool VariableExists(int VariableID);
[DllImport("TRIXI.dll")]
static extern int WriteBoolean(int VariableID, bool Value);
[DllImport("TRIXI.dll")]
static extern void WriteDebugFile(String LogFile, bool MsgSink);
[DllImport("TRIXI.dll")]
static extern int WriteFloat(int VariableID, double Value);
[DllImport("TRIXI.dll")]
static extern int WriteInteger(int VariableID, int Value);
[DllImport("TRIXI.dll")]
static extern int WriteString(int VariableID, String Value);
//Intern
private String destIP;
private int destPort;
private bool isConnected;
//Delegates
public delegate void SimpleVarCallback(int ID);
public delegate void VarCallback(int ID, double Time, String Value);
private static SimpleVarCallback mySimpleVarCallback;
private static VarCallback myVarUpdateCallback;
private static VarCallback myVarChangeCallback;
// ***************************************************************
// * CONSTRUCTOR / DECONSTRUCTOR
// ***************************************************************
public TRIXIAccess(String IP, int Port)
{
//Merken
destIP = IP;
destPort = Port;
//Connect
isConnected = Connect(destIP, destPort);
AddDelegate();
}
~TRIXIAccess()
{
Disconnect();
}
// ***************************************************************
// * ONLINE
// ***************************************************************
public bool TRIXIIsOnline()
{
return (IsOnline());
}
// ***************************************************************
// * Callbacks
// ***************************************************************
public void AddDelegate()
{
//Delegates anlegen
mySimpleVarCallback = new SimpleVarCallback(SimpleVarCallbackImpl);
myVarUpdateCallback = new VarCallback(VarUpdateCallbackImpl);
myVarChangeCallback = new VarCallback(VarChangeCallbackImpl);
//Zuweisen
SetSimpleVarCallback(mySimpleVarCallback);
SetVarUpdateCallback(myVarUpdateCallback);
SetVarChangeCallback(myVarChangeCallback);
}
public void SimpleVarCallbackImpl(int ID)
{
Console.Out.WriteLine("Variable [" + ID + "] changed!!!");
}
public void VarUpdateCallbackImpl(int ID, double Time, String Value)
{
DateTime changeTime = DateTime.FromOADate(Time);
Console.Out.WriteLine("Variable [" + ID + "] was updated to [" + Value + "] on [" + changeTime + "]");
}
public void VarChangeCallbackImpl(int ID, double Time, String Value)
{
DateTime changeTime = DateTime.FromOADate(Time);
Console.Out.WriteLine("Variable [" + ID + "] changed to [" + Value + "] on [" + changeTime + "]");
}
// ***************************************************************
// * IDs
// ***************************************************************
public int TRIXIGetScriptIDByName(String Script, int ParentID)
{
int ScriptID = -1;
try
{
ScriptID = GetScriptIDByName(Script, ParentID);
}
catch (Exception hell)
{
//Exception wird von TRIXI geworfen wenn Script nicht gefunden
}
return (ScriptID);
}
public int TRIXIGetVariableIDByName(String Variable, int ParentID)
{
int VariableID = -1;
try
{
VariableID = GetVariableIDByName(Variable, ParentID);
}
catch (Exception hell)
{
//Exception wird von TRIXI geworfen wenn Variable nicht gefunden
}
return (VariableID);
}
// ***************************************************************
// * Exists?
// ***************************************************************
public bool TRIXIScriptExists(int VariableID)
{
bool RetVal = ScriptExists(VariableID);
return (RetVal);
}
public bool TRIXIVariableExists(int VariableID)
{
bool RetVal = VariableExists(VariableID);
return (RetVal);
}
// ***************************************************************
// * Scripts
// ***************************************************************
public int TRIXIRunScript(int ScriptID)
{
return (RunScript(ScriptID));
}
// ***************************************************************
// * GETTER / SETTER
// ***************************************************************
public bool TRIXIReadBoolValue(int VariableID)
{
bool RetVal = ReadBoolean(VariableID);
return (RetVal);
}
public int TRIXIWriteBoolValue(int VariableID, bool Value)
{
int RetVal = WriteBoolean(VariableID, Value);
return (RetVal);
}
public double TRIXIReadFloatValue(int VariableID)
{
double RetVal = ReadFloat(VariableID);
return (RetVal);
}
public int TRIXIWriteFloatValue(int VariableID, double Value)
{
int RetVal = WriteFloat(VariableID, Value);
return (RetVal);
}
public int TRIXIReadIntValue(int VariableID)
{
int RetVal = ReadInteger(VariableID);
return (RetVal);
}
public int TRIXIWriteIntValue(int VariableID, int Value)
{
int RetVal = WriteInteger(VariableID, Value);
return (RetVal);
}
public String TRIXIReadStringValue(int VariableID)
{
String RetVal = ReadString(VariableID);
return (RetVal);
}
public int TRIXIWriteStringValue(int VariableID, String Value)
{
int RetVal = WriteString(VariableID, Value);
return (RetVal);
}
// ***************************************************************
// * GETTER / SETTER
// ***************************************************************
public void TRIXIWriteDebugFile(String LogFile, bool MsgSink)
{
WriteDebugFile(LogFile, MsgSink);
}
}
}
Testaufrufe
public void TRIXITest()
{
//IPS Daten
String ipsIP = "192.168.1.211";
int ipsTestResult = -1;
int ipsPort = 3773;
//StringVars
String scriptName = "Testscript";
String variableName = "trixiTestBool";
//IDs
int ipsTestIDScripts = 43758; /*[Skripte\Scripts]*/
int ipsTestIDVars = 33390; /*[Skripte\Variablenbaum]*/
int ipsTestIDScript = 16013; /*[Skripte\Scripts\Testscript]*/
int ipsTestIDBool = 13090; /*[Skripte\Variablenbaum rixiTestBool]*/
int ipsTestIDFloat = 12441; /*[Skripte\Variablenbaum rixiTestFloat]*/
int ipsTestIDInt = 39108; /*[Skripte\Variablenbaum rixiTestInt]*/
int ipsTestIDString = 18939; /*[Skripte\Variablenbaum rixiTestString]*/
IPS.TRIXIAccess ta = new IPS.TRIXIAccess(ipsIP, ipsPort);
//Start Tests
bool isOnline = ta.TRIXIIsOnline();
ipsTestResult = ta.TRIXIRunScript(ipsTestIDScript);
ta.TRIXIWriteDebugFile("c:\ emp\ rixi.log", false);
//Get IDs
int ipsScriptID = ta.TRIXIGetScriptIDByName(scriptName, ipsTestIDScripts);
int ipsScriptID2 = ta.TRIXIGetScriptIDByName("GibbetNed", ipsTestIDScripts);
int ipsVarID = ta.TRIXIGetVariableIDByName(variableName, ipsTestIDVars);
int ipsVarID2 = ta.TRIXIGetVariableIDByName("GibbetNed", ipsTestIDVars);
//Exists?
bool varExists1 = ta.TRIXIVariableExists(ipsVarID);
bool varExists2 = ta.TRIXIVariableExists(08154711);
bool scriptExists1 = ta.TRIXIScriptExists(ipsScriptID);
bool scriptExists2 = ta.TRIXIScriptExists(08154711);
//Tests bool
bool oldBoolVal = ta.TRIXIReadBoolValue(ipsTestIDBool);
ipsTestResult = ta.TRIXIWriteBoolValue(ipsTestIDBool, !oldBoolVal);
//Tests float
double oldFloatVal = ta.TRIXIReadFloatValue(ipsTestIDFloat);
ipsTestResult = ta.TRIXIWriteFloatValue(ipsTestIDFloat, oldFloatVal + 0.1);
//Tests int
int oldIntVal = ta.TRIXIReadIntValue(ipsTestIDInt);
ipsTestResult = ta.TRIXIWriteIntValue(ipsTestIDInt, oldIntVal + 1);
//Tests String
String oldStrVal = ta.TRIXIReadStringValue(ipsTestIDString);
ipsTestResult = ta.TRIXIWriteStringValue(ipsTestIDString, oldStrVal + ".");
}