На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Страницы: (6) [1] 2 3 ...  5 6 все  ( Перейти к последнему сообщению )  
> ModBus
    Помогите!!! начал разбираться с работой с ком портами попал в руки прибор который работает по протоколу ModBus RTU. настряпал вот такую програмку но она не работает!!!
    Я так и не могу прочитать данных с порта помогите плиз!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    исходник на билдере здесь: vortekc.narod.ru/MyModBus.zip
    или может кто знает фриварный компонент для работы с ModBus
      В чем его(ModBus'а) основные особенности?
        Пример команды чтения 4 канала второй страницы (10 канал, 9 адрес) побайтно:

        адрес устр,4,0,9,0,1,CRCL,CRCH .
        адрес устр,команд чтения, колличество байт2, DATAH,DATAL,CRCL,CRCH
        Чтение ведётся не более 6 регыстров за 1 раз
        Всё это в RTU формате.

        Помогите разобратся. Заранее признателен Александр
          Я не об этом. В чем сложность реализации?
          Сколько регистров и каков порядок байтов в слове - значения не имеет.
            trainer

            Исходник на билдере здесь: vortekc.narod.ru/MyModBus.zip

            Sori, архив был повреждён (исправлен)

            Может есть компоненты ModBus под Делфи или Билдер

            Не могу записать в порт .
            Если есть пример буду признателен.

            Александр.
              Сегодня или завтра подготовлю публичную версию своей DLL для работы с COM-портом и выложу гле-нибудь.
                Буду очень признателен.
                Сообщи мне где выложиш.
                Удачи.
                Александр
                  Да прямо здесь и выложу.
                  Архив WinRAR 2.90

                  -----------------
                  Пардоньте, забыл вписать коды ошибок. Вложен новый файл.
                  Сообщение отредактировано: trainer -

                  Прикреплённый файлПрикреплённый файлTrComPort.rar (28.46 Кбайт, скачиваний: 8190)
                    ОК. Скачал, огромное спасибо.
                    Коментарии принимаются? Если да то немножко попозже.
                    Удачи. Александр.
                      Цитата
                      VorteKC, 11.12.03, 15:17
                      Коментарии принимаются?
                      Непременно smile.gif
                        Спасибо всё работает. Замечаний оссобых нет кроме нескольких опечаток в ReadMe.txt в примерах на С++ там пару констант немножко не так обозвал smile.gif Но это не очень важно smile.gif А так всё работает!!! Может что поже вылезет тогда сообщу wink.gif

                        Да, ты случайно не знаешь как мне быть с такой проблемкой: я вот получаю массив с ответом от прибора, но нужнные данные только два элемента скажем 3 и 4. Тоесть 3 это младший байт слова а 4 соответственно старший. Вот как мне их склеить и получить число записанное этими двумя байтами?
                        Зарание спасибо!!!!
                          Ну это вариантов много, например:
                          BYTE buffer[n];
                          WORD value = *((WORD *)(buffer+2));// это если считать как все нормальные люди(3-ий - это смещение 2)

                          Добавлено в
                          Цитата
                          VorteKC, 12.12.03, 21:10
                          кроме нескольких опечаток в ReadMe.txt в примерах на С++ там пару констант немножко не так обозвал
                          Я его на скорую руку писАл. smile.gif
                            Может это и ламерский вопрос но всё же: почему в результате ниже следующей операции компилятор мне выдаёт значение value = 58369 вместо нужных 484?
                            buff[0]=0x1;
                            buff[1]=0xE4;
                            WORD value =*((WORD *) (buff));
                              Цитата
                              VorteKC, 13.12.03, 01:01
                              почему в результате ниже следующей операции компилятор мне выдаёт значение value = 58369 вместо нужных 484?
                              Потому, что порядок не тот. Не:
                              Цитата
                              VorteKC, 12.12.03, 21:10
                              Тоесть 3 это младший байт слова а 4 соответственно старший
                              А наоборот: 3 - старший, 4-младший smile.gif .
                              Тогда:WORD value = ((byte[2]<<8)|byte[3])&0xffff;
                                Спасибо, но я тут сам немножко подумал и решил зделать с помошью асма biggrin.gif
                                mov ah,rd_buffer[3];
                                mov al,rd_buffer[4;
                                mov Chislo,ax;

                                Ну вот теперь у меня вроде всё работает, но есть проблемка я же всёравно не понимаю как оно доконца работает. Поделись пожалуйста исходниками своей библиотеки. Уж очень разобраться охота.
                                Зарание благодарен Саша!
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (6) [1] 2 3 ...  5 6 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0359 ]   [ 17 queries used ]   [ Generated: 29.03.24, 07:30 GMT ]