1

Тема: modbus протокол та підключення

привіт! Почав працювати з протоколом modbus, але питань стало більше чим відповідей
в задачі є SDM630-Modbus та підключити його для ардуіно, є в наявності SDM630-Modbus:

Прихований текст

https://sc01.alicdn.com/kf/HTB1nUF2JpXXXXXkaXXXq6xXFXXXa/206313716/HTB1nUF2JpXXXXXkaXXXq6xXFXXXa.jpg

USB to rs-485:

Прихований текст

http://thumbs2.ebaystatic.com/d/l225/m/mrMyKZkRMWTBcQDVVVaMgVA.jpg

+Arduino UNO

Питання по схемі підключення, L це лінія ( фаза ), N це земля. а яка буде повна схема підключення, що для цього треба ? ТАм є вхід і вихід. Можна хоч на прикладі підключення лампочки пояснити

Подякували: 0xDADA11C71

2 Востаннє редагувалося raxp (29.03.2017 09:54:50)

Re: modbus протокол та підключення

Це 1/3-х фазний лічильник електрики - ватметр/смарт-розетка http://www.bg-etech.de/Bedienungsanleitungen.html

Питання по схемі підключення, L це лінія ( фаза ), N це земля. а яка буде повна схема підключення, що для цього треба ? ТАм є вхід і вихід. Можна хоч на прикладі підключення лампочки пояснити

схеми підключення вами вже приведені вище, навантаження підключається між виходом цього лічильника і N. Тобто сам лічильник включається в розрив фази. Умовно так:
http://сайт-злодій/img/img7/fs/Bezymyannyj.1490770035.png

Документацiя: http://bg-etech.de/download/manual/SDM630ModbusEN.pdf
Адреса регистрiв: http://bg-etech.de/download/manual/SDM630Register.pdf

Приклади читання по Modbus на Python

в задачі є SDM630-Modbus та підключити його для ардуіно
...
USB to rs-485

8-11 - рахункові імпульсні виходи
12-13 - рахункові імпульсні виходи
9-10 - диференційний двопровідний RS-485 (A/B)

USB хост

Оскільки Буратiно не містить USB хоста і конвертор на ній (FTDI/CP2102/PL2303/CH340G) сам є підлеглим пристроєм (USB slave), то підключити USB конвертор ви до нього не зможете. ДАНИЙ USB/RS-485 перетворювач ви зможете підключити до комп'ютера/ноутбука/малинки (тобто до пристрою з HOST-контролером). Для підключення до - Буратiно вам потрібен RS-485/TTL UART перетворювач, а простіше - мікросхема типу ADM485/ADM3485/ST485 і т.п.

Обв'язка

Обв'язка для мелкосхеми ADM3485 практично ніяка http://www.analog.com/media/en/technica … _3491.pdf, досить термінального резистора по входу A-B та 2-3 пін на землю посадити для конфігурації на прийом:
http://сайт-злодій/img/img7/fs/4.1490774064.png

При довжині лінії зв'язку RS-485 більше 10 м, рекомендую використовувати гальванічну розв'язку інтерфейсу RS-485. Це можна реалізувати як окремими оптронами, так і використовувати ІМС конвертора RS-485/UART TTL з вбудованою гальванічною розв'язкою, наприклад - ADM2582E (в ній навіть DC-DC вже вбудований і ланцюги ESD захисту від статики до 15 кВ) http://www.analog.com/media/en/technica … _2587E.pdf
http://сайт-злодій/img/img7/fs/1.1490771097.png
http://сайт-злодій/img/img7/fs/2.1490771120.png

Готовий конвертор RS-485/UART TTL (без розв'язки)

...або просто купити готовий на тому ж алi https://ru.aliexpress.com/item/10pcs-3- … 02050.html
http://сайт-злодій/img/img7/fs/3.1490771267.png

Вихід TTL-UART конвертора підключаєте до будь-якого дискретного I/O Буратiно і використовуєте SoftWareUART (UNO містить лише один апаратний UART, та вже задіяний під UART TTL/USB конвертор на платi модуля для завантаження скетчів і обміну з ПК):

Прихований текст
#include <SoftwareSerial.h>

// блютуз HC-05
//int ledPin11 = 11; // TX1
//int ledPin12 = 12; // RX1
SoftwareSerial mySerial(11, 12); // RX1, TX1

String inString;
void setup() {
 
  // задействуем Serial-Software на 11-12 pin
  // для платы Arduino-Nano Atmega328p один Serial: RX(0)/TX(1)
  Serial.begin(9600);
  Serial.flush();

  mySerial.begin(9600);
  mySerial.flush();
  
  inString = "";
  // гасим светодиод состояния
  digitalWrite(led, LOW);  
}




void command() {
// разбор данных вида H2...H13, L2...L13: H - включен, L - выключен
   if (inString[0] == 'H') {
     switch (inString[1])
     {
 
     } 
   }
   
   if (inString[0] == 'L') {
     switch (inString[1])
     {

     } 
   } 
   
   inString = "";
}


void loop() {

 // работа с портом загрузки для тестов
 while (Serial.available()) {
  char inChar = Serial.read(); // читаем побайтно
  Serial.write(inChar);        // эхо
  
  aread();
  Serial.write(outputValue); 
 
  if (inChar!= 13) {
   inString += inChar;          // формируем строку
   sound(inChar);
  } 
  if (inChar == 13) {
   command();
   Serial.flush();
  }
 } 
 
 // работа с прозрачным UART over BlueTooth HC-05
 // через программный UART 
 while (mySerial.available()) {
  char inChar = mySerial.read(); // читаем побайтно
  mySerial.write(inChar);        // эхо
  
  aread();
  mySerial.write(outputValue);   
 
  if (inChar!= 13) {
   inString += inChar;          // формируем строку
   sound(inChar);
  } 
  if (inChar == 13) {
   command();
   mySerial.flush();
  }
 } 


}

Ресурси по тематиці

p.s.: раз забезпечена робота по UART, залишається обернути його в Modbus. Під Буратіно є готові - Modbus-Master-Slave-for-Arduino https://github.com/smarmengol/Modbus-Ma … r/examples (вам потрібен - master). Однак рекомендую потренуватися зi USB/RS-485 конвертором на ПК та любим термiналом Modbus - http://raxp2.blogspot.com/2015/03/modbus.html. Коли запрацює вiдповiдь на ПК, тодi писати скетч для Буратiно.

Подякували: 0xDADA11C71

3

Re: modbus протокол та підключення

то підключити USB конвертор ви до нього не зможете

та поки хоч на ПК підключу
Щу питання, я на вхуд один дріт беру і підключаю на вхід, другий на N, чи є різниця де який лріт, чи шукати фазу ( L ), я правильно зрозумів ?

4 Востаннє редагувалося raxp (29.03.2017 09:43:17)

Re: modbus протокол та підключення

Якщо підключити навпаки, то лічильник може працювати неправильно. Шукайте L (фазу) - індикаторной викруткой. Та будь-який мультиметр одним щупом її покаже (за другий не триматися).

Взагалі про правильність підключення лічильників і способами обману електриками ЖЕК-ів мешканців рекомендую ознайомитися зі статтею в журналі - "Електрик"/01-02-2017 (с.42 - онлайн PDF): http://vipstep.com/zhurnaly-po-elektron … 017-onlajn

Подякували: reverse2500, 0xDADA11C72