/  Архив форума
   /  Оборудование производства НПО "Тепловизор"
/  Modbus

Форум : Оборудование производства НПО "Тепловизор"

Название : Modbus

© NegaSoft co., 2005
http://www.teplovizor.ru

URL этой темы
http://www.teplovizor.ru/forum/viewtopic.php?topic_id=11&forum=1


 Norilsk :

23.6.06 13:18
 Добрый день.
Подскажите, протокол Modbus уже поддерживается на ваших теплосчетчиках, и где про это можно поподробнее почитать?

 CH :

23.6.06 14:58
 Да, версия программы HC-M-2.19 вместо нашего протокола hLink включает MODBUS. С "почитать" сложнее, ибо нет для программиста работы тяжелее написания документации, но работа над ней ведётся. Предварительно могу сообщить некоторые общие сведения о реализации:

- Интерфейс физического уровня: RS-485 (двухпроводный), RS-232, Ethernet TCP/IP
- Режим работы при RS-подключении: RTU; скорость и формат данных : 19200/9600 бод, 8E1 (8 бит данных, чётность, 1 стоп-бит)
- Режим работы при TCP/IP-подключении: как одиночный сервер или шлюз для других устройств в подсети RS-485.
- Все передаваемые данные являются строками или целыми числами, передача осуществляется старшим байтом вперёд (big-endian).
- Сетевой адрес 255 используется при выполнении сервисных операций для автоматического поиска приборов и таким образом не может использоваться в многоприборных MODBUS-сетях. В тоже время в соответствии со стандартом MODBUS этот адрес является зарезервированным и его использование при обмене данными не допускается в любом случае.

Используются команды MODBUS:
- 03 (0x03, Read Holding Registers) для получения конфигурационных и настроечных параметров приборов.
- 04 (0x04, Read Input Registres) для получения текущих значений измеряемых и вычисляемых параметров, а также регистров состояния прибора.
- 20/6 (0x14/0x06, Read File Record) для получения данных из архива прибора.

Возможные неудобства:
Все значения передаются в виде целых чисел, для приведения их к реальным значениям (там, где это требуется) нужно использовать приведение через передаваемое совместно число знаков после запятой.

 Norilsk :

28.6.06 07:30
 В связи с написанием проекта возникли еще вопросы:
1. Идет ли в комплекте с теплосчетчиком какое-либо ПО и где в карте заказа теплосчетчика это указывать? или все ПО надо отдельно заказывать?
2. Тип протокола (версия программы) для Modbus тоже в карте заказа на теплосчетчик негде указать.
3. В каком виде эта версия программы представлена - уже "зашита" в прибор или на носителе, самим потом её можно менять?
4. Если будет заказана версия программы для Modbus на RS 485, то останется ли возможность связаться с прибором по стандартному последовательному RS 232 с компьютером, или это тоже надо указывать заказе?

[ Редактировано Norilsk в 28.6.06 08:54 ]

 CH :

28.6.06 15:17
 1. Какое именно ПО вас интересует? Для Modbus-версии дополнительное ПО не предусматривалось, поскольку если уж клиенту нужен "стандартный" протокол, вероятно он хочет использовать его для работы с собственным софтом.
2. Запрос на дорабтку формы заказа направлен маркетологам. У них свой маркетологический взгляд на форму заказа, поэтому она и напоминает фиговый листок. На производстве применяется совершенно другая форма заказа.
3. Самостоятельная смена ПО прибора не предусмотрена, хотя с появлением Modbus-версии возможно идея обретёт воплощение.
4. RS-232 есть всегда. В приборах с TCP/IP также всегда есть и RS-485.

 Norilsk :

29.6.06 05:45
 Имеется ввиду одновременный доступ и по стандартному RS-232 (с компьютером) и по RS-485 (Modbus) с контроллером.
Соответственно вопрос про ПО для связи по RS-232. Идет ли какое-нибудь в комплекте с теплосчетчиком или надо отдельно заказывать?

 CH :

29.6.06 11:32
 Поясняю, как устроены порты RS-232/485 в приборе.
У приборного процессора один единственный последовательный порт, который в зависимосоти от настройки в меню прибора подключен или к разъёму RS-232 или RS-485. Так что _одновременно_ передавать/принимать что-либо через два разных порта невозможно физически.

Теперь о протоколах удалённого доступа.
Modbus _заменяет_ стандартный для ВИС.Т'ов протокол hLink. Соответственно работа через все интерфейсы RS-232/485 возможна только по Modbus. Прибор не включает функциональность одновременно двух протоколов удалённого доступа - только одного из двух, в соответствии с версией загруженного ПО.

Важно, чтобы вы правильно понимали возможности прибора, чтобы не получить неприятный сюрприз в последний момент. Напоследок о дополнительном софте: все программы на сайте предназначены для ВИСТ'ов и свободно скачиваются, работу с Modbus-приборами ни одна из них не поддерживает.

[ Редактировано Sot в 30.6.06 18:37 ]

 Konstantin :

4.7.06 12:59
 Здравствуйте!
Когда реально можно опробовать протокол Modbus? Можно ли перепрошить уже имеющийся ВИС.Т для работы с протоколом?

 2kon :

4.7.06 14:03
 Цитата:

Konstantin пишет:
Когда реально можно опробовать протокол Modbus? Можно ли перепрошить уже имеющийся ВИС.Т для работы с протоколом?


Ориентировочно через пару недель, как только будет закончена документация. Да, можно, но для смены ПО необходимо связаться со службой сервиса, см. раздел - Контакты.

 Konstantin :

5.7.06 14:16
 Добрый день.
Какой командой запрашиваются текущие параметры прибора?
На команду /mon c ВИС.Т отвечает пакетом в 45 байт, когда в описании протокола сказано что только информационная часть ответного пакета содержит 58 байт? Может версия у меня старая или протокола или ПО ВИС.Та?

 CH :

5.7.06 14:54
 Ни то, ни другое, ни третье. Про 58 байт не сказано ни слова ни на одной странице руководства. Цитирую: "Упакованная структура данных ... Параметр <маска> определяет наличие или отсутствие в пакете отдельных элементов структуры."
Вероятно вы не обратили внимание на слова об упакованности. Структура прореживается за счёт несуществующих в приборе параметров и потому размер её может существенно различаться для разных приборов.
Кстати, под какую платформу и на чём вы пишете? Если необходимо иметь только текущие данные / наработку, может имеет смысл попробовать нашу dll-библиотеку, приложенную к OPC-серверу?

 Konstantin :

5.7.06 15:59
 Пишу программу под DOS, так что скоре всего dll не подойдет. Если только нет исходных алгоритмов разбора данных (если есть, то был бы очень благодарен)
В руководстве сказано:
…при использовании команды без параметра прибор отвечает посылкой,
содержащей значения всех доступных параметров…
Открываю приложение “С” руководства и смотрю на полную информационную часть ответного пакета команды “mon c”, считаю байты, получаю 66 байт информации. Даю команду “mon c” без параметров и собираюсь разобрать пакет, а у меня величина всей ответной посылки для команды “mon c” равна 45 байт. И как же мне теперь его разбирать, что тут есть, а чего нет? Действительно, в руководстве ничего не сказано о том, что разным устройствам соответствует свои пакеты данных, и уж тем более не сказано о том какому прибору соответствует какой пакет данных. Возможно у Вас все-таки есть руководство, применимое к устройству ВИС.Т? Или примеры работы с разбором данных?

 CH :

5.7.06 18:40
 Цитата:

Konstantin пишет:
В руководстве сказано:
…при использовании команды без параметра прибор отвечает посылкой, содержащей значения всех доступных параметров…

"Доступных" в данном контексте означает тех, которые доступны прибору (не сказано же просто "всех"). Если у прибора нет датчика температуры T3, так он её и не передаст, сократив структуру на соотвеоствующие 3 байта.

Цитата:

Открываю приложение “С” руководства и смотрю на полную информационную часть ответного пакета команды “mon c”, считаю байты, получаю 66 байт информации. Даю команду “mon c” без параметров и собираюсь разобрать пакет, а у меня величина всей ответной посылки для команды “mon c” равна 45 байт. И как же мне теперь его разбирать, что тут есть, а чего нет?

В пакете передаётся маска параметров(4 байта). Первый бит 1 - есть подающий расход (и его точка), второй бит 1 - есть обратный расход (и его точка) итд по структуре:
typedef struct { long v1;
unsigned char v1point;
long v2;
unsigned char v2point;
long v3;
unsigned char v3point;
long g1;
unsigned char g1point;
long g2;
unsigned char g2point;
long g3;
unsigned char g3point;
short t1;
unsigned char t1point;
short t2;
unsigned char t2point;
short t3;
unsigned char t3point;
short t4;
unsigned char t4point;
unsigned char p1;
unsigned char p1point;
unsigned char p2;
unsigned char p2point;
unsigned char p3;
unsigned char p3point;
long q;
unsigned char qpoint;
unsigned long err32;
unsigned char err32point;
} HCMONITORCURRENT;

Вот пример в досовской манере (надеюсь не напутал):

void swapper(unsigned char* dest, unsigned char* src, int num)
{
unsigned char* temp = new unsigned char[num];

memcpy(temp, src, num);

while(num--)
{
*(dest++) = *(temp+num);
}

delete temp;
}

void UnpackCPacket(unsigned char* dest, unsigned char* src, unsigned long mask)
{
const int
HcMonCurrSize[] = { sizeof(long) + 1, /* V1 */
sizeof(long) + 1, /* V2 */
sizeof(long) + 1, /* V3 */
sizeof(long) + 1, /* G1 */
sizeof(long) + 1, /* G2 */
sizeof(long) + 1, /* G3 */
sizeof(short) + 1, /* T1 */
sizeof(short) + 1, /* T2 */
sizeof(short) + 1, /* T3 */
sizeof(short) + 1, /* T4 */
sizeof(char) + 1, /* P1 */
sizeof(char) + 1, /* P2 */
sizeof(char) + 1, /* P3 */
sizeof(long) + 1, /* Q */
sizeof(unsigned long) + 1 /* e32*/
};

for(int i = 0; i < (sizeof(HcMonCurrSize)/sizeof(HcMonCurrSize[0])); i++)
{
if( mask & 0x00000001 )
{
// Распаковываем сразу с переворотом
swapper(dest, src, HcMonCurrSize[i]-1);
dest[HcMonCurrSize[i]-1] = src[HcMonCurrSize[i]-1];
src += HcMonCurrSize[i];
}
else memset(dest, 0, HcMonCurrSize[i]);

mask >>= 1;

/* Сдвинуть указатель неупакованной записи */
dest += HcMonCurrSize[i];
}
}

//Теперь, dann - инф. часть пакета данных команды /MON C
unsigned long mask = *((unsigned long*)((unsigned char*)dann + 1));

swapper((unsigned char*)&mask, (unsigned char*)&mask, sizeof(mask));

HCMONITORCURRENT m;

// Распаковать параметры из пакета в структуру
UnpackCPacket((unsigned char*)(&m), dann + 5, mask);

// Что было, распаковано в ПОЛНУЮ структуру m.

Цитата:

Действительно, в руководстве ничего не сказано о том, что разным устройствам соответствует свои пакеты данных, и уж тем более не сказано о том какому прибору соответствует какой пакет данных.

Надеюсь, прочтя предыдущий абзац вы поняли, что все необходимые для интерпретации пакета данные присутствуют в самом пакете. Это не SA94, в котором одному богу известно, как интерпретировать его массивы данных.

Цитата:

Возможно у Вас все-таки есть руководство, применимое к устройству ВИС.Т? Или примеры работы с разбором данных?


см. выше.

 Konstantin :

5.7.06 19:25
 Большое спасибо за поддержку, теперь все понятно.