Тел. (495) 972-27-12

Конфигурация slave modbus устройства

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY

Конфигурация slave modbus устройства

Сообщение stapmoff » 26 май 2016, 13:00

Привет всем! Есть дивайсик на ардуино, работает в slave режиме передает считаные данные с аналогового входа, другому устройству! Вопрос. Реально ли с помощью конвертора USB -> RS485 конфигурировать девайс, а именно переписывать адрес устройства и менять формат передачи (8-N-1, 8-N-2, 8-E-1 и тд.) Я понимаю, что это реально, как минимум нужна софтина на ПК и каким то макаром с помощью этого софта и конвертора менять значения на девайсе. Если кто поможет, отблагодарю материально)) ОБЕЩЯЮ

Мой Скетч
Code: [Выделить всё] [Expand/Collapse]
  1. #include <SimpleModbusSlave.h>
  2.  
  3. #define  LED 9  
  4.  
  5. /
  6. //////////////// Регистры вашего slave ///////////////////
  7. enum
  8. {    
  9.   // just add or remove registers and your good to go...
  10.   // The first register starts at address 0
  11.   ADC_VAL,    
  12.   PWM_VAL,        
  13.   HOLDING_REGS_SIZE // leave this one
  14.   // total number of registers for function 3 and 16 share the same register array
  15.   // i.e. the same address space
  16. };
  17.  
  18. unsigned int holdingRegs[HOLDING_REGS_SIZE];
  19. void setup()
  20. {
  21.   /* parameters(HardwareSerial* SerialPort,
  22.                 long baudrate,
  23.       unsigned char byteFormat,
  24.                 unsigned char ID,
  25.                 unsigned char transmit enable pin,
  26.                 unsigned int holding registers size,
  27.                 unsigned int* holding register array)
  28.   */
  29.  
  30.   /* Valid modbus byte formats are:
  31.      SERIAL_8N2: 1 start bit, 8 data bits, 2 stop bits
  32.      SERIAL_8E1: 1 start bit, 8 data bits, 1 Even parity bit, 1 stop bit
  33.      SERIAL_8O1: 1 start bit, 8 data bits, 1 Odd parity bit, 1 stop bit
  34.      
  35.   */
  36.    
  37.   modbus_configure(&Serial, 19200, SERIAL_8N2, 1, 2, HOLDING_REGS_SIZE, holdingRegs);
  38.  
  39.   // modbus_update_comms(baud, byteFormat, id) is not needed but allows for easy update of the
  40.   // port variables and slave id dynamically in any function.
  41.   modbus_update_comms(19200, SERIAL_8N2, 1);
  42.  
  43.   pinMode(LED, OUTPUT);
  44. }
  45.  
  46. void loop()
  47. {
  48.   // modbus_update() is the only method used in loop(). It returns the total error
  49.   // count since the slave started. You don't have to use it but it's useful
  50.   // for fault finding by the modbus master.
  51.  
  52.   modbus_update();
  53.  
  54.   holdingRegs[ADC_VAL] = analogRead(A0); // update data to be read by the master to adjust the PWM
  55.  
  56.   analogWrite(LED, holdingRegs[PWM_VAL]>>2); // constrain adc value from the arduino master to 255
  57.  
  58. }
GeSHi © Codebox Plus
stapmoff
 
Сообщения: 18
Зарегистрирован: 16 май 2016, 18:04

Re: Конфигурация slave modbus устройства

Сообщение Mr.Kubikus » 26 май 2016, 13:29

Привет!
Из приведенного кода не очевидно, что формат можно изменять через последовательный интерфейс.

Однозначно можно сказать, что формат передачи задается в вашем коде в строке 37:
Code: [Выделить всё] [Expand/Collapse]
  1. modbus_configure(&Serial, 19200, SERIAL_8N2, 1, 2, HOLDING_REGS_SIZE, holdingRegs);
GeSHi © Codebox Plus

Чтобы его изменить надо поменять значения аргументов в вызове функции modbus_configure(). Затем заново скомпилировать код и загрузить его в микроконтроллер.
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 880
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: Конфигурация slave modbus устройства

Сообщение stapmoff » 26 май 2016, 13:34

Хорошо, черт с ним с форматом, адрес поменять можно и например скорость?
stapmoff
 
Сообщения: 18
Зарегистрирован: 16 май 2016, 18:04

Re: Конфигурация slave modbus устройства

Сообщение stapmoff » 26 май 2016, 13:35

stapmoff писал(а):Хорошо, черт с ним с форматом, адрес поменять можно и например скорость?

Хотя самое главное - это адрес
stapmoff
 
Сообщения: 18
Зарегистрирован: 16 май 2016, 18:04

Re: Конфигурация slave modbus устройства

Сообщение stapmoff » 26 май 2016, 13:41

stapmoff писал(а):
stapmoff писал(а):Хорошо, черт с ним с форматом, адрес поменять можно и например скорость?

Хотя самое главное - это адрес

Если даже это не возможно, то я думаю реально перенести конфигурацию Modbus в eeprom контроллера и там уже менять эти параметры, а после перезагрузки девайса в скетче указать, чтоб считывал конфиг. modbus из eeprom?
stapmoff
 
Сообщения: 18
Зарегистрирован: 16 май 2016, 18:04

Re: Конфигурация slave modbus устройства

Сообщение Mr.Kubikus » 26 май 2016, 13:46

Так можно. Выделите один регистр в адресном пространстве Modbus слейва для установки адреса устройства. Напишите свой обработчик, который будет сохранять значение из этого регистра в EEPROM микроконтроллера, а после перезагрузки берите значение из EEPROM для инициализации интерфейса Modbus.

Если даже это не возможно, то я думаю реально перенести конфигурацию Modbus в eeprom контроллера и там уже менять эти параметры, а после перезагрузки девайса в скетче указать, чтоб считывал конфиг. modbus из eeprom?
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 880
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: Конфигурация slave modbus устройства

Сообщение stapmoff » 26 май 2016, 14:11

Mr.Kubikus писал(а):Так можно. Выделите один регистр в адресном пространстве Modbus слейва для установки адреса устройства. Напишите свой обработчик, который будет сохранять значение из этого регистра в EEPROM микроконтроллера, а после перезагрузки берите значение из EEPROM для инициализации интерфейса Modbus.

Если даже это не возможно, то я думаю реально перенести конфигурацию Modbus в eeprom контроллера и там уже менять эти параметры, а после перезагрузки девайса в скетче указать, чтоб считывал конфиг. modbus из eeprom?

Вот как раз таки обработчик и все остальное написать пока сам не в силах, не силен я в написании прошивок)) Помогите
stapmoff
 
Сообщения: 18
Зарегистрирован: 16 май 2016, 18:04

Re: Конфигурация slave modbus устройства

Сообщение Mr.Kubikus » 26 май 2016, 15:14

К сожалению, у меня недостаточно свободного времени чтобы разработать для вас исходный код. Могу только поделиться идеями для дальнейшей работы.

В библиотеке SimpleModbusSlave отсутствует возможность запускать пользовательские обработчики при обращении мастера к регистрам слейва. Поэтому чтобы отловить момент когда мастер записывает в регистр слейва новый адрес придется выполнять проверку содержимого этого регистра в каждой итерации функции loop(). Проверка будет заключаться в сравнении текущего значения со значением, считанным на предыдущей итерации. Если они не равны, то это означает, что мастер произвел запись нового адреса и его необходимо записать в EEPROM.

Для работы с EEPROM смотрите описание библиотеки EEPROM Library. Там есть хорошие примеры.
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 880
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: Конфигурация slave modbus устройства

Сообщение stapmoff » 30 май 2016, 10:34

Mr.Kubikus писал(а):К сожалению, у меня недостаточно свободного времени чтобы разработать для вас исходный код. Могу только поделиться идеями для дальнейшей работы.

В библиотеке SimpleModbusSlave отсутствует возможность запускать пользовательские обработчики при обращении мастера к регистрам слейва. Поэтому чтобы отловить момент когда мастер записывает в регистр слейва новый адрес придется выполнять проверку содержимого этого регистра в каждой итерации функции loop(). Проверка будет заключаться в сравнении текущего значения со значением, считанным на предыдущей итерации. Если они не равны, то это означает, что мастер произвел запись нового адреса и его необходимо записать в EEPROM.

Для работы с EEPROM смотрите описание библиотеки EEPROM Library. Там есть хорошие примеры.

Спасибо! Посмотрим, что можно накрутить
stapmoff
 
Сообщения: 18
Зарегистрирован: 16 май 2016, 18:04


Вернуться в Arduino и Ко. ♥♥♥



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron