Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Постоянный ответ с СОМ порта          
kosalex Подменю пользователя
сообщение 05.09.14, 8:37
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Добрый день! Помогите с СОМ портом.

Ж/Д весы постоянно отправляют ответ в виде "$000020000010@". Разбиваю строку на две подстроки, это и есть вес1 и вес2.

Из-за того в порт пишется постоянно этот ответ, то при чтении порта через ПодключитьОбработчикОжидания 2сек, в переменную ДаннысСПорта бывает что попадает строка вида "$000020000010@$000020000010@" и т.к.

Код который опрашивает порт:
Если ComPort.InBufferCount = 14 Тогда
        ДанныеСПорта = ComPort.Input;
        ЭлементыФормы.НадписьОтветСВесов.Значение = Строка(ТекущаяДата()) + " " + ДанныеСПорта;
        ПарсингОтветаСОМПорта(ДанныеСПорта);
    Иначе
        ЭлементыФормы.НадписьОтветСВесов.Значение = "Ответа нет...";
    КонецЕсли;


Бывает что ComPort.InDufferCount = 0 либо еще какому то значению.
Наверное можно как то перевести работу СОМ порта в режим отправка значение-чтение, как?

TipsyKID Подменю пользователя
сообщение 05.09.14, 9:13
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 413
Из: Киев
Спасибо сказали: 161 раз
Рейтинг: 0

Цитата(kosalex @ 05.09.14, 9:37) *
Бывает что ComPort.InDufferCount = 0 либо еще какому то значению.

Если бывает, что ComPort.InDufferCount <> 14 и такие случаи следует обрабатывать, не проще ли убрать это условие и продумать парсинг строки опираясь на @ и $ который возвращает прибор ?
Или написать :
ИначеЕсли ComPort.InDufferCount > 14 тогда ...


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

kosalex Подменю пользователя
сообщение 05.09.14, 10:26
Сообщение #3

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(TipsyKID @ 05.09.14, 10:13) *
Если бывает, что ComPort.InDufferCount <> 14 и такие случаи следует обрабатывать, не проще ли убрать это условие и продумать парсинг строки опираясь на @ и $ который возвращает прибор ?
Или написать :
ИначеЕсли ComPort.InDufferCount > 14 тогда ...



Не знаю на счет проще или нет...

Какой метод или свойства MSCOMM32 устанавливает работу порта в режим: получение данных с порта после отправки команды.
Сейчас режим: получение данных без отсылки команды.

andr_andrey Подменю пользователя
сообщение 05.09.14, 16:12
Сообщение #4

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 623
Спасибо сказали: 166 раз
Рейтинг: 130.8

Цитата(kosalex @ 05.09.14, 11:26) *
Не знаю на счет проще или нет...

Какой метод или свойства MSCOMM32 устанавливает работу порта в режим: получение данных с порта после отправки команды.
Сейчас режим: получение данных без отсылки команды.

Что за чудесный режим такой?
Компорт всегда принимает данные на своем физическом интерфейсе, декодирует их, и помещает байты в буфер приемника. Из этого буфера вы можете считывать информацию какими угодно порциями.
Что конкретно у вас происходит, и для чего вы хотите чтото изменить?


Signature
#define private public
enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day

kosalex Подменю пользователя
сообщение 08.09.14, 7:18
Сообщение #5

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Доброе утро,запустил hyperterminal, в нем не отправляя ничего в порт сразу показывается ответ с порта "$000020000010@, $000020 = вес1, 000010@ = вес2.

И бывает такое что в этот буфер пишется сразу несколько ответов, т.е. ответ = "$000020000010@$000020000010@"...,"$000020000010@$000020000010@$000020000010@...."

Можно конечно написать условия для обработки получаемого ответа,но делал на других весах все было норм, т.е. послал "1", ответ $000020000010@ с буфера получил и хорошо)) А на этих все время ответ идет...

andr_andrey Подменю пользователя
сообщение 08.09.14, 13:12
Сообщение #6

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 623
Спасибо сказали: 166 раз
Рейтинг: 130.8

Цитата(kosalex @ 08.09.14, 8:18) *
Доброе утро,запустил hyperterminal, в нем не отправляя ничего в порт сразу показывается ответ с порта "$000020000010@, $000020 = вес1, 000010@ = вес2.

И бывает такое что в этот буфер пишется сразу несколько ответов, т.е. ответ = "$000020000010@$000020000010@"...,"$000020000010@$000020000010@$000020000010@...."

Можно конечно написать условия для обработки получаемого ответа,но делал на других весах все было норм, т.е. послал "1", ответ $000020000010@ с буфера получил и хорошо)) А на этих все время ответ идет...

Вы не задумывались, кто именно должен ждать "1" и ничего не передавать до тех пор?
Поэтому берите инструкцию пользователя к весам и выставляйте там режим "по запросу".
Компорт тут ничем не виноват.


Signature
#define private public
enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day

kosalex Подменю пользователя
сообщение 08.09.14, 13:33
Сообщение #7

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(andr_andrey @ 08.09.14, 14:12) *
Вы не задумывались, кто именно должен ждать "1" и ничего не передавать до тех пор?
Поэтому берите инструкцию пользователя к весам и выставляйте там режим "по запросу".
Компорт тут ничем не виноват.

Ждут по идеи весы, пока им придет "1".
Была бы инструкция к этим весам.....

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 16:05
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!