Форум : Оборудование производства НПО "Тепловизор"Название : 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 |
Большое спасибо за поддержку, теперь все понятно. | |
|
|