PLC I/O module koppelen aan domoticasoftware

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • estenm
  • Registratie: Januari 2018
  • Laatst online: 02-08-2023
Hoi Femme,

ik ben de laatste dagen je verschillende topics aan het bekijken en wat je allemaal schrijft klinkt heel interessant. Mijn idee voor mijn uitbouw thuis was een Loxone installatie echter word ik nu aan het twijfelen gebracht.

Wat heb ik thuis, Ik heb een uitbouw geplaatst en heb alles in ster aangelegd. Ik kan dus elk stopcontact schakelen, mocht ik dat willen. Verder 4 lichtkringen geplaatst om zo indirect licht, spotjes etc los van elkaar te kunnen bedienen. Dit wil ik graag dimbaar RGB gaan uitvoeren. Ik heb enkele dikke wachtbuizen gelegd waar ik nog voldoende ruimte heb om signaal, ethernet of weet ik welk soort kabel doorheen te trekken.

Wat zou ik dus willen:
- 10-tal schakelbare stopcontacten.
- 4 losse lichtkringen aan/uit/dimmen/kleur wijzigen
- 6 groeps vloerverwarming kunnen sturen per ruimte (2 ruimtes van 3 groepen)
- In toekomst de rolluiken bedienen
- Buitenverlichting bedienen
- Garagepoort uitlezen en adhv de stand bedienen
- Poort uitlezen en bedienen

Zoals ik je topics begrijp zou ik dus bijvoorbeeld:
1. een WAGO PLC kunnen plaatsen
2. enkele WAGO IO modules moet koppelen
3. drukknoppen aan deze WAGO Inputs moet koppelen
4. Output van de WAGO doorzet naar bijvoorbeeld de Input van een Airduino
5.Output van een relais van de Airduino naar de schakelbare stopcontacten.

Wat ik me afvraag is hoe ik de data die binnenkomt op de WAGO input, doorzet naar bijvoorbeeld een Raspberry PI om daar de scrpits te runnen?

Ik heb websites gebouwd met PHP, niet de meest complexe maar data inladen in een DB en uitlezen uit de DB lukt me wel. Ook heb ik enkele Shell scrpits gemaakt op kantoor voor het monitoren van diensten. Delphi, dus Pascal, kan ik ook mee uit de voeten. Zou ik met deze achtergrond een basis hebben om iets op te zetten?

Mvg,
Marcel

Alle reacties


Acties:
  • +1 Henk 'm!

  • Femme
  • Registratie: Juni 1999
  • Laatst online: 20:27

Femme

Hardwareconnaisseur

Official Jony Ive fan

@estenm ik heb je vraag naar een eigen topic verhuist aangezien de vraag niet helemaal vergelijkbaar is met het oorspronkelijke topic.

Als je kiest voor Loxone dan heb je een systeem waar meteen veel ingebouwde functionaliteit in zit. Als je niet teveel tijd wil besteden aan het zelf bouwen van functionaliteit is Loxone een goede keuze.

De makkelijkste manier om een Wago plc te koppelen aan domoticasoftware is via het modbus-protocol. Ik gebruik zelf IP-Symcon als domoticasoftware en daarmee kun je eenvoudig apparaten integreren die via modbus communiceren. Home Assistant heeft helaas minder goede ondersteuning voor modbus.

Modbus is een protocol dat al sinds eind jaren '70 gebruikt wordt voor industriële automatisering. Het is een master/slave protocol waarbij de master (je domoticasoftware) registers van een slave device kan uitlezen of beschrijven. Om de status van een drukknop uit te kunnen lezen moet de master met een hoge frequentie de betreffende registers van de slave uitlezen. Om een relais te bedienen stuurt de master een commando naar de slave om de waarde van een coil te wijzigen.

Een modernere oplossing is om het MQTT-protocol te gebruiken. Dat is een publish-subscribe messaging protocol waarmee je de PLC en de domoticaserver over en weer berichten kunnen publishen en op elkaars berichten kunnen subscriben. Er hoeft dan alleen maar een bericht gestuurd te worden als er daadwerkelijk iets veranderd (een knop wordt ingedrukt of er beweging wordt gedetecteerd). Home Assistant heeft goede ondersteuning voor MQTT.

Met deze library voor CoDeSys (de programmeeromgeving van o.a. Wago-plc's) kun je een Wago-plc MQTT berichten laten publishen.

Ik heb geen ervaring met hoe je logica programmeert in Home Assistant. Ik gebruik IP-Symcon die PHP als scripttaal gebruikt en daar allerlei eigen commando's aan heeft toegevoegd. Je kunt simpelweg scriptjes maken om dingen te doen. Nog mooier is om functionaliteit in modules te stoppen die je makkelijk kunt hergebruiken, dat kost echter wel wat meer werk. Ik zou alleen maar met IP-Symcon aan de slag gaan als je het programmeren leuk vindt.

In het geval van een plc (dus een programmable logic controller) heb je ook de mogelijkheid om de plc zelf te programmeren. Persoonlijk geeft ik de voorkeur aan smarthomesoftware op een Raspberry Pi of iets vergelijkbaars, aangezien je dan makkelijker allerlei verschillende hardware kunt integreren en een mooi app kunt inrichten. Dat is lastiger te realiseren p een plc.

[ Voor 7% gewijzigd door Femme op 03-01-2018 10:46 ]


Acties:
  • 0 Henk 'm!

  • estenm
  • Registratie: Januari 2018
  • Laatst online: 02-08-2023
Bedankt Femme,

al is me nog steeds niet duidelijk hoe de communicatie precies in zijn werk gaat. Wordt het binnengekomen signaal nu door de PLC via ModBus gezet en door de Raspbberry opgepikt waarna hier het shell script zijn werk kan doen. Vervolgens plaats je vanuit het script weer een signaal via Modbus richting PLC om een bepaalde output aan te sturen?

Ik heb de vraag overigens initieel aan Femme gestuurd maar iedereen staat natuurlijk vrij om te antwoorden

Acties:
  • 0 Henk 'm!

  • Femme
  • Registratie: Juni 1999
  • Laatst online: 20:27

Femme

Hardwareconnaisseur

Official Jony Ive fan

estenm schreef op woensdag 3 januari 2018 @ 17:39:
Bedankt Femme,

al is me nog steeds niet duidelijk hoe de communicatie precies in zijn werk gaat. Wordt het binnengekomen signaal nu door de PLC via ModBus gezet en door de Raspbberry opgepikt waarna hier het shell script zijn werk kan doen. Vervolgens plaats je vanuit het script weer een signaal via Modbus richting PLC om een bepaalde output aan te sturen?

Ik heb de vraag overigens initieel aan Femme gestuurd maar iedereen staat natuurlijk vrij om te antwoorden.
Als je modbus gebruikt is het logisch om de PLC of I/O module als slave te laten werken.

De domoticasoftware op de Raspberry Pi stuurt dan modbuscommando's naar de PLC om een register uit te lezen of te beschrijven en de PLC beantwoord met de gewenste gegevens.

Ik weet niet hoe Home Assistant en OpenHab ermee omgaan maar in IP-Symcon werk je met modbusinstanties die een statusvariabele hebben en die variabele bevat de waarde van een register, zodat je daar iets mee kunt doen (bijv. een script uitvoeren als de variabele verandert of een bepaalde waarde aanneemt). In het geval van IP-Symcon beheer je scripts en andere objecten (zoals variabelen en categoriën om objecten in te delen) via een grafische beheeromgeving.

Acties:
  • 0 Henk 'm!

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 21:10
Als je het makkelijker wilt hebben, kan je een wago module gebruiken die een ingebouwde OPC-UA Server heeft. Dit is nu een open standaard waar de OPC Foundation in een boel talen de cliënt/server implementaties op Github heeft staan.

Modbus is een protocol dat veel werd gebruikt in communicatie met PLC's, maar dit is tegenwoordig niet meer de eerste keuze. Dat is nu OPC-UA.

Node-RED heeft bijvoorbeeld standaard een OPC-UA cliënt.

LinkedIn - Collega worden?


Acties:
  • 0 Henk 'm!

  • estenm
  • Registratie: Januari 2018
  • Laatst online: 02-08-2023
Bedankt weer voor jullie antwoorden. Ik zal mij eens gaan verdiepen in OPC-UA. Had er nog nooit van gehoord.

Aangezien ik niet thuis ben in al deze materie lijkt het me wellicht verstandiger om voor Loxone te kiezen maar voor ik deze keuze neem wil ik wel zeker zijn dat het de juiste is voor mij.

Acties:
  • 0 Henk 'm!

  • nrtmgn
  • Registratie: Augustus 2018
  • Laatst online: 04-02 16:59
Hoi @Femme heb denk ik wel een beetje alles gelezen op tweakers. Leuk. Ben bezig met een test opstelling maar krijg de mapping van de IO van wago plc (PFC200) naar modbus slave niet voor elkaar... 8)7 8)7

Heb jij misschien een paar screenshot of uitleg hoe dat bij jou zit? Ik heb ook een demo draaien van IPS5.

Dank!

Acties:
  • 0 Henk 'm!

  • wolly_a
  • Registratie: September 2002
  • Niet online
Modbus wordt nog altijd veel gebruikt hoor. OPC klinkt leuk, maar is nog altijd een waanzinnige opgave om goed aan de gang te krijgen als je met veel partijen wil communiceren.

Misschien zijn de remote io modules van ICPDAS (www.icpdas.com) iets voor je doel. Zij hebben een breed scala aan modules, waaronder ethernet, wifi en ook MQTT. De ethernet modules hebben ingebouwde webinterface, dus het lijkt me niet zo moeilijk om daar met een scriptje wat uit te peuteren. Aangezien de modules voor industriële toepassingen bedoeld zijn, hebben ze ook betere eigenschappen dan een Arduino... Je hebt ook modules met relais die tot 5A kunnen schakelen. Daarmee kun je waarschijnlijk al veel schakelen zondere verdere benodigdheden.

Daarnaast zijn deze modules misschien mooier dan een PLC met I/O, omdat je in een domoticasysteem overal in huis dingen wil. Met een PLC moet je van een centraal punt overal kabels naartoe trekken. Met dit soort modules zou je bepaalde dingen lokaal op de plek kunnen doen.

[ Voor 15% gewijzigd door wolly_a op 03-08-2018 21:50 ]


Acties:
  • +1 Henk 'm!

  • Femme
  • Registratie: Juni 1999
  • Laatst online: 20:27

Femme

Hardwareconnaisseur

Official Jony Ive fan

nrtmgn schreef op vrijdag 3 augustus 2018 @ 21:29:
Hoi @Femme heb denk ik wel een beetje alles gelezen op tweakers. Leuk. Ben bezig met een test opstelling maar krijg de mapping van de IO van wago plc (PFC200) naar modbus slave niet voor elkaar... 8)7 8)7

Heb jij misschien een paar screenshot of uitleg hoe dat bij jou zit? Ik heb ook een demo draaien van IPS5.

Dank!
Ik zal thuis even een Windows-systeem moeten aanslingeren om te achterhalen hoe de configuratie in CoDeSys ook alweer in elkaar steekt. Ik doe er niets mee.

Wat ik me kan herinneren: je moet per module (of in/uitgang?) vrijgeven dat ie toegankelijk is via modbus. De digitale inputs beginnen op modbus-adres 0 en de digitale outputs op 512. In IP-Symcon maak je een modbus-instantie aan met functiecode '02 read discrete input' voor de inputs en 'read coils ' / 'write single coils' voor de digitale outputs.
wolly_a schreef op vrijdag 3 augustus 2018 @ 21:48:
Modbus wordt nog altijd veel gebruikt hoor. OPC klinkt leuk, maar is nog altijd een waanzinnige opgave om goed aan de gang te krijgen als je met veel partijen wil communiceren.

Misschien zijn de remote io modules van ICPDAS (www.icpdas.com) iets voor je doel. Zij hebben een breed scala aan modules, waaronder ethernet, wifi en ook MQTT. De ethernet modules hebben ingebouwde webinterface, dus het lijkt me niet zo moeilijk om daar met een scriptje wat uit te peuteren. Aangezien de modules voor industriële toepassingen bedoeld zijn, hebben ze ook betere eigenschappen dan een Arduino... Je hebt ook modules met relais die tot 5A kunnen schakelen. Daarmee kun je waarschijnlijk al veel schakelen zondere verdere benodigdheden.

Daarnaast zijn deze modules misschien mooier dan een PLC met I/O, omdat je in een domoticasysteem overal in huis dingen wil. Met een PLC moet je van een centraal punt overal kabels naartoe trekken. Met dit soort modules zou je bepaalde dingen lokaal op de plek kunnen doen.
Modbus is prima voor het aansturen van digitale outputs of relais en er is allerlei dirt cheap hardwar voor, zoals de Chinese modbus-modules van Lollette met 16 inputs en 16 relais voor 60 dollar. Modbus heeft wel beperkingen omdat het een master/slave-protocol is waarbij requests altijd door de master worden geïnitieerd. De master is doorgaans het systeem hoger in de hiërarchie, bijvoorbeeld een domoticacontroller. Om de state van een drukknop uit te lezen moet je heel snel pollen. Mooier is tweeweg communicatie waarbij de I/O-module aan het hoger gelegen systeem kan vertellen dat de state van een input is gewijzigd.

De modules van ICPDas zijn best wel duur (380 dollar voor 8 inputs en 8 outputs). Ik zou dan eerder kijken naar de ethernetversie van de Railduino. Voor 200 euro heb je 24 inputs, 12 relaisuitgangen, 8 digitale outputs, 2x analoog in en uit en een basic 1-wire interface voor vijf sensoren. De Railduino heeft een eigen simpel UDP-protocol voor tweeweg communicatie (die je wel even zelf moet implementeren in je domotica-software, voor Loxone is er sample code).

Acties:
  • 0 Henk 'm!

  • wolly_a
  • Registratie: September 2002
  • Niet online
Femme schreef op maandag 13 augustus 2018 @ 15:15:

Modbus is prima voor het aansturen van digitale outputs of relais en er is allerlei dirt cheap hardwar voor, zoals de Chinese modbus-modules van Lollette met 16 inputs en 16 relais voor 60 dollar. Modbus heeft wel beperkingen omdat het een master/slave-protocol is waarbij requests altijd door de master worden geïnitieerd. De master is doorgaans het systeem hoger in de hiërarchie, bijvoorbeeld een domoticacontroller. Om de state van een drukknop uit te lezen moet je heel snel pollen. Mooier is tweeweg communicatie waarbij de I/O-module aan het hoger gelegen systeem kan vertellen dat de state van een input is gewijzigd.

De modules van ICPDas zijn best wel duur (380 dollar voor 8 inputs en 8 outputs). Ik zou dan eerder kijken naar de ethernetversie van de Railduino. Voor 200 euro heb je 24 inputs, 12 relaisuitgangen, 8 digitale outputs, 2x analoog in en uit en een basic 1-wire interface voor vijf sensoren. De Railduino heeft een eigen simpel UDP-protocol voor tweeweg communicatie (die je wel even zelf moet implementeren in je domotica-software, voor Loxone is er sample code).
Modbus is inderdaad master/slave, maar in het geval van een domoticasysteem heb je ook een duidelijke master. Ik snap je verhaal over polling, dat is de keerzijde van Modbus. Voor deurcontacten enzo is het wat minder geschikt, omdat je dan best vaak moet pollen. De modules zijn overigens niet zo duur als je aangeeft. Het ligt een beetje aan de I/O die je wil hebben, maar je hebt ze al vanaf een 125-150 euro.

Mag ik ook de Industruino als suggestie geven. Beetje gelijk aan de Railduino, maar wat professioneler opgebouwd, lijkt mij.

Acties:
  • 0 Henk 'm!

  • Patrick_v_L
  • Registratie: Juli 2015
  • Laatst online: 04-06 21:44
nrtmgn schreef op vrijdag 3 augustus 2018 @ 21:29:
Hoi @Femme heb denk ik wel een beetje alles gelezen op tweakers. Leuk. Ben bezig met een test opstelling maar krijg de mapping van de IO van wago plc (PFC200) naar modbus slave niet voor elkaar... 8)7 8)7

Heb jij misschien een paar screenshot of uitleg hoe dat bij jou zit? Ik heb ook een demo draaien van IPS5.

Dank!
Volgens mij zitten wij in dezelfde zoektocht!
I/O modules not directly accessible via MODBUS.
Direct access to the process image of the I/O modules via MODBUS is not possible. Only the PFC variables and flags are accessible via MODBUS. Using a corresponding PLC program, data points of the I/O module can be assigned to the MODBUS area.
Zoals ik het lees, moet de applicatie in de PLC aangeven wat hij moet doen met een register waarde.
Zet IP-Symcon veld X op 1, dan zegt de PLC dankjewel en voert zelf een actie uit n.a.v. de change.

Al bij al, van het weekend verder met uitvogelen of dit zo is 8)7 maar misschien ben jij al verder qua info?!

Acties:
  • 0 Henk 'm!

  • nrtmgn
  • Registratie: Augustus 2018
  • Laatst online: 04-02 16:59
@Patrick_v_L nog niet heel veel verder. beetje gebrek aan tijd voor het moment. Had het al wel voor elkaar om de 'interne' bus te koppelen aan de modbus voor uitlezen en beschikbaar stellen. Het koppelen van IPS via ethernet is nog niet gelukt. Geen idee welke adressen ik moet gebruiken...

Acties:
  • 0 Henk 'm!

  • nrtmgn
  • Registratie: Augustus 2018
  • Laatst online: 04-02 16:59
Ha Femme, super. Had de reactie nog niet gezien! Zou mooi zijn om de screenshots nog eens te zien Thanks,
Femme schreef op maandag 13 augustus 2018 @ 15:15:
[...]


Ik zal thuis even een Windows-systeem moeten aanslingeren om te achterhalen hoe de configuratie in CoDeSys ook alweer in elkaar steekt. Ik doe er niets mee.

Wat ik me kan herinneren: je moet per module (of in/uitgang?) vrijgeven dat ie toegankelijk is via modbus. De digitale inputs beginnen op modbus-adres 0 en de digitale outputs op 512. In IP-Symcon maak je een modbus-instantie aan met functiecode '02 read discrete input' voor de inputs en 'read coils ' / 'write single coils' voor de digitale outputs.


[...]


Modbus is prima voor het aansturen van digitale outputs of relais en er is allerlei dirt cheap hardwar voor, zoals de Chinese modbus-modules van Lollette met 16 inputs en 16 relais voor 60 dollar. Modbus heeft wel beperkingen omdat het een master/slave-protocol is waarbij requests altijd door de master worden geïnitieerd. De master is doorgaans het systeem hoger in de hiërarchie, bijvoorbeeld een domoticacontroller. Om de state van een drukknop uit te lezen moet je heel snel pollen. Mooier is tweeweg communicatie waarbij de I/O-module aan het hoger gelegen systeem kan vertellen dat de state van een input is gewijzigd.

De modules van ICPDas zijn best wel duur (380 dollar voor 8 inputs en 8 outputs). Ik zou dan eerder kijken naar de ethernetversie van de Railduino. Voor 200 euro heb je 24 inputs, 12 relaisuitgangen, 8 digitale outputs, 2x analoog in en uit en een basic 1-wire interface voor vijf sensoren. De Railduino heeft een eigen simpel UDP-protocol voor tweeweg communicatie (die je wel even zelf moet implementeren in je domotica-software, voor Loxone is er sample code).

