Автор |
Сообщение |
Сообщение создано: 22. 07. 2009 [08:51]
|
ruslan
Руслан Нургалин
Создатель темы
Зарегистрирован(а) с: 25.06.2009
Сообщения: 15
|
Всем доброго времени суток! Уважаемые форумчане, обращаюсь к вам с таким вопросом, исходя из названия темы, - Весовой процессор ПВ -310 производства SWEDA, протокол обмена данными ModBus ASCII, связи с ним ни как не удается установить формат обмена данными - :[адрес][функция][данные][LCR][0d,0a]. Было ли у кого ни будь решение такого вопроса?
|
Сообщение создано: 22. 07. 2009 [09:01]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
Шлите тестовые запросы в подсистеме транспорты, взять можно из протокола запросов ModBus.
Вообще ASCII крайне медлен из-за в дважды больших запросов и поэтому требует больший таймингов. В Демо я ставил ASCII и тестил через COM на себя. Всё работало, при увеличенных таймингах.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 14. 04. 2010 [13:06]
|
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
|
В весовом процессоре ПВ-310 и во многих других устройствах (по описаниям в интернете) подчёт LRC происходит следующим образом:
1. Складываются все байты, кроме начального ":" и завершающих двух символов. Переносы в разряды старше байта игнорируются.
2. Из 0xFF вычитается полученная сумма (получение доп. кода).
3. К полученному доп.коду прибавляется 1.
Вот образец программы на Си:
BYTE LRC (BYTE *nData, WORD wLength)
{
BYTE nLRC = 0 ; // LRC char initialized
for (int i = 0; i < wLength; i++)
nLRC += *nData++;
return (BYTE)(-nLRC);
} // End: LRC
В модуле MODBUS DAQ OpenSCADA реализован следующий код (только пункт 1 по алгоритму выше):
uint8_t TProt::LRC( const string &mbap )
{
uint8_t ch = 0;
for( int i_b = 0; i_b < mbap.size(); i_b++ )
ch += (uint8_t)mbap[i_b];
return ch;
}
Это верный подсчёт контрольной суммы для каких-то устройств или ошибка?
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Сообщение создано: 14. 04. 2010 [13:35]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
У меня небыло возможности проверить ASCII на стороннем оборудовании, в виду его отсутствия.
Код вычисления LRC брал из библиотеки от Moxa, сейчас её под рукой нет.
Возможно при переносе и ошибся.
Проверьте на своём оборудовании, если будет работать я поправлю.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 14. 04. 2010 [14:12]
|
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
|
С таким подсчётом LRC опрос 2 байтных регистров весового процессора ПВ-310 пошёл:
uint8_t TProt::LRC( const string &mbap )
{
uint8_t ch = 0;
for( int i_b = 0; i_b < mbap.size(); i_b++ )
ch += (uint8_t)mbap[i_b];
return (uint8_t)(-ch);
}
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Сообщение создано: 14. 04. 2010 [15:11]
|
ruslan
Руслан Нургалин
Создатель темы
Зарегистрирован(а) с: 25.06.2009
Сообщения: 15
|
В продолжение темы:
Возникла ситуация когда необходимо считывать данные из 4-х байтного регистра, проблема в том что модуль ModBUS выдает содержимое только первых двух регистров.
При отправке запросов вручную:
Запрос - 3a 30 36 30 33 30 30 30 33 30 30 30 31 46 33 0d 0a
Ответ - 3a 30 36 30 33 30 34 30 30 30 35 46 43 39 34 35 45 0d 0a
|
Сообщение создано: 14. 04. 2010 [15:32]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
ruslan wrote:
В продолжение темы:
Возникла ситуация когда необходимо считывать данные из 4-х байтного регистра, проблема в том что модуль ModBUS выдает содержимое только первых двух регистров.
И в чём собственно проблема? В том что читаются два регистра, так это правильно (в сумме это 4 байта) или в том что первые два, тогда где конфигурация для которой это не верно?
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 14. 04. 2010 [15:32]
|
ruslan
Руслан Нургалин
Создатель темы
Зарегистрирован(а) с: 25.06.2009
Сообщения: 15
|
Прошу прощения, в сообщении выше закралась ошибка: ModBUS выдает содержимое только первых двух байт регистра.
|
Сообщение создано: 14. 04. 2010 [15:34]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
ruslan wrote:
Прошу прощения, в сообщении выше закралась ошибка: ModBUS выдает содержимое только первых двух байт регистра.
Регистр в ModBus это и есть два байта!
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 14. 04. 2010 [15:40]
|
ruslan
Руслан Нургалин
Создатель темы
Зарегистрирован(а) с: 25.06.2009
Сообщения: 15
|
В случае с весовым процессором ПВ-310 есть и 4-х байтные регистры.
|