SOAP Schnittstelle ansprechen (VB.Net)

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.

Vielen Dank nochmal an paresy! :wink:

IIPSsoap.zip (1.99 KB)

Hallo paresy,

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…:stuck_out_tongue:

Ich glaube, dass du wieder den TIDHeader vergessen hast :slight_smile:

paresy

Hat sich erledigt, ich alter Dussel…
Wenn ich den Header erzeuge, sollte ich ihn auch noch zuweisen!?

Danke (wie oft hab ich das in dem Thread schon gesagt…?)!

:slight_smile:

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.

Vielleicht kann man das noch ändern?

Verstehe ich nicht. IPS vergibt nur IDs im Wertebereich 10000-60000.

paresy

Hab mittlerweile ne recht umfangreiche Testumgebung und kann bisher paresys Aussage soweit bestätigen.

Toni

Ja, ihr habt Recht. War mein Fehler; hatte mir mal zum Testen ID´s per Hand angelegt und nicht an den Wertebereich gedacht. Mein Fehler… :frowning:

Ist übrigens Klasse, die SOAP-Schnittstelle. Alles was man will/braucht, ist verfügbar - Klasse! :smiley:

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? :confused:

danke
lg
Chri

Du hast ganz sicher TIDHeader vergessen. Ne Fehlermeldung würde ansonsten auch helfen :wink:

paresy

stimmt, die wäre vermutlich hilfreich :wink:
sorry!

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

wenn du den header auch noch zuweist, sollte es klappen:

[i]SCHALTER.TIDHeaderValue = TID

paresy
[/i]

Das Leben kann so einfach sein…
Danke!!!

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 ?

lg
Chri

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?

danke!
Chri

IIPSVariableManager.GetVariable

paresy

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 + "
");
            }

Das ist auch so gewollt.

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.

paresy

Danke für die Erklärung, jetzt ist erst mal alles klar :wink:

Hi,

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?

viele Grüße
Sirko

damit habe ich es nicht geschafft den Wert anzuzeigen, aber dafür mit „ReadVariableInteger“.
Ist das verkehrt?