Стартовая страница › Форумы › Взаимодействие с устройствами › Modbus › Modbus TCP & arduino
Помечено: Modbus TCP Arduino
- В этой теме 38 ответов, 6 участников, последнее обновление 4 года, 1 месяц назад сделано Mikhail.
-
АвторСообщения
-
19.03.2019 в 17:17 #11317MikhailМодератор
Теперь при нажатии кнопки «перезапустить службу SCADA-Коммутатора» выскакивает ошибка, приведенная на скрин-шотах в сообщениях выше.
Что выдаётся в основном журнале Коммуникатора и в журнале линии связи?
То, что службу не удаётся остановить, это конечно не нормально.20.03.2019 в 17:58 #11318Gorg99Участникhttps://yadi.sk/d/fe762x8twyRSHQ
Программа выводит ошибку при инициализации канала связи. В программе Мастер ОПС все работает.
20.03.2019 в 18:54 #11319MikhailМодераторСудя по тексту ошибки, канал связи настроен некорректно. Поведение должно быть установлено — Мастер.
22.03.2019 в 14:24 #11320Gorg99УчастникУстановили master — помогло. Коммуникатор получает реальные данные, но данные на приложенном СкринШоте обновляются примерно раз в 1 сек, хотя опрос задан с частотой 10 Гц.
В приложенных файлах конфигурация и СкринШот коммуникатора.
+ Вопрос как понимать значение «Состояние» — переменное, меняется раз в 1 секунду, то «Ошибка», то «Норма»?
Можно прояснить как организовать хранение полученных данных в БД или в файл любого формата?22.03.2019 в 17:38 #11321MikhailМодераторЧтение из файла происходит с определённым периодом, не после каждого обновления файла. Чтобы проверить, скорость опроса, посмотрите насколько увеличиваются счётчики сеансов и запросов.
Данные на веб-странице обновляются также 1 раз в секунду.как понимать значение «Состояние» — переменное, меняется раз в 1 секунду, то «Ошибка», то «Норма»
Смотрите журнал линии связи.
Можно прояснить как организовать хранение полученных данных в БД
Добавьте ModDbExport.dll в список модулей Сервера и настройте по инструкции:
http://doc.rapidscada.net/content/ru/modules/mod-db-export.html25.03.2019 в 14:55 #11325Gorg99УчастникЖурнал линии связи прилагается в виде СкринШота. Там зафиксированы ошибки.
А есть возможность смотреть/сохранять журнал в виде текстового файла?https://yadi.sk/i/T6-EzWn_YoTIoA
+Повтрояем вопрос: А можно ли сохранять данные сбора информации не в БД, а в файл, например «CSV»?
25.03.2019 в 17:52 #11328MikhailМодераторСудя по логу, устройство периодически просто не отвечает. Попробуйте замедлить опрос, поставив задержки на странице Опрос КП.
Логи Коммуникатора лежат в C:\SCADA\ScadaComm\Log
Для сохранения в CSV (или другой формат) в реальном режиме времени потребуется разработать модуль аналогичный модулю экспорта в БД. Можно попытаться подключить CSV как источник данных в Windows, но не уверен, что такое возможно.04.03.2020 в 15:39 #15063DanУчастникЗдравствуйте, хочу реализовать ModbusTCP на Arduino, пытался запустить на на библиотеке ArduinoModbus и OpenScada, но при соединении и отправке coil сразу терялось соединение. Возможно попросить вас поделиться скетчем и библиотеками именно для ардуины, чтобы быть в них уверенными и вести отладку уже в OpenScada…
ВОТ МОЙ КОД:
#include <SPI.h>
#include <Ethernet2.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 10);
EthernetServer server(502);#include <ArduinoRS485.h> // ArduinoModbus depends on the ArduinoRS485 library
#include <ArduinoModbus.h>boolean testCoil = 0; // your network key Index number (needed only for WEP)
const int ledPin = LED_BUILTIN;
unsigned long time_now = 0;ModbusTCPServer modbusTCPServer;
void setup() {
//Initialize serial and wait for port to open:
Serial.begin(115200);Serial.println(«Modbus TCP Server LED»);
Ethernet.begin(mac, ip);
server.begin();
Serial.print(«server is at «);
Serial.println(Ethernet.localIP());// start the Modbus TCP server
if (!modbusTCPServer.begin()) {
Serial.println(«Failed to start Modbus TCP Server!»);
while (1);
}// configure the LED
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);// configure a single coil at address 0x00
modbusTCPServer.configureCoils(0x00, 1);
}void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
// a new client connected
Serial.println(«new client»);boolean currentLineIsBlank = true;
while (client.connected()) {
modbusTCPServer.poll();
if(millis() — time_now > 1000){
time_now = millis();
Serial.println(«+»);
}
// update the LED
updateLED();
}}
if(millis() — time_now > 1000){
time_now = millis();
if (!client) {
Serial.println(«client disconnected»);
}
if (testCoil){
modbusTCPServer.coilWrite(0x00, 0);
testCoil = false;
}
else{
modbusTCPServer.coilWrite(0x00, 1);
testCoil = true;
}
Serial.print(«Coil1 = «);
Serial.println(modbusTCPServer.coilRead(0x00));
}}
void updateLED() {
// read the current value of the coil
int coilValue = modbusTCPServer.coilRead(0x00);if (coilValue) {
// coil value set, turn LED on
digitalWrite(ledPin, HIGH);
} else {
// coild value clear, turn LED off
digitalWrite(ledPin, LOW);
}
}- Этот ответ был изменен 4 года, 1 месяц назад от Dan.
04.03.2020 в 20:45 #15065 -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.