Не получается отправить PDO. Может, не так отправляю или словарь не правильно настроен, или вообще инициализирую не так...
Использую генератор OD на Питоне. objdictedit.py.
Вот код настройки ( может, ошибка супер-тупая, не пинайте, если, кто что знает, растолкуйте мне, пожалуйста)
Есть один Потребитель и один Производитель. При запросе на активацию Потребителя подчиненный узел переходит в сотояние готовности и присылает Boot-Up, а дальше
ерунда какая-то... Node_Guard или просто муть.
Не пинать, пжлста, учусь.
у Producer
CODE
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN my */
//кан на 500 kbit/s
canInit(500);
initTimer();
thisDict=&OD_Prod_Data;
//установка номера узла
setNodeId(thisDict,0x12);
//инициализация CANopen
setState(thisDict,Initialisation);
//ждем сотояния готовности
while(getState(thisDict)!=Pre_operational);
setState(thisDict,Operational);
LED_RED_ON();
/* USER CODE END my */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
masterSendNMTstateChange(thisDict,0x17,NMT_Reset_Node);
masterSendNMTstateChange(thisDict,0x17,NMT_Start_Node);
HAL_Delay(1000);
sendPDOrequest(thisDict,0x1400);
masterSendNMTstateChange(thisDict,0x17,NMT_Stop_Node);
HAL_Delay(5000);
}
/* USER CODE END 3 */
}
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN my */
//кан на 500 kbit/s
canInit(500);
initTimer();
thisDict=&OD_Prod_Data;
//установка номера узла
setNodeId(thisDict,0x12);
//инициализация CANopen
setState(thisDict,Initialisation);
//ждем сотояния готовности
while(getState(thisDict)!=Pre_operational);
setState(thisDict,Operational);
LED_RED_ON();
/* USER CODE END my */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
masterSendNMTstateChange(thisDict,0x17,NMT_Reset_Node);
masterSendNMTstateChange(thisDict,0x17,NMT_Start_Node);
HAL_Delay(1000);
sendPDOrequest(thisDict,0x1400);
masterSendNMTstateChange(thisDict,0x17,NMT_Stop_Node);
HAL_Delay(5000);
}
/* USER CODE END 3 */
}
А это у Consumer
CODE
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
//кан на 500 kbit/s
canInit(500);
initTimer();
thisDict=&OD_Prod_Data;
//номер узла
setNodeId(thisDict,0x17);
//инит узла
setState(thisDict,Stopped);
//MX_TIM1_Init();
//MX_TIM3_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
//кан на 500 kbit/s
canInit(500);
initTimer();
thisDict=&OD_Prod_Data;
//номер узла
setNodeId(thisDict,0x17);
//инит узла
setState(thisDict,Stopped);
//MX_TIM1_Init();
//MX_TIM3_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
если еще какой-то код нужен, я пришлю.
Может, в принципах CANOpen недоперлось по существу...у меня
КАК ПРАВИЛЬНО OD настроить?