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

Автоматизация технологических процессов, системы управления, АСУ ТП, АСКУЭ, программирование ПЛК, человеко-машинный интерфейс, сетевое оборудование, протоколы
Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

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

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

Мы будем переходить на v15, ещё подумаю, может дождёмся SP1. Но когда она появится, обязательно прыгаем на неё.

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

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

Сообщение dimon64 »

Коллеги, я что-то запутался, на чём и как это делается? Степ у меня полный, с SCL.

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

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

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

dimon64 писал(а):SCL
попробуй на нем написать для начала простое, типа

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

"Table".Pressure[MW10] := MD100;
MD104 := "Table".Pressure[MW12];

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

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

Сообщение dimon64 »

Andrey.wys писал(а):В scl программа будет состоять из 3 массивов и 2-х циклов для определения номера элемента третьего массива.
Я так понимаю, без SCL не обойтись. Можно написать подробнее?

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

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

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

Сейчас вам не готов написать программу, не на чем отладить.
Но выше вам уже все написали:
Берете 3 массива:

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

P : ARRAY  [1 .. 16 ] OF //значения давления
   REAL ;   
   T : ARRAY  [1 .. 25 ] OF //значения температуры
   REAL ;   
   S : ARRAY  [1 .. 15, 1 .. 24 ] OF //значения веса
   REAL ;   
Заполняете их данными. Последние значения температуры и давления должны быть равны максимально возможному значению с датчиков
В первом цикле

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

FOR i := 1 TO 15 DO
IF pressure >= P[i] and  pressure < P[i+1] THEN
firstIndex:=i;
EXIT;
END_IF;
END_FOR;
Находим первый индекс. Во втором

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

FOR j:= 1 TO 24 DO
IF temperature >= T[j] and  temperature < T[j+1] THEN
secondIndex:=j;
EXIT;
END_IF;
END_FOR;
второй.
И результат

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

residualPressure:=S[firstIndex,secondIndex]
В коде надо предусмотреть ошибки, инициализировать переменные и оптимизировать его(есть что).
См. http://samsebeplc.ru/Doc/Siemens/Berger ... trol_r.pdf
ЗЫ Не обижайтесь, но задачка для школьника.

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

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

Сообщение dimon64 »

Andrey.wys писал(а):ЗЫ Не обижайтесь, но задачка для школьника.
Да я знаю, сын в школе подобные задачки решал. Но он информатику не очень любит, помочь не может, а я подобные вещи
вообще не изучал. В готовой программе ещё я могу покопаться, а вот самому что-то делать на SCL не приходилось. В любом случае
спасибо, буду разбираться.

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

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

Сообщение dimon64 »

Попробовал на 1200-м кусок программы сделать, что-то не работает. Чего не хватает?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

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

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

Я не работаю в TIA, но:
У вас должно быть 2 input переменных, 1 output.
Выложите исходник, там будет понятнее.

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

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

Сообщение dimon64 »

Заработало! При этом висит ошибка какая-то непонятная, контроллер в режиме RUN. Может кто подскажет, где собака порылась? Ну и при запуске симулятора программа падает, чего давно не случалось.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

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

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

1 и 2 массив увеличьте на единицу. Подумайте, что произойдет, когда i или j будет равно 5? Перечитайте мой пост, где я вам написал код.

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

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

Сообщение dimon64 »

Andrey.wys писал(а):1 и 2 массив увеличьте на единицу. Подумайте, что произойдет, когда i или j будет равно 5? Перечитайте мой пост, где я вам написал код.
Спасибо, я помню. Это тестовая программа, на самом деле таблиц несколько, они гораздо больше и разной размерности. Теперь надо усложнить задачу и выбирать табличное значение давления и температуры, ближайшее к показаниям с датчика.

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

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

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

И всё-таки подумайте, почему программа падает и что за ошибка. У вас программа сравнивает i+1 элемент массива, которого нет, а должен быть. А по поводу ближайшего показания датчика - см формулу, которую вам написал Михайло.

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

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

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

"Моя" формула - это просто тупо усреднение по четырем ближайшим точкам. Необязательно к применению, но повысит точность.
Вы находите четыре значения i, i+1, j, j+1, между которыми находится искомая точка. Далее вы берёте значения четырёх ближайших точек, которые соответственно равны f(i,j), f(i+1,j), f(i,j+1), f(i+1,j+1) и подставляете это всё в формулу.
Особо нужно обрабатывать случаи, когда i и j выходят за пределы двумерного массива. Несоблюдение этого приведёт всё к той же ошибке, на которую жалуетесь: обращение к несуществующему элементу массива.

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

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

Сообщение dimon64 »

Andrey.wys писал(а):И всё-таки подумайте, почему программа падает и что за ошибка. У вас программа сравнивает i+1 элемент массива, которого нет, а должен быть. А по поводу ближайшего показания датчика - см формулу, которую вам написал Михайло.
Программа падает потому что это TIA Portal, поделка для кружка "умелые руки", ну или в крайнем случае для автоматизации малой механизации. По поводу ошибки, да, ступил, сейчас всё OK, ошибок нет, но симулятор всё равно вылетает. Спасибо всем за помощь, пошел учить SCL, как выяснилось - вещь нужная.

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

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

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

dimon64 писал(а):Программа падает потому что это TIA Portal, поделка для кружка "умелые руки"
Ну, еще немного от программиста зависит.

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

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

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

В данном случае ТИА Портал вылетает с ошибкой need to close. Не из-за некорректного кода.

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

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

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

Давно невидел такой штуки. Думал, что уже вылечили детские болезни.

С 300ом что? Когда снимают с продаж?

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

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

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

Мне показалось, что они их 2024 или 2027 году прикроют. Ещё долго, но время летит быстро.

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

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

Сообщение dimon64 »

Автоматизатор писал(а):Давно невидел такой штуки. Думал, что уже вылечили детские болезни.
Я тоже так думал, однако нет... Ну да ладно, клепают по новой версии в год, к 20-й, наверное, всё получится.

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

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

Сообщение dimon64 »

Автоматизатор писал(а):
dimon64 писал(а):Программа падает потому что это TIA Portal, поделка для кружка "умелые руки"
Ну, еще немного от программиста зависит.
От программиста, который Портал писал? Тогда согласен. По уму, на кривые руки юзера Портала должен ругаться компиллятор, а не сама программа падать.

Ответить