Acties:
  • 0 Henk 'm!

  • nrtmgn
  • Registratie: Augustus 2018
  • Laatst online: 04-02 16:59
Ben jij nog verder gekomen?
Patrick_v_L schreef op vrijdag 24 augustus 2018 @ 16:28:
[...]


Volgens mij zitten wij in dezelfde zoektocht!


[...]


Zoals ik het lees, moet de applicatie in de PLC aangeven wat hij moet doen met een register waarde.
Zet IP-Symcon veld X op 1, dan zegt de PLC dankjewel en voert zelf een actie uit n.a.v. de change.

Al bij al, van het weekend verder met uitvogelen of dit zo is 8)7 maar misschien ben jij al verder qua info?!

  • Patrick_v_L
  • Registratie: Juli 2015
  • Laatst online: 04-06 21:44
nrtmgn schreef op woensdag 5 september 2018 @ 16:00:
Ben jij nog verder gekomen?


[...]
Momenteel staat het iets stil, nieuw leerjaar, dus de docent moet weer even inkomen ;-)

Al bij al;

Heb nu een PFC200 die ik via IPS kan aansturen en uitlezen.
Ik heb 1000 register waardes welke ik kan uitlezen (IPS leest / WAGO schrijft) en 1000 register waardes welke ik kan beschrijven ( IPS Schrijft / WAGO leest )

Nu zit ik in een zoektocht om alles via UDP packages te doen, maar er is zo weinig info over dat ik neig naar MQTT.

Acties:
  • +1 Henk 'm!

  • THM0
  • Registratie: Juli 2006
  • Laatst online: 20:47
@nrtmgn

Ik ben ook bezig met een WAGO Modbus Slave over TCP. Heb het nu in de basis werkend (dwz ik kan een output via Modbus aan/uitzetten).
MyDO0 heb ik de device explorer in e!Cockpit geconfigureerd (variabele naam gegeven en Modbus-accessible gemaakt). Applicatie luistert op poort 2000, en je kunt met functioncode 5 (write single coil) registers 0-3 zetten.
Moet nog wel wat bij qua functionaliteit (zeg maar de andere Modbus functioncodes programmeren) maar dit helpt wellicht al.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PROGRAM PLC_PRG
VAR
    MyModBusSlave : WagoAppPlcModbus.FbMbSimpleServerTcp := (   xOpen   :=  TRUE,
                                                                wPort   :=  2000,
                                                                utKeepAlive := (    xEnable         :=  TRUE,
                                                                tMaxIdleTime    :=  T#5S,
                                                                tInterval       :=  T#2S,
                                                                udiProbes       :=  5
                                                ),
                                                bUnitId :=  2
                                            );
        
    myDiscreteInputs : ARRAY[0..27] OF BOOL; // Modbus bit address 0 ..27 for Digital Inputs
    myCoils : ARRAY[0..31] OF BOOL; // Modbus bit address 0 ..31 for Digital Outputs
    myInputRegisters : ARRAY[100..200] OF WORD; // Modbus word address 100 ..200
    myHoldingRegisters : ARRAY[0..20] OF WORD; // Modbus word address 0..20

    
    MB_DO0: BYTE;
    MB_DO1: BYTE;
    MB_DI0: BYTE;
    MB_DI1: BYTE;
END_VAR



code:
1
2
3
4
5
6
7
8
9
10
11
MyModbusSlave(
        axDiscreteInputs    :=  myDiscreteInputs,
        axCoils             :=  myCoils,
        awInputRegisters    :=  myInputRegisters,
        awHoldingRegisters  :=  myHoldingRegisters
    );

MyDO0.0 :=  myCoils[0];
MyDO0.1 :=  myCoils[1];
MyDO0.2 :=  myCoils[2];
MyDO0.3 :=  myCoils[3];
Pagina: 1