Как выбрать из таблицы требуемое значение.
Как выбрать из таблицы требуемое значение.
Здравствуйте, коллеги!
Есть задача определить количество газа в ёмкости. К ёмкости подключены датчики давления и температуры и есть таблица,
в которой по горизонтали значения давления, а по вертикали - температуры. Соответственно искомое значение лежит на их пересечении.
Контроллер должен выбрать ближайшее значение давления и температуры к показаниям датчиков и исходя из этого определить табличное значение Контроллер S7-300. Формулы не предлагать, по ряду причин они не прокатывают.
Есть задача определить количество газа в ёмкости. К ёмкости подключены датчики давления и температуры и есть таблица,
в которой по горизонтали значения давления, а по вертикали - температуры. Соответственно искомое значение лежит на их пересечении.
Контроллер должен выбрать ближайшее значение давления и температуры к показаниям датчиков и исходя из этого определить табличное значение Контроллер S7-300. Формулы не предлагать, по ряду причин они не прокатывают.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Как выбрать из таблицы требуемое значение.
Это типовая задача для использования косвенной адресации.
Первое, что приходит в голову:
Сделать массивы:
Перебором находим индекс ближайшего значения давления в массиве Р. И индекс температуры в массиве Т.
А по известным индексам ищем в массиве S вес. Поиск в массиве делается с помощью оператора LOOP
Про массивы
Первое, что приходит в голову:
Сделать массивы:
Код: Выделить всё
P : ARRAY [1 .. 15 ] OF //значения давления
REAL ;
T : ARRAY [1 .. 24 ] OF //значения температуры
REAL ;
S : ARRAY [1 .. 15, 1 .. 24 ] OF //значения веса
REAL ;
А по известным индексам ищем в массиве S вес. Поиск в массиве делается с помощью оператора LOOP
Про массивы
Re: Как выбрать из таблицы требуемое значение.
И ещё вот длинную формулу применить отсюда:
https://ru.wikipedia.org/wiki/Билинейная_интерполяция
x1, x2 - это координаты, которые окружают искомую координату x (температура).
y1, y2 - это координаты, которые окружают искомую координату y (давление).
f(x,y) - вес
https://ru.wikipedia.org/wiki/Билинейная_интерполяция
x1, x2 - это координаты, которые окружают искомую координату x (температура).
y1, y2 - это координаты, которые окружают искомую координату y (давление).
f(x,y) - вес
Re: Как выбрать из таблицы требуемое значение.
Автоматизатор, Михайло, спасибо, но нет опыта программирования подобных вещей, не знаю как подступиться. Мне бы пример подобного кода...
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Как выбрать из таблицы требуемое значение.
Делал как-то динамически наполняемую таблицу, по которой выбиралось значение. В текстовом файле исходник.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Re: Как выбрать из таблицы требуемое значение.
Спасибо.Автоматизатор писал(а):Делал как-то динамически наполняемую таблицу, по которой выбиралось значение. В текстовом файле исходник.
Сделал тестовый блок данных, определил значения и температуры, это как бы координаты искомого веса. Как их теперь подставить в нужное место?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Как выбрать из таблицы требуемое значение.
В программе, которую я выложил, для поиска используется адресный регистр. Как с ним работать обучают на углубленных курсах Step7 за 3 дня. По книгам дольше. Но надо понимать команды кода.
Еще один упрощенный пример. С подробным комментарием. Грузит время #WD_T.ET в ячейку с номером State массива ArrTime
Еще один упрощенный пример. С подробным комментарием. Грузит время #WD_T.ET в ячейку с номером State массива ArrTime
Код: Выделить всё
VAR
ArrTime : ARRAY [0 .. 10 ] OF //Контроль времени нахождения в состоянии
TIME := T#0MS;
State : INT ; //Состояние станка
WD_T : "TON"; //Таймер контроля длительности нахождения в состоянии
END_VAR
TITLE =Сохранение времени нахождения в состоянии в памяти
//Индекс элемента массива соответствует номеру текущего состояния
L P##ArrTime; // Загрузка адреса начала массива в аккумулятор, тип POINTER
LAR1 ; // загрузка адреса начала массива в регистр
L #State; // загрузка номера элемента
ITD ; // Преобразование в двойное целое
L L#32; // Двойное целое=32 бита
*D ; // умножение
TAR2 ; // Запоминание смещения в битах в адресном регистре-2
+D ; // в АСС1 - адрес нужного элемента БЕЗ СМЕЩЕНИЯ!
TAR1 ; // Загрузка в аккумулятор адреса начала массива
+D ; // Сложение со смещением
LAR1 ; // Загрузка адреса нужного элемента в AR1
L #WD_T.ET; // Загрузка текущего времени
T DID [AR1,P#0.0]; // Загрузка значения в элемент массива
T MD 222; // и в ячейку памяти для контроля
-
- Любитель
- Сообщения: 70
- Зарегистрирован: 10 янв 2016, 00:35
Re: Как выбрать из таблицы требуемое значение.
Мне кажется, что подобные вещи проще в scl сделать.
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Как выбрать из таблицы требуемое значение.
Очень может быть. В STL нельзя пользоваться обращением к элементу массива, заданной переменной.Andrey.wys писал(а):проще в scl
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Как выбрать из таблицы требуемое значение.
В 300-ом я с SCL не работал, поэтому не вспомнил. А в ТИА-портале с 1200 действительно получалось просто можно опрашивать i-
тый элемент массива:
тогда и с адресными регистрами и указателями не разбираться.
тый элемент массива:
Код: Выделить всё
T_P[i]
-
- Любитель
- Сообщения: 70
- Зарегистрирован: 10 янв 2016, 00:35
Re: Как выбрать из таблицы требуемое значение.
В scl программа будет состоять из 3 массивов и 2-х циклов для определения номера элемента третьего массива.
Re: Как выбрать из таблицы требуемое значение.
Никто не мешает написать простую функцию на STL, которая будет извлекать для SCL i-ый элемент некоторого массива.
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Как выбрать из таблицы требуемое значение.
Как раз все наоборот: простая - она на SCL!
Re: Как выбрать из таблицы требуемое значение.
У тебя все примеры на языке STL. SCL - это паскалеподобный язык.
Re: Как выбрать из таблицы требуемое значение.
Я имел в виду, что на Step 7 v5.x для извлечения элемента из массива по индексу проще делать на STL.
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Как выбрать из таблицы требуемое значение.
Да, почти.Михайло писал(а):У тебя все примеры на языке STL. SCL - это паскалеподобный язык.
Да, я так ипонял.Михайло писал(а):Я имел в виду, что на Step 7 v5.x для извлечения элемента из массива по индексу проще делать на STL.
Автоматизатор писал(а):T_P
Это "код" на SCL!
STL не дает извлекать данные так (где i - целое число).
Re: Как выбрать из таблицы требуемое значение.
Погоди, давай вернёмся к Step 7 v5.x, в котором я начинал когда-то писать программы. Как тут объявляется массив и как извлекать элемент массива по индексу-переменной?
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Как выбрать из таблицы требуемое значение.
На STL - только так, как я привел примеры (через косвенную адресацию)Михайло писал(а):Погоди, давай вернёмся к Step 7 v5.x, в котором я начинал когда-то писать программы. Как тут объявляется массив и как извлекать элемент массива по индексу-переменной?
Но если есть доп. пакет (или проф. версия Степ7) - то можно (и удобней) это делать на SCL.
Re: Как выбрать из таблицы требуемое значение.
ааа. ну теперь вспомнил, что Step7 Классик не только слабоват, но и ещё просит много денег.
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Как выбрать из таблицы требуемое значение.
Я заказал для проекта
6ES7810-5CC12-0YA5
SIMATIC S7 STEP 7 Prof 2017/V14 SP1 combo incl. TIA Portal floating license for 1 user E-SW, SW and docu. on DVD, license key on USB-Stick, Class A, 5/6 languages (Ge,En,Fr,It,Sp)/(Cn), excecutable under Windows Server 2008 R2 SP1, Windows Server 2012 R2, Windows Server 2016, Windows 7 SP1, Windows 10 Professional, Windows 10 Enterprise Reference-HW: S7-300/400 (S7-1200/1500)
Я так понимаю, что сейчас для 300 и 1500 надо брать профессиональную.
6ES7810-5CC12-0YA5
SIMATIC S7 STEP 7 Prof 2017/V14 SP1 combo incl. TIA Portal floating license for 1 user E-SW, SW and docu. on DVD, license key on USB-Stick, Class A, 5/6 languages (Ge,En,Fr,It,Sp)/(Cn), excecutable under Windows Server 2008 R2 SP1, Windows Server 2012 R2, Windows Server 2016, Windows 7 SP1, Windows 10 Professional, Windows 10 Enterprise Reference-HW: S7-300/400 (S7-1200/1500)
Я так понимаю, что сейчас для 300 и 1500 надо брать профессиональную.