2016-04-28 10 views
-1

Я пытаюсь реализовать протокол RTU ModBus через периферийное устройство UART с помощью платы STM32F4-Discovery.Как зарегистрировать адрес регистра Modbus с помощью C/C++

Я планирую реализовать функции Master и Slave с помощью Modbus RTU.

Вот мои вопросы

Как я мог пошевелить полученные данные в UART для MODBUS и передачи данных из MODBUS слоя UART, используя C/C++, просьба сообщить фрагмент кода, который может помочь мне понять ваши объяснения. (На данный момент я думаю о том, чтобы придумать некоторые API, пожалуйста, предложите некоторые шаблоны)

Во-вторых, как я могу реализовать регистры Modbus и катушки. Я имел в виду, как я могу определить там адрес, указанный в Руководстве по применению ModBus. Пожалуйста, объясните мне фрагмент кода. Ниже того, что я пытался реализовать.

/*Global Array, Structure and Variable Declarations*/ 
/* So to access Discrete_Output_Coils[2345] 
    the valid address to include in the protocol would be 
    so we have to access address 0x929 to read the 
    data.*/ 
const unsigned short int Discrete_Output_Coils[4999]; 
const unsigned short int Discrete_Input_Contacts[4999]; 
const unsigned short int Analog_Input_Register[4999]; 
const unsigned short int Anlog_output_Holding_Register[4999]; 
+2

Ваш вопрос слишком широк. Сначала начните с master * или * slave, но не обоих. Во-вторых, прочтите спецификации Modbus. В-третьих, начните с очень простой очень простой реализации, когда вы либо отправляете, либо получаете фрейм, и ничего больше. Нет смысла пытаться думать о реализации регистра, если у вас нет основного сортировщика передачи. – user694733

ответ

0

Я согласен с user694733. Вы должны идти шаг за шагом. Например, вы должны определить свои спецификации оборудования (т. Е. Какой сигнал и какой тип они являются?) Сколько ответов? Ответ на эти вопросы расскажет вам, сколько регистров и какого типа будет иметь значение для вашего «устройства». , сопоставляйте каждый сигнал с регистром и затем пытайтесь выполнить операцию чтения/записи по регистру с проверкой CRC, встроенной (запрограммированной) для катушек или аналогового. Откорректируйте протокол, пока он не получит то, что вы ожидали, и они покрывают остальную часть одного тип регистров (катушка, аналог). Затем разверните реализацию для операций чтения и записи нескольких регистров. Кстати, размещение объявлений массива не прикладывает усилий для решения проблемы. Вы просите сообщество сделать всю тяжелую работу. Если вы хотите, чтобы еще один код начинался с google немного больше. Вот ссылка на библиотеку, которую вы можете изучить, чтобы узнать, соответствует ли она вашему запросу: http://libmodbus.org/download/

 Смежные вопросы

  • Нет связанных вопросов^_^