# Phoenix ILC 170 ETH + IL ETH BK + IB IL AI 4/U



## valik.vak (15 Juni 2011)

Hallo!

Als SPS-Neuling soll ich eine Steuerung aufbauen mit der in der im Titel benannten Konstellation und hoffe auf eure Hilfe!
Am Buskoppler sollen 2 bis 3 analoge Werte (Spannung) von einem Lichtsensor über die AI 4/U registriert und via Ethernet an den ILC gesendet werden.
Nun habe ich leider nicht viel Ahnung wie ich diese abrufe und die Modbusbausteine konfiguriere.
Als ModBus Bausteine habe ich den MODBUS_TCP_Client_V1_20_1 und MT_ReadInputReg_V1_20_1.
Stimmt die Startingadress mit WORD#8003 als Adresse für den analogen Eingang?
Kann das Empfangsregister nur Boolsche Werte empfangen? (Ich muss doch analoge Werte als WORD verarbeiten, oder?)

Bin für jeden Rat dankbar!

Gruß Valentin


----------



## Mobi (16 Juni 2011)

Hallo,

hast du denn diese zwei PDF's dir schon angeschaut?
Ansonsten noch ein Beispielprojekt.


----------



## valik.vak (16 Juni 2011)

Danke für die Info!
Modbus_TCP_Communication_V1_00_049 hatte ich noch nicht. Aber das Beispielprojekt kann ich mit PC Worx Express leider nicht öffnen!

Gruß Valentin


----------



## Mobi (16 Juni 2011)

Leider gibts es das Projekt (noch) nicht für Express.
Aber mit Hilfe der PDF kannst du es ja nachbauen.
Wenn du noch Hilfe brauchst einfach melden.


----------



## valik.vak (17 Juni 2011)

Ich hab mal was zusammengestellt.
Aber ich komm da nicht weiter.
Wie kann ich die Daten als WORD empfangen?
Das MB_Empfangsregister lässt nur BOOL oder BYTE zu.
Kann ich die Werte irgendwie anders auslesen oder brauch ich da nen anderen Baustein?

Gruß Valentin


----------



## Mobi (17 Juni 2011)

Hast du das                          IL ETH BK DI8 DO4 2TX-PAC?
Und da neben direkt eine IB IL AI 4/U-PAC?


----------



## valik.vak (17 Juni 2011)

Genau

Gruß Valentin


----------



## Mobi (17 Juni 2011)

Willst du mit dynamischen oder statischen Tabellen arbeiten?


----------



## valik.vak (17 Juni 2011)

Eigentlich mit dynamischer, allerdings hab ich hier grad die statische, weil ich mit der dynamischen nicht weitergekommen bin. Die dynamische müsste die Adresse 8003 haben oder?

Gruß Valentin


----------



## Mobi (17 Juni 2011)

Ne eigentlich 8001 und 8002. Die AI sitzt direkt neben der BK, d.h. da sind nur die Eingänge von dem BK zwischen und die haben ja 8000.


----------



## Mobi (17 Juni 2011)

Und 8003 und 8004. Ist ja AI4 .


----------



## valik.vak (17 Juni 2011)

Aber wie löse ich das Problem, dass ich ja analoge Werte haben will und mit BOOLschen werten da nix anfangen kann?


----------



## Mobi (17 Juni 2011)

Du bekommst ja ein Array mit Bytes. D.h. zwei Bytes sind ja ein Word, als ein Wert. Diese beiden Bytes musst du nur verbinden.


----------



## Mobi (17 Juni 2011)

Ah Moment falsch. Wenn du den Baustein MT_ReadInputReg_V1_2x nimmst, hast du ein Array aus Words. Bei ByteCount, müsstest du 8 bekommen.


----------



## valik.vak (17 Juni 2011)

Hab ich jetzt nicht so ganz verstanden...
Muss ich jetzt ByteCount zusammenzählen oder muss da ne 8 stehen?
Oder doch das Empfangsregister die zwei Bytes zu einem WORD verbinden?

(Bei ByteCount steht im DebugMode ne 2 drin)


----------



## Mobi (17 Juni 2011)

Also.

StartingAddress: WORD#16#8001
QuantityOfRegisters: UINT#4

Bei ByteCount müsste er 8 anzeigen.

In MB_Empfangsregister[1] steht der erste Wert,
in MB_Empfangsregister[2] der zweite,
in MB_Empfangsregister[3] der dritte und
in MB_Empfangsregister[4] der vierte.


Nicht vergessen MB_Empfangsregister als COM_ARR_W_1_125 deklarieren! Kein Struct.


----------



## valik.vak (17 Juni 2011)

Danke, ich glaub das hab ich jetzt kapiert!

Aber wie verbinde ich jetzt diese zwei BYTEs zu einem Wert mit dem ich weiterarbeiten kann? (soll ja die Spannungswerte mit vorgegebenen Werten vergleichen um verschiedene Lichtstufen zu schalten - je höher die Spannung um so mehr Lampen müssen geschaltet werden)

Muss ja jetzt nicht unbedingt WORD sein, oder?


----------



## Mobi (17 Juni 2011)

Das Array basiert auf Words, d.h. du musst nur WORD_TO_REAL machen.
Also MB_Empfangsregister[1] -> WORD_TO_REAL. Mit Bytes arbeitest du bei den anderen Bausteinen. Hier liest du ja die Register aus und ein Register hat eine Größe von einem WORD. Wir wollen 4 Register auslesen. Deswegen auch 4x MB_Empfangsregister. Also ohne .X0 und so.


----------



## valik.vak (17 Juni 2011)

Das war eine schwere Geburt...
Aber jetzt funktionierts

DANKE!!!


----------



## Mobi (17 Juni 2011)

Kannste mal einen Screenshot schicken im Debugmode? Würde das gerne auch mal sehen.


----------



## valik.vak (17 Juni 2011)

Als Spannung hängt da grad ne 9V Blockbatterie dran


----------



## Mobi (17 Juni 2011)

Super. Er zeigt ja 26720 an, also knappe 9V. Aber die Variable "AnalogerEingang1" brauchst du nicht. Du kannst den WORD_TO_REAL auch direkt an dem MB_Empfangsregister[1] ranhängen.
So dann musst du nur noch den REAL-Wert durch 3000 teilen, dann haste deine Volt.


----------



## valik.vak (17 Juni 2011)

warum gerade durch 3000?


----------



## Mobi (17 Juni 2011)

Siehe Datenblatt -> Messwertdarstellung:

30000 = 10V

also sind

3000 = 1V

Das heißt du musst es durch 3000 teilen.

Denn:
3000 : 3000 = 1
30000 : 3000 = 10
26720 : 3000 = 8,907


----------



## valik.vak (17 Juni 2011)

Da hätte ich selbst drauf kommen können...
Naja, trotzdem Danke!


----------

