Beckhoff CX9010 und IP Symcon hilfe

Halllo,
habe eine Beckhoff Steuerung für Heizung, Einzelraumregelung und Lüftung am laufen. Möchte jetzt mit ips visualisieren und mit homematic ein monitoring vom stromverbrauch einbinden.
Ich wollte fragen ob ich bis jetzt alles richtig verstanden habe.

Für die Beckhoff brauche ich noch den modbus server aber keine Bausteine oder??
Wenn ich den modbus server installiert habe muss ich für die adressierung die 4 arrays anlegen.

VAR_GLOBAL
mb_Input_Coils : ARRAY [0…255] OF BOOL;
mb_Output_Coils : ARRAY [0…255] OF BOOL;
mb_Input_Registers : ARRAY [0…255] OF WORD;
mb_Output_Registers : ARRAY [0…255] OF WORD;
END_VAR

welche adressen muss ich dann mit ips abfragen?? funktioniert die abfrage dann schon?? wie finde ich die modbus adresse an der Beckhoff heraus?? Kann ich merker und ausgänge dann abfragen und schreiben??

Danke für die Hilfe
andy

Hallo andy,
bist du vor 2 Jahren mit Beckhoff und IP-Symcon und somit mit Modbus weitergekommen?
Ich hänge derzeit an der selben Stelle. In Symcon einen offset mit 32768 das klappt, aber ich weiß nicht, wie ich dann in Symcon eine weitere Variablen anlege. Was ich auch vermute ist, dass die Ausgangsbits und und die Words auf den gleichen Bereich zugreifen. Das Geliche gilt für die Eingänge.

Gruß ab864

Hallo,
ich verwende hier nachfolgendes Skript aus dem Forum um Variaben anzulegen:

<?

$katID = IPS_GetCategoryIDByName("TwinCat", 0); // Kategorie

$anzahl = 10; // Anzahl der zu erstellenden Instanzen
$datenTyp = 2; // 0=Bit, 1=Byte, 2=Word, 3=DWord, 4=ShortInt, 5=SmallInt, 6=Integer, 7=Real
$modulName = "Word";
$adresse = 32769 /*[Objekt #32769 existiert nicht]*/; // ab Adresse
$time = 10; // Aktualisierungzeit in ms
$nurLesen = false; // true oder false

for($i=0; $i<$anzahl; $i++)
{
   $neueInstanz = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}");
   IPS_SetName($neueInstanz, $modulName.$adresse);
   ModBus_SetType($neueInstanz, $datenTyp);
   ModBus_SetWriteAddress($neueInstanz, $adresse);
   ModBus_SetReadAddress($neueInstanz, $adresse);
   ModBus_SetPoller($neueInstanz, $time);
   ModBus_SetReadOnly($neueInstanz, $nurLesen);
   IPS_ApplyChanges($neueInstanz);
   IPS_SetParent($neueInstanz, $katID);
   $adresse++;
} 

?>

In der CX9010 nutze ich nur Output Coils und Output Register. Lege mal die gewünschte Anzahl an Variablen in
IPS und in Twincat die

VAR_GLOBAL
mb_Input_Coils : ARRAY [0…255] OF BOOL;
mb_Output_Coils : ARRAY [0…255] OF BOOL;
mb_Input_Registers : ARRAY [0…255] OF WORD;
mb_Output_Registers : ARRAY [0…255] OF WORD;
END_VAR

an dann kannst du sie sofort vonTwinCat beschreiben und lesen.

COIL 32768 in IPS ist mb_Output_Coils[0] in TwinCat
COIL 32769 in IPS ist mb_Output_Coils[1] in TwinCat

WORD 32768 in IPS ist mb_Output_Register[0] in TwinCat
WORD 32769 in IPS ist mb_Output_Register[1] in TwinCat

Gruß
Jürgen

Hallo Jürgen,
danke für die schnelle Antwort. Die 32768 kommen von den 8000hex aus Beckhoff.
Heißt das, dass es sich hier, bei allem, also den Coils und den Registern, nur um Merker handelt, die ab 32768 beginnen?

Sprich man muss sich

  1. mal klar sein welche Adresse man für was verwendet und
  2. die Bits, Bytes und … können von beiden Seiten aus beschrieben und gelesen werden
  3. sie liegen alle in dem Bereich ab 8000hex

Es handelt sich somit nicht um Eingänge einer SPS die nur gelesen werden können und Ausgänge, die man in der Regel zuweißt.

Gruß
Alfred

Hallo Alfred,
siehe unten

Hallo Jürgen,
was mir noch nicht ganz einleuchtet, ist folgendes. Es gibt innerhalb Beckhoff folgende Variablendefinition:

mb_Input_Coils : ARRAY [0…255] OF BOOL;
mb_Output_Coils : ARRAY [0…255] OF BOOL;
mb_Input_Registers : ARRAY [0…255] OF WORD;
mb_Output_Registers : ARRAY [0…255] OF WORD;

auf die ich wie folgt zugreifen kann:

mb_Input_Coils[0] usw.
mb_Output_Coils[0] …
mb_Input_Registers[0]…
mb_Output_Registers[0]…

d.h. seitens Beckhoff gibt es 1024 Variablen.

Aber wie unterscheide ich in IPS die Input-Coils von den Output-Coils und gleiches mit den Registern?
Ebenso beschäftigt mich die Frage, sind die 1. 16 Coils beginnend bei 32768 nicht auch gleich der Inhalt des 1.Registers?
Da ein Wort gleich 16 Bit sind.

Danke
Alfred

Nö, das kannst du unabhängig voneinander nutzen.
Probier es aus leg dir jeweils 10 Coils und 10 Register an.

Gruß
Jürgen

Hallo Jürgen,

ich habe zwischenzeitlich die Antwort auf meine Fragen herausgefunden. :slight_smile:
Was mir schon immer klar war, ist wie ich die einzelnen Coils und Register in Twincat anspreche.
Was mir nicht klar war, ist die Richtung der Inputs und Outputs und somit auch die Anbindung an IPS.

Jetzt die Lösung:

In ein mb_Input_Coils[0…255] schreibt man in Twincat was man in IPS sehen will.
Hier beginnt man in IPS mit den Offset 32768 und zwar mit dem Haken „nur Lesen“.

Aus dem mb_Output_Coils[0…255] liest man in Twincat was man aus IPS erhalten will.
Hier beginnt man in IPS ebenfalls mit den Offset 32768 und zwar „ohne“ den Haken „nur Lesen“.

Gleiches gilt für die Registers.

Somit hat man die bereit angesprochenen 1024 Variablen, die Modbus zur Verfügung stellt.

Viele Grüße
Alfred