Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 14:36   #1
Romowski
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 49
По умолчанию Управление частотным преобразователем через Delphi

Доброго времени суток!

Возникла необходимость связать частотный преобразователь Mitsubishi FR-D700 с прогой, написанной на Delphi.

Там используется протокол ModBus RTU.
Если кто сталкивался или работает в данном направлении, объясните, пожалуйста, что это за протокол и как с ним работать?

До этого работал при помощи com-порта, а тут разъем RJ-45...
Romowski вне форума Ответить с цитированием
Старый 02.04.2012, 14:58   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Вместо введения...
В качестве протокола связи в промышленных сетях RS-485 или 422-го чаще всего используется Modbus ...в случае компьютера - можно использовать конверторы интерфейсов, например USB/RS-485/422 (ICP DAC I-7556 и т.п. других производителей) и вы опять-же работаете просто как COM -портом (виртуальным).
Цитата:
...тем кто не понимает разницы между RS-485 и RS-422 как каналами связи: по большей части EIA-422 - это не протокол, а способ соединения и ничем не отличается от RS-485 интерфейса за исключением однонаправленности линии передачи, даже драйверы можно от 485-го задействовать, т.е. основная особенность 1 дифф.передатчик - до 10-ти приемников. В 485-м до 32 приемников.
Подробнее об интерфейсе RS-485
почитать
• описание стандарта EIA485 (RS485) http://www.musidora.ru/format485.htm.
правильная разводка сетей RS-485

Теория и практика работы с Modbus
Первое что необходимо сделать, ознакомиться со спецификацией - Modicon Modbus Protocol. Reference Guide. PI-MBUS-300 Rev.J.

Материалы и статьи (краткий список):
http://ru.wikipedia.org/wiki/ModBus
http://modbusdriver.com/doc/mbusmast...hi/modbus.html
http://raxp.radioliga.com/cnt/s.php?p=m1.pdf
http://raxp.radioliga.com/cnt/s.php?p=m2.pdf
http://raxp.radioliga.com/cnt/s.php?p=m3.djvu
http://raxp.radioliga.com/cnt/s.php?p=m4.pdf
http://raxp.radioliga.com/cnt/s.php?p=m5.pdf
• ...

На нижнем уровне
Реализация MASTER-SLAVE контроллера и обмена по протоколу Modbus в сети RS-485 на нижнем уровне подробно рассмотрена в материалах выше.

На верхнем уровне
Рассмотрим работу с Modbus (в терминах Dеlphi):
Код:
проверка CRC пакета
...
function CRC(BufferData: TDataByte): word;
var
  Data: word;
  i,j : integer;
const polinomio: word= $A001;
begin
  result:= $FFFF;
  for i:=0 to high(BufferData)- 2 do
  begin
    data:= BufferData[i];
    for j:=1 to 8 do
    begin
      if (((data xor result) and $0001) = 1) then
         result:=(result shr 1) xor polinomio
      else
         result:=result shr 1;
      data:= data shr 1;
    end;
  end;
