Форум: "WinAPI";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизПроблема со считыванием данных из com- порта. Найти похожие ветки
← →
tria © (2006-07-20 19:29) [0]Добрый день.
Пишу внешнюю компоненту 1С для подключения весов.
Весы постоянно выдают в com-порт посылку из 8 байт с текущим весом.
Запускается отдельный поток, в котором с помощью комманд типа:
hCom:=CreateFile( "COM1",GENERIC_READ....
ReadFile(hCom,boof,...
sleep(_SleepInterval);
происходит постоянный опрос порта.
Вроде как все считывается нормально. Если я из этого же потока передаю данные в 1С (с помощью внешнего события), то данные передаются нормально.
Если же я из 1С по обработке ожидания (аналог таймера) обращаюсь к компоненте к общим переменным, куда пишется текущий вес, то я получаю устаревший вес, с отставанием где-то в секунд 20-30. При чем отставание не ровное, а скачками, т.е. могут быть пропуски в весах.
Кто-то может подсказать, отчего это может быть?
← →
tesseract © (2006-07-20 22:06) [1]> Кто-то может подсказать, отчего это может быть?
от Sleep. Лучше поищи по Winapi - там совсем недавно была ветка про это.
И кстати лучше использовать ОбработкаВнешнегоСобытия.
ЗЫ: Петровес?
← →
tria © (2006-07-21 10:27) [2]Седал простейший эмулятор. Код потока, который должен читать данные из порта:
repeat
CurWeight:=Random(10);
For i:=0 to 10000000 do _CurWeight:=CurWeight;
MyObject.iEvent.ExternalEvent(c_AddinName, "ScaleWeight",FloatToStr(_CurWeight));
sleep(1000);
until;
Соответственно, по ОбработкеОжидания считываю данные из CurWeight. Никакого такого эффекта не наблюдается.
Проверял с помощью внешнего отчета, где по ОбработкаВнешнегоСобытия и ОбработкеОжидания дается команда показа текущего веса.
п.с.
ОбработкаВнешнегоСобытия не совсем хороша. Если войти в меню, а в это время идет ее вызов, то меню закрывается. Происходит какое-то "передергивание" всей 1С, работать при этом невозможно.
Весы какой-то Днепропетровской фирмы (покрайней мере они устанавливали). Звонили с предприятия, они уже сгорели :)
← →
tesseract © (2006-07-21 10:32) [3]После каждого считывания чисть порт! - Из буфера же т
Используй маску ожидания, и отложенное чтение. Т.К при чтении ты прочитаешь всё, что весы тебе в буфер надавали.
К тому же отложенное чтение легко убивается CancelIO(handle).
← →
tria © (2006-07-21 12:35) [4]Для меня проблема еще в следующем.
Там, где есть весы - нет инета.
Там где есть инет (работа) - нет весов.
Решил сделать эмулятор весов - на одном компе будет стоять программулина, которая схоже с весами будет давать в порт данные.
Как сделаю - буду пробовать, напишу о результатах.
← →
tesseract © (2006-07-21 12:46) [5]
> Решил сделать эмулятор весов - на одном компе будет стоять
> программулина, которая схоже с весами будет давать в порт
> данные.
где-то такое видел, прога записывает протокол а потом воспроизводит.
А без интернета программа не работает?
← →
tria © (2006-07-21 13:19) [6]Инет - источник информации :)
Я ж больше 1С-ник чем делфист...
← →
tesseract © (2006-07-21 13:24) [7]
> Я ж больше 1С-ник чем делфист...
Я наоборот :-)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.051 c