четверг, 28 апреля 2016 г.

Длинные команды в PLC I



PLC один устоячиво занимает место бюджетной системы дистанционного  сбора данных со счетчиков электроэнергии. Несмотря на то, что широко используется PLC II, на подходе PLC III, интерес к PLC I сохраняется. Поэтому продолжаем разбираться  с ее функционалом и сегодня затроним вопрос с длинными командами в PLC I.


Описание  длинных команд можно найти в  соответствующем документе. Приведу здесь основную информацию из него.
Длинные команды используются в том случае, когда возникает необходимость передать сетевому устройству команду, длина которой с аргументами превышает длину полезной нагрузки типового PLC-пакета (4 байта).
При  передаче длинных команд концентратор  передаёт адресный PLC-пакет  Сетевое устройство, имеющее указанный адрес и способное выполнить командный файл данного типа, "открывает" у себя в оперативной памяти буфер соответствующего размера и переходит в режим приёма указанного количества PLC-пакетов с данными. Концентратор  передаёт серию PLC-пакетов. 
После приёма последнего PLC-пакета с данными сетевое устройство проверяет целостность принятого командного файла и выполняет содержащуюся в нём команду. В качестве подтверждения выполнения команды сетевое устройство в течении 255 минут передаёт PLC-пакеты типа DAh ( "Выполнено" ) . Передача этих PLC-пакетов может быть прервана либо поступлением от концентратора любого PLC-пакета,, либо специальной командой типа DBh (возврат счетчика в режим "по умолчанию").
Для передачи длинных команд можно воспользоваться программным обеспечением BMonitor  и BQuark.
В  программе  BMonitor   для передачи длинных команд используется  поле размещенное на вкладке "Сервис", которая открывается кликом мыши по пустому пространству окна программы  справа от кнопки вызова справки и при удерживаемой в нажатом состоянии кнопки Ctrl

 В левом окне "Тип" указывается тип длинной команды. Их всего четыре:

ТИП
ПРИМЕЧАНИЯ
00h
Эмуляция системы команд счётчиков "Меркурий-200"
(без адреса счётчика в начале и без контрольной суммы в конце)
01h
Эмуляция системы команд счётчиков "Меркурий-230"
(без контрольной суммы)
10h
Команда на изменение тарифного расписания для многотарифных счётчиков электроэнергии
11h
Команда на изменение списка праздничных дней текущего года для многотарифных счётчиков электроэнергии

Далее указывается адрес, или ставится галочка широковещательной команды. В длинном поле указывается сама команда, байты указываются через пробел. Для выполнения, кликается кнопка "Выполнить"
На исполнение можно назначать несколько команд. В этом случае они буду сохранены в буфере концентратора  и будут выполняться по очереди, в соответствии с порядком их поступления в буфер.
Записать несколько команд можно поочередно вписывая их в поле команды и нажимая для каждой из них кнопку "Выполнить".
Для контроля заполнения буфера необходимо воспользоваться функцией "Проверка PLC буфера".
Для трехфазных счетчиков, для осуществления настроек в счетчике  всегда необходимо открывать канал связи на втором уровне доступа. Поэтому первой в очереди должна быть команда вида:

01 01 02 02 02 02 02 02 02
 
Второй особенностью работы с трехфазными счетчиками является необходимость добавления байта  01 вначале каждой посылки.



Программа не распознаёт ответы от счётчика на запросы в виде эмуляции системы команд счётчиков «Меркурий», поэтому по результату выполнения команд  в столбцах «Текущее» и «Срез» отображается содержимое полученного от счётчика пакета без расшифровки, а в поле «Пакет» при этом присутствует запись «Не выполнено» для «Меркурий 230» и выполнено для «Меркурий 200».

В программе BQuark, длинная команда прописывается в файле задания. Команда имеет вид:

RUN=M-230 - для трехфазников

и

RUN=M-200 - для однофазников


