Динамометр Т-8, ввод данных через COM порт

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Динамометр Т-8, ввод данных через COM порт

Сообщение Viktor »

Здравствуйте!
Мне нужно считывать данные с прибора - динамометра Т-8 (преобразователь для тензодатчика с АЦП), который выдает на СОМ порт строку символов каждую секунду.
Выдаёт сам - без всяких запросов.
Как правильно синхронизировать программу?
Она считывает строки правильно, но когда я её доработал с целью - из строки сделать число со знаком и порядком - возникают периодические ошибки в данных, примерно через 5-6 измерений (секунд)
Вложения
Serial.vi
(100.05 КБ) 265 скачиваний
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Eugen Graf »

В общем ты получаешь строку. Если не трудно выложи одну две такие строки.

А вообще тебе надо убрать Case и надо убрать задержку а ещё Bytes On Port, тогда скорее всего всё заработает.
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Viktor »

Строка состоит из знака (+ или -), 6 цифр (измеренное значение), кода, определяющего положение запятой (порядок) и кода, определяющего единицу измерения (кг, т, Н, кН)
Точно не могу описать - все данные по протоколу обмена оставил на работе. Завтра пошлю...
Спасибо за помощь!
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Eugen Graf »

Ну в общем делай как я тебе написал. Можно будет добавить ещё одну другую Case структуру, которая различает ошибку при чтении с порта, но это потом. :wink:
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Eugen Graf »

Вот короче что я имел ввиду.

Константа 100 это максимальная длина строки. Не беспокойся, если строка будет короче чем 100 символов, то чтение порта прекратится и ты получишь полную строку. VISA Read не будет считывать все указанные 100 символов, т.к. Terminaton Char при конфигурации включен. А задержка тебе в принципе не нужна, т.к. VISA Read сам задерживает цикл. Но на случай, если порт например отсутствует в системе, ну или какая нибудь подобная ошибка, то можно в кейс ошибки добавить небольшую задержку в 100 милисекунд.
Вложения
Serial.png
Serial.vi
LV 8.5
(98.33 КБ) 260 скачиваний
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Viktor »

eg писал(а):Вот короче что я имел ввиду.

Константа 100 это максимальная длина строки. Не беспокойся, если строка будет короче чем 100 символов, то чтение порта прекратится и ты получишь полную строку. VISA Read не будет считывать все указанные 100 символов, т.к. Terminaton Char при конфигурации включен. А задержка тебе в принципе не нужна, т.к. VISA Read сам задерживает цикл. Но на случай, если порт например отсутствует в системе, ну или какая нибудь подобная ошибка, то можно в кейс ошибки добавить небольшую задержку в 100 милисекунд.
Спасибо!
Сегодня на работе я понял, что причина в задержке, равной 1000мс. Начало каждого нового цикла не всегда совпадает с началом передачи данных динамометром. Уменьшив (или убрав) задержку я получил правильные показания.
Завтра попробую твой вариант.
Вложения
acdu.vi
(172.64 КБ) 243 скачивания
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Eugen Graf »

Твоя программа теоретически должна пожирать все рессурсы компа (т.к. нет задержки), а практически она у меня вообще зависает.
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Viktor »

Ты имеешь в виду задержку в case = 0 ?
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Eugen Graf »

Например да. А задержка в кейсе 1 тебе принесёт только гемморой. :think:

А если сделаешь задержку в кейсе 0, то в принципе может быть прога будет работать если тебе повезёт при чтении первой строки и если в процессе коммуникации не возникнет ни одной ошибки.

Можно работать с задержкой в кейсе 0, но тогда надо будеть переделывать прогу, чтобы она работала стабильно. Это называется парсинг.
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Viktor »

Спасибо за помощь - я ещё только учусь...
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Viktor »

Обещаный протокол:
protocol.png
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Eugen Graf »

А это уже нтерессно. Оказывается это не простая строка! Оказывается это пакет-мутант. Ну тогда тебе мой пример не подойдёт, т.к. он подразумевает строку, которая заканчивается "вводом", а не начинается с него.

Ну раз так, тебе надо действовать по-другому. Тебе надо считывать порт по одному байту до тех пор пока не увидишь байт синхронизации. А потом считываешь весь пакет. В следующей итерации ты уже будешь синхронизирован и можно считывать весь пакет сразу.

Ну или всё таки попробуй мой пример, но на одну строку ты будешь отставать. Если это не играет большой роли, то всё ок.
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Viktor »

eg писал(а):А это уже нтерессно. Оказывается это не простая строка! Оказывается это пакет-мутант. Ну тогда тебе мой пример не подойдёт, т.к. он подразумевает строку, которая заканчивается "вводом", а не начинается с него.

Ну раз так, тебе надо действовать по-другому. Тебе надо считывать порт по одному байту до тех пор пока не увидишь байт синхронизации. А потом считываешь весь пакет. В следующей итерации ты уже будешь синхронизирован и можно считывать весь пакет сразу.

Ну или всё таки попробуй мой пример, но на одну строку ты будешь отставать. Если это не играет большой роли, то всё ок.
Я пробовал ещё вчера и вот что происходит:
eg.gif
Посмотрел, что за ошибка:
eg.PNG
На индикатор и график ничего не выдаёт.
Мой вариант выдает ту же ошибку, но показывает силу и чертит график:
acdu.gif
acdu1.gif
Хотелось бы понять, что это за ошибка!
:dntknw:
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Eugen Graf »

Эта ошибка не опасная, её можно игнорировать. Чтобы понять что такое Framing Error надо знать как работает передача данных по последовательному порту на уровне железа и хард драйвера. Я знаю, если нужно могу рассказать.

А вообще посмотри установки порта при конфигурации. Если эта ошибка часто выскакивает, то скорее всего порт отконфигурирован неправильно. Например старт и стоп биты или количество битов данных. Так же Flow Control.
Аватара пользователя
Viktor

Activity Professionalism Tutorials Black
expert
expert
Сообщения: 1408
Зарегистрирован: 23 мар 2008, 10:56
Награды: 4
Версия LabVIEW: 2020
Откуда: Санкт-Петербург
Благодарил (а): 17 раз
Поблагодарили: 3 раза
Контактная информация:

Re: Динамометр Т-8, ввод данных через COM порт

Сообщение Viktor »

Конечно, я хотел бы узнать про передачу данных.
А где посмотреть установки порта?
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приборами»