Как выбрать из таблицы требуемое значение.

Автоматизация технологических процессов, системы управления, АСУ ТП, АСКУЭ, программирование ПЛК, человеко-машинный интерфейс, сетевое оборудование, протоколы
dimon64
Любитель
Сообщения: 74
Зарегистрирован: 12 мар 2015, 14:30

Как выбрать из таблицы требуемое значение.

Сообщение dimon64 »

Здравствуйте, коллеги!
Есть задача определить количество газа в ёмкости. К ёмкости подключены датчики давления и температуры и есть таблица,
в которой по горизонтали значения давления, а по вертикали - температуры. Соответственно искомое значение лежит на их пересечении.
Контроллер должен выбрать ближайшее значение давления и температуры к показаниям датчиков и исходя из этого определить табличное значение Контроллер S7-300. Формулы не предлагать, по ряду причин они не прокатывают.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Как выбрать из таблицы требуемое значение.

Сообщение Автоматизатор »

Это типовая задача для использования косвенной адресации.
Первое, что приходит в голову:
Сделать массивы:

Код: Выделить всё

   P : ARRAY  [1 .. 15 ] OF //значения давления
   REAL ;	
   T : ARRAY  [1 .. 24 ] OF //значения температуры
   REAL ;	
   S : ARRAY  [1 .. 15, 1 .. 24 ] OF //значения веса
   REAL ;	
Перебором находим индекс ближайшего значения давления в массиве Р. И индекс температуры в массиве Т.
А по известным индексам ищем в массиве S вес. Поиск в массиве делается с помощью оператора LOOP

Про массивы

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Как выбрать из таблицы требуемое значение.

Сообщение Михайло »

И ещё вот длинную формулу применить отсюда:
https://ru.wikipedia.org/wiki/Билинейная_интерполяция

Изображение

x1, x2 - это координаты, которые окружают искомую координату x (температура).
y1, y2 - это координаты, которые окружают искомую координату y (давление).
f(x,y) - вес

dimon64
Любитель
Сообщения: 74
Зарегистрирован: 12 мар 2015, 14:30

Re: Как выбрать из таблицы требуемое значение.

Сообщение dimon64 »

Автоматизатор, Михайло, спасибо, но нет опыта программирования подобных вещей, не знаю как подступиться. Мне бы пример подобного кода...

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Как выбрать из таблицы требуемое значение.

Сообщение Автоматизатор »

Делал как-то динамически наполняемую таблицу, по которой выбиралось значение. В текстовом файле исходник.
Нелинейность.pdf
Example.txt
У вас нет необходимых прав для просмотра вложений в этом сообщении.

dimon64
Любитель
Сообщения: 74
Зарегистрирован: 12 мар 2015, 14:30

Re: Как выбрать из таблицы требуемое значение.

Сообщение dimon64 »

Автоматизатор писал(а):Делал как-то динамически наполняемую таблицу, по которой выбиралось значение. В текстовом файле исходник.
Спасибо.
Сделал тестовый блок данных, определил значения и температуры, это как бы координаты искомого веса. Как их теперь подставить в нужное место?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Как выбрать из таблицы требуемое значение.

Сообщение Автоматизатор »

В программе, которую я выложил, для поиска используется адресный регистр. Как с ним работать обучают на углубленных курсах Step7 за 3 дня. По книгам дольше. Но надо понимать команды кода.

Еще один упрощенный пример. С подробным комментарием. Грузит время #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; // и в ячейку памяти для контроля 

Andrey.wys
Любитель
Сообщения: 70
Зарегистрирован: 10 янв 2016, 00:35

Re: Как выбрать из таблицы требуемое значение.

Сообщение Andrey.wys »

Мне кажется, что подобные вещи проще в scl сделать.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Как выбрать из таблицы требуемое значение.

Сообщение Автоматизатор »

Andrey.wys писал(а):проще в scl
Очень может быть. В STL нельзя пользоваться обращением к элементу массива, заданной переменной.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Как выбрать из таблицы требуемое значение.

Сообщение Автоматизатор »

В 300-ом я с SCL не работал, поэтому не вспомнил. А в ТИА-портале с 1200 действительно получалось просто можно опрашивать i-
тый элемент массива: тогда и с адресными регистрами и указателями не разбираться.

Andrey.wys
Любитель
Сообщения: 70
Зарегистрирован: 10 янв 2016, 00:35

Re: Как выбрать из таблицы требуемое значение.

Сообщение Andrey.wys »

В scl программа будет состоять из 3 массивов и 2-х циклов для определения номера элемента третьего массива.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Как выбрать из таблицы требуемое значение.

Сообщение Михайло »

Никто не мешает написать простую функцию на STL, которая будет извлекать для SCL i-ый элемент некоторого массива.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Как выбрать из таблицы требуемое значение.

Сообщение Автоматизатор »

Как раз все наоборот: простая - она на SCL! :)

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Как выбрать из таблицы требуемое значение.

Сообщение Михайло »

У тебя все примеры на языке STL. SCL - это паскалеподобный язык.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Как выбрать из таблицы требуемое значение.

Сообщение Михайло »

Я имел в виду, что на Step 7 v5.x для извлечения элемента из массива по индексу проще делать на STL.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Как выбрать из таблицы требуемое значение.

Сообщение Автоматизатор »

Михайло писал(а):У тебя все примеры на языке STL. SCL - это паскалеподобный язык.
Да, почти.
Михайло писал(а):Я имел в виду, что на Step 7 v5.x для извлечения элемента из массива по индексу проще делать на STL.
Да, я так ипонял.
Автоматизатор писал(а):T_P

Это "код" на SCL! :)

STL не дает извлекать данные так (где i - целое число).

В ТИА SCL стал гораздо удобней из-за стандартного интерфейса объявления переменных.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Как выбрать из таблицы требуемое значение.

Сообщение Михайло »

Погоди, давай вернёмся к Step 7 v5.x, в котором я начинал когда-то писать программы. Как тут объявляется массив и как извлекать элемент массива по индексу-переменной?

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Как выбрать из таблицы требуемое значение.

Сообщение Автоматизатор »

Михайло писал(а):Погоди, давай вернёмся к Step 7 v5.x, в котором я начинал когда-то писать программы. Как тут объявляется массив и как извлекать элемент массива по индексу-переменной?
На STL - только так, как я привел примеры (через косвенную адресацию)
Но если есть доп. пакет (или проф. версия Степ7) - то можно (и удобней) это делать на SCL.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

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 надо брать профессиональную.

Ответить