Я бы для начала, чтобы понять принципы обмена, сделал тестовый проект ПЛК-Панель, по 3..4 регистра для чтения и записи и поигрался бы с ним, разные там Byte Sequence, адреса - четные/нечетные.
Для примера использования модулей String для организации групповых запросов к панели
Принцип простой
Захват-2.png
1. В UMD создаем String Output/Input
2. Смотрим какой адрес типа "AT % ......" конфигуратор присвоил модулю
3. В разделе объявления PLC_PRG создаем Массивы типа
<Наше Имя> AT <смотрим п.2>:ARRAY [<число элементов>] OF <нужный тип> (WORD, BYTE, REAL)
4. При этом число байт(символов) в свойствах String Output/Input д.б. для
- WORD ровно в 2 раза больше чем число элементов в массиве п.3.
- REAL ровно в 4 раза больше чем число элементов в массиве п.3.
- BYTE равно числу элементов в массиве п.3.
но для любого типа число байт(символов) в свойствах String д.б НЕ БОЛЕЕ 80. Почему максимум 80 - отдельная тема. Меньше можно.
Захват-4.png
Осталось в программе извлечь элементы массивов по привычным названиям переменных.
Результат в работе
Захват-1.png
Внимание! Значение Byte Sequence для данного способа не имеет значения, т.к. при групповом чтении массива регистров из панели они приходят в правильном порядке.
ЗЫ.
Команды чтения для String input нужно заменить на 0х03
Захват-11.png
Последний раз редактировалось petera; 30.05.2020 в 07:17.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Спасибо еще раз Petera, вот что значит помощь новичку, всё понятно на примерах изложено. Но я не могу понять один момент, я делал подобие температурной защиты на 3 сервисные (с коррекцией), 2 операторные(для просмотра) панели и 12 модулей AI, все UMD были TraceMode, все регистры панели (кроме битовых) были смещены на 1, и всё до сих пор работает, причём не плохо, как так то? А тут вроде и не много и даже связь с панелью не налаживается.
Ну теперь буду всё по уму делать, всё переделывать, главное чтобы времени на всё хватало.
Последний раз редактировалось ВалераМ; 28.05.2020 в 05:06.
Спасибо за замечания!
Так получилось потому, что хотелось побыстрей выложить пример. Есть еще две ошибки в количестве элементов в массиве
Конечно должно быть так
Захват-1.png
и
Захват-2.png
Последняя картинка иллюстрация использования String для замены модулей типа 8bit input. Для 8bit output - аналогично. Если в панели нужно читать/писать PSB, то для String нужны команды 0х01 или соответственно 0х0fДля чего эта строчка? 0011 BlokByte AT %IB7.2.3.0:ARRAY [0..20] OF BYTE;
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Вам спасибо!
Я так понимаю такая строка будет правильной, для записи байт в панель: BlokByte_toPanel AT %QB7.1.4.0:ARRAY [0..19] OF BYTE;
23.jpg
А вот с битами что то не получается правильно написать.
Пытаюсь понимать, есть проблема с чтением из панели, в чем дело не пойму, то ли таргет старый то ли контроллер старый. Наводит это на мысль потому что и в Output и в Input string moduls, цифро-буквенные обозначения одинаковые AT%QB ...... вроде так не должно быть. Т.е. мне кажется что из-за этого чтение не идёт, а запись в панель хорошо идёт
Последний раз редактировалось kondor3000; 01.06.2020 в 13:54.
Это такая фишка новых ПЛК, у них все переменные в конфигурации начинаются на Q
Например, Register input/output
Захват-2.png
в обоих случаях QW
А в старом ПЛК
Захват-1.png
Здесь Input и Output - разные IW и QW
Но ведь никто не жаловался, что мастер не может прочитать простые регистры из слейва
Может ошибка в адресе слейва в настройках UMD в котором String input?
Последний раз редактировалось petera; 01.06.2020 в 15:26.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg