Ситуация следующая, открываю порт для получения данных, но не могу поставить закрытие по истечению времени(например секунд). Перепробовал всё что знал и вычитал. Может кто поделится мыслью
Процедура СчитатьКартуНажатие(Элемент)
Перем ЗначениеСчитки;
ComPort = Новый COMОбъект("MsCommLib.MsComm");
Попытка
ComPort.CommPort = 3;
ComPort.Settings = "38400,N,8,1";
ComPort.InputMode = 1;
ComPort.PortOpen = Истина;
ЭлементыФормы.СостояниеСвязи.Заголовок = "Связь есть...";
Таймаут = 5;
ПорогТаймаута = ТекущаяДата() + Таймаут;
ТекущееЧисло = ТекущаяДата();
Пока ComPort.InBufferCount <= 1 и ТекущееЧисло <> ПорогТаймаута Цикл
Массив = ComPort.Input;
КонецЦикла;
ДанныеСПорта = ComPort.Input;
Массив = ДанныеСПорта.Выгрузить();
навскидку http://pro1c.org.ua/redirect.php?https://kb.mista.ru/article.php?id=50
sava1 @ Вчера, 10:39
,
А может есть еще какой-либо вариант реализации?
SeverinPasha, опишите проблему.
Vofka @ Сегодня, 10:23
,
Я по клику открываю порт, чтобы принять данные. И никак не могу написать код, который будет закрывать порт через например 5 секунд. Пробовал работать с функциями даты но всё безрезультатно. Мне нужно просто остановить цикл через 5 секунд после начала приёма данных, при условии, что данные не пришли
SeverinPasha, так и чем не подходит вариант с функцией ПодключитьОбработчикОжидания(...)? Это таймер, просто с не совсем удачным названием .
Petre @ Вчера, 10:50
,
Vofka @ Вчера, 10:49
,
Да тут не в названии дело)
Попробовал обработчиком и понял что это вариант не для данного случая.
Мне нужно не запускать всю процедуру по истечению времени. В коде есть отдельный цикл, который отвечает за приём данных.
Пока ComPort.InBufferCount <= 1 Цикл
Массив = ComPort.Input;
КонецЦикла;
ТД = ТекущаяДата();
Ждать = 5;
Пока ComPort.InBufferCount <= 1 И ТД + Ждать < ТекущаяДата() Цикл
Массив = ComPort.Input;
КонецЦикла;
Vofka @ Сегодня, 10:15
,
Я пробовал таким образом раньше делать
Не работает. Выбивает исключение, которое я прописал на всякий случай, чтобы видеть ошибки
Исключение
Сообщить("Не возможно открыть порт.",СтатусСообщения.ОченьВажное);
Отказ = Истина;
КонецПопытки;
ComPort.PortOpen = Ложь;
КонецПроцедуры
SeverinPasha, вы как-то даете информацию обрывками, ничего не понятно.
Vofka @ Сегодня, 10:54
,
Ну не сбрасывать же мне весь код. То что я сбросил это лишь лакмусовая бумага, которая показывает то, что данный вариант не работает.
Извиняюсь, если что-то не так описываю
В 1с я человек новый
SeverinPasha, вам что-то подсказывают, вы говорите "я так пробовал, не работает". Но что вы пробовали я лично вообще не понимаю.
Решение найдено, всем спасибо
ВремяСтарта = ТекущаяДата();
Длит = 5;
Пока ComPort.InBufferCount = 0 И (ТекущаяДата()- ВремяСтарта) < Длит Цикл
Массив = ComPort.Input;
КонецЦикла;
Я вам этот вариант ещё в сообщении #10 предложил. Не работает же.
Vofka @ Вчера, 17:40
,
Самое интересное, что ваш код не работал. Я понимаю что по сути это одно и то же, но первым вариантом кода программа реально не работала. Всё равно большое спасибо
SeverinPasha @ 13.11.18, 9:34
,
Пост #1
Таймаут = 5;
ПорогТаймаута = ТекущаяДата() + Таймаут;
ТЕКУЩЕЕЧИСЛО= ТекущаяДата();
Пока ComPort.InBufferCount <= 1 и ТЕКУЩЕЕЧИСЛО<> ПорогТаймаута Цикл
Массив = ComPort.Input;
КонецЦикла;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua