Есть в преобразователе 3 параметра, которые возможно прочитать только групповым запросом. В ПЛК это реализовать не получается, только начинаю их программировать. Может кто сталкивался или есть какие-нибудь идеи?
Есть в преобразователе 3 параметра, которые возможно прочитать только групповым запросом. В ПЛК это реализовать не получается, только начинаю их программировать. Может кто сталкивался или есть какие-нибудь идеи?
(0x04) — чтение значений из нескольких регистров ввода (Read Input Registers).
см.:
http://we.easyelectronics.ru/khomin/...chaynikov.html
Пример с использованием String output module смотреть здесь http://www.owen.ru/forum/showthread....l=1#post141316
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Спасибо большое, помогло, разобрался. Теперь только остался вопрос как разбить REAL на 2 WORD
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Преобразовать в dword и разделить на 2 word, только действительно зачем ?
Есть модуль сбора данных МСД-200, которое работает как Slave, а значения в него пишет ПЛК. Если писать как обычно (by Pool time), то получается лестница из значений с привязкой ко времени. Читать архив значений неудобно и неприятно. Поэтому необходима групповая запись переменных из ПЛК. Числа с плавающей точкой (Float). Массивом тип REAL, ,больше одного не передается. Получается только WORD в String array (строковый массив). Разбиваем REAL на 2 WORD и записываем в нужные регистры и получаем нужные значения с линейной привязкой ко времени.
Появилась еще одна проблема. Необходимо настроить периодичность архивации. by pool time дает максимальную периодичность 10 сек и тройную запись переменной. Есть в настройках Universal network device выполнение по комманде (by command 0xFF-Start 0xFE-Stop), что меня бы вполне устроило, знай я как этим воспользоваться. Как послать эту команду, никак не доходит. Я новичек и возможно мазохист, но стремлюсь к совершенству. Не оставляйте, прошу, незнайкой)))
Не верю!
(с) Станиславский Константин Сергеевич
Специально сделал пример и попробовал, как работает групповая запись REAL с помощью модуля String
У меня все работает, по крайней мере на панель СП270 запись идет правильно
Захват-1.png Захват-2.png Захват-3.png
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
REAL напрямую в МСД-200 более одной переменной не передается. Обошел иначе, может кому пригодится. Разбиваем (повторюсь) REAL на 2 WORD и передаем в регистры устройства, соответственно REAL=0..1 регистры, WORD1=0 регистр, WORD2=1 регистр. Теперь по разбивке.
Объявление переменных:
x: REAL
PrpREAL: POINTER TO ARRAY [0..1] OF WORD;
W: ARRAY [0..1] OF WORD;
Программа:
PrpREAL:=ADR(x);
W[0]:=PrpREAL^[0];
W[1]:=PrpREAL^[1];
Получаем 2 переменные из WORD массива, которые и передаем через String-массив.
Вот способ по сращиванию, нашел где-то, рабочий
Объявление переменных:
p1: POINTER TO BYTE;
p2: POINTER TO BYTE;
IN_Data: POINTER TO ARRAY[0..1] OF WORD; (*Указатель на массив регистров для Float*)
Out_data: Real;
Программа:
(*Регистры с типом данных Word необходимо пересобрать в обратной последовательности для получения Float*)
p1:=ADR(Out_data);
p2:=ADR(IN_Data^[1]);
p1^:=p2^;
p1:=p1+1;
p2:=p2+1;
p1^:=p2^;
p1:=p1+1;
p2:=ADR(IN_Data^[0]);
p1^:=p2^;
p1:=p1+1;
p2:=p2+1;
p1^:=p2^;