Уточните формат регистра для чтения или записи переменных string

29 Nov Уточните формат регистра для чтения или записи переменных string

Доброго дня! В моем проекте необходимо читать из плк, посредством модбас, строковые переменные, например название рецепта. Подскажите пожалуйста в каком формате предполагается вычитывать или записывать переменные если в WebHMI указан формат переменной STRING???? В случае моего ПЛК регистры имеют формат записи такого вида: в каждом регистре формата integer (word) записано по две буквы в шестнадцатиричном формате в виде ASCII например текст WEBHMI в регистрах ПЛК будет содержать значения: в первом регистре в формате HEX 4557 или в формате DEC-17751, во втором регистре H-4842 или D-18498. в третьем регистре H-494D или в формате D-18765. Или каким можно образом прочитать текстовое содержимое при помощи модбас в WEBHMI????

1 answer

Добрый день!
Формат типа STRING поддерживается только для внутренних регистров. Напрямую из контроллера его не прочитать.  Т.е. схема работы может быть например такой :

  1. Обычно надо читать название текущего рецепта, те. он только один в данный момент. И если длина рецепта небольшая, например “Чиабатта”  это 4 регистра х2 байта (по 2 кода символа). Можно объявить 4 регистра типа HR или IR (что отдает ПЛК) и читать их как UDINT – беззнак. целое двойное слово. А скрипт будет склеивать эти четыре регистра в строку и копировать в внутр. регистр типа “S”, который надо регистрировать в системе.   Исходные регистры типа DWord в скрипте надо побить на отд. коды через битовые маски, каждый код положить в отд. элемент таблички strTab = {char1, char2…} предварительно преобразовав в символ string.char(i1, i2, …)., а потом ее склеить одной операцией table.concat (strTab), 
  2. Если рецепты очень длинные и их много, можно под эти регистры модифицировать custom protocol, т.е. сделать свою версию протокола Modbus которая будет вычитать сразу весь длинный блок регистров в ПЛК где лежат эти строки, делать то что я описал в п.1 и возвращать сразу строку. Тогда надо будет меньше объявлять внутренних регистров, т.е. проект будет в целом компактнее. А обработку байт в строки все равно нужно делать – либо в скрипте, либо в custom протоколе. 

 

#1

Пожалуйста войдите или зарегистрируйтесь чтобы добавить ответ