Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=57452)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Работа с торговым оборудованием _ Чтение данных c весов на сервере

Автор: MrIgor 03.03.20, 10:41

Добрый день.
Задача: к компьютеру будут подключены весы (кол-во весов не известно). Подключение через com-порты. Необходимо считывать показания весов и записывать в базу. Запись должна вестись в автоматическом режиме без участия пользователей.

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

ПринятыеДанные = ComPort.Input

в переменную ПринятыеДанные данные не попадают. Хотя если поставить точку остановки и глянуть на ComPort.Input - то данные там есть. Причем данные в ComPort.Input меняются "он-лайн" (то-есть если программа остановлена на этой строчке, то при каждом наведении мышки будут показываться разные данные).
Как отловить эти данные? Может сталкивался кто?

Автор: andr_andrey 03.03.20, 17:06

MrIgor @ Сегодня, 10:41 * ,
Как вы определяете, что данные не попадают?

Автор: McTSIMCO 03.03.20, 17:51

Попытался себе представить как регламентное задание на сервере читает ком-порт клиента.
Признаться, ниасилил.

Автор: MrIgor 03.03.20, 23:03

McTSIMCO @ Сегодня, 17:51 * ,
регламентное задание читает com-порт сервера. Оборудование подключено к компьютеру, который является сервером 1С

andr_andrey @ Сегодня, 17:06 * ,
Вот так

Автор: andr_andrey 04.03.20, 16:12

MrIgor @ Вчера, 23:03 * ,
Уберите строку ПринятаяПосылка = ""

Автор: MrIgor 06.03.20, 8:04

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
Хотя мне так и осталось неясно почему этот же функционал, выполняемый "на клиенте", работает без вставляемых пауз или циклов по ожиданию буфера.

Все спасибо за помощь!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua