06.04.2018, 16:29
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от rinat_n86
|
порт опрашивается автоматически раз в 30 секунд, а положение 4 телесигнала приходит по изменению сразу автоматически без опроса
|
Ну если у вас все само по себе и по заданному промежутку времени, то почему просто не проверить значение времени когда сработает (должен сработать) четвертый сигнал?
|
|
09.04.2018, 08:30
|
Интересующийся
|
|
Регистрация: 06.04.2018
Сообщений: 14
|
|
Сообщение от laimas
|
Ну если у вас все само по себе и по заданному промежутку времени, то почему просто не проверить значение времени когда сработает (должен сработать) четвертый сигнал?
|
Подскажите тогда что необходимо дописать в скрипте чтоб проводилась проверка четвертого ТС. В программирование не силен
|
|
09.04.2018, 08:55
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну вы же сами сказали, что есть четыре команды, которые выполняются последовательно по таймеру. А это в общем то запустить 4 раза таймер, и достаточно проверять итерацию цикла по которому они и запускаются - если четвертая (последняя), значит последняя команда.
Вообще-то телеметрия подразумевает обратную связь, а значит сигнал обратной связи может служить индикатором того, что выполняется/выполнено в данный момент времени.
|
|
09.04.2018, 10:46
|
Интересующийся
|
|
Регистрация: 06.04.2018
Сообщений: 14
|
|
Сообщение от laimas
|
Ну вы же сами сказали, что есть четыре команды, которые выполняются последовательно по таймеру. А это в общем то запустить 4 раза таймер, и достаточно проверять итерацию цикла по которому они и запускаются - если четвертая (последняя), значит последняя команда.
Вообще-то телеметрия подразумевает обратную связь, а значит сигнал обратной связи может служить индикатором того, что выполняется/выполнено в данный момент времени.
|
Четыре Команды последовательно по таймеру не выполняются. В скрипте указано что если три телесигнала будут по коду 1, подается команда на телеуправления на 4 телесигнал. Так вот в скрипт работает, но есть одна бяка что команда телеуправления подается постояно, хотя 4 телесигнал изменил свое состояние и пока в ручную не остановить команду ТУ, оно не прикратиться. Подскажите мастера программисты своего дела какой командой в скрипте указать что ТУ должно выполняться всего два раза и если первое ТУ успешное и положение ТС изменилось, то последующие ТУ не выполнять.
|
|
09.04.2018, 12:13
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Так я задавал вопрос, каким образом можно подавать следующие команды не опросив порт что он изменил состояние, или не получив обратный сигнал, на что получил ответ, что этого не требуется. А как же тогда можно узнать завершены ли предыдущие команды и можно подавать следующую? Или то что прописано в условии, это и есть сигналы ответа (состояние) на ранее переданные команды?
|
|
09.04.2018, 15:47
|
Интересующийся
|
|
Регистрация: 06.04.2018
Сообщений: 14
|
|
Вообще в самом блоке телесигнализации прописано передавать ТС с временем 30 сек. По трассировке смотрю состояние 4 ТС передает, но мне кажется скрипт не понимает состояние ТС4, так как в скрипте не указан его состояние.
if (TM('#TCX:Y:Z') == 0 && TM('#TCX:Y:Z') == 0 && TM('#TCX:Y:Z') == 0) {
здесь указано состояние тс с 1 по 3
далее команду ТУ
tmControl(X, Y, Z, 1); 1 - включить ТУ 4 телесигнала
и вот здесь надо как то указать состояние 4-го ТС (как if (TM('#TCX:Y:Z') == 1). Вопрос здесь if надо?
далее команду ТУ не выполняется
}
sleep(2000);
}
Совет разработчика: В основном цикле сделайте какую-нибудь переменную, после первой команды телеуправления увеличивайте значение этой переменной, по прошествии какого-то времени соответственно принимайте действия, если ТС не переключился.
Подскажите и помогите
|
|
09.04.2018, 16:10
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от rinat_n86
|
Совет разработчика: В основном цикле сделайте какую-нибудь переменную, после первой команды телеуправления увеличивайте значение этой переменной
|
Ну я же об этом тоже говорил, ответом было, что все не так, так как команды передаются не последовательно "Четыре Команды последовательно по таймеру не выполняются". А ведь иначе, это просто цикл с обходом массива команд, запустили первую, запомнили итерацию, и т.д. То есть то, что вам и советуют.
Сообщение от rinat_n86
|
Вопрос здесь if надо?
|
Ну если if (TM('#TCX:Y:Z') == 1), это условие запуска команды 4, то да, я же не в курсе того, что это вообще означает.
|
|
09.04.2018, 16:29
|
Интересующийся
|
|
Регистрация: 06.04.2018
Сообщений: 14
|
|
Сообщение от laimas
|
Ну я же об этом тоже говорил, ответом было, что все не так, так как команды передаются не последовательно "Четыре Команды последовательно по таймеру не выполняются". А ведь иначе, это просто цикл с обходом массива команд, запустили первую, запомнили итерацию, и т.д. То есть то, что вам и советуют.
Ну если if (TM('#TCX:Y:Z') == 1), это условие запуска команды 4, то да, я же не в курсе того, что это вообще означает.
|
Если б знал какой командой в скрипте создать переменную
Это не условие запуска команды, а состояние телесигнализации
|
|
09.04.2018, 16:39
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от rinat_n86
|
Если б знал какой командой в скрипте создать переменную
|
Для этого команды не требуется, просто объявляется переменная, var cont = 1, например, которая увеличивается по мере выполнения команд, и после четвертой она будет равна 4.
Сообщение от rinat_n86
|
Это не условие запуска команды, а состояние телесигнализации
|
Если нужно выполнит нечто по условию этого состояния, то все верно, нужно проверять это состояние, то есть if(xxx==1) выполнить.
|
|
09.04.2018, 16:50
|
Интересующийся
|
|
Регистрация: 06.04.2018
Сообщений: 14
|
|
Сообщение от laimas
|
Для этого команды не требуется, просто объявляется переменная, var cont = 1, например, которая увеличивается по мере выполнения команд, и после четвертой она будет равна 4.
Если нужно выполнит нечто по условию этого состояния, то все верно, нужно проверять это состояние, то есть if(xxx==1) выполнить.
|
while (true) {
if (TM('#TCX:Y:Z') == 0 && TM('#TCX:Y:Z') == 0 && TM('#TCX:Y:Z') == 0) {
tmControl(X, Y, Z, 1); 1 - включить ТУ 4 телесигнала
}
if (TM('#TCX:Y:Z') == 1
var cont==1
sleep(2000);
}
Мне так надо оставлять скрипт или я ошибку допускаю
|
|
|
|