|
ТЕПЛОСЧЕТЧИКИ • ВОДОСЧЕТЧИКИ • РАСХОДОМЕРЫ • ВИС.Т |
|
| | |
CH |
Re: протокол гидра |
Администратор
|
|
Цитата: 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, в котором одному богу известно, как интерпретировать его массивы данных.
Цитата: Возможно у Вас все-таки есть руководство, применимое к устройству ВИС.Т? Или примеры работы с разбором данных?
см. выше.
-- Виктор В. Жданов NegaSoft Co. FAE НПО "Тепловизор", Главный инженер-программист |
|
» 5.7.06 18:40 |
|
|
Konstantin |
Re: протокол гидра |
Новенький
|
|
Пишу программу под DOS, так что скоре всего dll не подойдет. Если только нет исходных алгоритмов разбора данных (если есть, то был бы очень благодарен) В руководстве сказано: …при использовании команды без параметра прибор отвечает посылкой, содержащей значения всех доступных параметров… Открываю приложение “С” руководства и смотрю на полную информационную часть ответного пакета команды “mon c”, считаю байты, получаю 66 байт информации. Даю команду “mon c” без параметров и собираюсь разобрать пакет, а у меня величина всей ответной посылки для команды “mon c” равна 45 байт. И как же мне теперь его разбирать, что тут есть, а чего нет? Действительно, в руководстве ничего не сказано о том, что разным устройствам соответствует свои пакеты данных, и уж тем более не сказано о том какому прибору соответствует какой пакет данных. Возможно у Вас все-таки есть руководство, применимое к устройству ВИС.Т? Или примеры работы с разбором данных? |
|
» 5.7.06 15:59 |
|
|
2kon |
Re: Modbus |
Администратор
|
|
Цитата: Konstantin пишет: Когда реально можно опробовать протокол Modbus? Можно ли перепрошить уже имеющийся ВИС.Т для работы с протоколом?
Ориентировочно через пару недель, как только будет закончена документация. Да, можно, но для смены ПО необходимо связаться со службой сервиса, см. раздел - Контакты.
-- Константин Константинов НПО "Тепловизор", инженер-программист |
|
» 4.7.06 14:03 |
|
|
Norilsk |
Re: Modbus |
Новенький
|
|
Имеется ввиду одновременный доступ и по стандартному RS-232 (с компьютером) и по RS-485 (Modbus) с контроллером. Соответственно вопрос про ПО для связи по RS-232. Идет ли какое-нибудь в комплекте с теплосчетчиком или надо отдельно заказывать? |
|
» 29.6.06 05:45 |
|
|
ПраваВы не можете начинать темы. Вы не можете редактировать свои сообщения. Вы не можете создавать опросы. Вы не можете вкладывать файлы в сообщения. Вы не можете отвечать на сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать.
|
|
|