Динамометр Т-8, ввод данных через COM порт
-
Viktor
- expert
- Сообщения: 1408
- Зарегистрирован: 23 мар 2008, 10:56
- Награды: 4
- Версия LabVIEW: 2020
- Откуда: Санкт-Петербург
- Благодарил (а): 17 раз
- Поблагодарили: 3 раза
- Контактная информация:
Динамометр Т-8, ввод данных через COM порт
Здравствуйте!
Мне нужно считывать данные с прибора - динамометра Т-8 (преобразователь для тензодатчика с АЦП), который выдает на СОМ порт строку символов каждую секунду.
Выдаёт сам - без всяких запросов.
Как правильно синхронизировать программу?
Она считывает строки правильно, но когда я её доработал с целью - из строки сделать число со знаком и порядком - возникают периодические ошибки в данных, примерно через 5-6 измерений (секунд)
Мне нужно считывать данные с прибора - динамометра Т-8 (преобразователь для тензодатчика с АЦП), который выдает на СОМ порт строку символов каждую секунду.
Выдаёт сам - без всяких запросов.
Как правильно синхронизировать программу?
Она считывает строки правильно, но когда я её доработал с целью - из строки сделать число со знаком и порядком - возникают периодические ошибки в данных, примерно через 5-6 измерений (секунд)
- Вложения
-
- Serial.vi
- (100.05 КБ) 265 скачиваний
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
В общем ты получаешь строку. Если не трудно выложи одну две такие строки.
А вообще тебе надо убрать Case и надо убрать задержку а ещё Bytes On Port, тогда скорее всего всё заработает.
А вообще тебе надо убрать Case и надо убрать задержку а ещё Bytes On Port, тогда скорее всего всё заработает.
-
Viktor
- expert
- Сообщения: 1408
- Зарегистрирован: 23 мар 2008, 10:56
- Награды: 4
- Версия LabVIEW: 2020
- Откуда: Санкт-Петербург
- Благодарил (а): 17 раз
- Поблагодарили: 3 раза
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
Строка состоит из знака (+ или -), 6 цифр (измеренное значение), кода, определяющего положение запятой (порядок) и кода, определяющего единицу измерения (кг, т, Н, кН)
Точно не могу описать - все данные по протоколу обмена оставил на работе. Завтра пошлю...
Спасибо за помощь!
Точно не могу описать - все данные по протоколу обмена оставил на работе. Завтра пошлю...
Спасибо за помощь!
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
Ну в общем делай как я тебе написал. Можно будет добавить ещё одну другую Case структуру, которая различает ошибку при чтении с порта, но это потом.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
Вот короче что я имел ввиду.
Константа 100 это максимальная длина строки. Не беспокойся, если строка будет короче чем 100 символов, то чтение порта прекратится и ты получишь полную строку. VISA Read не будет считывать все указанные 100 символов, т.к. Terminaton Char при конфигурации включен. А задержка тебе в принципе не нужна, т.к. VISA Read сам задерживает цикл. Но на случай, если порт например отсутствует в системе, ну или какая нибудь подобная ошибка, то можно в кейс ошибки добавить небольшую задержку в 100 милисекунд.
Константа 100 это максимальная длина строки. Не беспокойся, если строка будет короче чем 100 символов, то чтение порта прекратится и ты получишь полную строку. VISA Read не будет считывать все указанные 100 символов, т.к. Terminaton Char при конфигурации включен. А задержка тебе в принципе не нужна, т.к. VISA Read сам задерживает цикл. Но на случай, если порт например отсутствует в системе, ну или какая нибудь подобная ошибка, то можно в кейс ошибки добавить небольшую задержку в 100 милисекунд.
- Вложения
-
- Serial.vi
- LV 8.5
- (98.33 КБ) 260 скачиваний
-
Viktor
- expert
- Сообщения: 1408
- Зарегистрирован: 23 мар 2008, 10:56
- Награды: 4
- Версия LabVIEW: 2020
- Откуда: Санкт-Петербург
- Благодарил (а): 17 раз
- Поблагодарили: 3 раза
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
Спасибо!eg писал(а):Вот короче что я имел ввиду.
Константа 100 это максимальная длина строки. Не беспокойся, если строка будет короче чем 100 символов, то чтение порта прекратится и ты получишь полную строку. VISA Read не будет считывать все указанные 100 символов, т.к. Terminaton Char при конфигурации включен. А задержка тебе в принципе не нужна, т.к. VISA Read сам задерживает цикл. Но на случай, если порт например отсутствует в системе, ну или какая нибудь подобная ошибка, то можно в кейс ошибки добавить небольшую задержку в 100 милисекунд.
Сегодня на работе я понял, что причина в задержке, равной 1000мс. Начало каждого нового цикла не всегда совпадает с началом передачи данных динамометром. Уменьшив (или убрав) задержку я получил правильные показания.
Завтра попробую твой вариант.
- Вложения
-
- acdu.vi
- (172.64 КБ) 243 скачивания
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
Твоя программа теоретически должна пожирать все рессурсы компа (т.к. нет задержки), а практически она у меня вообще зависает.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
Например да. А задержка в кейсе 1 тебе принесёт только гемморой.
А если сделаешь задержку в кейсе 0, то в принципе может быть прога будет работать если тебе повезёт при чтении первой строки и если в процессе коммуникации не возникнет ни одной ошибки.
Можно работать с задержкой в кейсе 0, но тогда надо будеть переделывать прогу, чтобы она работала стабильно. Это называется парсинг.
А если сделаешь задержку в кейсе 0, то в принципе может быть прога будет работать если тебе повезёт при чтении первой строки и если в процессе коммуникации не возникнет ни одной ошибки.
Можно работать с задержкой в кейсе 0, но тогда надо будеть переделывать прогу, чтобы она работала стабильно. Это называется парсинг.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
А это уже нтерессно. Оказывается это не простая строка! Оказывается это пакет-мутант. Ну тогда тебе мой пример не подойдёт, т.к. он подразумевает строку, которая заканчивается "вводом", а не начинается с него.
Ну раз так, тебе надо действовать по-другому. Тебе надо считывать порт по одному байту до тех пор пока не увидишь байт синхронизации. А потом считываешь весь пакет. В следующей итерации ты уже будешь синхронизирован и можно считывать весь пакет сразу.
Ну или всё таки попробуй мой пример, но на одну строку ты будешь отставать. Если это не играет большой роли, то всё ок.
Ну раз так, тебе надо действовать по-другому. Тебе надо считывать порт по одному байту до тех пор пока не увидишь байт синхронизации. А потом считываешь весь пакет. В следующей итерации ты уже будешь синхронизирован и можно считывать весь пакет сразу.
Ну или всё таки попробуй мой пример, но на одну строку ты будешь отставать. Если это не играет большой роли, то всё ок.
-
Viktor
- expert
- Сообщения: 1408
- Зарегистрирован: 23 мар 2008, 10:56
- Награды: 4
- Версия LabVIEW: 2020
- Откуда: Санкт-Петербург
- Благодарил (а): 17 раз
- Поблагодарили: 3 раза
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
Я пробовал ещё вчера и вот что происходит: Посмотрел, что за ошибка: На индикатор и график ничего не выдаёт.eg писал(а):А это уже нтерессно. Оказывается это не простая строка! Оказывается это пакет-мутант. Ну тогда тебе мой пример не подойдёт, т.к. он подразумевает строку, которая заканчивается "вводом", а не начинается с него.
Ну раз так, тебе надо действовать по-другому. Тебе надо считывать порт по одному байту до тех пор пока не увидишь байт синхронизации. А потом считываешь весь пакет. В следующей итерации ты уже будешь синхронизирован и можно считывать весь пакет сразу.
Ну или всё таки попробуй мой пример, но на одну строку ты будешь отставать. Если это не играет большой роли, то всё ок.
Мой вариант выдает ту же ошибку, но показывает силу и чертит график: Хотелось бы понять, что это за ошибка!
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
Эта ошибка не опасная, её можно игнорировать. Чтобы понять что такое Framing Error надо знать как работает передача данных по последовательному порту на уровне железа и хард драйвера. Я знаю, если нужно могу рассказать.
А вообще посмотри установки порта при конфигурации. Если эта ошибка часто выскакивает, то скорее всего порт отконфигурирован неправильно. Например старт и стоп биты или количество битов данных. Так же Flow Control.
А вообще посмотри установки порта при конфигурации. Если эта ошибка часто выскакивает, то скорее всего порт отконфигурирован неправильно. Например старт и стоп биты или количество битов данных. Так же Flow Control.
-
Viktor
- expert
- Сообщения: 1408
- Зарегистрирован: 23 мар 2008, 10:56
- Награды: 4
- Версия LabVIEW: 2020
- Откуда: Санкт-Петербург
- Благодарил (а): 17 раз
- Поблагодарили: 3 раза
- Контактная информация:
Re: Динамометр Т-8, ввод данных через COM порт
Конечно, я хотел бы узнать про передачу данных.
А где посмотреть установки порта?
А где посмотреть установки порта?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 2 Ответы
- 600 Просмотры
-
Последнее сообщение alerm
-
- 3 Ответы
- 855 Просмотры
-
Последнее сообщение IvanLis
-
- 13 Ответы
- 1191 Просмотры
-
Последнее сообщение Boxa
-
- 0 Ответы
- 486 Просмотры
-
Последнее сообщение Juri
-
- 3 Ответы
- 263 Просмотры
-
Последнее сообщение AndreyDmitriev