Чтение данных c весов на сервере (mscommlib)

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

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

в переменную ПринятыеДанные данные не попадают. Хотя если поставить точку остановки и глянуть на ComPort.Input - то данные там есть. Причем данные в ComPort.Input меняются "он-лайн" (то-есть если программа остановлена на этой строчке, то при каждом наведении мышки будут показываться разные данные).
Как отловить эти данные? Может сталкивался кто?
Найденные решения
3. JohnGalt 57 03.03.20 17:29 Сейчас в теме
Очень похоже на то, что данные получаете до того как весы успели их отдать. Может, есть смысл поставить паузу пару сек, или запрашивать состояние весов в цикле если есть такая возможность. Или цикл обработать 10 или 100 раз до тех пор пока ПРинятыеДанные не будут заполнены
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. YanTsys 12 03.03.20 17:23 Сейчас в теме
Например на форме есть реквизит с именем ПринятыеДанные и типом несовместимым с тем что вы считываете из ComPort.Input ???
Попробуйте так

ПроизвольноеИмяПеременной = ComPort.Input;
ПринятыеДанные = ПроизвольноеИмяПеременной;


и в процессе отладки посмотрите что будет в ПроизвольноеИмяПеременной
3. JohnGalt 57 03.03.20 17:29 Сейчас в теме
Очень похоже на то, что данные получаете до того как весы успели их отдать. Может, есть смысл поставить паузу пару сек, или запрашивать состояние весов в цикле если есть такая возможность. Или цикл обработать 10 или 100 раз до тех пор пока ПРинятыеДанные не будут заполнены
4. MrIgorr 03.03.20 17:48 Сейчас в теме
(3) Реально вы правы. Поставил задержку перед считыванием данных
ПринятаяПосылка = "";
Подождать(10);
ПринятаяПосылка = ComPort.Input;


и данные из COM-объекта начали записываться в переменную.
Странно это как-то :)
До этого реализовал этот же функционал, но на стороне клиента с помощью
ПодключитьОбработчикОжидания("ПрочитатьВес", 1, Ложь);

там такой ситуации не было, хотя обработчик срабатывает 1 раз в секунду.

Не подскажете с чем связано такое поведение системы?
5. JohnGalt 57 03.03.20 18:44 Сейчас в теме
(4) Нужно еще отключать обработчик ожидания после успешного выполнения. То есть все равно нужно ставить условие, проверять на заполненность переменную. Или если в весах есть получение статуса (например вес стабилен/нестабилен или может статус выполнения команды взвешивания, в разных по-разному)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот