Jump to content

    

Timofey_219

Участник
  • Content Count

    119
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Timofey_219

  • Rank
    Частый гость
  • Birthday 01/01/1980

Контакты

  • Сайт
    Array
  • ICQ
    Array
  1. В модбасе конец посылки обозначает пауза 1,5 байта. А 3,5 байта тишины должно быть выдержано перед началом передачи следующей посылки. :cranky: RS-485 с аппаратным RTS
  2. В этой системе уже стоят 20 устройств, одно из которых уже является мастером. Наш монитор должен прослушивать линии обмена и анализировать данные из всех посылок, но при этом отвечать только на свою. У каждого устройства разный размер посылок, минимум 8 на запрос и ответ, у другого 11 байт есть в ответе. Сейчас сделано так, что в мониторе программа в отдельных потоках принимает по одному байту, накапливает данные, пока не поймет, где начало посылки и дальше уже обрабатывает её, то есть никаких проверок на таймауты. Но такой подход не нравится. Было решено написать отдельный драйвер, чем я и занимаюсь ) Практически закончил, осталось докупить железа и проверить, думаю к новому году отлажу и получу первые результаты )
  3. Прога будет стоять на мониторе, где крутится Windows XP Embedded. Вся система подключается к двум ком портам. Нужно опрашивать оба параллельно и объединять информацию, потом её обрабатывать и отображать. Период опроса по одному каналу всех устройств не должен превышать 100 мсек. Хотят - сделаю. А то что может не получится, я уже объяснял, но доводам моим не вняли :)
  4. В ТЗ есть ремарка, что мол да, это противоречит стандарту модбас, но сделать надо так и никак иначе. Кстати, во время работы общался с разными разработчиками и все почему то трактуют модбас по своему. Знаю двоих, которые с пеной у рта доказывали мне, что на любой скорости устройство должно ответить не позже 3,5 байт. Поэтому скорости у себя они закладывали не выше, чем 9600, ибо на тех что выше, контроллер просто не успевал обработать посылку. Когда распеатывал даташит и показывал им стандарт, они говорили, что это я не правильно трактую его и тп ... :)
  5. Таймауты там задаются в мс, мне же надо аж мксек выдержать (цитата из ТЗ): "Пауза между байтами внутри сообщения, а также между запросом и ответом не должна превышать 1.5 байт на рабочей скорости передачи, что для скорости 57600 бит/сек составляет 260 мкс." Но все эти времена очень сильно зависят от того, что на данный момент запущенно в системе, но попытка-не пытка ... Посмотрим, что получится.
  6. я такого в инете не нашел, но начальство сказало сделать, значит надо сделать ... причем на скорости 57600 все таймауты надо строго выдержать :(
  7. Да я знаю, что очень точно время считать все равно не получится, но попробую. :) DDK - установил, примеры смотрел. что то из них и беру. Спасибо.
  8. Понял. Переделал. Заработало на домашнем компе. Включен. И сама система его видит прекрасно и предлагает с ним работать. Ну тут я еще поковыряюсь. Понял. Спасибо большое за ответы.
  9. Все дело в том, что программа будет стоять на компе, где уже есть одна прога и для неё были написаны свои драйвера для портов. стандартных в системе нет. стоит вопрос, как не удаляя драйверов той программы. просто закрыв её. пользоваться этими же портами. еще почему хочу написать свои, так как в драйвере есть таймер с дискретом 100нс, что в нашем случае подходит, нужно улавливать 1,5 байта тишины для модбас. з.ы. в целом стоит задача реализовать модбас, где комп выступает слэйв устройством и отвечает мастеру не позднее 3.5 байт тишины
  10. Да, под винду ХР СП2 пишу.
  11. В силу ряда причин пишу свой драйвер для встроенных в материнку COM портов. Возникло несколько вопросов: 1. Читал, что через биос можно узнать адреса стандартных портов, путем чтения данных по адресу 0040h. Читаю от туда данные, а они постоянно меняются. Верен ли адрес? Где вобще можно узнать адреса стандартных портов? 2. В системе есть один порт с ресурсами 0x3F8-0x3FE, читаю эти адреса, а там одни фф. Получается порт не исправен? Или он на самом деле лежит по другим адресам? Запись других значений ничего не дает, там по прежнему лежат ФФ. Может это из-за того, что порт на самой плате внутри корпуса на разъем выведен (не сзади системника стандартный ДБ9) и он все таки по другим адресам в памяти? 3. На домашнем компе при выполнении пункта 2 вижу нормальные, адыкватные числа. Порт настраивается. Теперь хочу перехватить прерывание. В каких то случаях получается прерывание настроить на свою программу, в каких то нет, возвращается ошибка параметров. Удачный перехват происходит только если в диспетчере задач выключить порт и снова включить. тогда без проблем. до следующей перезагрузки. Можно ли как то этого избежать?
  12. День добрый. Дали мне тут монитор непонятной фирмы (вобще на нем ничего не написано), на котором установлена Windows XP Embedded. При загрузке загружается программа, которая отображает информацию, собираемую по двум портам COM (встроенных в этот монитор). Решили поменять программу в нем, дабы использовать для других целей. Изменил загрузчик, программа моя грузится, но столкнулся с проблемой, что стандартные драйвера для COM портов удалены и поставлены какие то свои, которые работают по непонятному мне протоколу. Ставить стандартные нельзя, должна быть возможность, чтобы при изменении загрузчика, опять грузилась старая программа и нормально работала. Решено было написать свой драйвер, который будет запускаться как сервис Встал вопрос: есть ли способы узнать адреса регистров любого ком порта у системы какой-нибудь функцией? Или надо жестко их задавать? З.Ы. Использую DDK и Microsoft VS (для редактирования)
  13. Добрый вечер. Может сможете помочь с файловой системой Скачал FATFS R0.08a. Среда IAR 4.31A для армов. Прикрутил к проекту. все работало замечательно месяца 3, но сейчас странная фишка возникает. Имя файла используется 1.pb и его размер 519 байт Когда открываю файл на запись и записываю его, в буфере, который записывается, все как положено. Функция записи возвращает, что все 519 байт были записаны нормально. Закрываю файл. Перезагружаю контроллер и при загрузке считываю этот же самый файл. Начиная со 160 байта, почему то совершенно другие значения, а до 160 все то, что нужно. Проверил функцию disk_read - она считывает все данные правильно, а вот функция f_read возвращает уже испорченные данные. Размер кластера настроен как 512 байт, но при этом функция disk_read вызывается всего один раз и количество читаемых кластеров равно одному. Попробовал записывать другие данные размером 1140 байт, там нормально пишутся только первые 1088, остальные опять не понятно откуда взятые. Во время записи и чтения контроллер ничем другим не занят, только работой с файлами. Не сможете подсказать, что именно я мог настроить не так? Думаю грешить на FATFS R0.08a даже не имеет смысла, у людей работает прекрасно. Спасибо.
  14. Все, заработало. Всем спасибо. Тема закрыта.
  15. Это не книга, это чужой проект дали и велели разобраться, почему нет приема. Цикл выкинул, ничего не поменялось. В симуляторе получилось следующее: Сначала загружаются регистры UBRRH, UBRRL, UCSRB. Все значения, которые и требовались Когда происходить запись в регистр UCSRC, одновременно вижу, что тоже самое и в регистре UBRRH. Но это, я так понимаю, потому что по одному адресу расположены.