|
Heckfy: уважаемый Bul_d_Ozer, можно ли пример кода (желательно на С)? И достаточно ли будет 16МГц на МК? У меня на ассемблере, и пример кода мало что даст, ибо прием-передача строки по UART реализовавается тривиально, а дальше - логическая обработка принятого сообщения в соответствии с разработанной системой команд, обнаружение ( и исправление ) ошибок и т.д - под конкретную спецификацию проекта. В АTmega-103 у меня был кварц 4 МГц, но это было давно, лет 10 назад, тогда меги были тихоходными, потом увеличили частоту кварца, но это было связано с возросшим объемом расчетов в основной задаче, и в реалтайме было тесновато на 4 МГц. А учитывая наличие большого диапазона BAUD-rate частота кварца не является критичной, тут выбор скорости обмена определяется пропускной способностью линии связи, и ес-сно, тем, какая скорость обмена реально нужна. Все вышесказаноое относится к системе, полностью, включая программы обмена верхнегого уровня, собственного изготовления. А если есть необходимость работать с TRACE MODE, тут, я думаю, нужно соблюдать спецификацию данных этого пакета, потому что другую он просто не поймет. С этим пакетом работать не приходилось, поэтому более определенно сказать что-то не получится.
|
|
|
Поднимаем тему покорителей Модбаса!!! Цитата: у меня дела обстоят так: использую программы от производителей счетчиков (СЭТ4ТМ02 и ЦЭ6823М) - все нормально счетчики читаются, и даже стороннее программное обеспечение их обрабатывает. Наше предприятие очень дорожит этим программным обеспечением, и не допускает никого кроме сис админа, НО все эти программы под дос и сами понимаете как глаза болят от графики, я решил на чистой инициативе все это дело переделать, под веб клиент Думал взять за основу опен сорс обеспечение, OPENSCADA, но э но не могу прочитать счетчик, в Интернете валом литературы по Модбасу, но он какой то весь, разный. Если Вас не затруднило бы выложить исходник АВРа или может простую блок-схему хоть "от руки" как происходит считывание счетчика, про то что канал полминуты открыт и закрывается сразу же это я уже понял но дальше ни шагу. Ответ: Значит теперь обратная задача: разработка софта под контроллер. Я сейчас на С++ пытаюсь достучаться до контроллера FUJI PNA-3 с протоколом неким CC-S под RS-485. Определимся с протоколом: MODBUS-RTU, 8 бит данных, нет паритета, 2 стоп бита, 1 старт бит - итого 11бит/символ Тайминги: t1-время передачи 4-х символов: t1=4 x baudrate/11, с, время передачи 1-го символа: t2=1x baudrate/11, с Алгоритм опроса примерно таков: 1. Выдержать время t1 с момента приема последнего байта предыдущего сообщения. 2. Записать в COM-порт байт адреса устройства 3. Записать байт кода функции 4. Записать последовательно байты соответствующие этой функции 5.Вычислить CRC(16 бит) 6. Записать в порт младший байт CRC (CRC8L=CRC16&&(0xff)) 7. Записать в порт старший байт CRC (CRC8M=CRC16>>8) 8. счетчик байт count_r=0; 9. Пока все байты не получены: 9.1Если в порте есть непрочитанные данные: 9.1.1 Прочитать байт 9.1.2 Обработка байта в соответствии с count_r (count_r==0 - адрес, count_r==1 - номер ф-ции и т.д.)и с номером функции 9.1.3 count_r++ Конец 9.1 Конец цикла 9 10. Проверка CRC (дело совести и вкуса) 11. Перейти на п.1 Высылаю русскую спецификацию протокола, там все функции подробно описаны: что посылать и что получать в ответ. Когда я программировал контроллер, отправку байта прописывал в функции прерывания по окончании отправки USART, в ПК буфер СOM порта достаточно большой, можно непрерывно записать туда подряд все байты, он их по очереди отправит. Вся операция записи в порт займет очень мало времени, так что 99,9% времени программа будет висеть на цикле 9, здесь целесообразней читать по прерыванию или периодически опрашивать флаг в структуре COMSTAT порта (например количество несчитанных байтов COMSTAT.cbInQue). Тут виднее Вам: какая среда программирования, какая программа. Если прописать по приведенному алгоритму консольную программу, возможно она отберет все пользовательские ресурсы, это пробный вариант, чтобы "достучаться". Высылаю программу контроллера. Единственное что есть ценного для программирования на ПК - функция вычисления CRC, остальное наверно не актуально. Буквально вчера натыкался на эти счетчики (искал инфо по ADAM4520): http://forum.cta.ru/forum_posts.asp?TID=2947&PN=1. Может там народ располагает знаниями и доками по протоколу применительно к данным счетчикам. Если будете напрямую работать с COM портом, на сайте lord-n скачайте книгу Агурова "Последовательные интерфейсы ПК" (главы 20 и 21). Здесь: http://www.vsokovikov.narod.ru/New_MSDN_API/index_msdn.htm хороший справочник по функциям WINDOWS API (там папки разработка программ...- рук-во по разработке.... - WINDOWS API - справочник по WINDOWS API - ф-ции в алфавитном порядке) - понадобится при освоении функций чт/записи, откр/закр порта, чт/записи структур порта. Для начала лучше сделать тестовую консольную прогу, чтобы запрашивала какую-нибудь одну функцию (из тех, что поддерживает счетчик) Спрашивайте, делитесь, что за среда программирования, высылайте доки по счетчикам. Удачи! |
|