etherlab/plc_etherlab.c
changeset 2107 6f9aa410a997
parent 2106 4ec3b833f2d5
child 2108 6bcfd50d5a47
equal deleted inserted replaced
2106:4ec3b833f2d5 2107:6f9aa410a997
    36 // EtherCAT
    36 // EtherCAT
    37 static ec_master_t *master = NULL;
    37 static ec_master_t *master = NULL;
    38 static ec_domain_t *domain1 = NULL;
    38 static ec_domain_t *domain1 = NULL;
    39 static int first_sent=0;
    39 static int first_sent=0;
    40 %(slaves_declaration)s
    40 %(slaves_declaration)s
       
    41 #define SLOGF(level, format, args...)\
       
    42 {\
       
    43     char sbuf[256];\
       
    44     int slen = snprintf(sbuf , sizeof(sbuf) , format , ##args);\
       
    45     LogMessage(level, sbuf, slen);\
       
    46 }
    41 
    47 
    42 /* Beremiz plugin functions */
    48 /* Beremiz plugin functions */
    43 int __init_%(location)s(int argc,char **argv)
    49 int __init_%(location)s(int argc,char **argv)
    44 {
    50 {
    45     uint32_t abort_code;
    51     uint32_t abort_code;
    56 
    62 
    57     // slaves PDO configuration
    63     // slaves PDO configuration
    58 %(slaves_configuration)s
    64 %(slaves_configuration)s
    59 
    65 
    60     if (ecrt_domain_reg_pdo_entry_list(domain1, domain1_regs)) {
    66     if (ecrt_domain_reg_pdo_entry_list(domain1, domain1_regs)) {
    61         fprintf(stderr, "PDO entry registration failed!\n");
    67         SLOGF(LOG_CRITICAL, "PDO entry registration failed!\n");
    62         return -1;
    68         return -1;
    63     }
    69     }
    64 
    70 
    65 	ecrt_master_set_send_interval(master, common_ticktime__);
    71 	ecrt_master_set_send_interval(master, common_ticktime__);
    66 
    72 
    71 %(slaves_output_pdos_default_values_extraction)s
    77 %(slaves_output_pdos_default_values_extraction)s
    72 
    78 
    73     sprintf(&rt_dev_file[0],"%%s%%u",EC_RTDM_DEV_FILE_NAME,0);
    79     sprintf(&rt_dev_file[0],"%%s%%u",EC_RTDM_DEV_FILE_NAME,0);
    74     rt_fd = rt_dev_open( &rt_dev_file[0], 0);
    80     rt_fd = rt_dev_open( &rt_dev_file[0], 0);
    75     if (rt_fd < 0) {
    81     if (rt_fd < 0) {
    76         fprintf(stderr, "Can't open %%s\n", &rt_dev_file[0]);
    82         SLOGF(LOG_CRITICAL, "Can't open %%s\n", &rt_dev_file[0]);
    77         return -1;
    83         return -1;
    78     }
    84     }
    79 
    85 
    80     // attach the master over rtdm driver
    86     // attach the master over rtdm driver
    81     MstrAttach.domainindex = ecrt_domain_index(domain1);
    87     MstrAttach.domainindex = ecrt_domain_index(domain1);
    82     rtstatus = ecrt_rtdm_master_attach(rt_fd, &MstrAttach);
    88     rtstatus = ecrt_rtdm_master_attach(rt_fd, &MstrAttach);
    83     if (rtstatus < 0) {
    89     if (rtstatus < 0) {
    84         fprintf(stderr, "Cannot attach to master over rtdm\n");
    90         SLOGF(LOG_CRITICAL, "Cannot attach to master over rtdm\n");
    85         return -1;
    91         return -1;
    86     }
    92     }
    87 
    93 
    88     if (ecrt_master_activate(master))
    94     if (ecrt_master_activate(master))
    89         return -1;
    95         return -1;
    90 
    96 
    91     if (!(domain1_pd = ecrt_domain_data(domain1))) {
    97     if (!(domain1_pd = ecrt_domain_data(domain1))) {
    92         fprintf(stderr, "domain1_pd:  0x%%.6lx\n", (unsigned long)domain1_pd);
    98         SLOGF(LOG_CRITICAL, "domain1_pd:  0x%%.6lx\n", (unsigned long)domain1_pd);
    93         return -1;
    99         return -1;
    94     }
   100     }
    95 
   101 
    96     fprintf(stdout, "Master %(master_number)d activated...\n");
   102     SLOGF(LOG_INFO, "Master %(master_number)d activated...\n");
    97     
   103     
    98     first_sent = 0;
   104     first_sent = 0;
    99 
   105 
   100     return 0;
   106     return 0;
   101 }
   107 }