Родительским объектом для данной команды является объект  PLC_I_CONCENTRATOR
Дополнительные  параметры команды :
HEX =...   - HEX-строка с произвольной командой, адресованной счётчику (без сетевого адреса и контрольной суммы) в соответствии с протоколом счетчика.
DEVICE=54   - номер счётчика. Если параметр отсутствует, то команда будет адресована всем счётчикам сразу.

Пример. Команда управления реле в трехфазном счетчике.

OBJECTS
    TYPE=GSM_TERMINAL
        TYPE=GSM_GATE; NUMBER=+79159477417
            TYPE=PLC_I_CONCENTRATOR; ADDR=2001
                TYPE=COMMAND; RUN=M-230; HEX=01 01 02 02 02 02 02 02 02
                TYPE=COMMAND; RUN=M-230; HEX=01 03 18 01


Команды, для счетчиков формируются в соответствии с описанием системы команд. Их я размещу в следующей статье.

Время выполнения команд в PLC I довольно продолжительно и может достигать 30 минут и более, в зависимости от длины команды.

35 комментариев:

  1. У нас остро стоит вопрос по поводу перехода на полные показания. сотни счетчиков установлены с возможностью перехода, а сотни нет. И на каким подстанциям какие подключены не известно. Нам хотелось бы знать как послать адресно команду одному счетчику перейти в режим по умолчанию. В кротких командах даётся общая команда для всех FF 1F возможно ли вместо этого записать конкретный адрес? Или как это сделать с помощью длинной команды?

    ОтветитьУдалить
    Ответы
    1. 1FFF - это сетевой идентификатор означающий что команда широковещательная. Указывается младшим байтом вперед и поэтому имеет вид FF 1F
      Вместо FFF можете указать сетевой адрес конкретного счетчика.

      Удалить
    2. Например? Если скажем будет номер 1 или 121 как его записать?

      Удалить
    3. 121 переводим в hex - получаем 79
      Записываем в поле SSSS пишем 79 10

      Удалить
  2. Большое спасибо!!!

    ОтветитьУдалить
  3. 1.Как будет выглядеть пароль для открытия сеанса 489696
    TYPE=COMMAND; RUN=M-230; HEX=01 01 02 04 08 09 06 09 06
    Правильно ?

    2.Нужно ли открывать канал связи для перевода в однотарифный режим ?
    TYPE=COMMAND; RUN=M-230; HEX=01 03 2A 01

    ОтветитьУдалить
    Ответы
    1. Да. Все верно. При условии , что пароль в HEX кодировке. По умолчанию она именно HEX.

      Удалить
    2. А если в ASCII ?
      Как тогда указать?

      Удалить
    3. В соответствии с таблицей символов ASCII

      Удалить
  4. Хотелось бы уточнить такую путаницу в PLC-1.
    При каких условиях в каких командах , когда указывается группа счётчиков DEVICE=1,2,3,4 и когда
    указывается
    DEVICE=1
    DEVICE=2
    DEVICE=3
    DEVICE=4

    И как правильно работать именно с группой счётчиков ?



    ОтветитьУдалить
    Ответы
    1. Свойство DEVICE предназначено только для работы с одним счетчиком. Путаницы тут нет.

      Удалить
    2. А как обьяснить вот эту комманду ?
      TYPE=COMMAND; RUN=M-230; HEX=01 03 2A 01; DEVICE=160,159

      Обработались оба счётчика, остальные работают в тарифном режиме!!

      Удалить
    3. Не припомню что бы я указывал такую команду где-то. И в документации не встречал.

      Удалить
    4. 1.Так почитайте "Краткая справка по протоколу счётчиков М-230" в справке к Бикварку.

      2.Как же Вы переводите многотарифные счётчики в однотарифный?

      Удалить
    5. Для перевода ограниченной группы счетчиков потребуется несколько раз выполнить файл с командами для разных счетчиков. Если в одном файле размещать много команд, то может не хватить буфера обмена концентратора. В тоже время, если был успешный опыт использования команды DEVICE=1,3,5 то можно использовать её. Возможно это из разряда не предусмотренных возможностей.

      Удалить
  5. Подскажите пожалуйста как правильно пользоваться предоставленной в руководстве "Меркурий-PLC-I. Система сбора данных. Техническое описание" функцией long crc_octets (char *octets, int len)для расчета CRC24. Что нужно подставлять в аргументы функции?

    Чтобы не пробовал, полученный CRC код не совпадает с тем, что получаю при общении компьютера с концентратором 225.11 (использовал программу снифер).

    ОтветитьУдалить
    Ответы
    1. *octets - указатель на цепочку из len байтов от которых CRC24 высисляется

      Удалить
    2. Верна ли запись на C:
      std::cout << std::hex << " " << crc_octets("FFFF492401",5) << std::endl;

      в результате получаю crc = D2 60 B0.

      а в перехваченном сообщении от хоста к концентратору CRC = 80 53 1C

      (полный запрос 80 53 1C FF FF 49 24 01 86 85).

      что может быть не так?
      оговорюсь, обладаю неглубокими познаниями в С, да и с расчетом crc еще дела не имел, прошу прояснить ситуацию.

      Удалить
    3. Вопрос все еще актуален

      Удалить
    4. В настоящее время нет возможности ответить Вам, т.к. программист находится в отпуске.

      Удалить
    5. Отвечу на свой вопрос сам:
      Не правильно передавал аргумент octets в функцию.
      Передавал строку в виде Символов, нужно передавать в виде 16ричных значений, тогда все ок:

      char octets[] = { 0xFF, 0xFF, 0x49, 0x24, 0x01 }; //
      std::cout << std::hex << " " << crc_octets(octets,5) << std::endl;

      Удалить
  6. Добрый день!
    Отправили через концентратор команду на чтение серийного номера счетчика. После этого счетчик перестал передавать показания. Поможет ли нам команда "перейти в режим по умолчанию"? И если ее отправить всем счетчикам, то не нарушится ли работа остальных счетчиков, передающих показания по тарифам?

    ОтветитьУдалить
    Ответы
    1. Причина того, что счетчик не отработал команду на передачу серийного номера может заключаться в том, что счетчик не поддерживает её.
      Вернуть счетчик в режим передачи показаний накопленной энергии в формате 4-х знаков можно отправив команду возврата счетчик в режим "по умолчанию" Все счетчики отработавшие эту команду начнут передавать накопленные данные в формате 4-х знаков.

      Удалить
    2. Подскажите что за команда позволяет считать серийные(заводские номера счетчиков?) , не могу откопать нигде ее..

      Удалить
    3. Вы планируете "читать" серийный номер через PLC I интерфейс?

      Удалить
    4. Здравствуйте.Спасибо за обратную связь.
      Да у меня свежие Меркурии 234 на 3 ветках ТМ-1 ТМ-2, ТМ-3..
      Структура спроектирована так, что на ТМ-1 256 счетчиков должны сидеть на фазе А, 256 на ТМ-2 на фазе B и 256 ТМ-3 на фазе С.
      На каждой ветке в счетчике запрограммированы номера рабочей сетки с 1по 256.
      Учитывая специфику монтажа на данный момент приводим фазировку в соответствие.
      Насколько я понял что в случае с PLC-1,без использования ключей шифрования, возможен вариант чтения счетчика через силовой трансформатор с таким же номером PLC модема, чего во избежания путаницы с показаниями хотелось бы избежать..
      Надеюсь прочитать заводские номера, сделать анализ и соответственно сфазировать то что нужно сфазировать,
      что бы за зря не лазать по столбам.
      Понял, что возможно через сервисные функции Bmonitor, короткими командами указать концентратору что ему нужно забирать со счетчика.
      При этом , учитывая размер буфера коротких комманд и их возможное количество,мне понимается , что концентратор может формировать и отправлять счетчику 18 различных запросов (по крайней мере доступных в интерфейсе Bmonitor), как то :
      --------------
      Энергия активная точный срез = 00/00
      Энергия активная фаза А точный срез =00/10
      Энергия активная фаза В точный срез =00/20
      Энергия активная Т1 точный срез =00/30
      и т.д вплоть до
      Серийный номер =02/48
      Энергия активная, текущий тариф на 00:00=02/FE
      Вернуться в режим по умолчанию =02/FF
      -------------------------------------
      Можно пояснить чтио имеется ввиду под каждой командой..
      Что значит точный срез ? На каком временном интервале? Что подразумевается под режимом по умолчанию? Какие данные концентратор запрашивает счетчик в этом случае?
      Ссылка Специальное описание коротких команд, составленное конструктором системы: https://yadi.sk/d/RGwyJz8Sphwc7 приводит к ознакомлению ( не факт что отвечает на все вопросы) на документ "Интерфейс сетевых устройств", описание PLC-пакетов для одно- и трёхфазных счётчиков электроэнергии - можно его как то получить?
      В документе "Описание протокола счетчика меркурий 234" про PLC изложено ооочень скромно..
      Для эксплуатации мне по сути нужны показания по тарифу1 и тарифу2 на 00-00 часов первого/последнего дня возможных месяцев работы.
      В счетчике данные авточтений на 00-00 часов 1 числа месяца естественно имеются.. Но у меня
      Где видел упоминание что возможно чтение концентратором 6(шести) последних месяцев..
      Подскажите пожалуйста как мне их в него (концентратор) вытащить?.
      Буду премного благодарен и очень признателен за рецепт вида "необходимо и достаточно"..
      Видел упоминание что, приотправке команды на чтение серийного номера на концентратор , он перестает запрашивать и соответственно собирать и передавать данные показаний.. Актуален ли еще этот момент в моем случае?
      Отключением нагрузки по PLC-1, несмотря на всевозможные извествные проблемы с обратной связью и прочее , планирую заняться чуть позже, если не выгонят с работы.. Еще раз заранее спасибо..

      Удалить
    5. Документация по PLC I : https://yadi.sk/d/xhXaKRT93LLM4k
      Сразу скажу, счётчик может передавать только один тип данных, поэтому если он работает в режиме "по умолчанию" то он передает данные по электроэнергии (4 знака - по текущему тарифу) . Если он переведен в режим передачи доп. данных, например серийного номера, то он передает только серийный номер. Далее данные сохраняются в концентраторе и мы их читаем уже из концентратора. В концентраторе могут сохраняться данные по предыдущим месяцам, например за 6-ть последних месяцев энергия по двум тарифам. Получить из счётчика мы можем только определенную часть данных, перечень этих данных вы упомянули, говоря о программе BMonitor.
      Срез - это данные, например, по энергии, на фиксированный момент времени, конкретно на начало суток.

      Удалить
  7. Спасибо за ответ и за ссылки. Поясните пожалуйста ситуацию. Прошил концентратор прошивкой рекомендуемой для сбора полных показаний по тарифам и сумме (uC.Rev.3.4-40.41.4F.hex). Требуемые показания пошли,считал. Даю команду через монитор считать серийные номера, но такое ощущение что концентратор ее игнорирует напрочь. Давал команду на чтение серийников 14 раз подряд так что буфер забивался . Так же прописываю эту же команду и пытаюсь заслать ее через бикварк , что получилось однажды с соседним концентратором по коммутируемой линии связи (через GSM модем CSD соединение) Реакция однотипная , 00011: i/o 000026:000010 (01:18:07): Режим работы концентратора: MAIN.
    00012: i/o 000026:000010 (01:18:07): "Прозрачный" режим: Нет.
    00013: i/o 000026:000010 (01:18:07): Автопереход на зимнее время: Нет.
    00014: i/o 000060:000020 (01:18:08): Концентратор 203D, показания часов/календаря: 1:15:36, 01.08.2017, вторник.
    00015: i/o 000146:000030 (01:18:09): Концентратор 203D, версия микропрограммы: 'uC.Rev.3.4-40.41.4F от 30.05.2016'.
    00016: i/o 000146:000044 (01:18:59): Запрос типа 'NoAnswer' '364FA6-FFFFFF1F05-DCFF1F0248-43', нет ответа, OK., после чего серийные номера считались,но вновь прошитый концентратор молчит. Подскажите что с ним происходит? Или что я понимаю неверно.. Думал уже попробовать вернуть прошлую прошивку- может в ней дело, хотя вы везде в комментариях пишете что это не влияет на короткие команды? Заранее спасибо!!

    ОтветитьУдалить
    Ответы
    1. Принимая во внимание ваше пояснение чуть выше, то получается что концентратор не хочет переводится в режим передачи дополнительных данных в части чтения серийного номера?

      Удалить
    2. Получение полных показаний - это тоже короткая команда. Концентратор с указанной прошивкой просто в циклическом режиме отправляет короткую команду на получение полных показаний. Поэтому команда на получение серийного номера замещается сразу следующей за ней командой на получение полных показаний и не выполняется счётчиком. Повторюсь, прошивка uC.Rev.3.4-40.41.4F.hex реализует получение полных показаний, постоянной отправкой счётчикам короткой команды на получение полных показаний.

      Удалить
  8. Здравствуйте!
    Возможно ли в PLCI скачивать профиль со счетчиков М 236 PQL и чтобы программа верхнего уровня Меркурий Энергоучет автоматически считывала этот профиль?

    ОтветитьУдалить
    Ответы
    1. Возможность такая заложена в технологии PLC I, но реализации в программном обеспечении верхнего уровня отсутствует.

      Удалить
  9. Добрый День! Подскажите ..есть меркурий 230 CLN,концентратор 225.11. Как включить концентратор в прозрачный режим что бы команды запроса шли сразу на счётчик не обращаясь к концентратору. И ещё вопрос ..какова максимальная длина удаленного расположения концентратора от счётчика?Спасибо

    ОтветитьУдалить
  10. Halo, я Хелена Хулио из Эквадора, я хочу поговорить о мистере Бенджамине на эту тему. оказывает мне финансовую поддержку, когда все банки в моем городе отклонили мою просьбу предоставить мне кредит в размере 500 000,00 долларов США. Я сделал все возможное, чтобы получить кредит в моих банках здесь, в Эквадоре, но все они отказали мне, потому что мой кредит был низким, но с божьей благодати я узнал о мистере Бенджамине, поэтому решил попробовать подать заявку на кредит. с божьей помощью, они предоставили мне ссуду в размере 500 000,00 долларов США на запрос о ссуде, за который мои банки здесь, в Эквадоре, отказали мне, было действительно здорово иметь дело с ними, и мой бизнес сейчас идет хорошо. Электронная почта / WhatsApp Свяжитесь, если вы хотите получить кредит от них. lfdsloans@outlook.comWhatsApp Контакт: + 1-989-394-3740.

    ОтветитьУдалить
  11. Your car might be stolen if you don't keep this in mind!

    Consider that your car was taken! When you approach the police, they inquire about a specific "VIN check"

    A VIN decoder is what?

    Similar to a passport, the "VIN decoder" allows you to find out the date of the car's birth and the identity of its "parent" (manufacturing facility). You can also find out:

    1.Type of engine

    2.Automobile model

    3.The limitations of the DMV

    4.The number of drivers in this vehicle

    The location of the car will be visible to you, and keeping in mind the code ensures your safety. The code can be examined in the online database. The VIN is situated on various parts of the car to make it harder for thieves to steal, such as the first person seated on the floor, the frame (often in trucks and SUVs), the spar, and other areas.

    What happens if the VIN is intentionally harmed?

    There are numerous circumstances that can result in VIN damage, but failing to have one will have unpleasant repercussions because it is illegal to intentionally harm a VIN in order to avoid going to jail or being arrested by the police. You could receive a fine of up to 80,000 rubles or spend two years in prison. You might be stopped by an instructor on the road.

    Conclusion.

    The VIN decoder may help to save your car from theft. But where can you check the car reality? This is why we exist– VIN decoders!

    ОтветитьУдалить