PDA

Просмотр полной версии : "Математика" на ПР200



CleanS
20.10.2017, 10:42
Доброго дня всем! C пятницей!

Уже неделю бьюсь над одним проектом. Если кто с подсказкой поможет, буду очень сильно признателен!
Суть такова.

Есть входная числовая переменная "Х". От неё в разные моменты времени (выбирается наличием "1" (bool), на входах I1..I2..I3), отнимаются переменные "а", "b", "с". Но, каждый раз (при смене сигналов на входах) вычитание производится от разности предыдущего вычитания.
Поясню.
Появилась "1" на входе I1, началось вычитание Х-а. Пришёл "0", процесс остановился. Значение записалось в переменную "Y". При повторном появлении "1" процесс возобновляется.
Если "1" появляется на входе I2, то запускается вычитание Y-b. Если "1" появляется на входе I3, то запускается Y-c.
Весь процесс останавливается при достижении Х=0. Операция вычитания привязана к 1 сек. Т.е. значения вычисляются с интервалом в 1 сек.

У меня получается, если входных переменных "а", "b", "с"... всего две, только "а" и "b". Как только появляется третья... вся моя "математика" рушится. (((

Ревака Юрий
20.10.2017, 10:46
Доброго дня всем! C пятницей!

Уже неделю бьюсь над одним проектом. Если кто с подсказкой поможет, буду очень сильно признателен!
Суть такова.

Есть входная числовая переменная "Х". От неё в разные моменты времени (выбирается наличием "1" (bool), на входах I1..I2..I3), отнимаются переменные "а", "b", "с". Но, каждый раз (при смене сигналов на входах) вычитание производится от разности предыдущего вычитания.
Поясню.
Появилась "1" на входе I1, началось вычитание Х-а. Пришёл "0", процесс остановился. Значение записалось в переменную "Y". При повторном появлении "1" процесс возобновляется.
Если "1" появляется на входе I2, то запускается вычитание Y-b. Если "1" появляется на входе I3, то запускается Y-c.
Весь процесс останавливается при достижении Х=0. Операция вычитания привязана к 1 сек. Т.е. значения вычисляются с интервалом в 1 сек.

У меня получается, если входных переменных "а", "b", "с"... всего две, только "а" и "b". Как только появляется третья... вся моя "математика" рушится. (((

Добрый день, прикрепленный пример, должен увеличить шансы на успех.:D

CleanS
20.10.2017, 11:48
Добрый день, прикрепленный пример, должен увеличить шансы на успех.:D
Да, пожалуйста.)
Пока вот так...
33779
33780

Сергей0308
20.10.2017, 12:02
Доброго дня всем! C пятницей!

Уже неделю бьюсь над одним проектом. Если кто с подсказкой поможет, буду очень сильно признателен!
Суть такова.

Есть входная числовая переменная "Х". От неё в разные моменты времени (выбирается наличием "1" (bool), на входах I1..I2..I3), отнимаются переменные "а", "b", "с". Но, каждый раз (при смене сигналов на входах) вычитание производится от разности предыдущего вычитания.
Поясню.
Появилась "1" на входе I1, началось вычитание Х-а. Пришёл "0", процесс остановился. Значение записалось в переменную "Y". При повторном появлении "1" процесс возобновляется.
Если "1" появляется на входе I2, то запускается вычитание Y-b. Если "1" появляется на входе I3, то запускается Y-c.
Весь процесс останавливается при достижении Х=0. Операция вычитания привязана к 1 сек. Т.е. значения вычисляются с интервалом в 1 сек.

У меня получается, если входных переменных "а", "b", "с"... всего две, только "а" и "b". Как только появляется третья... вся моя "математика" рушится. (((

Много вариантов, судя по описанию, наверно как-то так:

33781

Если дискретные входы одновременно могут быть включены, выбрать приоритеты!

CleanS
20.10.2017, 12:15
Нет, сигнал возможен только на одном дискретном входе. Больше "с улицы" :) никаких сигналов и уставок не поступает.
Все значения заносятся в память ПР200, с экрана и дальше только используются при работе программы.

Сергей0308
20.10.2017, 12:20
Нет, сигнал возможен только на одном дискретном входе. Больше "с улицы" :) никаких сигналов и уставок не поступает.
Все значения заносятся в память ПР200, с экрана и дальше только используются при работе программы.

Тогда никаких проблем не должно возникнуть, чтобы уменьшить количество элементов можно применить FSEL!

33782

CleanS
20.10.2017, 12:26
Много вариантов, судя по описанию, наверно как-то так:

33781
....
В предложенной вами схемке вычисление производится только один раз, а надо производить каждую секунду. И при изменении сигналов на дискретных входах, вычитание производить от "остатка" предыдущего вычитания, но с подстновкой нового значения вычитаемого.

Сергей0308
20.10.2017, 12:50
В предложенной вами схемке вычисление производится только один раз, а надо производить каждую секунду. И при изменении сигналов на дискретных входах, вычитание производить от "остатка" предыдущего вычитания, но с подстновкой нового значения вычитаемого.

Тогда как-то так:

33784

I4 - тактовый вход!

Василий Кашуба
20.10.2017, 12:58
В предложенной вами схемке вычисление производится только один раз, а надо производить каждую секунду. И при изменении сигналов на дискретных входах, вычитание производить от "остатка" предыдущего вычитания, но с подстновкой нового значения вычитаемого.
У меня получилось вот так.

CleanS
20.10.2017, 13:22
У меня получилось вот так.

Спасибо большое! Чуть позже посмотрю.
Пока зарплату отрабатываю ))))

Внимательно посмотрел ваш проект. Спасибо!!!! Всё работает.
Вопрос?
С чем связано, что часть переменных у вас сетевые, а часть нет.
Сильно не пинайте, я ещё только учусь )))
Спасибо!

Василий Кашуба
20.10.2017, 16:31
Спасибо большое! Чуть позже посмотрю.
Пока зарплату отрабатываю ))))

Внимательно посмотрел ваш проект. Спасибо!!!! Всё работает.
Вопрос?
С чем связано, что часть переменных у вас сетевые, а часть нет.
Сильно не пинайте, я ещё только учусь )))
Спасибо!
Для оптимального использования регистров памяти. Если можно обойтись без сетевых переменных, обходитесь.
На какие внутренние переменные ОЛ ругался, те я заменил на сетевые.

Сергей0308
06.11.2017, 00:48
У меня получилось вот так.

Непонятно, зачем в вашем ИИЧ нужен SEL, можно же так:

33988

Тем более, что такое у Вас уже есть в другом макросе!