Modbus IP с Simply Modbus TCP
include SPI.h
include Ethernet.h
include Modbus.h
include ModbusIP.h
//Смещения регистров Modbus (0-9999)
const int SENSOR_IREG = 100;
//Использованные пины
const int sensorPin = A0;
//Объект ModbusIP
ModbusIP mb;
long ts;
// Установите порт на 502
EthernetServer server = EthernetServer(502);
void setup() {
//Назначаем идентификатор устройства Modbus.
regBank.setId(1);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };
mb.config(mac, ip);
// Добавляем регистр SENSOR_IREG — используйте addIreg() для аналоговых входов
mb.addIreg(SENSOR_IREG);
ts = millis();
}
void loop() {
//Вызов один раз внутри цикла() — здесь вся магия
mb.task();
if (millis() > ts + 2000) {
ts = millis();
mb.Ireg(SENSOR_IREG, analogRead(sensorPin));
}
}
Я пытаюсь прочитать данные с первого аналогового контакта через ModbusTCP, используя SimplyModbusTCP, но продолжаю получать ошибки при опросе Arduino. Я использую Arduino UNO с Ethernet Shield W5100 и библиотекой Modbus. Я запрашиваю данные с IP-адреса 192.168.1.177. Порт: 502 Ведомое устройство: 1 и код функции: 03. Я получаю сообщение об ошибке: «Произошла ошибка 66 при чтении TCP в SMT8.0.vi. LabVIEW: сетевое соединение было закрыто узлом».
@Michael H., 👍0
Обсуждение2 ответа
Лучший ответ:
Похоже, проблема была в SimplyModbus, он использовал опрос Modbus и смог прочитать данные.
Не следует создавать сервер Ethernet. Библиотека создает сервер, и ваш сервер первым использует порт.
Код функции Modbus для чтения входных регистров — 04.
Я удалил эту строку и все равно получаю те же результаты, @Michael H.
Попробовал код функции 4 и получил тот же результат, @Michael H.
попробуй еще раз зарегистрируй 101, @Juraj
- ARDUINO MODBUS TCP СОЕДИНЕНИЕ
- Modbus TCP вместе с MQTT по тому же ethernet
- Как заставить библиотеки MQTT и ArduinoModbus работать на одном порту Ethernet?
- Как получить HTTPS на Arduino?
- Основная связь Arduino ModBus RTU с проблемой измерителя мощности
- Мониторинг контроллера Modbus RTU с помощью Arduino и модуля RS485
- Клиент MQTT на Arduino + SIM900
- Arduino Ethernet Shield при использовании контактов Arduino Mega
Вы тестировали экран Ethernet на каком-нибудь базовом примере библиотеки Ethernet?, @Juraj
Да, я сделал, и все работало нормально. Я даже могу пропинговать устройство через cmd., @Michael H.
вы установили адрес регистра 100? попробуйте 101 в клиенте тоже, @Juraj
Пробовал оба, результат одинаковый, @Michael H.
Удалил это, и я все еще получаю тот же результат, @Michael H.
все еще ошибка 66?, @Juraj
входные регистры — это функция 04, @Juraj
Я получаю то же самое, @Michael H.