|
CANFestival, посылка PDO запроса |
|
|
|
Dec 8 2017, 07:16
|

Частый гость
 
Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250

|
Привет всем! Помогите, пожалуйста разобраться. Битый час сижу... Не получается отправить 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 */
} А это у 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 */
} если еще какой-то код нужен, я пришлю. Может, в принципах CANOpen недоперлось по существу...у меня КАК ПРАВИЛЬНО OD настроить?
Сообщение отредактировал IgorKossak - Dec 8 2017, 11:45
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
|
|
|
|
|
 |
Ответов
|
Dec 8 2017, 13:08
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(Ekka @ Dec 8 2017, 14:42)  Вот что видно в CANHacker ... как я понимаю, статус у обоих Operation, Consumer принимает от Producer 0x0212... Он что-то должен ответить? Consumer ничего не должен отвечать на pdo. Почему у вас 212 с нулевой длиной ?
|
|
|
|
|
Dec 8 2017, 13:39
|

Частый гость
 
Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250

|
Цитата(_3m @ Dec 8 2017, 14:08)  Consumer ничего не должен отвечать на pdo. Почему у вас 212 с нулевой длиной ? у меня так в библиотеке написано Код sendPDOrequest (CO_Data * d, UNS16 RPDOIndex) { UNS16 *pwCobId; UNS16 offset = d->firstIndex->PDO_RCV; UNS16 lastIndex = d->lastIndex->PDO_RCV;
if (!d->CurrentCommunicationState.csPDO) { return 0; }
/* Sending the request only if the cobid have been found on the PDO receive */ /* part dictionary */
MSG_WAR (0x3930, "sendPDOrequest RPDO Index : ", RPDOIndex);
if (offset && RPDOIndex >= 0x1400) { offset += RPDOIndex - 0x1400; if (offset <= lastIndex) { /* get the CobId */ pwCobId = d->objdict[offset].pSubindex[1].pObject;
MSG_WAR (0x3930, "sendPDOrequest cobId is : ", *pwCobId); { Message pdo; pdo.cob_id = UNS16_LE(*pwCobId); pdo.rtr = REQUEST; pdo.len = 0; return canSend (d->canHandle, &pdo); } } } MSG_ERR (0x1931, "sendPDOrequest : RPDO Index not found : ", RPDOIndex); return 0xFF; } как мне тогда от Consumer получить значение проецируемой переменной? нет...не то, как от Producer послать какие-то данные Consumer-y, я понимаю, что там длина должна быть 8, и данные, но их там нет
|
|
|
|
|
Dec 8 2017, 14:24
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(Ekka @ Dec 8 2017, 16:39)  нет...не то, как от Producer послать какие-то данные Consumer-y, я понимаю, что там длина должна быть 8, и данные, но их там нет Вы посылаете remote request. А producer должен посылать данные. Используйте другую функцию. Кроме того CiA Application Note 802 рекомендует вообще не использовать remote request потому что с ним много проблем.
|
|
|
|
|
Dec 11 2017, 10:34
|

Частый гость
 
Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250

|
Цитата(_3m @ Dec 8 2017, 15:24)  Вы посылаете remote request. А producer должен посылать данные. Используйте другую функцию. Кроме того CiA Application Note 802 рекомендует вообще не использовать remote request потому что с ним много проблем. Получилось передавать данные от Producer и Consamer в сеть из спроецированных переменных. А как ПРИНЯТЬ в спроецированные переменные? принимать не хочет ни в какую....
Сообщение отредактировал Ekka - Dec 11 2017, 10:35
|
|
|
|
Сообщений в этой теме
Ekka CANFestival, посылка PDO запроса Dec 8 2017, 07:16         _3m Цитата(Ekka @ Dec 12 2017, 15:08) объясни... Dec 13 2017, 07:02 syoma Да, насчет чтения DS301 и DS401 правильно. Да и во... Dec 13 2017, 19:12 Ekka Еще парочка вопросов начинающего. Сказано, что ест... Dec 14 2017, 06:24  _3m Цитата(Ekka @ Dec 14 2017, 09:24) Еще пар... Dec 14 2017, 15:15 syoma ЦитатаВы такие знаете бесплатные ?
Я кроме wiresha... Dec 14 2017, 20:20 Ekka Все получается, но возникла такая проблема... Клие... Dec 21 2017, 06:53  Ekka НЕ могу понять, что делаю не так...
чтобы отправи... Dec 21 2017, 08:07   Ekka Ребят, медленно разбираюсь. Может, кто знает, тако... Dec 26 2017, 12:58
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|