По freemodbus есть справка, правда я не могу в ней разобраться
Как это по нашему Кавыряться в чём-то, не понимая в чём. Я бы может и помог, но я не понимаю в Си, ну и не нужно мне это. Если уж сильно припечёт, я напишу своё. Это очень часто быстрее, чем разбираться в чужом. Там в принципе не сложно. Так что дальше я пас.
Вообще, Modbus - очень древний протокол и далеко не лучший. Другое дело, что он является стандартом для многого промышленного оборудования. Но его принцип - отображение адресного пространства регистров - очень неудобен. Поэтому применяю его только тогда, когда требует заказчик. В других случаях использую Wake, который сделал как замену Modbus-у. В протоколе Wake вместо регистров используются команды, т.е. некие функции с набором параметров. Это намного проще в использовании. Что касается Modbus, то я просто эмулировал массиы Coils и Registers:
Код:
//---------- //------- Эта секция программы эмулирует массив регистров для Modbus: -------- //----------
//---------- Эмуляция массива COILS на запись: ----------
bool ForceCoil(unsigned int addr, unsigned int word) { if(word == 0xFF00) return(Regs_SetCoil(addr, 1)); if(word == 0x0000) return(Regs_SetCoil(addr, 0)); return(0); }
//---------- Эмуляция массива COILS на чтение: ----------
Зарегистрирован: Чт май 23, 2013 18:31:58 Сообщений: 214
Рейтинг сообщения:0
Доброго времени суток! Не получается запустить freemodbus на мк atmega16. Два дня уже просидел. Вроде бы все проверил. Все компилируется через makefile в корневой папке. Редактирую код в VS Code на виндоусе. В makefile изменил пути до avr-gcc, avrdude, avr-objcopy. Частоту df-cpu=8000000ul выставил. Фьюзы прошил на внешний кварц 8Мгц, на плате отладочное реле, щелкает раз в сек, как положено. В файле port.h выставил конфиги портов для управления приема/передачей max485. Не знаю что еще настроить нужно. Для тестирования использую софт Termite. Отправляю на 10 адрес, 1, 3, 7 функции. Везде в ответе таймаут. Через лог анализатор проверил, данные только отправляются из компа и все. Может быть я опрос не так делаю с компа.
main.c Спойлер
Код:
/* ---------- AVR includes ----------*/ #include "avr/io.h" #include "avr/interrupt.h"
/* ---------- Modbus includes ----------*/ #include "mb.h" #include "mbport.h"
Зарегистрирован: Чт май 23, 2013 18:31:58 Сообщений: 214
Рейтинг сообщения:0
Наконецто разобрался на третий день. Начал двигаться по коду библиотеки, устанавливая щелкание релюшкой в непонятных местах, и потом дошел до проверки аддресса и внутри условия не защелкало. Оказалось в ПО термит установил вместо 0А значение 10. Думал что Dec надо. Два дня ушло изза одного значения. Ну зато по библиотеке полазил не плохо, тоже хороший опыт. Осталось теперь разобраться как применять команды. Ну и со стороны компа заюзать библиотеку modbus.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения