PDA

Просмотр полной версии : Cчетчик пробега и скрипт C#



Igor V
17.03.2017, 10:28
Добрый день!

Столкнулся с проблемой при работе счетчика пробега: имеется фб скрипт на C#, с выходами на вход счетчика, проблема в том, что счетчик не сбрасывается, хотя старт/стоп отрабатывают как положено. Входами для скрипта служат кнопки (запуск/остановить). Требуется именно работа со скриптом. Если реализовывать без него, с помощью кнопок, то счетчик отрабатывает корректно.

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using System.IO;
using System.Collections.Generic;
using System.Text;

[FBRetain]
public partial class ФБ : ScriptBase
{
public override void Execute()
{
if(Запуск.HasValue){
if(Запуск.Value==true){
Сброс=false;
Сброс=true;
Сброс=false;
Старт_Стоп=true;
}
}
if(Остановить.HasValue){
if(Остановить.Value==true){
Старт_Стоп=false;
}
}

}
}

Старт и стоп счетчика отрабатывают. Сброса не происходит при повторном нажатии на запуск

Vinsen
17.03.2017, 10:51
Может быть входы и выходи изменяются только по окончании работы всего скрипта, у вас получается что Сброс как был false, так и остался false. В одном цикле опроса надо сделать Сброс true, а уже в следующем false.

SCADAMaster
17.03.2017, 11:16
Сброс=false;
Сброс=true;
Сброс=false;

Что это такое?

Igor V
17.03.2017, 14:25
Что это такое?

Сброс - это выход скрипта, который подается на вход счетчика. Этим командами я его дергаю, чтобы время сбросить, в справке написано " Переход параметра Сброс из "Ложь" в "Истина" - обнуляет Выход." Вот это я и делаю.

Метод execute() как я понимаю, выполняется всегда. Кнопки "Запуск" и "Остановить" не залипающие, поэтому те циклы в execute() в которых они опрашиваются, отрабатывают при 1 нажатии 1 раз.

Igor V
17.03.2017, 14:27
Может быть входы и выходи изменяются только по окончании работы всего скрипта, у вас получается что Сброс как был false, так и остался false. В одном цикле опроса надо сделать Сброс true, а уже в следующем false.

Входы и выходы, как я понимаю, обновляются с заданной частотой.

SCADAMaster
17.03.2017, 14:33
Так как вы написали он не сбросится - он также останется в состоянии false.
Нужно взводить, а на следующем цикле сбрасывать.

Vinsen
17.03.2017, 15:51
Входы и выходы, как я понимаю, обновляются с заданной частотой.

Да, допустим, если у вас проект состоит из двух объектов - скрипта C# и счётчика, то они выполняются последовательно с заданной частотой. Когда Запуск меняется с false на true, то в первом цикле у вас на выходе Сброс должен быть true, а в следующем его можно сбросить в false и запустить счетчик.

Примерно так


public override void Execute()
{
if(Запуск.HasValue){
if(Запуск.Value==true){
if(Сброс==false && Старт_Стоп ==false)
{
Сброс = true;
}
else
{
Старт_Стоп=true;
Сброс=false;
}

}
}
if(Остановить.HasValue){
if(Остановить.Value==true){
Старт_Стоп=false;
}
}

}