Просмотр полной версии : Линейная Интерполяция в пр200
Андрей 77
16.11.2023, 21:54
Добрый день уважаемые специалисты.Подскажите пожалуйста как можно реализовать линейную интерполяцию по двум точкам в пр 200, может есть какой функциональный блок.Допустим если пишется программа для небольшого газового котла.И нужно составить таблицу соотношения газ воздух.Допустим составим таблицу где газ 20 25 30 35 и так далее, и воздух 10 15 20 25 нужно что бы при уставки газ 22 воздух подстраивался сам под уставку газа как пример допустим первая точка газ 20 воздух 10 вторая точка газ 25 воздух 15 если поставим уставку газа 22Па то воздух примерно 12 Па, каким функциональным блоком можно делать линейную интерполяцию по уравнению проходящими через две точки?
МихаилГл
16.11.2023, 22:04
А если использовать уравнение прямой по двум точкам?
Блок линейно-кусосной интерполяции есть в менеджере компонентов на 10 точек
Андрей 77
16.11.2023, 22:39
Блок линейно-кусосной интерполяции есть в менеджере компонентов на 10 точек
А есть примеры работы этого блока?
Андрей 77
16.11.2023, 22:46
А если использовать уравнение прямой по двум точкам?
А какой метод точнее?
Андрей 77
16.11.2023, 22:58
Блок линейно-кусосной интерполяции есть в менеджере компонентов на 10 точек
А почему используется линейно кусочная апроксимация точек а не линейная?
если действительно достаточно линейной, то был макрос Scaler
Андрей 77
17.11.2023, 00:05
если действительно достаточно линейной, то был макрос Scaler
А какой точнее макрос линейно кусочный или линейны?
А какой точнее макрос линейно кусочный или линейны?
А что точнее - линейка или складной метр?
Сергей0308
17.11.2023, 06:06
Добрый день уважаемые специалисты.Подскажите пожалуйста как можно реализовать линейную интерполяцию по двум точкам в пр 200, может есть какой функциональный блок.Допустим если пишется программа для небольшого газового котла.И нужно составить таблицу соотношения газ воздух.Допустим составим таблицу где газ 20 25 30 35 и так далее, и воздух 10 15 20 25 нужно что бы при уставки газ 22 воздух подстраивался сам под уставку газа как пример допустим первая точка газ 20 воздух 10 вторая точка газ 25 воздух 15 если поставим уставку газа 22Па то воздух примерно 12 Па, каким функциональным блоком можно делать линейную интерполяцию по уравнению проходящими через две точки?
В менеджере компонентов есть такой макрос:
71676
А какой точнее макрос линейно кусочный или линейны?
В смысле точней? Если у Вас линейная зависимость на всем диапазоне, достаточно линейной. Если же зависимость нелинейная, и нельзя ( или очень сложно) описать математически , то макрос PLA поможет сделать это насколько возможно точно с помощью 10 точек, между двумя соседними точками будет линейная зависимость, между двумя другими тоже, но с другим коэффициентом.
Вот вариант на неограниченное количество точек, в первую очередь нужно установленный на ПК или где то еще python, далее запустить представленный ниже код (возможно несколько раз, чем ближе к единице тем лучше)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pathlib import Path
from sklearn.neural_network import MLPRegressor
from sklearn.linear_model import LinearRegression
import warnings
warnings.simplefilter(action='ignore', category=UserWarning)
def create_RELU_model():
return MLPRegressor(
hidden_layer_sizes=(4,),
max_iter=2600000,
solver='lbfgs',
activation='relu',
alpha=0.000001,
early_stopping=True)
def addRows(dataframe, beginer, num):
mX = dataframe[['gaz']][num:(num+2)]
mY = dataframe[['voz']][num:(num+2)]
lr = LinearRegression().fit(mX, mY)
for x in np.arange(mX.iloc[-1]['gaz'],mX.iloc[0]['gaz'],0.01):
beginer.loc[len(beginer)] = [x,lr.predict([[x]])[0][0]]
stuff_uno = [20., 25., 30., 35.] # ввод табличных входных данных
tnar = pd.DataFrame(stuff_uno).rename(columns = {0:'gaz'})
stuff_duo = [10., 15., 20., 25.,] # ввод табличных результирующих данных
tkot = pd.DataFrame(stuff_duo).rename(columns = {0:'voz'})
frames = [tnar,tkot]
df = pd.concat(frames, join = 'inner', axis = 1)
bgn = df.copy()
for idx in range(0,len(stuff_uno)-1):
addRows(df,bgn, idx)
df = bgn.sort_values(by=['gaz'])
X = np.array(df['gaz']).reshape(-1,1)
y = df['voz'].values.ravel()
mlp = create_RELU_model()
mlp.fit(X,y)
ref = mlp.score(X,y)
print('MLP SCORE: ', ref)
fig, ax = plt.subplots()
X2 = np.arange(15.,40.,0.2).reshape(-1,1) # проверка за пределами диапазона
y2 = mlp.predict(X2)
ax.plot(X2, y2, label="mlp_relu")
ax.plot(X, y, label="table")
plt.legend()
plt.show()
w0_0 = mlp.coefs_[0][0][0]
w1_0 = mlp.coefs_[0][0][1]
w2_0 = mlp.coefs_[0][0][2]
w3_0 = mlp.coefs_[0][0][3]
b0_0 = mlp.intercepts_[0][0]
b0_1 = mlp.intercepts_[0][1]
b0_2 = mlp.intercepts_[0][2]
b0_3 = mlp.intercepts_[0][3]
o0_0 = mlp.coefs_[1][0][0]
o0_1 = mlp.coefs_[1][1][0]
o0_2 = mlp.coefs_[1][2][0]
o0_3 = mlp.coefs_[1][3][0]
b1_0 = mlp.intercepts_[1][0]
stroke=f"""function mlp_scale: real;
var_input
CURR : real;
end_var
var
BUF1 : Real;
BUF2 : Real;
BUF3 : Real;
BUF4 : Real;
W1 : Real := {w0_0};
W2 : Real := {w1_0};
W3 : Real := {w2_0};
W4 : Real := {w3_0};
B1 : Real := {b0_0};
B2 : Real := {b0_1};
B3 : Real := {b0_2};
B4 : Real := {b0_3};
WO1 : Real := {o0_0};
WO2 : Real := {o0_1};
WO3 : Real := {o0_2};
WO4 : Real := {o0_3};
BO1 : Real := {b1_0};
end_var
BUF1 := math_MAX(CURR * W1 + B1, 0.0);
BUF2 := math_MAX(CURR * W2 + B2, 0.0);
BUF3 := math_MAX(CURR * W3 + B3, 0.0);
BUF4 := math_MAX(CURR * W4 + B4, 0.0);
mlp_scale := BO1 + BUF1 * WO1 + BUF2 * WO2 + BUF3 * WO3 + BUF4 * WO4;
end_function
"""
with open("mlp_scale.scl","w+") as f:
f.writelines(stroke)
созданный файл mlp_scale.scl текст скопировать и перенести в ОЛ заменив новую созданную функцию, получится такой результат, как во вложении.
Всё же чаще кусочно-линейная интерполяция нужна для изменяемых входных данных, а вот для расчётов по каким-либо табличным справочникам наверное неплохая штука
Очень полезная вещь. Много применений найти можно. И с десятью то точками , вполне себе, для многих задач хватает. С бОльшим количеством точность можно довести наверное до максимума, калибруй- не ленись только, таблицу заполнять.)
ни чего не понял, ну вот например у меня бочки заполняются опустошаются это считается изменяемые входные данные с датчика уровня? Я беру тарирую емкость наливая условные сто литров и делаю замер показаний датчика, в итоге набрав до верха у меня получается таблица, я занес эту таблицу в подобный код и функция показывает мне текущее значение в зависимости от показания датчика. Также и с погодозависимыми графиками
Даже для погодозависимого графика иногда требуется скорректировать значение температуры точки, а тут разговор про график соотношения на горелке, который точно периодически корректируется
Андрей 77
19.11.2023, 22:32
Может такое подойдет
Что за формат файла чем открыть?
Что за формат файла чем открыть?
Это макрос. Открывается из лоджика через меню - импортировать из файла
Андрей 77
20.11.2023, 18:00
В менеджере компонентов есть такой макрос:
71676
Читал информацию по этому блоку.И не до конца понял как он работает.Я правильно понимаю что нам нужно отмасштабировать аналоговый вход допустим.Допустим у меня есть датчик -125 125 Па токовый сигнал 4-20 ма.Получается при нуле 12ма.Значить я масштабирую аналоговый вход пр 200. Далее беру этот макрос SCALE на вход IN подаю сигнал с аналогового входа.Прописываю уст MAX_IN 125 MIN_IN -125 а на вход MAX_Q подаю 1 а на MIN_Q 0 и выход блока Q подаю на аналоговый выход, этот выход будет мне масштабировать значения аналогового датчика в токовый сигнал 4-20 ма на выходе но там будет допустим на выходе блока Q =0,5, 0,25 и так далее а выход будет уже 4-20ма так я понимаю работу данного макроса?
Андрей 77
20.11.2023, 18:02
Это макрос. Открывается из лоджика через меню - импортировать из файла
У меня не видит лоджик это расширение.
У меня не видит лоджик это расширение.
Версия лоджика дожна быть 2.х
Андрей 77
20.11.2023, 19:34
Версия лоджика дожна быть 2.х
У меня 2,5
kondor3000
20.11.2023, 19:45
У меня 2,5
Надо разархивировать файл, потом вынутый файл .tple импортировать в Лоджик. И из макросов уже вынести на поле программы, поле надо растянуть вниз, иначе макрос не влезет, он очень большой.
Вот макрос, уже разархивированный, на поле программы. Версия Лоджика 2.5.338
Андрей 77
20.11.2023, 20:47
Надо разархивировать файл, потом вынутый файл .tple импортировать в Лоджик. И из макросов уже вынести на поле программы, поле надо растянуть вниз, иначе макрос не влезет, он очень большой.
Вот макрос, уже разархивированный, на поле программы. Версия Лоджика 2.5.338
А не подскажите как макросы большие масштабировать?То есть больше меньше делать?А есть описания этого макроса?
А не подскажите как макросы большие масштабировать?То есть больше меньше делать?А есть описания этого макроса?
Зажимаете кнопку Ctrl и стрелочками масштабируете. А описание - это к автору макроса
Андрей 77
20.11.2023, 21:36
Зажимаете кнопку Ctrl и стрелочками масштабируете. А описание - это к автору макроса
Понял с спасибо.Не подскажите по макросу.Читал информацию по этому блоку SCALE .И не до конца понял как он работает.Я правильно понимаю что нам нужно отмасштабировать аналоговый вход допустим.Допустим у меня есть датчик -125 125 Па токовый сигнал 4-20 ма.Получается при нуле 12ма.Значить я масштабирую аналоговый вход пр 200. Далее беру этот макрос SCALE на вход IN подаю сигнал с аналогового входа.Прописываю уст MAX_IN 125 MIN_IN -125 а на вход MAX_Q подаю 1 а на MIN_Q 0 и выход блока Q подаю на аналоговый выход, этот выход будет мне масштабировать значения аналогового датчика в токовый сигнал 4-20 ма на выходе но там будет допустим на выходе блока Q =0,5, 0,25 и так далее а выход будет уже 4-20ма так я понимаю работу данного макроса?
Понял с спасибо.Не подскажите по макросу.Читал информацию по этому блоку SCALE .И не до конца понял как он работает.Я правильно понимаю что нам нужно отмасштабировать аналоговый вход допустим.Допустим у меня есть датчик -125 125 Па токовый сигнал 4-20 ма.Получается при нуле 12ма.Значить я масштабирую аналоговый вход пр 200. Далее беру этот макрос SCALE на вход IN подаю сигнал с аналогового входа.Прописываю уст MAX_IN 125 MIN_IN -125 а на вход MAX_Q подаю 1 а на MIN_Q 0 и выход блока Q подаю на аналоговый выход, этот выход будет мне масштабировать значения аналогового датчика в токовый сигнал 4-20 ма на выходе но там будет допустим на выходе блока Q =0,5, 0,25 и так далее а выход будет уже 4-20ма так я понимаю работу данного макроса?
Да, так. А вообще, в менеджере ведь есть описание
kondor3000
20.11.2023, 21:53
А есть описания этого макроса?
Этого нет и зачем вам 21 точка?
Вот макрос Petera на 10 точек простой и расширяемый, зависимость Т воды от Т уличной
Сергей0308
20.11.2023, 21:54
Понял с спасибо.Не подскажите по макросу.Читал информацию по этому блоку SCALE .И не до конца понял как он работает.Я правильно понимаю что нам нужно отмасштабировать аналоговый вход допустим.Допустим у меня есть датчик -125 125 Па токовый сигнал 4-20 ма.Получается при нуле 12ма.Значить я масштабирую аналоговый вход пр 200. Далее беру этот макрос SCALE на вход IN подаю сигнал с аналогового входа.Прописываю уст MAX_IN 125 MIN_IN -125 а на вход MAX_Q подаю 1 а на MIN_Q 0 и выход блока Q подаю на аналоговый выход, этот выход будет мне масштабировать значения аналогового датчика в токовый сигнал 4-20 ма на выходе но там будет допустим на выходе блока Q =0,5, 0,25 и так далее а выход будет уже 4-20ма так я понимаю работу данного макроса?
Правильно понимаете, но зачем спрашивать то что можно посмотреть в симуляторе?!
И, например, если Вам нужно обратная зависимость, достаточно поменять значения(1 и 0) для выходного диапазона местами!
И, макрос с ограничением входного диапазона!
И, в менеджере компонентов должно быть описание его работы!
Андрей 77
20.11.2023, 22:37
Правильно понимаете, но зачем спрашивать то что можно посмотреть в симуляторе?!
И, например, если Вам нужно обратная зависимость, достаточно поменять значения(1 и 0) для выходного диапазона местами!
И, макрос с ограничением входного диапазона!
И, в менеджере компонентов должно быть описание его работы!
Я в симуляторе смотрел как он работает, но не понял для чего и как его использовать.Так как на выходе блока выходной переменной он мне выдавал полноценный сигнал от 4-20ма.Поэтому и подумал зачем он нужен.Извините за глупый вопрос а как считать значение которые получили на выходе аналоговом допустим 0,5 или 0,1 как перевести их в мА?71744
Андрей 77
20.11.2023, 22:41
Правильно понимаете, но зачем спрашивать то что можно посмотреть в симуляторе?!
И, например, если Вам нужно обратная зависимость, достаточно поменять значения(1 и 0) для выходного диапазона местами!
И, макрос с ограничением входного диапазона!
И, в менеджере компонентов должно быть описание его работы!
Еще такой вопрос скажем если я подключу аналоговый выход прибора пр 200 к аналоговому входу 2трм1 если значения на аналоговом выходе пр 200 будут 0,5 0,25 их 2трм1 поймет?Адекватно отобразит на дисплее измеряемы сигнал 4-20ма?
Сергей0308
20.11.2023, 22:51
Я в симуляторе смотрел как он работает, но не понял для чего и как его использовать.Так как на выходе блока выходной переменной он мне выдавал полноценный сигнал от 4-20ма.Поэтому и подумал зачем он нужен.Извините за глупый вопрос а как считать значение которые получили на выходе аналоговом допустим 0,5 или 0,1 как перевести их в мА?71744
Там же линейная зависимость, в смысле, диапазон 0-1 соответствует выходному току 4-20 мА!
Если хотите видеть в программе(симуляторе) какой ток будет на аналоговом выходе ПР можно преобразовать диапазон 0-1 в 4-20, или "-125" - "125" в 4-20, собственно для этого макрос и предназначен!
Неужели так непонятно описана работа этого макроса в менеджере компонентов?
Андрей 77
21.11.2023, 00:14
Там же линейная зависимость, смысле, диапазон 0-1 соответствует выходному току 4-20 мА!
Если хотите видеть в программе(симуляторе) какой ток будет на аналоговом выходе ПР можно преобразовать диапазон 0-1 в 4-20, или "-125" - "125" в 4-20, собственно для этого макрос и предназначен!
Неужели так непонятно описана работа этого макроса в менеджере компонентов?
Спасибо поменял значения диапазона.Но что то опять не совсем пойму извините за тупизм.Я правильно понимаю что мы на вход аналоговый пр 200 подключаем токовый сигнал от датчика давления 4-20ма 125 -125 и через блок это получаем на выходе 4-20ма.Мне не понятен какой формы входной сигнал подаем на вход макроса IN? 4-20 от подключенного к аналоговому входу датчика 125 -125?71745
Сергей0308
21.11.2023, 02:01
Спасибо поменял значения диапазона.Но что то опять не совсем пойму извините за тупизм.Я правильно понимаю что мы на вход аналоговый пр 200 подключаем токовый сигнал от датчика давления 4-20ма 125 -125 и через блок это получаем на выходе 4-20ма.Мне не понятен какой формы входной сигнал подаем на вход макроса IN? 4-20 от подключенного к аналоговому входу датчика 125 -125?71745
Что Вы хотите видеть в программе, если давление, настройте вход, где 4 мА соответствует -125 Па и 20 мА - 125 Па, всё! В принципе никакой макрос здесь не нужен!
Если Вы что-то другое хотите, соберитесь и ясно напишите, что хотите, я теряюсь в догадках, что ещё можно хотеть от датчика давления?!
Андрей 77
21.11.2023, 08:12
Что Вы хотите видеть в программе, если давление, настройте вход, где 4 мА соответствует -125 Па и 20 мА - 125 Па, всё! В принципе никакой макрос здесь не нужен!
Если Вы что-то другое хотите, соберитесь и ясно напишите, что хотите, я теряюсь в догадках, что ещё можно хотеть от датчика давления?!
Не пойму почему когда подаю с аналогового входа сигнал 4ма у меня получается 12,25 вместо -125 а когда подаю сигнал 20ма получается 13,28 вместо 125. Вход аналоговый сконфигурирован правильно.71753
kondor3000
21.11.2023, 08:30
Не пойму почему когда подаю с аналогового входа сигнал 4ма у меня получается 12,25 вместо -125 а когда подаю сигнал 20ма получается 13,28 вместо 125. Вход аналоговый сконфигурирован правильно.71753
У вас на скрине сейчас на выходе 12,256 мА, если вы хотите видеть на выходе Па, поменяйте местами 4-20 и 125-125
Не пойму почему когда подаю с аналогового входа сигнал 4ма у меня получается 12,25 вместо -125 а когда подаю сигнал 20ма получается 13,28 вместо 125. Вход аналоговый сконфигурирован правильно.71753
Вы перепутали диапазоны входного и выходного сигнала (входной (IN): 4..20, выходной (Q): -125...125)
Андрей 77
21.11.2023, 17:40
смотрите, входные значения если максимум 125 и минимум -125, то просто вход IN должен быть в их пределах, а если граничные диапазоны от 4 до 20 то и выход Q тоже должен быть в пределах этого, поэтому когда Вы подаете близкое к нулю значение типа 4, то и на выходе будет чуть больше чем середина диапазона от 4 до 20
Спасибо за ответ.Вот смотрите я использую макрос SCALE.На вход max_in я завожу значения датчика верхнего предела это 10кг/см2 вход min_in я ставлю нижний предел датчика 0 на вход max_Q я ставлю 20ма верхний предел датчика, на вход min_Q ставлю 4ма нижний предел датчика.Теперь с аналогового входа я подаю сигнал 6ма и макрос правильно мне посчитал 13,6 ма я получу на аналоговом выходе пр 200.Но загвоздка в том и мне не понятна что мы же должны подавать на аналоговый вход токовый сигнал а получается что 6 ма
71782 это не миллиамперы а физическая величина датчика.То есть получается как будто я подаю физическую величину датчика 6 кг/см2 а макрос конвертирует это в ток в миллиамперы на выходе.
Сергей0308
21.11.2023, 18:05
Макрос пропорционально преобразует один диапазон в другой, всё остальное не важно:
71783
kondor3000
21.11.2023, 18:08
Спасибо за ответ.Вот смотрите я использую макрос SCALE.На вход max_in я завожу значения датчика верхнего предела это 10кг/см2 вход min_in я ставлю нижний предел датчика 0 на вход max_Q я ставлю 20ма верхний предел датчика, на вход min_Q ставлю 4ма нижний предел датчика.Теперь с аналогового входа я подаю сигнал 6ма и макрос правильно мне посчитал 13,6 ма я получу на аналоговом выходе пр 200.Но загвоздка в том и мне не понятна что мы же должны подавать на аналоговый вход токовый сигнал а получается что 6 ма
71782 это не миллиамперы а физическая величина датчика.То есть получается как будто я подаю физическую величину датчика 6 кг/см2 а макрос конвертирует это в ток в миллиамперы на выходе.
Макрос нужен если вы хотите отображения в диапазоне физических величин датчика. Например для ПР200, настроили вход на ток, подали 4-20 мА получили 0-10 бар.
Иногда бывают и обратные случаи, тогда макрос настраиваете наоборот.
Если например у вас ПР102, то макрос вообще не нужен, в настройках входа ставите диапазон датчика и получаете сразу например давление.
Андрей 77
21.11.2023, 19:10
Макрос нужен если вы хотите отображения в диапазоне физических величин датчика. Например для ПР200, настроили вход на ток, подали 4-20 мА получили 0-10 бар.
Иногда бывают и обратные случаи, тогда макрос настраиваете наоборот.
Если например у вас ПР102, то макрос вообще не нужен, в настройках входа ставите диапазон датчика и получаете сразу например давление.
Если я макрос настрою на оборот то каким образом или чем я смогу на вход подать физическую величину датчика в 6кг/см?
kondor3000
22.11.2023, 18:53
Если я макрос настрою на оборот то каким образом или чем я смогу на вход подать физическую величину датчика в 6кг/см?
Во первых для эмуляции, во вторых бывает вы получаете уже готовый результат по Модбас, например давление (температуру)
или в программе рассчитываете что-то (частоту, момент), а вывести надо на выход в размерности тока 4-20 мА
Андрей 77
23.11.2023, 07:35
Во первых для эмуляции, во вторых бывает вы получаете уже готовый результат по Модбас, например давление (температуру)
или в программе рассчитываете что-то (частоту, момент), а вывести надо на выход в размерности тока 4-20 мА
Спасибо за ответ.Понятно теперь работа макроса.Мне не понятно было как и для чего подавать на аналоговый вход пр 200 физическую величину датчика.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot