mini/mini.c
changeset 111 9963537ec776
parent 109 c6766baead5e
child 112 eec7639c7be9
equal deleted inserted replaced
110:2346e2963087 111:9963537ec776
    27 // EtherCAT
    27 // EtherCAT
    28 ec_master_t *master = NULL;
    28 ec_master_t *master = NULL;
    29 ec_domain_t *domain1 = NULL;
    29 ec_domain_t *domain1 = NULL;
    30 
    30 
    31 // Datenfelder
    31 // Datenfelder
       
    32 void *r_ssi_input, *r_ssi_status;
    32 void *r_field[9];
    33 void *r_field[9];
    33 void *r_4102[3];
    34 void *r_4102[3];
    34 
    35 
    35 // Kanäle
    36 // Kanäle
    36 uint32_t k_pos;
    37 uint32_t k_pos;
       
    38 uint8_t k_stat;
    37 
    39 
    38 ec_field_init_t domain1_fields[] = {
    40 ec_field_init_t domain1_fields[] = {
    39     {&r_field[0],   "1", "Beckhoff", "EL5001", "InputValue", 0, 1},
    41     {&r_ssi_input,  "1", "Beckhoff", "EL5001", "InputValue",  0, 1},
       
    42     {&r_ssi_status, "1", "Beckhoff", "EL5001", "Status",      0, 1},
    40     {&r_field[1],   "2", "Beckhoff", "EL4132", "OutputValue", 0, 1},
    43     {&r_field[1],   "2", "Beckhoff", "EL4132", "OutputValue", 0, 1},
    41     {&r_field[2],   "3", "Beckhoff", "EL3162", "InputValue", 0, 1},
    44     {&r_field[2],   "3", "Beckhoff", "EL3162", "InputValue",  0, 1},
    42     {r_4102,        "4", "Beckhoff", "EL4102", "OutputValue", 0, 3},
    45     {r_4102,        "4", "Beckhoff", "EL4102", "OutputValue", 0, 2},
    43     {&r_field[4],   "5", "Beckhoff", "EL5001", "InputValue", 0, 1},
    46     {&r_field[4],   "5", "Beckhoff", "EL5001", "InputValue",  0, 1},
    44     {&r_field[5],   "6", "Beckhoff", "EL1014", "InputValue", 0, 1},
    47     {&r_field[5],   "6", "Beckhoff", "EL1014", "InputValue",  0, 1},
    45     {&r_field[6],   "7", "Beckhoff", "EL2004", "OutputValue", 0, 1},
    48     {&r_field[6],   "7", "Beckhoff", "EL2004", "OutputValue", 0, 1},
    46     {&r_field[7],   "8", "Beckhoff", "EL4132", "OutputValue", 0, 1},
    49     {&r_field[7],   "8", "Beckhoff", "EL4132", "OutputValue", 0, 1},
    47     {&r_field[8],   "9", "Beckhoff", "EL4132", "OutputValue", 0, 1},
    50     {&r_field[8],   "9", "Beckhoff", "EL4132", "OutputValue", 0, 1},
    48     {}
    51     {}
    49 };
    52 };
    58     // Prozessdaten emfpangen
    61     // Prozessdaten emfpangen
    59     ecrt_master_async_receive(master);
    62     ecrt_master_async_receive(master);
    60     ecrt_domain_process(domain1);
    63     ecrt_domain_process(domain1);
    61 
    64 
    62     // Prozessdaten verarbeiten
    65     // Prozessdaten verarbeiten
    63     //  k_pos   = EC_READ_U32(r_ssi);
    66     k_pos   = EC_READ_U32(r_ssi_input);
       
    67     k_stat  = EC_READ_U8(r_ssi_status);
    64 
    68 
    65     // Prozessdaten senden
    69     // Prozessdaten senden
    66     ecrt_domain_queue(domain1);
    70     ecrt_domain_queue(domain1);
    67     ecrt_master_async_send(master);
    71     ecrt_master_async_send(master);
    68 #else
    72 #else
    78     if (counter) {
    82     if (counter) {
    79         counter--;
    83         counter--;
    80     }
    84     }
    81     else {
    85     else {
    82         counter = ABTASTFREQUENZ;
    86         counter = ABTASTFREQUENZ;
    83         printk(KERN_INFO "k_pos   = %i\n", k_pos);
    87         printk(KERN_INFO "k_pos    = %i\n", k_pos);
       
    88         printk(KERN_INFO "k_stat   = 0x%02X\n", k_stat);
    84     }
    89     }
    85 
    90 
    86     // Timer neu starten
    91     // Timer neu starten
    87     timer.expires += HZ / ABTASTFREQUENZ;
    92     timer.expires += HZ / ABTASTFREQUENZ;
    88     add_timer(&timer);
    93     add_timer(&timer);
   121     if (ecrt_master_activate(master)) {
   126     if (ecrt_master_activate(master)) {
   122         printk(KERN_ERR "EtherCAT: Could not activate master!\n");
   127         printk(KERN_ERR "EtherCAT: Could not activate master!\n");
   123         goto out_release_master;
   128         goto out_release_master;
   124     }
   129     }
   125 
   130 
       
   131     //ecrt_master_debug(master, 2);
       
   132 
       
   133     if (ecrt_master_sdo_write(master, "1", 0x4061, 1,  0, 1) ||
       
   134         ecrt_master_sdo_write(master, "1", 0x4061, 2,  1, 1) ||
       
   135         ecrt_master_sdo_write(master, "1", 0x4061, 3,  1, 1) ||
       
   136         ecrt_master_sdo_write(master, "1", 0x4066, 0,  0, 1) ||
       
   137         ecrt_master_sdo_write(master, "1", 0x4067, 0,  4, 1) ||
       
   138         ecrt_master_sdo_write(master, "1", 0x4068, 0,  0, 1) ||
       
   139         ecrt_master_sdo_write(master, "1", 0x4069, 0, 25, 1) ||
       
   140         ecrt_master_sdo_write(master, "1", 0x406A, 0, 25, 1) ||
       
   141         ecrt_master_sdo_write(master, "1", 0x406B, 0, 50, 1)) {
       
   142         printk(KERN_ERR "EtherCAT: Failed to configure SSI!\n");
       
   143         goto out_deactivate;
       
   144     }
       
   145 
       
   146     //ecrt_master_debug(master, 0);
       
   147 
   126 #ifdef ASYNC
   148 #ifdef ASYNC
   127     // Einmal senden und warten...
   149     // Einmal senden und warten...
   128     ecrt_master_prepare_async_io(master);
   150     ecrt_master_prepare_async_io(master);
   129 #endif
   151 #endif
   130 
   152 
   137 
   159 
   138     printk(KERN_INFO "=== Minimal EtherCAT environment started. ===\n");
   160     printk(KERN_INFO "=== Minimal EtherCAT environment started. ===\n");
   139 
   161 
   140     return 0;
   162     return 0;
   141 
   163 
       
   164  out_deactivate:
       
   165     ecrt_master_deactivate(master);
       
   166 
   142  out_release_master:
   167  out_release_master:
   143   ecrt_release_master(master);
   168     ecrt_release_master(master);
   144 
   169 
   145  out_return:
   170  out_return:
   146   return -1;
   171     return -1;
   147 }
   172 }
   148 
   173 
   149 /*****************************************************************************/
   174 /*****************************************************************************/
   150 
   175 
   151 void __exit cleanup_mini_module(void)
   176 void __exit cleanup_mini_module(void)