Und hier nun die Klasse für VB.Net und die SOAP-Schnittstelle. Ist aber wieder auf meine SW angepasst, aber das Grundgerüst sollte sich von Interessierten nutzen lassen.
Ich hoffe, manch einer kann sie brauchen.
hab leider doch noch ein Problem: wenn ich eine FS20-Instanz schalten will (über SwitchMode) kommt folgende SOAP-Exception:
„No class registered for invokable interface IIPSFS20“.
Hab ich da noch einen Käfer drin? Hab das heute morgen gar nicht mehr getestet, da ich dachte, das wird schon laufen…
Noch ne Kleinigkeit: die ganzen ID´s haben ja den Datentyp Ushort; bei VB.Net und den C-Sprachen haben die den Wertebereich 0 - 65535 (16Bit Ganzzahl). Manche ID´s haben aber einen größeren Wert, so dass es zu Exceptions entweder bei der Zuweisung oder bei einem Vergleich kommt.
Könnte bitte irgendjemand mal ein LCN-Beispiel (meinetwegen Lampe ein/aus) als Vb2005 Code posten?
Das mit dem Einbinden von Webservice-Verweisen habe ich zwar geschnallt (wobei ich mir allerdings nicht sicher bin, welche Verweise ich überhaupt brauche), mir fehlt jedoch das Verständnis was ich alles in VB codieren muss und was im IPS (oder mache ich in der eigenen VB Applikation schlichtweg alles - was 'ne jede Menge Tipparbeit bedeutet)?
My.WebServices.IIPSLCNUnitservice.SwitchMode(1) reicht jedenfalls nicht hinter einem button aus, um damit das Licht auf- oder abzudrehen.
Kann mir bitte jemand sagen was alles fehlt?
folgender Code (ein button der eine Lampe schalten soll, einfacher geht’s ja wirklich nicht):
[i]Imports System.Threading
Imports WindowsApplication1.LCN_UnitVerweis
Imports WindowsApplication1.LCN_ModulVerweis
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim TID As New LCN_ModulVerweis.TIDHeader
Dim SCHALTER As New IIPSLCNUnitservice
TID.ID = 16660
SCHALTER.SwitchMode(1)
End Sub
End Class[/i]
erzeugt den error:
No class registered for invokable interface IIPSLCNUnit
für Zeile SCHALTER.SwitchMode(1)
Ich weiß leider nicht was damit gemeint sein könnte.
Bitte um Hilfe und Verständnis für jemanden der gerade von VB6 auf VB2005 umzusteigen versucht.
Danke!
lg
Chri
Ich befürchte allerdings für dich, dass das nicht die letzte Frage war…:o
by the way: meine nächste übung wäre ein slider (zum dimmen), gibt’s dazu tipps wie ich das am besten angehe ?
Also das mit dem TrackBar-Control ging erstaunlich einfach (SLIDER_1.SetIntensity(TrackBar1.Value, 0)), die Verzögerung zwischen Betätigen des Sliders und Erreichen des tatsächlichen Lichtwertes ist allerdings relativ hoch. Ich vermute das ist systembedingt so.
Was ich noch suche, ist eine Möglichkeit den Helligkeitswert eines LCN-Ausgangs mit VB.net auszulesen. Ich vermute eine „GetValue“-Methode, aber die finde ich leider nicht. Welche wdsl brauche ich da und gibts vielleicht ein code-snippet dazu?
Nach wieder ein mal viel zu langer Pause bin ich auch mal wieder dazu gekommen mit mit IPS zu beschäftigen. Hatte schon vor längerem mal angefangen mit c# und SOAP zu experimentieren. Hab mir einen Mini-Wrapper geschrieben und bin dabei jetzt auf folgendes Phänomen gestoßen, evt. kann es ja irgendwer nachvollziehen.
Erster einfacher Versuch war es alle Instanzen (ID und Name) von angelegten FHTs herauszufinden.
Auf meinem „produktiven“ System wo IPS schon fleißig alles steuert klappt die Ausgabe auch wunderbar.
Wenn ich das gleiche allerdings lokal auf einer leeren Installation von IPS ausführe erhalte ich
49999 - Event Handler
32445 - RRDTool
als Ausgabe.
Hier mal das kurze Snippet (IPS.IPSKernel ist mein Mini-Wrapper)
IPS.IPSKernel k = new IPS.IPSKernel("battlestar", 3773);
IPS.IIPSObjectManager.TIPSObject ipsO;
foreach (IPS.IIPSInstanceManager.TIPSInstance inst in k.InstanceManager.GetInstances(k.InstanceManager.GetInstancesByModuleID("{A89F8DFA-A439-4BF1-B7CB-43D047208DDD}")))
{
ipsO = k.ObjectManager.GetObject(inst.InstanceID);
textBox1.AppendText(inst.InstanceID + " - " + ipsO.ObjectName + "
");
}
Wenn du GetInstances() mit einem leeren Array abfragst (was ja der Fall ist, wenn GetInstancesByModuleID() keine Instanzen findet), dann gibt es dir alle vorhandenen Instanzen zurück. Das ist so gelöst, um bei einer Abfrage aller Instanzen einen Request zu sparen. Für dich bedeutet das lokal den Rückgabewert vorher zu prüfen.
ich bin momentan dabei den COM Port mit der SOAP Schnittstelle anzusprechen.
Funktioniert soweit ganz gut ich habe nur ein paar Schwierigkeiten mit den Steuerbefehlen. Ich sende via C# den Befehl N5 und Anschliessend das Steuerzeichen CR und LF. Hier mal ein kurzer Ausschnitt Code:
SerialPort.IIPSSerialPortservice comport = new SerialPort.IIPSSerialPortservice();
comport.TIDHeaderValue = new SerialPort.TIDHeader();
comport.TIDHeaderValue.ID = 30814;
comport.SendText("N5
");
Der Debuger vom Serial Port zeigt allerdings nur folgendes an:
26.03.2009 10:24:40.00 | TRANSMITTED | 4E 35 0A
26.03.2009 10:24:40.00 | RECEIVED | 6F B5 EB
Scheint als würde der CR Befehl gar nicht ankommen, vielleicht seh ich jedoch irgendetwas falsch. Hat jemand vielleicht eine Idee?