Имя: Пароль:
1C
1С v8
Передача данных через компоненту Mscomm
0 pomkka
 
04.09.15
09:02
Здравствуйте. Подскажите, пожалуйста. Ситуация следующая: передаю данные через COM порт на Arduino, код следующий:

    ComPort = Новый COMОбъект("MsCommLib.MsComm");    
    Попытка
        ComPort.InBufferCount = 0;
        ComPort.Settings    = "9600,n,8,1";
        ComPort.CommPort    = 3;
        ComPort.Handshaking = 1;
        ComPort.RThreshold    = 1;
        ComPort.SThreshold    = 1;
        ComPort.InputLen    = 0;
        ComPort.RTSEnable    = 1;
        ComPort.InputMode = 0 ;
        ComPort.PortOpen = Истина;
        ComPort.Output = Символ(ЭлементыФормы.Команда.Значение);
    Исключение
        Сообщить(ОписаниеОшибки());
        Отказ = Истина;
    КонецПопытки;


В целом, все работает, но есть одно большое НО. Данные передаются только если в режиме отладки некоторое время задержаться на строке ComPort.Output. Даже не знаю с чем это связано, может у кого-нибудь есть идеи как это можно исправить?
1 Zamestas
 
04.09.15
09:04
(1) После открытия и перед началом передачи подождать чуток - не?
2 ProgAL
 
04.09.15
09:43
3 pomkka
 
07.09.15
12:50
(1) Не прокнуло, может я что не так делал, но задержку делал банально перебором значений цикла, результат нулевой
4 pomkka
 
07.09.15
12:51
(2) Спасибо за ссылку, но вот значение функции ПодождатьПриемаСимволовСТаймаутом автор так и не написал(
5 Лефмихалыч
 
07.09.15
13:01
(3) лучше ping'ом паузить - цикл твой поток на 100% грузит, такое ожидание может не принести результат
6 Garykom
 
гуру
07.09.15
13:06
ComPort.PortOpen = 1;
ComPort.Output = Символ(ЭлементыФормы.Команда.Значение);
ComPort.PortOpen = 0;
7 spectre1978
 
07.09.15
14:12
(0) после передачи данных поток должен подождать, пока устройство примет данные и ответит. Задержка может быть до десятков миллисекунд.
8 pomkka
 
07.09.15
16:04
(6) а есть ли разница? На всякий случай попробовал, результат аналогичен.
9 pomkka
 
07.09.15
16:08
(5) Спасибо большое, очень помогли. Вот работающий код:
Процедура глПауза(Сек)
    scr = Новый COMОбъект("WScript.Shell");
    scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(Сек)),0,1);
КонецПроцедуры;
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.