ModBus Gateway als Parent meines Moduls

…einen habe ich noch!:wink:

Eine etwas andere Aufgabenstellung, aber ähnlich vom Thema.

In der module.json habe ich folgendes eingetragen:

"parentRequirements": ["{E310B701-4AE7-458E-B618-EC13A1A6F6A8}"],
  "childRequirements": [],
"implemented": ["{77B31ABB-18FA-4B91-BB63-E5B2AB5588F4}"],

Ich möchte den IPS-ModBus-Gateway als Parent meines Moduls nutzen.
Die Daten zu einen IPS-ModBus-Device sehen so aus:

Array
(
    [ParentRequirements] => Array
        (
            [0] => {E310B701-4AE7-458E-B618-EC13A1A6F6A8}
        )

    [ChildRequirements] => Array
        (
        )

    [Implemented] => Array
        (
            [0] => {77B31ABB-18FA-4B91-BB63-E5B2AB5588F4}
        )

    [Vendor] => ModBus
    [Aliases] => Array
        (
            [0] => ModBus Device
        )

    [LibraryID] => {0945206A-47AA-4FDD-9093-99051E410E82}
    [ModuleID] => {CB197E50-273D-4535-8C91-BB35273E3CA5}
    [ModuleName] => ModBus Address
    [ModuleType] => 3
)

Die des IPS-ModBus-Gateway so:

Array
(
    [ParentRequirements] => Array
        (
            [0] => {79827379-F36E-4ADA-8A95-5F8D1DC92FA9}
        )

    [ChildRequirements] => Array
        (
            [0] => {77B31ABB-18FA-4B91-BB63-E5B2AB5588F4}
        )

    [Implemented] => Array
        (
            [0] => {018EF6B5-AB94-40C6-AA53-46943E824ACF}
            [1] => {E310B701-4AE7-458E-B618-EC13A1A6F6A8}
        )

    [Vendor] => 
    [Aliases] => Array
        (
        )

    [LibraryID] => {0945206A-47AA-4FDD-9093-99051E410E82}
    [ModuleID] => {A5F663AB-C400-4FE5-B207-4D67CC030564}
    [ModuleName] => ModBus Gateway
    [ModuleType] => 2
)

Mit einem „FakeSplitter“ habe ich auch hier ermitteln können, welche Daten bzw. Struktur der Gateway erwartet, umgesetzt sieht das dann so aus:

			$this->SendDataToParent(json_encode(Array("DataID"=> "{E310B701-4AE7-458E-B618-EC13A1A6F6A8}", "Function" => $Function, "Address" => $Address, "Quantity" => $Quantity, "Data" => "")));
	

Zunächst getestet mit dem IPS-Device bekomme ich Daten zurück, jedoch nicht mit meinem Modul. Es dauert unerwartet lange (Skriptlaufzeit um die 3800ms), jedoch keine Fehlermeldungen aber auch im ReceiveData keinerlei Regungen…

Woran liegt das? Habe ich wieder irgendetwas verdreht?

Joachim

Schau dir mal das Modul an: SymconBC/EM24-DIN at master · symcon/SymconBC · GitHub

paresy

PS: Ich habe mal ein anderes Thema auf gemacht… Sonst findet das ja nie einer wieder

Hallo Paresy,

vielen Dank! Hat mich wieder ein Stück weitergebracht!:slight_smile:

Joachim

…bin hier (wieder einmal) am Verzweifeln…:frowning:

Jetzt soll es ein Siemens Gateway sein:

Array
(
    [ParentRequirements] => Array
        (
            [0] => {79827379-F36E-4ADA-8A95-5F8D1DC92FA9}
        )

    [ChildRequirements] => Array
        (
            [0] => {EC09E155-355C-4DC2-95C7-5C336B1C9D48}
        )

    [Implemented] => Array
        (
            [0] => {018EF6B5-AB94-40C6-AA53-46943E824ACF}
            [1] => {042EF3A2-ECF4-404B-9FA2-42BA032F4A56}
        )

    [Vendor] => 
    [Aliases] => Array
        (
        )

    [LibraryID] => {0945206A-47AA-4FDD-9093-99051E410E82}
    [ModuleID] => {1B0A36F7-343F-42F3-8181-0748819FB324}
    [ModuleName] => Siemens Gateway
    [ModuleType] => 2
)

Meine module.json:

{
  "id": "{139E70B4-AAE4-4107-8E5A-F27D6071496E}",
  "name": "IPS2LOGO_FakeSplitter",
  "type": 2,
  "vendor": "JP-IPS-Modules",
  "aliases":
  [
    "IPS2LOGO_FakeSplitter"
  ],
  "parentRequirements": ["{042EF3A2-ECF4-404B-9FA2-42BA032F4A56}"],
  "childRequirements": [],
  "implemented": ["{EC09E155-355C-4DC2-95C7-5C336B1C9D48}"], 
  "prefix": "I2LFS"
}

…wird aber vom Siemens Device nicht als „Stiefvater“ akzeptiert…:rolleyes:

Wo habe ich etwas verdreht?

Joachim

Du hast jetzt eine Module.json welche sich als Child an das Siemens Gateway hängt.
Willst du aber ein Parent für das Siemens Gateway sein, so musst du dessen ParentRequirements erfüllen (und nicht ChildRequirements).
Michael

Ja, stimmt!:rolleyes:

Wie wäre es richtig konfiguriert?:confused:

Es soll ein Parent für ein Siemens Device sein…

Joachim

Dein implemented muss die GUID enthalten welche das Siemens Gateway als Parenrrequierment erwartet also 79827379-F36E-4ADA-8A95-5F8D1DC92FA9
Und dein childRequirements muss eine der GUIDs aus implemented des Siemens Gateway enthalten 018EF6B5-AB94-40C6-AA53-46943E824ACF
Wobei das die standard Virtual IOs sind gem Doku:
Datenfluss — IP-Symcon :: Automatisierungssoftware
Michael

…irgendetwas mache ich da noch falsch…

{
  "id": "{139E70B4-AAE4-4107-8E5A-F27D6071496E}",
  "name": "IPS2LOGO_FakeSplitter",
  "type": 2,
  "vendor": "JP-IPS-Modules",
  "aliases":
  [
    "IPS2LOGO_FakeSplitter"
  ],
  "parentRequirements": [],
  "childRequirements": ["{018EF6B5-AB94-40C6-AA53-46943E824ACF}"],
  "implemented": ["{79827379-F36E-4ADA-8A95-5F8D1DC92FA9}"], 
  "prefix": "I2LFS"
}

…im FakeSplitter kann zwar jetzt - korrekterweise - kein Parent mehr ausgewählt werden, in einem Siemens Device wird der „Stiefvatter“ aber nicht als möglich übergeordnete Instanz aufgezählt…

Nachtrag: Siemens Device sieht so aus:

(
    [ParentRequirements] => Array
        (
            [0] => {042EF3A2-ECF4-404B-9FA2-42BA032F4A56}
        )

    [ChildRequirements] => Array
        (
        )

    [Implemented] => Array
        (
            [0] => {EC09E155-355C-4DC2-95C7-5C336B1C9D48}
        )

    [Vendor] => Siemens
    [Aliases] => Array
        (
            [0] => Siemens S5
            [1] => Siemens S7
            [2] => Siemens Logo 7
            [3] => Siemens Logo 8
        )

    [LibraryID] => {0945206A-47AA-4FDD-9093-99051E410E82}
    [ModuleID] => {932076B1-B18E-4AB6-AB6D-275ED30B62DB}
    [ModuleName] => Siemens Device
    [ModuleType] => 3
)

Äh… Das Device bekommt doch nicht direkt einen IO (du hast jetzt einen IO keinen Splitter!), sondern das Siemens Gateway und dieses bekommt deinen IO.

Oder willst du den Splitter (Siemens Gateway) ersetzen durch dein Modul?
Dann musst du natürlich die Schnittstelle vom Gateway zum Device kopieren.
Michael

Hallo Michael,

 "type": 2,

sollte doch ein Splitter sein?

Ja, ich möchte gerne sehen was das „Siemens Device“ an den „Siemens Gateway“ sendet. Ich habe da so eine Idee, die Struktur bei den LOGO-Instanzen durch ein neues Modul etwas „aufzuräumen“.
An anderer Stelle (ModBus und DMX) war mir das mit dem „FakeSplitter“ - wie auch immer - gelungen, hier versuche ich das schon seit Stunden, bisher leider erfolglos…

Da die {018EF6B5-AB94-40C6-AA53-46943E824ACF}" ja offensichtlich die I/O-Instanz betrifft, müsste hier dann vielleicht die {042EF3A2-ECF4-404B-9FA2-42BA032F4A56} eingesetzt werden?

Würde dann so aussehen:

{
  "id": "{139E70B4-AAE4-4107-8E5A-F27D6071496E}",
  "name": "IPS2LOGO_FakeSplitter",
  "type": 2,
  "vendor": "JP-IPS-Modules",
  "aliases":
  [
    "IPS2LOGO_FakeSplitter"
  ],
  "parentRequirements": [],
  "childRequirements": ["{042EF3A2-ECF4-404B-9FA2-42BA032F4A56}"],
  "implemented": ["{79827379-F36E-4ADA-8A95-5F8D1DC92FA9}"], 
  "prefix": "I2LFS"
}

Joachim

Irgendwie wirfst du alle GUIDs wild durcheinander.
Du musst doch einfach nur 1:1 die Werte aus dem Siemens Gateway übernehmen, wenn du ein eigenes ‚Siemens Gateway‘ bauen willst.
Michael

…so „einfach“ hatte ich mir das ja auch vorgestellt - und an anderer Stelle war das ja auch erfolgreich…:wink:

Nur hier - nach diversen erfolglosen Versuchen - wäre ich dankbar wenn mich jemand mal wieder in die richtige Richtung lenkt…:slight_smile:

Wären denn das diese?

 [ChildRequirements] => Array
        (
            [0] => {EC09E155-355C-4DC2-95C7-5C336B1C9D48}
        )

    [Implemented] => Array
        (
            [0] => {018EF6B5-AB94-40C6-AA53-46943E824ACF}
            [1] => {042EF3A2-ECF4-404B-9FA2-42BA032F4A56}
        )

Würde dann so aussehen:

{
  "id": "{139E70B4-AAE4-4107-8E5A-F27D6071496E}",
  "name": "IPS2LOGO_FakeSplitter",
  "type": 2,
  "vendor": "JP-IPS-Modules",
  "aliases":
  [
    "IPS2LOGO_FakeSplitter"
  ],
  "parentRequirements": [],
  "childRequirements": ["{EC09E155-355C-4DC2-95C7-5C336B1C9D48}"],
  "implemented": ["{042EF3A2-ECF4-404B-9FA2-42BA032F4A56}"], 
  "prefix": "I2LFS"
}

Die {018EF6B5-AB94-40C6-AA53-46943E824ACF} habe ich mal rausgelassen da sie den I/O repräsentiert…

Joachim

Ja, das sieht richtig aus.
Michael

…und so funktioniert es auch!:smiley:

Vielen Dank für Deine Unterstützung!

Joachim