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