Страница 1 из 1

RS 485

Добавлено: Вт май 10, 2016 13:03:49
stapmoff
Не ругайте сильно, если таких тем уже несколько :kill: , но задача у меня следующяя! Есть некий прибор, у него есть свой интерфейс RS485. Я же делаю девайс который будет считывать показания с входа АЦП контроллера (в моем случае это датчик влажности) и передовать по 485 этому прибору, вроде все просто, но как мне программно реализовать сетевой адрес моего девайса, так как их будет несколько??? Или я что то не понимаю???

Re: RS 485

Добавлено: Вт май 10, 2016 13:46:27
driver_gv
Нужно почитать документацию по MODBUS RTU, и если прибор промышленный, то и к нему тоже.

Re: RS 485

Добавлено: Вт май 10, 2016 13:56:56
stapmoff
Про modbus все прочитано. А про прибор, к которому я буду цепляться, фирма молчит секретов не выдает

Re: RS 485

Добавлено: Вт май 10, 2016 16:58:01
Z_h_e
Т.е. Вы хотите чтобы Вам рассказали протокол обмена НЕКОГО прибора? Как Вы это себе представляете?

Re: RS 485

Добавлено: Ср май 11, 2016 04:26:40
stapmoff
Нет конечно. Я спрашиваю, разве каждый производитель может "засунуть" любой свой протокол или все таки существует стандарт?

Re: RS 485

Добавлено: Ср май 11, 2016 07:01:00
stapmoff
stapmoff писал(а):Нет конечно. Я спрашиваю, разве каждый производитель может "засунуть" любой свой протокол или все таки существует стандарт?
И еще. В программе конфигурирования прибора, к которому нужно отдать данные по 485, есть такая табличка, может в ней что "накрутить"

Re: RS 485

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

К этому прибору подключаются только датчики от производителя прибора или же можно подключить "чужие" датчики?
Если подключаются "чужие" - то протокол будет однозначно назван и описан.

Re: RS 485

Добавлено: Ср май 11, 2016 12:59:57
stapmoff
В мануале к прибору прописано Шина RS-485 (TIA / EIA-485-A) и всё, ни чего стороннего к прибору мы подключать не пробовали

Re: RS 485

Добавлено: Ср май 11, 2016 14:22:59
dgrett
Есть у меня старенький контроллер от Сименса, так вот чтобы в него что-либо записать или считать с него надо контроллеру отослать некую последовательность (8 байт, типа Handshake ) и тогда СРАЗУ ЖЕ писать или читать... Иначе он молчит как рыба об лёд. А протокол - да, стандартный 485.
Это я узнал когда программатор подключил к терминалу и с помощью программки HxD посмотрел что выдаёт программатор контроллера.

Re: RS 485

Добавлено: Чт май 12, 2016 10:14:23
Jack_A
"стандартный 485" - это физический уровень протокола. А логический - что передавать/принимать - эти 8 байт похожи на преамбулу MODBUS ASCII - стартовый символ, адрес, команда и пр. Или что-то аналогичное. Без анализа конкретного пакета точно не сказать.
А чтоб солидная фирма продавала серийное изделие без точных инструкций по его применению - слабо верится. Не раскрывая "требухи" - внутренней сущности происходящего в приборе - в мануале должно быть расписано, как его применять, в т.ч. и описан логический уровень протокола, а не просто "485" . Можно запросить у фирмы, если только прибор реально куплен, а не "скомунизжен", и если фирма не предполагает использовать его только с опять же купленным у нее за отдельные деньги фирменным софтом. Адрес на шине, если допускается включение на шину нескольких однотипных устройств, задается DIP-перключателями или назначается динамически при включении. По какому принципу - Hz?

Re: RS 485

Добавлено: Чт май 12, 2016 20:21:19
dgrett
У меня ситуёвина такая: Где-то в 80х югославы поставили нам станки, в коих и имеется сей контроллер. Имеется и программатор к нему. В бумагах есть описание и схемы самого станка. По контроллеру-схемы входов-выходов, принципы программирования. Нет ни схемы контроллера ни описания протокола. Может когда и было,нзн. Вх./выходы адресуются перемычками, тогда DIP ещё небыло. Всё настолько старо, что ничего умного не гуглится. И югославская фирма не гуглится..
NB постом выше я нечаянно соврал :oops: Там не Сименса контроллер, а югославский Iskra.

Re: RS 485

Добавлено: Пт май 13, 2016 11:22:32
Jack_A
dgrett писал(а): Где-то в 80х югославы поставили нам станки ....
DIP ещё небыло.
Почти 40-летнее изделие реанимировать - это мазохизм. В утиль однозначно. Или если механика хорошая, вдумчиво вникнуть в алгоритм работы и настругать новый контроллер :(
DIP-перключатели были всегда, по крайней мере, как микросхемы в DIP :)

Re: RS 485

Добавлено: Пт май 13, 2016 14:07:08
dgrett
Мдаа, 12-14 входных и 10-12 выходных блоков по 16 входов/выходов каждый... Может и не очень сложная программа самого процессора, зато пользовательская программа - да ё@ъ%! . А насчёт "в утиль" - так это нашему директору.. Осцилл новый даже просить страшно, а вы - "в утиль" ..

Re: RS 485

Добавлено: Чт май 19, 2016 09:00:34
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);
  */
  
}
Но все равно Автограф не видит Ардуино

Re: RS 485

Добавлено: Чт май 19, 2016 09:07:34
stapmoff
И еще повторюсь, в конфигураторе к прибору АвтоГРАФ есть некая таблица с произвольными значениями Modbus, кроме первого столбца (адрес slave устройства) и Уровень адаптива, более мне ни чего не ясно, от куда брать значение регистр и кол-во байт????? Я уже запутался((
Изображение

Re: RS 485

Добавлено: Чт май 19, 2016 11:37:21
stapmoff
Тема ЗАКРЫТА, все заработало!

Re: RS 485

Добавлено: Вт май 31, 2016 06:27:56
maxn
у меня есть отдельная тема тут http://radiokot.ru/forum/viewtopic.php? ... 0#p2770860
подскажите, какой контроллер AVR купить для ее реализации? в смысле микросхему какую надо?

Re: RS 485

Добавлено: Вт май 31, 2016 06:32:11
Z_h_e
Если Вы имеете ввиду как реализовать физику 485ого, то вот.

Re: RS 485

Добавлено: Вт май 31, 2016 08:12:21
maxn
Z_h_e писал(а):Если Вы имеете ввиду как реализовать физику 485ого, то вот.
А контроллер то какой подойдет для простоты программироаания? И потом, изобретать велосипед не хочется, вроде есть готовые библиотеки доя модбас
Вот только я не пойму какую микросхему покупать

Re: RS 485

Добавлено: Вт май 31, 2016 16:07:27
Z_h_e
Наверное любой с UARTом, лишь бы памяти хватило под Вашу задачу. Хотя и его можно программно осуществить.
Попробуйте в протеусе, там проект можно подключить к реальному COM порту. А к нему Вы можете подключить реальную max485. Только схему в протеусе делайте упощенную и без аналоговой части, а то может не хватить мощи компа и не будет работать в реальном режиме времени.