Requirements overview
This chapter mainly implements a process: EG8200 collects data from Siemens S7-200 Smart, assembles it into JSON format, and reports it to the application platform through MQTT; at the same time, it can receive control commands issued by the application platform to realize remote switching. To implement this process, the following materials need to be prepared in advance:
-
The IP port and point table of the PLC to be collected, for example:
PLC |
S7-200 Smart |
||
IP |
192.168.0.24/102 |
||
Point table (DB1) |
|||
address |
type of data |
Attributes |
name |
V0.0 |
Boolean |
read only |
No. 1 motor start and stop status |
V0.1 |
Boolean |
read only |
No. 2 motor start and stop status |
V0.2 |
Boolean |
read only |
No. 3 motor start and stop status |
V0.3 |
Boolean |
read only |
No. 4 motor start and stop status |
V0.4 |
Boolean |
Read and write |
No. 1 motor start and stop control |
V0.5 |
Boolean |
Read and write |
No. 2 motor start and stop control |
V0.6 |
Boolean |
Read and write |
No. 3 motor start and stop control |
V0.7 |
Boolean |
Read and write |
No. 4 motor start and stop control |
VD100 |
Unsigned16 |
read only |
Voltage (V) |
VD200 |
Unsigned16 |
read only |
Current (A) |
-
MQTT communication related parameters and JSON data format requirements, such as:
url:1883.dtuip.com:1883clientID:820000003058164Fusername:19381903226password:ZHZK19381903226Subscribe:820000003058164F/ Publish:820000003058164FJSON format:{ "sensorDatas": [ { "fla g":"em1Status", "switcher":1 }, { "flag" :"em2Status", "switcher":1 }, { "flag":"em3Status", "switcher":1 }, { "flag":"em4Status", "switcher":1 }, { "flag":" em1Control", "switcher":0 }, { "flag":"em2Control", "switcher":0 }, { "flag":"em3Control", "switcher":0 }, { "flag":"em4Control" , "switcher":0 }, { "flag":"voltage", "value":220.0 }, { "flag":"current", "value":10.2 } ]}
demand analysis
When making a process, the basic logic is to make the process based on the data trend . After analysis, it can be concluded that this demand is mainly divided into two parts: data uplink and data downlink. Among them, the main tasks of data uplink include:
-
Read PLC data through the S7 protocol, and the obtained data is stored in the memory (
S7节点
) -
Format data according to JSON format (
函数节点
) -
Establish an MQTT connection and publish to the specified topic (
MQTT发布节点
)
The main tasks of data downlink include:
-
Subscribe to MQTT topics and receive data sent by the platform (
MQTT订阅节点
) -
Parse the received JSON data and store it in memory (
函数节点
) -
Запись в ПЛК в формате, требуемом S7 (
S7节点
)
Реализация требований
1. Сбор данных ПЛК
-
Перетащите
S7读数据节点
и调试节点
из библиотеки узлов .调试节点
используется для просмотра считанных данных ПЛК, чтобы облегчить поиск проблемы.
-
Дважды щелкните .
S7读数据节点
и заполните соответствующие параметры настройки в соответствии с обзором требований, как показано на следующем рисунке:
IP: IP-порт ПЛК: 102 (порт 102 по умолчанию для связи по протоколу S7) Режим: TASP (S7-200 Smart выбирает TASP, другие модели выбирают Rack/Slot) Локальный TSAP: 1002 (фиксированное значение) Удаленный TSAP: 0301 (фиксированное значение) ) Период сбора: 1000 мс (по умолчанию 1000 мс, настраивается) Период тайм-аута: 2000 мс (по умолчанию 2000 мс, настраивается) Конфигурация точки данных (соответствующие отношения можно найти в справочном документе) V0.0-->DB1,X0.0V0.1 -->DB1,X0.1V0.2-->DB1,X0.2V0.3-->DB1,X0.3V0.4-->DB1,X0.4V0.5-->DB1,X0.5V0.6 -->DB1, X0.6V0.7-->DB1,
Если настройки верны, в окне отладки будет выведен журнал, показывающий содержание считанных данных.
-
Иногда имеется множество точек данных ПЛК, и вводить их вручную по одной очень обременительно. Узлы поддерживают импорт и экспорт точек данных:
2. Форматирование данных
В соответствии с указаниями шага 2 в окне отладки можно увидеть считанные данные ПЛК следующим образом:
Поскольку платформа приложения предусматривает, что данные должны быть представлены в формате JSON. Далее используйте 函数节点
Javascript-код для форматирования данных. Код выглядит следующим образом:
let jsonArray = []jsonArray.push({ "flag": "em1Status", "switcher": msg.payload.em1Status == true ? 1 : 0 })jsonArray.push({ "flag": "em2Status", "switcher": msg.payload.em2Status == true ? 1 : 0 })jsonArray.push({ "flag": "em3Status", "switcher": msg.payload.em3Status == true ? 1 : 0 })jsonArray.push({ "flag": "em4Status", "switcher": msg.payload.em4Status == true ? 1 : 0 })jsonArray.push({ "flag": "em1Control", "switcher": msg.payload.em1Control == true ? 1 : 0 })jsonArray.push({ "flag": "em2Control", "switcher": msg.payload.em2Control == true ? 1 : 0 })jsonArray.push({ "flag": "em3Control", "switcher": msg.payload.em3Control == true ? 1 : 0 })jsonArray.push({ "flag": "em4Control", "switcher": msg.payload.em4Control == true ? 1 : 0 })jsonArray.push({ "flag": "voltage", "value": msg.payload.voltage / 100 })/*два десятичных знака*/jsonArray.push({ "flag": "current", " value": msg.payload.current / 100 })/*два десятичных знака*/let data = {}data.sensorDatas = jsonArraymsg.payload = JSON.stringify(data)return msg
Скопируйте приведенный выше код и вставьте его в узел функции. Вы можете увидеть эффект после развертывания:
Видно, что считанные данные PLC были преобразованы в конечный формат JSON в соответствии с требованиями, и данные были вычислены с определенной степенью точности (два знака после запятой).Это лишь вершина айсберга функциональных узлов. Поскольку он поддерживает программирование на языке Javascript, здесь может быть реализована практически любая функция, которую вы только можете придумать.
3. Предоставление данных через MQTT
Перетащите MQTT发布节点
Настройте его в соответствии с подсказками, заполните информацию о соединении MQTT и теме публикации MQTT (подробнее см. обзор требований), и вы сможете реализовать отчетность по данным. Видно, что после успешной передачи данных платформа приложения отображается зеленым цветом, указывая на то, что устройство находится в режиме онлайн и данные поступают нормально:
На этом этапе составление отчета о данных завершено и может быть выполнено в несколько простых шагов: сбор данных ПЛК и составление отчета в пользовательском формате JSON.
4. Получение данных через MQTT
Перетащите MQTT订阅节点
. Примечание: MQTT发布节点
и MQTT订阅节点
могут совместно использовать MQTT-соединение. Если используется одно и то же соединение, но для другой темы, перетащите узел и выберите настроенное соединение.Если вы решили добавить новый узел mqtt-broker, это означает создание нового MQTT-соединения.
Выберите узел отладки и нажмите кнопку управления на платформе. В окне отладки можно увидеть выданные инструкции:
5.Данные анализ
Согласно справочный документ S7写数据
Узел, вы можете знать, что для записи данных в ПЛК, данные, которые должны быть переданы, содержат два параметра, как показано ниже:
Поэтому при разборе данных данные, отправленные платформой приложения, должны быть преобразованы в сообщение, содержащее две переменные, payload
и variable
, и передается в S7写数据节点
. Код функционального узла выглядит следующим образом:
let cmdDate = msg.payloadmsg.variable = cmdDate.sensorDatas[0].flagmsg.payload = cmdDate.sensorDatas[0].switcher == 1 ? true : falseeturn msg
Скопируйте приведенный выше код, вставьте его в узел функции и установите узел отладки для вывода исходного сообщения. Вы можете увидеть выведенное содержимое следующим образом:
Вы видите, что данные были преобразованы в формат, требуемый узлом записи данных S7.
6.Писать к ПЛК
Перетащите S7写数据
узел, соединить 函数计算
узел, управляйте переключателем на платформе приложения и наблюдайте демонстрационный эффект:
Подведите итоги
В этой главе представлен относительно сложный процесс, целью которого является описание возможностей шлюза. Поэтому она не оптимизирует безопасность, стабильность, гибкость и т. д. программы. Поняв этот процесс, вы, я полагаю, уже знакомы с визуальным программированием шлюза. Next, learn the function usage of each node in depth. Mastering them will provide you with more choices and possibilities for making more complex processes!
Source code
All processes support import and export in json format, making it easy to share completed processes with others.The process json file of this chapter is as follows. After copying, select import and paste in the upper right corner of the menu bar. The same goes for exporting.
[{"id":"c8d138cd30e452fc","type":"s7 in","z":"2ff624305b8cb30b","endpoint":"374f5d9e3d2741c0","mode":"all","variable":"", "diff":false,"name":"Read PLC data","x":180,"y":180,"wires":[["03f0b9014af25c1d"]]},{"id":"4abb25e7e75b3447", "type":"mqtt out","z":"2ff624305b8cb30b","name":"Release data","topic":"820000003058164F","qos":"0","retain":"false", "respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"8d85be060cbc6545","x":520," y":180,"wires":[]},{"id":"63f2816a781192d5","type":"mqtt in","z":"2ff624305b8cb30b","name":"Subscription data","topic ":"820000003058164F/ ","qos":"0","datatype":"auto-detect","broker":"8d85be060cbc6545","nl":false,"rap":true,"rh":0 ,"inputs":0,"x":180,"y":260,"wires":[["1b6776e208355720"]]},{"id":"03f0b9014af25c1d","type":"function"," z":"2ff624305b8cb30b","name":"Data Formatting","func":"let jsonArray = []nnjsonArray.push({ "flag"": ""em1Status""