Modbus TCP & arduino

Помечено: 

Просмотр 9 сообщений - с 31 по 39 (из 39 всего)
  • Автор
    Сообщения
  • #11317
    Mikhail
    Модератор

    Теперь при нажатии кнопки «перезапустить службу SCADA-Коммутатора» выскакивает ошибка, приведенная на скрин-шотах в сообщениях выше.

    Что выдаётся в основном журнале Коммуникатора и в журнале линии связи?
    То, что службу не удаётся остановить, это конечно не нормально.

    #11318
    Gorg99
    Участник

    https://yadi.sk/d/fe762x8twyRSHQ

    Программа выводит ошибку при инициализации канала связи. В программе Мастер ОПС все работает.

    #11319
    Mikhail
    Модератор

    Судя по тексту ошибки, канал связи настроен некорректно. Поведение должно быть установлено — Мастер.

    #11320
    Gorg99
    Участник

    Установили master — помогло. Коммуникатор получает реальные данные, но данные на приложенном СкринШоте обновляются примерно раз в 1 сек, хотя опрос задан с частотой 10 Гц.
    В приложенных файлах конфигурация и СкринШот коммуникатора.
    + Вопрос как понимать значение «Состояние» — переменное, меняется раз в 1 секунду, то «Ошибка», то «Норма»?
    Можно прояснить как организовать хранение полученных данных в БД или в файл любого формата?

    https://yadi.sk/d/S07YPPgITnVWgg

    #11321
    Mikhail
    Модератор

    Чтение из файла происходит с определённым периодом, не после каждого обновления файла. Чтобы проверить, скорость опроса, посмотрите насколько увеличиваются счётчики сеансов и запросов.
    Данные на веб-странице обновляются также 1 раз в секунду.

    как понимать значение «Состояние» — переменное, меняется раз в 1 секунду, то «Ошибка», то «Норма»

    Смотрите журнал линии связи.

    Можно прояснить как организовать хранение полученных данных в БД

    Добавьте ModDbExport.dll в список модулей Сервера и настройте по инструкции:
    http://doc.rapidscada.net/content/ru/modules/mod-db-export.html

    #11325
    Gorg99
    Участник

    Журнал линии связи прилагается в виде СкринШота. Там зафиксированы ошибки.
    А есть возможность смотреть/сохранять журнал в виде текстового файла?

    https://yadi.sk/i/T6-EzWn_YoTIoA

    +Повтрояем вопрос: А можно ли сохранять данные сбора информации не в БД, а в файл, например «CSV»?

    #11328
    Mikhail
    Модератор

    Судя по логу, устройство периодически просто не отвечает. Попробуйте замедлить опрос, поставив задержки на странице Опрос КП.
    Логи Коммуникатора лежат в C:\SCADA\ScadaComm\Log
    Для сохранения в CSV (или другой формат) в реальном режиме времени потребуется разработать модуль аналогичный модулю экспорта в БД. Можно попытаться подключить CSV как источник данных в Windows, но не уверен, что такое возможно.

    #15063
    Dan
    Участник

    Здравствуйте, хочу реализовать 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.
    #15065
    Mikhail
    Модератор

    Можете посмотреть здесь. По вопросам программирования Arduino наверное нужно поискать специализированный форум. OpenScada мы также не занимаемся. Форум по Rapid SCADA.

Просмотр 9 сообщений - с 31 по 39 (из 39 всего)
  • Вы должны авторизироваться для ответа в этой теме.