Страница 1 из 2

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

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

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

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

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

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

Про массивы

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

Добавлено: 10 янв 2018, 18:29
Михайло
И ещё вот длинную формулу применить отсюда:
https://ru.wikipedia.org/wiki/Билинейная_интерполяция

Изображение

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

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

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

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

Добавлено: 11 янв 2018, 13:49
Автоматизатор
Делал как-то динамически наполняемую таблицу, по которой выбиралось значение. В текстовом файле исходник.
Нелинейность.pdf
Example.txt

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

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

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

Добавлено: 12 янв 2018, 14:14
Автоматизатор
В программе, которую я выложил, для поиска используется адресный регистр. Как с ним работать обучают на углубленных курсах 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; // и в ячейку памяти для контроля 

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

Добавлено: 12 янв 2018, 14:15
Andrey.wys
Мне кажется, что подобные вещи проще в scl сделать.

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

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

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

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

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

Добавлено: 12 янв 2018, 15:19
Andrey.wys
В scl программа будет состоять из 3 массивов и 2-х циклов для определения номера элемента третьего массива.

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

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

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

Добавлено: 12 янв 2018, 17:28
Автоматизатор
Как раз все наоборот: простая - она на SCL! :)

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

Добавлено: 12 янв 2018, 17:46
Михайло
У тебя все примеры на языке STL. SCL - это паскалеподобный язык.

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

Добавлено: 12 янв 2018, 17:52
Михайло
Я имел в виду, что на Step 7 v5.x для извлечения элемента из массива по индексу проще делать на STL.

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

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

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

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

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

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

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

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

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

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

Добавлено: 12 янв 2018, 18:28
Михайло
ааа. ну теперь вспомнил, что Step7 Классик не только слабоват, но и ещё просит много денег. :)

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

Добавлено: 12 янв 2018, 18:45
Автоматизатор
Я заказал для проекта

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