Вы запрос счетчика можете можете показать со стороны ПЛК ? снифером подключиться например ?
У него сперва идет команда открытия канала с паролем доступа, только потом запрос параметров.
2017-04-26 14:54:36 Сеанс связи с КП 65 "Меркурий236_энергия", тип: KpMercury23x, адрес: 20
Отправка (4): 14 00 0E B0 // Запрос тестирования канала
Приём (4/4): 14 00 0E B0
OK!
Отправка (11): 14 01 01 01 01 01 01 01 01 88 81 // Открытие канала команда 1 с уровнем доступа 1, пароль 111111 в HEX (отсечение 0x30)
Приём (4/4): 14 00 0E B0 // подтверждение открытия канала
OK!
Отправка (5): 14 08 02 B7 C5 // Ну дальше посыпались запросы и ответы параметров
Приём (7/7): 14 00 01 00 01 84 03
OK!
Отправка (5): 14 03 08 30 F2
Приём (4/4): 14 00 0E B0
OK!
Отправка (6): 14 08 14 F0 8B 52
Приём (19/19): 14 37 00 15 92 FF FF FF FF 00 00 71 41 0C 00 FB B6 58 A9 // собственно 4 FF это должна была быть Активная обратного направления, но ее нет.
OK!
Отправка (6): 14 08 14 F1 4A 92
Приём (19/19): 14 27 00 A0 1D FF FF FF FF 00 00 CE 37 08 00 5D 84 22 9F
OK!
Отправка (6): 14 08 14 F2 0A 93
Приём (19/19): 14 10 00 75 74 FF FF FF FF 00 00 A3 09 04 00 9E 32 CF AB
OK!
Отправка (6): 14 05 60 00 3D D5
Приём (15/15): 14 1D 00 D5 FB 03 00 C6 9A 15 00 5F FB 09 4E
Отправка (6): 14 05 60 01 FC 15
Приём (15/15): 14 15 00 16 B6 02 00 30 74 0E 00 46 F3 45 0E
Отправка (6): 14 05 60 02 BC 14
Приём (15/15): 14 08 00 BF 45 01 00 96 26 07 00 19 08 35 8B
Ну как-то так, но это не ПЛК посылает, а dll
В поле пароля вводятся символы 1 это 0x31 в ASCII формате, а в запросе счетчику посылается 0х01. Я пока не пробовал менять пароль на другой, по идее счетчик должен принимать пароли из ASCII таблицы начиная от 0 и выше, кроме последнего или двух, соответственно я делал отнимание 0x30 от кода ASCII символа
Да, канал открывается на 240 секунд у последних счетчиков, потом автоматом закрывается, если не было опроса.
Последний раз редактировалось melky; 26.04.2017 в 15:29.
точно не помню, воспринимает ли меркурий пароли с буквами, но если делать только числовые , то сделайте так
password : STRING(6):='222222';//пароль для доступа к уровню 2 счётчика
short_password :STRING(1);
buff_password :ARRAY [0..6] OF BYTE;
ptr : POINTER TO BYTE;
ptr2 : POINTER TO BYTE;
buff_password[0]:=2;// уровень доступа
ptr:=ADR(password);
ptr2:=ADR(short_password);
ptr2^:=ptr^;
buff_password[1]:=STRING_TO_BYTE(short_password);
ptr:=ptr+1;
ptr2^:=ptr^;
buff_password[2]:=STRING_TO_BYTE(short_password);
ptr:=ptr+1;
ptr2^:=ptr^;
buff_password[3]:=STRING_TO_BYTE(short_password);
ptr:=ptr+1;
ptr2^:=ptr^;
buff_password[4]:=STRING_TO_BYTE(short_password);
ptr:=ptr+1;
ptr2^:=ptr^;
buff_password[5]:=STRING_TO_BYTE(short_password);
ptr:=ptr+1;
ptr2^:=ptr^;
buff_password[6]:=STRING_TO_BYTE(short_password);
В документации вообще указано, что первый уровень доступа 111111 - 0x31 0x31 0x31 0x31 0x31 0x31 только не прокатывает
базовые пароли
уровень 1 - 111111
уровень 2 - 222222
если выполнить приложенный мной код то пароль из 222222 превратится в
0x02 0x02 0x02 0x02 0x02 0x02 что нужно
а не 0x32 0x32 0x32 0x32 0x32 0x32
пользовался вторым уровнем доступа, чтобы получить возможность записи параметров, не требующих метрологического опломбирования после изменения.
Ну так я достал документашку из стола и сам удивился, хотел посмотреть поддержку ASCII символов в паролях.
Кстати если снять галочку HEX в конфигураторе, то отправка будет действительно 0x32 только счетчик не будет ничего записывать и читать сторонними программами.