Чтение данных c весов на сервере (mscommlib)
Добрый день.
Задача: к компьютеру будут подключены весы (кол-во весов не известно). Подключение через com-порты. Необходимо считывать показания весов и записывать в базу. Запись должна вестись в автоматическом режиме без участия пользователей.
Реализовал запись через регламентные задания.
Регламентное задание срабатывает каждые 5 секунд.
База серверная.
Все срабатывает. Но в момент
в переменную ПринятыеДанные данные не попадают. Хотя если поставить точку остановки и глянуть на ComPort.Input - то данные там есть. Причем данные в ComPort.Input меняются "он-лайн" (то-есть если программа остановлена на этой строчке, то при каждом наведении мышки будут показываться разные данные).
Как отловить эти данные? Может сталкивался кто?
Задача: к компьютеру будут подключены весы (кол-во весов не известно). Подключение через com-порты. Необходимо считывать показания весов и записывать в базу. Запись должна вестись в автоматическом режиме без участия пользователей.
Реализовал запись через регламентные задания.
Регламентное задание срабатывает каждые 5 секунд.
База серверная.
Все срабатывает. Но в момент
ПринятыеДанные = ComPort.Input
в переменную ПринятыеДанные данные не попадают. Хотя если поставить точку остановки и глянуть на ComPort.Input - то данные там есть. Причем данные в ComPort.Input меняются "он-лайн" (то-есть если программа остановлена на этой строчке, то при каждом наведении мышки будут показываться разные данные).
Как отловить эти данные? Может сталкивался кто?
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Например на форме есть реквизит с именем ПринятыеДанные и типом несовместимым с тем что вы считываете из ComPort.Input ???
Попробуйте так
и в процессе отладки посмотрите что будет в ПроизвольноеИмяПеременной
Попробуйте так
ПроизвольноеИмяПеременной = ComPort.Input;
ПринятыеДанные = ПроизвольноеИмяПеременной;
и в процессе отладки посмотрите что будет в ПроизвольноеИмяПеременной
Очень похоже на то, что данные получаете до того как весы успели их отдать. Может, есть смысл поставить паузу пару сек, или запрашивать состояние весов в цикле если есть такая возможность. Или цикл обработать 10 или 100 раз до тех пор пока ПРинятыеДанные не будут заполнены
(3) Реально вы правы. Поставил задержку перед считыванием данных
и данные из COM-объекта начали записываться в переменную.
Странно это как-то :)
До этого реализовал этот же функционал, но на стороне клиента с помощью
там такой ситуации не было, хотя обработчик срабатывает 1 раз в секунду.
Не подскажете с чем связано такое поведение системы?
ПринятаяПосылка = "";
Подождать(10);
ПринятаяПосылка = ComPort.Input;
и данные из COM-объекта начали записываться в переменную.
Странно это как-то :)
До этого реализовал этот же функционал, но на стороне клиента с помощью
ПодключитьОбработчикОжидания("ПрочитатьВес", 1, Ложь);
там такой ситуации не было, хотя обработчик срабатывает 1 раз в секунду.
Не подскажете с чем связано такое поведение системы?
(4) Нужно еще отключать обработчик ожидания после успешного выполнения. То есть все равно нужно ставить условие, проверять на заполненность переменную. Или если в весах есть получение статуса (например вес стабилен/нестабилен или может статус выполнения команды взвешивания, в разных по-разному)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот