Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

CDPStudio MQTT

CDPStudio MQTT Broker Setup

To set up CDPStudio as an MQTT Broker, the MQTTBroker module must be added to the program.

Then, after opening the module and navigating to the table editor, the "ListenAddress" and "ListenPort" properties must be set. The IP should be set to the IPv4 address of the Ethernet Adapter that is used to connect to the PLC, while the port should be set to 1883. The IPv4 address can be found by opening the windows command window and typing the command "ipconfig".

Here, the IPv4 address is 158.37.139.100 which is what will be used.

Now the MQTTBroker setup is finished.


CDPStudio MQTT Client Setup

To publish and subscribe, we also need a client. The MQTTClient module must be added to the program. Then, in the table editor, the properties "BrokerHost" and "BrokerPort" must be set to the MQTTBroker's properties.

Adding a Publisher/Subscriber

To add a publisher or subscriber, the modules "PublishTopic<datatype>" and "SubscriberTopic<datatype>" must be added to the MQTTClient. These modules are only found when the MQTTClient is selected, and can be found under the submenus "PublishTopic" and "SubscribeTopic":

After adding either, the topic must be set.


CODESYS MQTT Setup

WAGO MQTT Setup

Setting up a WAGO PFC200 PLC requires some configuration.

  1. Open the PLC's web server by entering its IP in a web browser and log in.
  2. Press "Configuration" in the menu bar.
  3. In the left menu, press "Cloud Connectivity".
  4. Press "Connection 1".
  5. Check Enabled.
  6. Set "Cloud Platform" to "MQTT AnyCloud".
  7. Set "Hostname" to the CDPStudio MQTTBroker's IP Address
  8. Set "Port Number" to the chosen port (1883).
  9. Set "Client ID" to a recognizable name such as "Wago".
  10. Set "Data Protocol" to "Native MQTT".
  11. Press "Submit".
  12. Press "Reboot" in the top right corner

The Wago is now configured to send MQTT data to the broker correctly.


CODESYS Creating a Publisher

To use MQTT with CODESYS, the WagoAppCloud library must be imported to the project. This can be done by:

  1. Press "Library Manager" in the current project.
  2. Press "Add Library".
  3. Expand "Application".
  4. Select "WagoAppCloud"
  5. Press OK.

A function block can then be created to simplify the use of the library:

Code Source: https://www.youtube.com/watch?v=UnhG15JFjao&t=822s&ab_channel=JugaadTech

This block can simply be added in a program like this:

Whenever the trigger gets a rising edge, it will publish the message to the broker.


CODESYS Creating a Subscriber


MQTT "/status" Topic Overview (1 topic)

/statusbool
PLC

Should be published at the start of every update so CDP can detect loss of connection. Value should always be 1.

MQTT "/settings" Topic Overview (32 topics)

TopicDatatypeTypical ValuesPublisherDescription
/settings/system/flowtimefloat600-1320CDPStudioHow long the keep the system in flow state in hours.
/settings/system/ebbtimefloat60-240CDPStudioHow long the keep the system in ebb state inhours.
/settings/system/flowtimefloat600-1320CDPStudioHow long the keep the system in flow state in hours.
/settings/system/ebbtimefloat60-240CDPStudioHow long the keep the system in ebb state inhours.
/settings/ebbflow/autobool1 or 0CDPStudio

Whether ebb and flow is controlled automatically (1) or manually (0)

/settings/ph/targetfloat5.8-6.0CDPStudioTarget PH value
/settings/ph/maxfloat6.0-6.2CDPStudioMaximum allowed PH value before system regulates
/settings/ph/minfloat5.6-5.8CDPStudioMinimum allowed PH value before system regulates
/settings/ph/autobool0 or 1CDPStudioWhether PH is controlled automatically (1) or manually (0)
/settings/ec/targetfloat11-12CDPStudioTarget EC value
/settings/ec/maxfloat12-12.5CDPStudioMaximum allowed EC value before system regulates
/settings/ec/minfloat11.5-12CDPStudioMinimum allowed EC value before system regulates
/settings/ec/autobool0 or 1CDPStudioWhether EC is controlled automatically (1) or manually (0)
/settings/air/temp/targetfloat20.5-21.5CDPStudioTarget air temperature
/settings/air/temp/maxfloat21.5-22CDPStudioMaximum allowed air temperature system regulates
/settings/air/temp/minfloat20-20.5CDPStudioMinimum allowed air temperature before system regulates
/settings/air/temp/autobool0 or 1CDPStudioWhether air temperature is controlled automatically (1) or manually (0)
/settings/air/humidity/targetfloat65-75CDPStudioTarget humidity%
/settings/air/humidity/maxfloat75-80CDPStudioMaximum allowed humidity% before system regulates
/settings/air/humidity/minfloat60-65CDPStudioMinimum allowed humidity% before system regulates
/settings/air/humidity/autobool0 or 1CDPStudioWhether EC is controlled automatically (1) or manually (0)
/settings/air/co2/targetfloat1000-2000CDPStudioTarget CO2 ppm
/settings/air/co2/maxfloat2500-3000CDPStudioMaximum allowed CO2 ppm before system regulates
/settings/air/co2/minfloat500-1000CDPStudioMinimum allowed CO2 ppm before system regulates
/settings/air/co2/autobool0-1CDPStudioWhether air co2 ppm is controlled automatically (1) or manually (0)
/settings/light/light1/timeonstring960-1320CDPStudioHow long to keep light 1 on. Convert to time in CODESYS with STRING_TO_TIME()
/settings/light/light1/timeoffstring120-480CDPStudio

How long to keep light 1 off. Convert to time in CODESYS with STRING_TO_TIME()

/settings/light/light1/timeon

string


960-1320CDPStudioHow long to keep light 2 on. Convert to time in CODESYS with STRING_TO_TIME()
/settings/light/light1/timeoffstring120-480CDPStudio

How long to keep light 2 off. Convert to time in CODESYS with STRING_TO_TIME()

/settings/light/autobool0 or 1CDPStudio

Whether lights are controlled automatically (1) or manually (0)

/settings/valve/exercise/statebool0 or 1CDPStudio

Whether valves should be exercised to avoid debris buildup and relubricate (1) or not (0)

/settings/valve/exercise/timefloat0 or 1CDPStudio

Time interval of how often to exercise the valves given in hours


MQTT "/override" Topic Overview (13 topics)

TopicDatatypeTypical RangePublisherDescription
/override/valve/tank1/ebbint0, 1, 2CDPStudioOverrides the tank 1 drain/ebb valve. 0 = Off, 1 = On, 2 = Auto.
/override/valve/tank1/flowint0, 1, 2CDPStudioOverrides the tank 1 fill/flow valve. 0 = Off, 1 = On, 2 = Auto.
/override/valve/tank2/ebbint0, 1, 2CDPStudioOverrides the tank 2 drain/ebb valve. 0 = Off, 1 = On, 2 = Auto.
/override/valve/tank2/flowint0, 1, 2CDPStudioOverrides the tank 1 fill/flow valve. 0 = Off, 1 = On, 2 = Auto.
/override/valve/threewayint0, 1, 2CDPStudioOverrides the three-way valve. 0 = Off, 1 = On, 2 = Auto.
/override/light1int0, 1, 2CDPStudioOverrides the light 1. 0 = Off, 1 = On, 2 = Auto.
/override/light1int0, 1, 2CDPStudioOverrides the light 2. 0 = Off, 1 = On, 2 = Auto.
/override/tank1/startebbbool0, 1CDPStudioSends a pulse to initiate the ebb process for tank 1
/override/tank1/startflowbool0, 1CDPStudioSends a pulse to initiate the flow process for tank 1
/override/tank2/startebbbool0, 1CDPStudioSends a pulse to initiate the ebb process for tank 2
/override/tank2/startflowbool0, 1CDPStudioSends a pulse to initiate the flow process for tank 2
/override/startprocessbool0, 1CDPStudioSets the process state. Should not be a pulse.

/override/pump

int0, 1, 2 CDPStudioOverrides the pump. 0 = Off, 1 = On, 2 = Auto.

MQTT "/sensor" Topic Overview (6 topics)

TopicDatatypeTypical RangePublisherDescription
/sensor/water/ecfloat
PLCWater EC measurement.
/sensor/water/phfloat
PLCWater PH measurement.
/sensor/water/tempfloat
PLCWater temperature measurement.
/sensor/air/tempfloat
PLCAir temperature measurement.
/sensor/air/humidityfloat
PLCAir humidity measurement.
/sensor/air/co2float
PLCAir CO2 measurement.

MQTT "/system" Topic Overview (8 topics)

TopicDatatypeTypical RangePublisherDescription
/system/light1/statebool
PLCLight state, 0 = off, 1 = on.
/system/light2/statebool
PLCLight state. 0 = off, 1 = on
/system/light1/timeRemainingfloat
PLCTime until light 1 toggles on or off, given in hours.
/system/light2/timeRemainingfloat
PLCTime until light 2 toggles on or off, given in hours.
/system/tank1/statebool0, 1PLC

Tank 1 current state. 0 = ebb, 1 = flow

/system/tank2/statebool0, 1PLC

Tank 2 current state. 0 = ebb, 1 = flow

/system/tank1/timeRemainingbool0, 1PLC

Time remaining of tank 1 state. Given in hours.

/system/tank2/timeRemainingbool0, 1PLC

Time remaining of tank 2 state. Given in hours.