Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

Проблема со считыванием данных из 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 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.076 c
2-1163332223
JIN_S
2006-11-12 14:50
2006.12.03
Вопрос о TDateTimePicker (возможность выбора определенных дней).


2-1163595026
Новечек
2006-11-15 15:50
2006.12.03
Как подсчитать дробные числа?


5-1144509756
SaFy
2006-04-08 19:22
2006.12.03
Прозрачный Edit


15-1163348628
Михель
2006-11-12 19:23
2006.12.03
Не могу починить DMClient, заглючил и не лечится...


2-1163409817
ORMADA
2006-11-13 12:23
2006.12.03
Пересечение окон