реклама на сайте
подробности

 
 
> Опросить слейвы по CAN.
Jenya7
сообщение Feb 7 2018, 06:20
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Есть мастер и три слейва. У каждого слейва три параметра. Мне нужно за один опрос взять все три параметра с каждого слейва.
То есть для принятия решения мне нужно все 9 параметров. Потом я делаю свои дела и потом делаю новый опрос слейвов.
Вопрос как знать что все слейвы ответили именно на этот опрос? Есть какое то красивое решение или как всегда обычно?

Сообщение отредактировал Jenya7 - Feb 7 2018, 06:25
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jenya7
сообщение Feb 7 2018, 07:18
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Допустим при посылке вместе с данными я буду посылать номер опроса.
А при приеме если пришел тот же номер опроса выставлять флаг на каждый параметер.
Код
uint32_t CAN_GetMessage(void)
{
    uint32_t mot_idx;
    uint32_t opcode;
    uint32_t message_num;
    
    uint8_t position;
  
    CAN_Receive(CAN1, can_params.fifo_num,  &RxMessage);
    
    mot_idx = (RxMessage.StdId >> 8);
    
    opcode = (RxMessage.StdId - (mot_idx * 0x100));
          
    switch (opcode)
    {      
        case CAN_COM_IGET:
            motor_data[mot_idx].current = (RxMessage.Data[3]<<24) | (RxMessage.Data[2]<<16) |
                                          (RxMessage.Data[1]<<8)  | RxMessage.Data[0];
            position = CAN_IGET_POS;
        break;
        
        case CAN_COM_PGET:
            motor_data[mot_idx].position = (int32_t)((RxMessage.Data[3]<<24) | (RxMessage.Data[2]<<16) |
                                           (RxMessage.Data[1]<<8)  | RxMessage.Data[0]);
            position = CAN_PGET_POS;
        break;
        
        case CAN_COM_SGET:
            motor_data[mot_idx].speed = (RxMessage.Data[3]<<24) | (RxMessage.Data[2]<<16) |
                                        (RxMessage.Data[1]<<8)  | RxMessage.Data[0];
            position = CAN_SGET_POS;
        break;
    }
    
    message_num = (RxMessage.Data[7]<<8) | RxMessage.Data[6];
    if (can_message_num == message_num)
    {
         motor_data[mot_idx].can_rx_flags |= (1<<position);
    }
  
     return CAN_OK;
}

и потом проверять
Код
uint32_t MOT_DataReady(void)
{
    int i;
    uint32_t resp = 0;
    
    //check if all motors replied
    for (i = 0; i < MAX_MOTORS; i++)
    {
        if (motor_data[i].ena)
        {
            if ((motor_data[i].can_rx_flags & 0x0F) == 0x0F)
                resp++;
        }      
    }
    
    //all motors responded with all data
    if (resp == g_motors_num)
    {
        //clear all flags - get ready for the next data request
        for (i = 0; i < MAX_MOTORS; i++)
        {
            if (motor_data[i].ena)
                motor_data[i].can_rx_flags = 0;  
        }
        //next data request number
        can_message_num++;
        return 1;
    }
    else
        return 0;
}

Возникает вопрос как ожидать получения всех данных? в while?
Код
while (!MOT_DataReady());

А если какой то слейв умер?

Сообщение отредактировал Jenya7 - Feb 7 2018, 07:20
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Опросить слейвы по CAN.   Feb 7 2018, 06:20
- - adnega   Цитата(Jenya7 @ Feb 7 2018, 09:20) Вопрос...   Feb 7 2018, 07:03
- - mrKirill   Что изменится, если все условные Slave будут посто...   Feb 7 2018, 07:06
- - x893   Тогда сработает таймаут и большими красными буквам...   Feb 7 2018, 07:34
|- - Jenya7   Цитата(x893 @ Feb 7 2018, 12:34) Тогда ср...   Feb 7 2018, 07:40
|- - adnega   Цитата(Jenya7 @ Feb 7 2018, 10:40) а когд...   Feb 7 2018, 08:30
|- - Jenya7   Цитата(adnega @ Feb 7 2018, 13:30) У вас ...   Feb 7 2018, 08:47
||- - adnega   Цитата(Jenya7 @ Feb 7 2018, 11:47) у меня...   Feb 7 2018, 09:15
||- - Jenya7   Цитата(adnega @ Feb 7 2018, 14:15) Просто...   Feb 7 2018, 09:33
||- - Сергей Борщ   QUOTE (Jenya7 @ Feb 7 2018, 11:33) нет. м...   Feb 7 2018, 09:58
||- - Jenya7   Цитата(Сергей Борщ @ Feb 7 2018, 14:58) Т...   Feb 7 2018, 10:30
|- - k155la3   Цитата(adnega @ Feb 7 2018, 12:30) У вас ...   Feb 10 2018, 23:09
|- - adnega   Цитата(k155la3 @ Feb 11 2018, 02:09) ? 1....   Feb 11 2018, 07:02
||- - k155la3   Цитата(adnega @ Feb 11 2018, 11:02) . . ....   Feb 12 2018, 09:04
|- - ZASADA   Цитата(k155la3 @ Feb 11 2018, 02:09) У ме...   Feb 14 2018, 12:21
- - AlexandrY   Цитата(Jenya7 @ Feb 7 2018, 08:20) Есть к...   Feb 7 2018, 11:15
- - Baser   Так и не понял, в чем у ТС проблема? Если хочется...   Feb 7 2018, 13:46


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th August 2025 - 00:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016