Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Программное обеспечение
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Modbus на Pascal

 Ответить Ответить Страница  <12
Автор
Сообщение
Phenix Смотреть выпадающим
Новичок
Новичок


Присоединился: 18 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 30
Свойства публикации Свойства публикации   Ответить, цитируя автора - Phenix Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Modbus на Pascal
    Опубликовано: 01 Июнь 2007 14:42

А теперь куча вопросов.

1. Как определить, в каком режиме пришел запрос? Если первый байт сообщения 3Ah - это ASCII, иначе RTU? А если передает устройство с адресом 3Ah в режиме RTU?
2. Что такое "интервал тишины, равный времени передачи 3.5 символов при данной скорости передачи в сети"?
3. Устройство имеет 24 входа UNIO. Можно ли считать их дискретными входами, которые можно считать "ссылка 1Х" в функции 02?
4. Что такое входные регистры (ссылка 3Х)?
5. Что такое статусные выходы для CPU188 (функция 07)?
6. Что такое байты событий (функция 12)?
7. Что такое режим "Listen Only" (см. диагностическую подфункцию 4)? Это просто когда ответы не возвращаются что ли ни на какие запросы?
8. Что возвращает функция 17 для CPU188?
9. Что такое регистры файла расширенной памяти (функции 20, 21)?
10.  В описании функции 22 сказано: "Функция поддерживается только 984-785 контроллерами". Поддерживается ли она для CPU188?
11. Что такое очередь (функция 24)?
12. Как организуется регистр диагностики для CPU188?
13. Диагностическая подфункция 10 - что должна очищать?
14. Диагностические подфункции 19 и 20 - как реализуется для CPU188?
15. Диагностическая подфункция 21 - что возвращает?

Понимаю, что мало чего пока понимаю в данном протоколе, поэтому прошу громко не смеяться в случае чего. :)

Наверх
Petrov Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 15 Январь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 805
Свойства публикации Свойства публикации   Ответить, цитируя автора - Petrov Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Июнь 2007 13:34

1. Как определить, в каком режиме пришел запрос? Если первый байт сообщения 3Ah - это ASCII, иначе RTU? А если передает устройство с адресом 3Ah в режиме RTU?

В принципе, все устройства в сети должны бы быть настроены одинаково - или аски или рту.


2. Что такое "интервал тишины, равный времени передачи 3.5 символов при данной скорости передачи в сети"?

Время, за которое успеет передаться 3,5 символа (байта). Т.е. пакет идет непрерывно и считается что он завершен, если в течении времени достаточном для прохода более 3 байт ничего нет. Четвертый байт (т.е. не байт, а время достаточное для прохода 4 байтов) и далее считается уже следующим пакетом.  Это просто пауза между пакетами. В отличие от аски, где используется символы начала и конца пакета. 


3. Устройство имеет 24 входа UNIO. Можно ли считать их дискретными входами, которые можно считать "ссылка 1Х" в функции 02?

Надо смотреть в описании устройства. Думаю, что скорее всего это дискр.выходы (ссылка 0х).


4. Что такое входные регистры (ссылка 3Х)?

Аналоговые входы, например. Переменные, которые можно только считать из контроллера и нельзя записать, в отличие от регистров 4х (аналоговые выходы).

Наверх
Petrov Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 15 Январь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 805
Свойства публикации Свойства публикации   Ответить, цитируя автора - Petrov Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Июнь 2007 13:42

Остальные вопросы с 5 по 15 - это из разряда "оно надо?". :) Вряд ли понадобится, только если прибор серьезный разрабатывается.

Наверх
Phenix Смотреть выпадающим
Новичок
Новичок


Присоединился: 18 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 30
Свойства публикации Свойства публикации   Ответить, цитируя автора - Phenix Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 04 Июнь 2007 09:52

"В принципе, все устройства в сети должны бы быть настроены одинаково - или аски или рту"

Хочется сделать универсальный модуль, который будет работать в любом режиме. Чтобы потом не переделывать, если придется внедряться в сеть с другими режимом передачи. Поэтому вопрос остается в силе.

"Время, за которое успеет передаться 3,5 символа (байта)."

Ясно, т.е. фактически это таймаут приема, при превышении которого пакет считается завершенным.

В описании протокола дается такая формула:

Следующая формула оценивает время передачи:
                1000 Х (счетчик символов) Х (битов в символе)
  Время = ---------------------------------------------------
                                 Скорость передачи

По ней это время и расчитывается? Если да, то что есть "счетчик символов"?

"Переменные, которые можно только считать из контроллера и нельзя записать, в отличие от регистров 4х (аналоговые выходы)."

Т.е. вы хотите сказать, что регистры, доступные только для чтения, следует делать как 3х? Например регистры, хранящие результаты некоторых измерений.

"Остальные вопросы с 5 по 15 - это из разряда "оно надо?". :) Вряд ли понадобится, только если прибор серьезный разрабатывается."

Может быть и не надо. В таком случае буду возвращать что-ниубдь вроде "функция не поддерживается" или вообще ничего.

Наверх
Petrov Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 15 Январь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 805
Свойства публикации Свойства публикации   Ответить, цитируя автора - Petrov Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 04 Июнь 2007 10:30

...в сеть с другими режимом передачи. Поэтому вопрос остается в силе.

Ваше право. В принципе можно как вы задумали изначально с автоопределением первого символа. Но адрес 3а в рту теряется.

 

По ней это время и расчитывается? Если да, то что есть "счетчик символов"?

Счетчик символов, очевидно, и есть те самые 3,5 байта. :)

 

Т.е. вы хотите сказать, что регистры, доступные только для чтения, следует делать как 3х? Например регистры, хранящие результаты некоторых измерений.

Ага. Переменные которые можно и прочитать и записать извне - в 4х.

Наверх
Phenix Смотреть выпадающим
Новичок
Новичок


Присоединился: 18 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 30
Свойства публикации Свойства публикации   Ответить, цитируя автора - Phenix Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Июнь 2007 16:18

Следующий вопрос. В описании протокола говорится про ответный фрейм:

Адрес подчиненного

Функция

Счетчик байт 4

Сколько байт занимает Счетчик байт? 4 - это как раз то самое количество или что это?

 

Наверх
Phenix Смотреть выпадающим
Новичок
Новичок


Присоединился: 18 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 30
Свойства публикации Свойства публикации   Ответить, цитируя автора - Phenix Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 23 Август 2007 10:08

По поводу подсчета LRC для ASCII-сообщения.

Что cуммировать, сами байты после их преобразования из НЕХ или их HEX коды? Например, при проверке запроса на Slave с адресом 5 с функцией 03, Суммировать байты 5+3+..... ИЛИ 30Н+35Н+30Н+33Н+....

Создал несколько регистров на OPC-сервере, потом обращаюсь к устройству. Получаю следующий запрос (запрос на чтение регистра 1104 с устройства 1 функцией 3):

3A 30 31 30 33 30 34 35 30 30 30 30 31 41 37 0D 0A

Судя по всему, 41 37 - это LRC.Ее значение A7h = 167.

Читаю описание протокола.

"Алгоритм генерации LRC:
1. Сложить все байты сообщения, исключая стартовый символ ':' и конечные CRLF, складывая их так, чтобы перенос отбрасывался.
2. Отнять получившееся значение от числа FF(Hex) - это является первым дополнением.
3. Прибавить к получившемуся значению 1 - это второе дополнение."

Исключить видимо следует еще и 2 символа, описывающие собственно LRC. Т.е. пропустить 1 байт в начале и 4 байта в конце. Делаю для вышеупомянутого запроса соответствующие действия (len-длина сообщения - в данном случае 17 байт, lrc имеет тип byte):

 lrc:=0;
 for n:=1 to len-5 do
  lrc:=lrc+buffer[n];
 lrc:=$ff-lrc; {первое дополнение}
 inc(lrc);       {второе дополнение}

Получаю B2h = 178

В чем ошибка?

Наверх
Phenix Смотреть выпадающим
Новичок
Новичок


Присоединился: 18 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 30
Свойства публикации Свойства публикации   Ответить, цитируя автора - Phenix Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 23 Август 2007 13:18
Дополнение к последнему сообщению. Использую OPC-сервер KEPServerEx V4.0.
Наверх
 Ответить Ответить Страница  <12

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz