Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.045 c
2-1163112797
image
2006-11-10 01:53
2006.12.03
Как узнать количество потоков работающих в данный момент времени


2-1163848810
Handle
2006-11-18 14:20
2006.12.03
OpenProcess


15-1163416440
s567
2006-11-13 14:14
2006.12.03
Хэши crc32, md5


2-1163737455
Steep
2006-11-17 07:24
2006.12.03
Строки


4-1153140375
Roobee1
2006-07-17 16:46
2006.12.03
Перехват данных на LPT





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский