Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#121: 2011-12-10 15:54:55 ЛС | профиль | цитата
nesco писал(а):
Парсер команд + переключатель событий
Ну это уже зависит от поставленой задачи.
Например, если применить для пожарно-охранной сигнализации, то анализировать последний знак (вроде так) на пожар, тревожную кнопку - можно прямо в потоке. Всё остальное можно после записи в БД. comtest.rar
А анализ в БД - это может быть совершенно отдельная программа.
Так же как и на каждый Com-порт своя программа.
Миллион решений.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1comtest.rar [1.2KB] [125]
Ответов: 51
Рейтинг: 3
#122: 2011-12-10 17:19:33 ЛС | профиль | цитата
Tad писал(а):
А я бы применил такую систему:
@ReadUARTStart=ХХХХХХХ# - где ХХХХХХХ - данные, а "@" - знак начала команды (стартовый), "#" - знак конца команды (стоповый) и читал бы по одному знаку. Стартовые и стоповые знаки можно выбрать любые, какие понравятся.
Такая система не будет работать так как знаки @ и # могут оказаться в одном из 7 передаваемых байтов (0-255) данных, сигналы DTR и CTS я не использую вообще, они свободны и никуда не подключены, использую только TX и RX.. как то всё сложно получается, похоже не самый подходящий алгоритм.. P.S.Сорри, небыло времени этим заниматься, только вникаю во всё что тут написали...
------------ Дoбавленo в 17.20:
А как вам такой алгоритм... Программа на ПК каждые пол секунды циклически: 1. очищает буфер приёма 2. отправляет знак @ контроллеру 2. принимает 7 байт с контроллера и обрабатывает >> далее см. пункт 1. А контроллер при обнаружении знака @ отправляет 7 байт в программу на ПК и переходит в ожидание нового знака @ от ПК.
карма: 0

0
Ответов: 8930
Рейтинг: 823
#123: 2011-12-10 17:26:05 ЛС | профиль | цитата
Tomset91, именно так и делается в промышленном исполнении, датчики не выдают данные в постоянном режиме, а ждут опроса по своему индивидуальному коду, и на эти два провода можно нацепить "ну очень много" датчиков.
карма: 19

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#124: 2011-12-10 17:46:38 ЛС | профиль | цитата
Tad писал(а):
то анализировать последний знак (вроде так) на пожар, тревожную кнопку - можно прямо в потоке

Нет, немного не так.
Tad писал(а):
Всё остальное можно после записи в БД

Увы, для больших потоков данных с разных портов не подходит, проверено уже, даже только на запись и то, происходит катастрофическое переполнение очереди. Вот почему я и просил оптимизированный по скорости движок базы
Tad писал(а):
А анализ в БД - это может быть совершенно отдельная программа

то же, что и предыдущий пункт
Tad писал(а):
Так же как и на каждый Com-порт своя программа

На кой хрен, когда достаточно оформить экземпляр класса парсера с портом, типа -- сервера портов

Tad, твоя схема хороша только для малопоточных данных, для сбора данных с различных ЦС не подходит совершенно, как не подошли и схемы на стандартных компонентах у меня в сервере портов, пришлось писать ответственные участки на IC через режим многопоточности. Увы, и ах
------------ Дoбавленo в 17.44:
Tad писал(а):
Миллион решений

После некоторого времени работы над таким проектом, осетр урезается на порядки
------------ Дoбавленo в 17.47:
Леонид писал(а):
и на эти два провода можно нацепить "ну очень много" датчиков

Так датчиков, или контроллеров
карма: 22

0
Ответов: 51
Рейтинг: 3
#125: 2011-12-10 17:48:20 ЛС | профиль | цитата
Программа на ПК каждые пол секунды циклически: 1. очищает буфер приёма 2. отправляет знак @ контроллеру 2. принимает 7 байт с контроллера и обрабатывает >> далее см. пункт 1. А контроллер при обнаружении знака @ отправляет 7 байт в программу на ПК и переходит в ожидание нового знака @ от ПК.


А теперь помогите сделать данную программу на HiASM (напомню 7 значений байта 0-255 отображаются в семи полях на форме..) - в этом у меня основная проблема..., а я пока сделаю для контроллера.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#126: 2011-12-10 18:23:14 ЛС | профиль | цитата
Tomset91 писал(а):
Такая система не будет работать так как знаки @ и # могут оказаться в одном из 7 передаваемых байтов (0-255) данных,
nesco писал(а):
Но мы же не знаем ТЗ на контроллер и его формат вывода.

------------ Дoбавленo в 18.23:
nesco писал(а):
для больших потоков данных с разных портов не подходит, проверено уже
а такое понятие, как избыточность информации совсем не в счёт ?

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26164
Рейтинг: 2127
#127: 2011-12-10 18:56:31 ЛС | профиль | цитата
Tad писал(а):
а такое понятие, как избыточность информации совсем не в счёт ?

В моем случае, нет, должны регистрироваться все данные, тк как важен путь прохода событий от целевого источника. К тому же порты обслуживают совершенно разные ЦС, с совершенно не похожими форматами данных, и не имеющие дублирования в других.
Tad, затронутое мной описание -- это узконаправленная специфика, в определенных случаях, недопонимаемая даже профессиональными программистами. Я понимаю, что ты хочешь показать свою осведомленность в разных областях, но это не тот случай. Просчитано уже все, и все работает, устраивая всех заинтересованных лиц. Втихаря я провожу рптимизацию ПО, но шибко не разбежишься на работающей системе, а останавливать ее нельзя больше чем на несколько десятков минут.
карма: 22

0
Ответов: 51
Рейтинг: 3
#128: 2011-12-10 19:12:14 ЛС | профиль | цитата
Tad писал(а):
Но мы же не знаем ТЗ на контроллер и его формат вывода.
Формат вывода байта (любое значение байта, а это 0-255), это уже не важно, делаю для контроллера по такому алгоритму:
Контроллер при обнаружении знака @ отправляет 7 байт в программу на ПК и переходит в ожидание нового знака @ от ПК.
Помогите пожалуйста кто нить сделать на HiASM >>
Программа на ПК каждые пол секунды циклически: 1. очищает буфер приёма 2. отправляет знак @ контроллеру 2. принимает 7 байт с контроллера и обрабатывает(отправляет каждый байт их 7, в своё поле на форме в десятичном формате) >> далее см. пункт 1.
потому как вообще не представляю какие элементы для этого потребуются, ну опыта в нём нет вообще... P.S. щас доработаю прогу контроллера и выложу картинку как это дело выглядит в терминале порта...
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#129: 2011-12-10 19:20:20 ЛС | профиль | цитата
Tomset91 писал(а):
любое значение байта, а это 0-255
а чёрта с два. Com-порт (грубо) знаки с кодами 0 по 31 "выбрасывает". Значит нужно отправлять в порт в виде Hex-строки.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 51
Рейтинг: 3
#130: 2011-12-10 19:28:18 ЛС | профиль | цитата
Tad писал(а):
а чёрта с два. Com-порт (грубо) знаки с кодами 0 по 31 "выбрасывает". Значит нужно отправлять в порт в виде Hex-строки.

Незнаю про что вы говорите, но в теминале у меня уже принимаются любые знаки без ошибок... ну если щас будет работать с терминала (при отправки знака @, да знак можно любой ) то остальное дело за HiASM
карма: 0

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#131: 2011-12-10 20:05:36 ЛС | профиль | цитата
Tad писал(а):
а чёрта с два. Com-порт (грубо) знаки с кодами 0 по 31 "выбрасывает". Значит нужно отправлять в порт в виде Hex-строки

Это кто тебе такое сказал
Компонент принимает любой набор ASCII кодов от 0 до 255, не нахрен там не нужна никакая HEX строка.

Tad, ты чего, переспал сегодня или переотмечал выходной
карма: 22

0
Ответов: 3889
Рейтинг: 362
#132: 2011-12-10 20:10:17 ЛС | профиль | цитата
nesco писал(а):
Компонент принимает любой набор ASCII кодов от 0 до 255

У меня порта нет, но мне интересно, а если посреди строки лежит нулевой байт (общепринятый маркер конца), учитывая ToString(_Data), её часом не обрежет
карма: 1

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#133: 2011-12-10 20:12:34 ЛС | профиль | цитата
1nd1g0 писал(а):
У меня порта нет, но мне интересно, а если посреди строки лежит нулевой байт, её часом не обрежет

Нет. Эффект тот же, что я и писал недавно одному ответ про Криптографию, где используются строковые переменные. Во всех этих случаев со строкой надо работать через стрим, но только ни в коем случае не через компоненты из вкладки строки
карма: 22

0
Ответов: 1376
Рейтинг: 197
#134: 2011-12-10 20:14:43 ЛС | профиль | цитата
nesco писал(а):
Во всех этих случаях со строкой надо работать через стрим
это бы в wiki записать не мешало
карма: 1

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#135: 2011-12-10 20:19:41 ЛС | профиль | цитата
1nd1g0 писал(а):
ToString(_Data), её часом не обрежет

Нет, метод получает указатель на строку данных, а не саму строку, и если длина этой строки при создании указана, включая все байты, то то эта длина строки так и останется при передаче
------------ Дoбавленo в 20.20:
Народ! Вы че, сегодня перепраздновали
Неужели все это для вас новости, и вы для себя открыли Америку
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)