Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение данных c весов на сервере
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Работа с торговым оборудованием
MrIgor
Добрый день.
Задача: к компьютеру будут подключены весы (кол-во весов не известно). Подключение через com-порты. Необходимо считывать показания весов и записывать в базу. Запись должна вестись в автоматическом режиме без участия пользователей.

Реализовал запись через регламентные задания.
Регламентное задание срабатывает каждые 5 секунд.
База серверная.
Все срабатывает. Но в момент
ПринятыеДанные = ComPort.Input

в переменную ПринятыеДанные данные не попадают. Хотя если поставить точку остановки и глянуть на ComPort.Input - то данные там есть. Причем данные в ComPort.Input меняются "он-лайн" (то-есть если программа остановлена на этой строчке, то при каждом наведении мышки будут показываться разные данные).
Как отловить эти данные? Может сталкивался кто?
andr_andrey
MrIgor @ Сегодня, 10:41 необходимо зарегистрироваться для просмотра ссылки ,
Как вы определяете, что данные не попадают?
McTSIMCO
Попытался себе представить как регламентное задание на сервере читает ком-порт клиента.
Признаться, ниасилил.
MrIgor
McTSIMCO @ Сегодня, 17:51 необходимо зарегистрироваться для просмотра ссылки ,
регламентное задание читает com-порт сервера. Оборудование подключено к компьютеру, который является сервером 1С

andr_andrey @ Сегодня, 17:06 необходимо зарегистрироваться для просмотра ссылки ,
Вот так
andr_andrey
MrIgor @ Вчера, 23:03 необходимо зарегистрироваться для просмотра ссылки ,
Уберите строку ПринятаяПосылка = ""
MrIgor
andr_andrey @ 04.03.20, 16:12 необходимо зарегистрироваться для просмотра ссылки ,
Спасибо за вариант, но это не помогло.

Работают 2 варианта (они, в принципе идентичны по смыслу):
1. Используется свойство библиотеки mscomm InBufferCount
ПринятаяПосылка = "";
// Wait until 10 bytes are in the input buffer
Пока  ComPort.InBufferCount < 200 Цикл
КонецЦикла;
ПринятаяПосылка = ComPort.Input;

2. Использую искусственную паузу
ПринятаяПосылка = "";
ОбщегоНазначенияВызовСервера.Подождать(2); // выполняется пауза на указанное к-во секунд
ПринятаяПосылка = ComPort.Input;

Вообщем, проблему считаю решенной, т.к. результат получен smile.gif
Хотя мне так и осталось неясно почему этот же функционал, выполняемый "на клиенте", работает без вставляемых пауз или циклов по ожиданию буфера.

Все спасибо за помощь!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.