RS 485

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 8
Зарегистрирован: Вт май 10, 2016 12:55:35

Сообщение stapmoff »

Не ругайте сильно, если таких тем уже несколько :kill: , но задача у меня следующяя! Есть некий прибор, у него есть свой интерфейс RS485. Я же делаю девайс который будет считывать показания с входа АЦП контроллера (в моем случае это датчик влажности) и передовать по 485 этому прибору, вроде все просто, но как мне программно реализовать сетевой адрес моего девайса, так как их будет несколько??? Или я что то не понимаю???
Реклама
Потрогал лапой паяльник
Сообщения: 399
Зарегистрирован: Сб авг 08, 2009 23:02:57
Откуда: Ростов-на-Дону

Сообщение driver_gv »

Нужно почитать документацию по MODBUS RTU, и если прибор промышленный, то и к нему тоже.
__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять
Контактная информация:
Реклама
Родился
Сообщения: 8
Зарегистрирован: Вт май 10, 2016 12:55:35

Сообщение stapmoff »

Про modbus все прочитано. А про прибор, к которому я буду цепляться, фирма молчит секретов не выдает
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Т.е. Вы хотите чтобы Вам рассказали протокол обмена НЕКОГО прибора? Как Вы это себе представляете?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 8
Зарегистрирован: Вт май 10, 2016 12:55:35

Сообщение stapmoff »

Нет конечно. Я спрашиваю, разве каждый производитель может "засунуть" любой свой протокол или все таки существует стандарт?
Реклама
Родился
Сообщения: 8
Зарегистрирован: Вт май 10, 2016 12:55:35

Сообщение stapmoff »

stapmoff писал(а):Нет конечно. Я спрашиваю, разве каждый производитель может "засунуть" любой свой протокол или все таки существует стандарт?
И еще. В программе конфигурирования прибора, к которому нужно отдать данные по 485, есть такая табличка, может в ней что "накрутить"
Вложения
Конфиг.JPG
(138.73 КБ) 297 скачиваний
Реклама
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Сообщение mas123 »

stapmoff писал(а):может "засунуть" любой свой протокол или все таки существует стандарт?
Верно - может применить свой протокол.
Верно - существуют стандартные протоколы.
stapmoff писал(а):может в ней что "накрутить"
В этой "табличке" слева вижу уже ранее упомянутые буквы "modbus". А?

К этому прибору подключаются только датчики от производителя прибора или же можно подключить "чужие" датчики?
Если подключаются "чужие" - то протокол будет однозначно назван и описан.
Родился
Сообщения: 8
Зарегистрирован: Вт май 10, 2016 12:55:35

Сообщение stapmoff »

В мануале к прибору прописано Шина RS-485 (TIA / EIA-485-A) и всё, ни чего стороннего к прибору мы подключать не пробовали
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Есть у меня старенький контроллер от Сименса, так вот чтобы в него что-либо записать или считать с него надо контроллеру отослать некую последовательность (8 байт, типа Handshake ) и тогда СРАЗУ ЖЕ писать или читать... Иначе он молчит как рыба об лёд. А протокол - да, стандартный 485.
Это я узнал когда программатор подключил к терминалу и с помощью программки HxD посмотрел что выдаёт программатор контроллера.
Я всё-всё узнAю и стану профессором.
Друг Кота
Аватара пользователя
Сообщения: 6322
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

"стандартный 485" - это физический уровень протокола. А логический - что передавать/принимать - эти 8 байт похожи на преамбулу MODBUS ASCII - стартовый символ, адрес, команда и пр. Или что-то аналогичное. Без анализа конкретного пакета точно не сказать.
А чтоб солидная фирма продавала серийное изделие без точных инструкций по его применению - слабо верится. Не раскрывая "требухи" - внутренней сущности происходящего в приборе - в мануале должно быть расписано, как его применять, в т.ч. и описан логический уровень протокола, а не просто "485" . Можно запросить у фирмы, если только прибор реально куплен, а не "скомунизжен", и если фирма не предполагает использовать его только с опять же купленным у нее за отдельные деньги фирменным софтом. Адрес на шине, если допускается включение на шину нескольких однотипных устройств, задается DIP-перключателями или назначается динамически при включении. По какому принципу - Hz?
Изображение
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

У меня ситуёвина такая: Где-то в 80х югославы поставили нам станки, в коих и имеется сей контроллер. Имеется и программатор к нему. В бумагах есть описание и схемы самого станка. По контроллеру-схемы входов-выходов, принципы программирования. Нет ни схемы контроллера ни описания протокола. Может когда и было,нзн. Вх./выходы адресуются перемычками, тогда DIP ещё небыло. Всё настолько старо, что ничего умного не гуглится. И югославская фирма не гуглится..
NB постом выше я нечаянно соврал :oops: Там не Сименса контроллер, а югославский Iskra.
Я всё-всё узнAю и стану профессором.
Друг Кота
Аватара пользователя
Сообщения: 6322
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

dgrett писал(а): Где-то в 80х югославы поставили нам станки ....
DIP ещё небыло.
Почти 40-летнее изделие реанимировать - это мазохизм. В утиль однозначно. Или если механика хорошая, вдумчиво вникнуть в алгоритм работы и настругать новый контроллер :(
DIP-перключатели были всегда, по крайней мере, как микросхемы в DIP :)
Изображение
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Сообщение dgrett »

Мдаа, 12-14 входных и 10-12 выходных блоков по 16 входов/выходов каждый... Может и не очень сложная программа самого процессора, зато пользовательская программа - да ё@ъ%! . А насчёт "в утиль" - так это нашему директору.. Осцилл новый даже просить страшно, а вы - "в утиль" ..
Я всё-всё узнAю и стану профессором.
Родился
Сообщения: 8
Зарегистрирован: Вт май 10, 2016 12:55:35

Сообщение stapmoff »

Про мою тему ни кто не забыл? К прибору Автограф прочитал, есть два протокола обмена это Modbus с форматом 8-N-1 и LLS. Для начала я написал скетч для ардуино, но он не прокатил, так как в библиотеке, что подключал к скетчу, нет формата 8-N-1. Нашел другую библиотеку и вытащил от дута сэмпл

Код: Выделить всё

#include <SimpleModbusSlave.h>

/* 
   SimpleModbusSlaveV10 supports function 3, 6 & 16.
   
   This example code will receive the adc ch0 value from the arduino master. 
   It will then use this value to adjust the brightness of the led on pin 9.
   The value received from the master will be stored in address 1 in its own
   address space namely holdingRegs[].
   
   In addition to this the slaves own adc ch0 value will be stored in 
   address 0 in its own address space holdingRegs[] for the master to
   be read. The master will use this value to alter the brightness of its
   own led connected to pin 9.
   
   The modbus_update() method updates the holdingRegs register array and checks
   communication.

   Note:  
   The Arduino serial ring buffer is 64 bytes or 32 registers.
   Most of the time you will connect the arduino to a master via serial
   using a MAX485 or similar.
 
   In a function 3 request the master will attempt to read from your
   slave and since 5 bytes is already used for ID, FUNCTION, NO OF BYTES
   and two BYTES CRC the master can only request 58 bytes or 29 registers.
 
   In a function 16 request the master will attempt to write to your 
   slave and since a 9 bytes is already used for ID, FUNCTION, ADDRESS, 
   NO OF REGISTERS, NO OF BYTES and two BYTES CRC the master can only write
   54 bytes or 27 registers.
 
   Using a USB to Serial converter the maximum bytes you can send is 
   limited to its internal buffer which differs between manufactures. 
*/

#define  LED 9  

// Using the enum instruction allows for an easy method for adding and 
// removing registers. Doing it this way saves you #defining the size 
// of your slaves register array each time you want to add more registers
// and at a glimpse informs you of your slaves register layout.

//////////////// registers of your slave ///////////////////
enum 
{     
  // just add or remove registers and your good to go...
  // The first register starts at address 0
  ADC_VAL,     
  PWM_VAL,        
  HOLDING_REGS_SIZE // leave this one
  // total number of registers for function 3 and 16 share the same register array
  // i.e. the same address space
};

unsigned int holdingRegs[HOLDING_REGS_SIZE]; // function 3 and 16 register array
////////////////////////////////////////////////////////////

void setup()
{
  /* parameters(HardwareSerial* SerialPort,
                long baudrate, 
      unsigned char byteFormat,
                unsigned char ID, 
                unsigned char transmit enable pin, 
                unsigned int holding registers size,
                unsigned int* holding register array)
  */
  
  /* Valid modbus byte formats are:
     SERIAL_8N2: 1 start bit, 8 data bits, 2 stop bits
     SERIAL_8E1: 1 start bit, 8 data bits, 1 Even parity bit, 1 stop bit
     SERIAL_8O1: 1 start bit, 8 data bits, 1 Odd parity bit, 1 stop bit
     
     You can obviously use SERIAL_8N1 but this does not adhere to the
     Modbus specifications. That said, I have tested the SERIAL_8N1 option 
     on various commercial masters and slaves that were suppose to adhere
     to this specification and was always able to communicate... Go figure.
     
     These byte formats are already defined in the Arduino global name space. 
  */
   
  modbus_configure(&Serial, 9600, SERIAL_8N2, 1, 2, HOLDING_REGS_SIZE, holdingRegs);

  // modbus_update_comms(baud, byteFormat, id) is not needed but allows for easy update of the
  // port variables and slave id dynamically in any function.
  modbus_update_comms(9600, SERIAL_8N2, 1);
  
  pinMode(LED, OUTPUT);
}

void loop()
{
  // modbus_update() is the only method used in loop(). It returns the total error
  // count since the slave started. You don't have to use it but it's useful
  // for fault finding by the modbus master.
  
  modbus_update();
  
  holdingRegs[ADC_VAL] = analogRead(A0); // update data to be read by the master to adjust the PWM
  
  analogWrite(LED, holdingRegs[PWM_VAL]>>2); // constrain adc value from the arduino master to 255
  
  /* Note:
     The use of the enum instruction is not needed. You could set a maximum allowable
     size for holdinRegs[] by defining HOLDING_REGS_SIZE using a constant and then access 
     holdingRegs[] by "Index" addressing. 
     I.e.
     holdingRegs[0] = analogRead(A0);
     analogWrite(LED, holdingRegs[1]/4);
  */
  
}
Но все равно Автограф не видит Ардуино
Родился
Сообщения: 8
Зарегистрирован: Вт май 10, 2016 12:55:35

Сообщение stapmoff »

И еще повторюсь, в конфигураторе к прибору АвтоГРАФ есть некая таблица с произвольными значениями Modbus, кроме первого столбца (адрес slave устройства) и Уровень адаптива, более мне ни чего не ясно, от куда брать значение регистр и кол-во байт????? Я уже запутался((
Изображение
Родился
Сообщения: 8
Зарегистрирован: Вт май 10, 2016 12:55:35

Сообщение stapmoff »

Тема ЗАКРЫТА, все заработало!
Встал на лапы
Сообщения: 88
Зарегистрирован: Чт мар 27, 2008 12:05:14

Сообщение maxn »

у меня есть отдельная тема тут http://radiokot.ru/forum/viewtopic.php? ... 0#p2770860
подскажите, какой контроллер AVR купить для ее реализации? в смысле микросхему какую надо?
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Если Вы имеете ввиду как реализовать физику 485ого, то вот.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Встал на лапы
Сообщения: 88
Зарегистрирован: Чт мар 27, 2008 12:05:14

Сообщение maxn »

Z_h_e писал(а):Если Вы имеете ввиду как реализовать физику 485ого, то вот.
А контроллер то какой подойдет для простоты программироаания? И потом, изобретать велосипед не хочется, вроде есть готовые библиотеки доя модбас
Вот только я не пойму какую микросхему покупать
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Наверное любой с UARTом, лишь бы памяти хватило под Вашу задачу. Хотя и его можно программно осуществить.
Попробуйте в протеусе, там проект можно подключить к реальному COM порту. А к нему Вы можете подключить реальную max485. Только схему в протеусе делайте упощенную и без аналоговой части, а то может не хватить мощи компа и не будет работать в реальном режиме времени.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ответить

Вернуться в «AVR»