end;
…
Вложения
Тип файла: pdf PI_MBUS_300.pdf (172.3 Кб, 124 просмотров)
Тип файла: zip Монитор Modbus_M-Link_динамическое подключение компонентов.zip (386.8 Кб, 138 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.04.2012, 14:59   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...разбил, превышение по кол-ву знаков.

Код:
формирование MASTER пакета
…
procedure set_smh(net,kod,reg,val: word);
var Cadena: TDataByte;
    crcc  : word;
    i     : integer;
    s     : string;
begin
 Setlength(Cadena,8);
 Cadena[0]:= net;	// сет.адрес 0
 Cadena[1]:= kod;	// код 6
 Cadena[2]:= hi(reg);	// регистр параметра 164
 Cadena[3]:= lo(reg);	// ---
 Cadena[4]:= hi(val);	// число 100
 Cadena[5]:= lo(val);	// ---
 crcc:= CRC(Cadena);	// crc

 Cadena[6]:= lo(crcc);
 Cadena[7]:= hi(crcc);
 //log-
 s:= ''; for i:= 0 to 7 do s:= s + inttohex(cadena[i],2)+' '; //mf._log('TX: ' + s);
 s:= ''; for i:= 0 to 7 do s:= s + chr(cadena[i]);
 if en_com then
  mf.com.WriteCommData(pchar(s),length(s))
end;


формирование запросного пакета в MASTER режиме
…
procedure get_smh(net,kod,reg,par: word);
var Cadena: TDataByte;
    crcc  : word;
    i     : integer;
    s     : string;
begin
 Setlength(Cadena,8);	// размер массива
 Cadena[0]:= net;	// сет.адрес 0
 Cadena[1]:= kod;	// код 4
 Cadena[2]:= hi(reg);	// регистр параметра 160
 Cadena[3]:= lo(reg);	// ---
 Cadena[4]:= hi(par);	// параметр 1
 Cadena[5]:= lo(par);	// ---
 crcc:= CRC(Cadena);	// crc

 Cadena[6]:= lo(crcc);	// мл. байт crc
 Cadena[7]:= hi(crcc);	// ст. байт crc
 // запись в log- файл
 s:= ''; for i:= 0 to 7 do s:= s + inttohex(cadena[i],2)+' '; //mf._log('TX: ' + s);
 s:= ''; for i:= 0 to 7 do s:= s + chr(cadena[i]);
 if en_com then
  mf.com.WriteCommData(pchar(s),length(s))
end;
... 

расшифровка принятых пакетов
...
procedure Tmf.packet(Str: String);
var i,chn,val:integer;
    Cadena   : TDataByte;
    CadenaCRC: word;
    s        : string;
begin
 //индикатор пакета-
 set_tn(1,1,''); application.ProcessMessages;
 txt1.Clear; txt2.Clear; msg1.Text:='';
 msg1.Text:= str;

 //расшифровка пакета MODBUS
 if (length(str)=8)OR(length(str)=7) then begin //первичный контроль на длину пакета
  //наполнение массива перед проверкой-
  s:= '';
  for i:=1 To length(str) do begin
   modbuf[i-1]:= byte(char(str[i])); // наполняем массив-
   s:= s + ' ' + inttohex(modbuf[i-1],2)
  end;

   // выделение -
   if (modbuf[0]=p0.Value)and(modbuf[1]=p1.Value)and(modbuf[2]=p2.Value) then begin
    gd.Progress:= modbuf[4] + modbuf[5];
    vl.Caption:= inttostr(gd.Progress)
   end;

   //LCRC + CRC
   Setlength(Cadena,8);
   Cadena[0]:= modbuf[0];
   Cadena[1]:= modbuf[1];
   Cadena[2]:= modbuf[2];
   Cadena[3]:= modbuf[3];
   Cadena[4]:= modbuf[4];
   Cadena[5]:= modbuf[5];

   CadenaCRC:=CRC(Cadena);
   Cadena[high(Cadena)-1]:= lo(CadenaCRC);	// выделяем младший байт CRC
   Cadena[high(Cadena)]  := hi(CadenaCRC);	// выделяем старший байт CRC
   rg66.Text:= inttohex(lo(CadenaCRC),2);	// индикация для контроля-
   rg77.Text:= inttohex(hi(CadenaCRC),2);

   // проверка на правильность приема по CRC и индикация ошибки-
   err.Font.Color:= clsilver;
   if modbuf[1]<>4 then
    if (lo(CadenaCRC) <> modbuf[6])or(hi(CadenaCRC) <> modbuf[7]) then begin
     err.Font.Color:= clred; s:= s + ' ERROR' end;
   list.Lines.Add(s);
  end;
 end;

 // гасим индикатор-
 set_tn(0,1,'')
end;
...
Некоторые вопросы (из писем)

• Если вы работаете с отрицательными числами, то их следует представлять в дополнительном коде. Что такое дополнительный код.
• Если вам нужно передавать-принимать значения времени. Следует понимать, что протокол не предусматривает специальные регистры для хранения даты-времени, это производитель оборудования или разработчик может сам задавать их на свое усмотрение. К примеру, мы работаем с буфером:
Код:
modbuf: array [0..8] of word;
Каждый элемент массива можно перевести в строку strpas(), Format(), inttostr(), ... . Но, суть не в этом, главное в каком виде передается ваше время и в каких (условно) регистрах этого буфера. Это могут быть данные как в ASC-коде, где символы-буквы представлены их аски-кодом, но это может быть и просто некое условное разбиение данных времени в протоколе (НЕ Modbus!) в виде 32-битного числа, к примеру. Если взять пятую часть цикла про "Modbus на привязи. Конвертор архивов", то там в проекте контроллера SMH в среде SMLogix передача даты-времени была реализована в виде двух пакетов (32 бита) по определенному адресу/

Цитата:
До этого работал при помощи com-порта, а тут разъем RJ-45
видимо речь об использовании Modbus TCP over Ethernet. В этом случае можете воспользоваться библиотекой - Modbus library over TCP/IP for Delphi/Lazarus.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.04.2012, 15:00   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...разбил, превышение по кол-ву знаков.


Библиотека Modbus-TCP содержит реализации Master/Slave режимов под Indy9/Indy10 для Delphi/Lazarus.
Цитата:
Modbus-TCP - симбиоз стандартного протокола Modbus и Ethernet-TCP/IP Все три протокола из семейства Modbus (Modbus RTU, Modbus Plus и Modbus-TCP) используют один прикладной протокол, что позволяет обеспечить их совместимость на уровне обработки пользовательских данных. Эффективность протокола протокола Modbus-TCP обусловлена тем, что в каждом фрейме TCP/IP можно передавать значения сразу нескольких переменных, а в качестве заголовка TCP/IP добавляется всего несколько байт. Но производительность сети Modbus-TCP сильно зависит от типа сети Ethernet и от производительности коммуникационных процессоров сетевых устройств.
Офсайт проекта: http://sourceforge.net/projects/delphimodbus | Скачать библиотеку
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.04.2012, 15:14   #5
Romowski
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 49
По умолчанию

спасибо, буду копать! )
Romowski вне форума Ответить с цитированием
Старый 03.04.2012, 09:19   #6
Romowski
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 49
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Теория и практика работы с Modbus
а данном частотнике есть еще протоком Mitsubishi...
может проще будет с ним разобраться? т.к. времени не много (

раньше приходилось создавать поток и в нем организовывалась связь с в устройством, а здесь чего-то я не допонял...
Romowski вне форума Ответить с цитированием
Старый 03.04.2012, 11:15   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
а данном частотнике есть еще протоком Mitsubishi...
может проще будет с ним разобраться? т.к. времени не много (
разберитесь, люди будут вам благодарны.

Протокол Modbus - де-факто стандарт. В свете того, что вам даны готовые модули и примеры, трудно вас понять ...или ставьте ТЗ и платите денежку.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление программой через браузер medved6216 Работа с сетью в Delphi 2 19.02.2013 13:30
Управление прогой через браузер. VintProg Работа с сетью в Delphi 13 28.12.2011 19:01
Управление ШД через LPT - порт remz Общие вопросы Delphi 17 06.10.2010 22:39
Управление Firefox/IE через программу iHikita Общие вопросы .NET 25 30.09.2010 18:34
Управление через лан yura-cat Помощь студентам 7 23.09.2008 00:26