Пришло сообщение в личку:Решил, что нужно выложить пример использования макроса fROM на всеобщее обозрение....Спасибо...Сообщение от AI!
Пытаюсь применить ваш макрос в ситуации:
Входной параметр - температура теплоносителя установки меняется с 82,5С до 100С..
Выходной параметр(задание - управление исполнителем) - флоат - уменьшается с 1,0 до 0,01.
Смещение - 2 градуса..
Зависимость следующая:
Темп. - задание
82.5 - 1.000
84.5 - 0.980
86.5 - 0.886
88.5 - 0.780
90.5 - 0.670
92.5 - 0.564
94.5 - 0.450
96.5 - 0.348
98.5 - 0.206
100.0 - 0.012
1) Первое что мы видим, что шаг 2 градуса, а у fROM, как у любого нормального ROMшаг=1 т.е. надо будет разделить на 2
2) шаг должен быть одинаковый, а контрольная точка "100" не вписывается в это условие, но с учётом, что это крайнее значение, и то что больше 100 нас не интересует, просто сделаем линейную интерполяцию до "100.5".
Путём несложных вычислений, у меня получилось что при 100.5 значение должно быть -0,052(6)
3) внутри макроса есть константа "смещение", это смещение первого значения, в нашем случае, т.к. мы вход предварительно делим пополам, смещение равно 82.5/2=41.25
4) для демонстрации возможностей каскадирования макроса, решил усложнить задачу, и увеличить кол-во контрольных точек в 2 раза, т.е. с 62.5 до 100, с шагом 2 градуса, т.к. именно для удобства каскадированияо внутрь макроса было встроено "смещение". При этом, "смещение" соседних блоков должно отличаться ровно на 10. (на выходе числа абстрактные, просто для примера)
получается бесшовная склейка выходных значений, т.е. линейная интерполяция между последним значением одного макроса и первым значением второго
PS если во вложенном примере удалить fROM2 то будет исходное условие.