Стартовая страница › Форумы › Разработка и интеграция › Запуск команды КП по таймеру или времени
- В этой теме 1 ответ, 2 участника, последнее обновление 6 лет, 7 месяцев назад сделано Mikhail.
-
АвторСообщения
-
25.09.2017 в 08:04 #7378KazamУчастник
Добрый день! Если у вас возникает проблема запуск команды ТУ по графику, но нет возможности использовать модуль Автоматического управления, можно поступить так:
Берем тестовый модуль и изменяем код:Объявим класс UkutsScheduler
public class UkutsScheduler { public void Start(string ctrlNum, string Name, string CronString) { Random rn = new Random(); int interval = rn.Next(10,58); ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler scheduler = sf.GetScheduler(); scheduler.Start(); IJobDetail job = JobBuilder.Create<StartJobArchive>().Build(); job.JobDataMap.Add("ctrlNum",ctrlNum); ITrigger trigger = TriggerBuilder.Create() // создаем триггер .WithIdentity("trigger" + ctrlNum, "group1") // идентифицируем триггер с именем и группой .StartNow() // запуск сразу после начала выполнения .WithSimpleSchedule(x => x .WithIntervalInMinutes(interval) .RepeatForever()) .Build(); // создаем триггер scheduler.ScheduleJob(job, trigger); // начинаем выполнение работы scheduler.ResumeJob(job.Key); } }
public class StartJobArchive : IJob { void IJob.Execute(IJobExecutionContext context) { Log.WriteLineDelegate writeToLog; writeToLog = text => { }; // заглушка CommSettings cm = new CommSettings("localhost",10000,"ScadaApi","ScadaApi", 10000); ServerComm sc = new ServerComm(cm, writeToLog); sc.SendBinaryCommand(0, Convert.ToInt32(context.JobDetail.JobDataMap.Get("ctrlNum")), new byte[] { 0x00, 0x00 }, out bool result); sc.Close(); } }
Используем так:
` UkutsScheduler US = new UkutsScheduler();
US.Start(CtrlNum, «NameKP», «cron string»);
log.WriteAction(«Триггер №: «+NV.Get(key) + » запущен в работу»);`Используем библиотеку Quartz.Net для запуска задач. Реализуем класс StartJobArchive, где описывается метод Execute который непосредственно отправляем команду (номер канала управления передается через IJobExecutionContext).
В примере используется генератор псевдослучайных чисел который генерируется в пределах 10,58 минут. Что и передается в интервал триггера.
Обратите внимание что, есть переменная CronString в которую можно передать Cron запись периода и немного изменить код создания триггера. Ибо Quartz.Net умеет такой синтаксис.
25.09.2017 в 19:58 #7382MikhailМодераторДобрый день!
Можно конечно, но гораздо лучше поддержать проект Rapid SCADA и приобрести модуль, который вполне доступен по цене ))
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.