48 static struct ipipe_sysinfo sys_info; |
48 static struct ipipe_sysinfo sys_info; |
49 |
49 |
50 // EtherCAT |
50 // EtherCAT |
51 ec_master_t *master = NULL; |
51 ec_master_t *master = NULL; |
52 ec_domain_t *domain1 = NULL; |
52 ec_domain_t *domain1 = NULL; |
|
53 ec_domain_t *domain2 = NULL; |
53 |
54 |
54 // Prozessdaten |
55 // Prozessdaten |
55 void *r_ssi; |
56 void *r_ssi; |
|
57 void *r_ssi2; |
56 void *r_inc; |
58 void *r_inc; |
57 |
59 |
58 uint32_t k_angle; |
60 uint32_t k_angle; |
59 uint32_t k_pos; |
61 uint32_t k_pos; |
60 |
62 |
61 ec_field_init_t domain1_fields[] = { |
63 ec_field_init_t domain1_fields[] = { |
62 {&r_ssi, "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1}, |
64 {&r_ssi, "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1}, |
63 {&r_inc, "10", "Beckhoff", "EL5101", ec_ipvalue, 0, 1}, |
|
64 {} |
65 {} |
65 }; |
66 }; |
66 |
67 |
|
68 ec_field_init_t domain2_fields[] = { |
|
69 {&r_ssi2, "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1}, |
|
70 {} |
|
71 }; |
|
72 |
67 /*****************************************************************************/ |
73 /*****************************************************************************/ |
68 |
74 |
69 static void msr_controller_run(void) |
75 static void msr_controller_run(void) |
70 { |
76 { |
|
77 static unsigned int counter = 0; |
|
78 |
|
79 if (counter) counter--; |
|
80 else { |
|
81 //EtherCAT_rt_master_debug(master, 2); |
|
82 counter = MSR_ABTASTFREQUENZ; |
|
83 } |
|
84 |
71 // Prozessdaten lesen und schreiben |
85 // Prozessdaten lesen und schreiben |
72 EtherCAT_rt_domain_xio(domain1); |
86 EtherCAT_rt_domain_queue(domain1); |
73 |
87 EtherCAT_rt_domain_queue(domain2); |
74 k_angle = EC_READ_U16(r_inc); |
88 |
|
89 EtherCAT_rt_master_xio(master); |
|
90 |
|
91 EtherCAT_rt_domain_process(domain1); |
|
92 EtherCAT_rt_domain_process(domain2); |
|
93 |
|
94 //k_angle = EC_READ_U16(r_inc); |
75 k_pos = EC_READ_U32(r_ssi); |
95 k_pos = EC_READ_U32(r_ssi); |
|
96 |
|
97 //EtherCAT_rt_master_debug(master, 0); |
76 } |
98 } |
77 |
99 |
78 /*****************************************************************************/ |
100 /*****************************************************************************/ |
79 |
101 |
80 int msr_globals_register(void) |
102 int msr_globals_register(void) |
116 /*****************************************************************************/ |
138 /*****************************************************************************/ |
117 |
139 |
118 int __init init_rt_module(void) |
140 int __init init_rt_module(void) |
119 { |
141 { |
120 struct ipipe_domain_attr attr; //ipipe |
142 struct ipipe_domain_attr attr; //ipipe |
121 const ec_field_init_t *field; |
|
122 uint32_t version; |
143 uint32_t version; |
123 |
144 |
124 // Als allererstes die RT-lib initialisieren |
145 // Als allererstes die RT-lib initialisieren |
125 if (msr_rtlib_init(1, MSR_ABTASTFREQUENZ, 10, &msr_globals_register) < 0) { |
146 if (msr_rtlib_init(1, MSR_ABTASTFREQUENZ, 10, &msr_globals_register) < 0) { |
126 msr_print_warn("msr_modul: can't initialize rtlib!"); |
147 msr_print_warn("msr_modul: can't initialize rtlib!"); |
132 goto out_msr_cleanup; |
153 goto out_msr_cleanup; |
133 } |
154 } |
134 |
155 |
135 //EtherCAT_rt_master_print(master); |
156 //EtherCAT_rt_master_print(master); |
136 |
157 |
137 printk(KERN_INFO "Registering domain...\n"); |
158 printk(KERN_INFO "Registering domains...\n"); |
138 |
159 |
139 if (!(domain1 = EtherCAT_rt_master_register_domain(master, ec_sync, 100))) |
160 if (!(domain1 = EtherCAT_rt_master_register_domain(master, ec_sync, 100))) |
140 { |
161 { |
141 printk(KERN_ERR "EtherCAT: Could not register domain!\n"); |
162 printk(KERN_ERR "EtherCAT: Could not register domain!\n"); |
142 goto out_release_master; |
163 goto out_release_master; |
143 } |
164 } |
144 |
165 |
|
166 if (!(domain2 = EtherCAT_rt_master_register_domain(master, ec_sync, 100))) |
|
167 { |
|
168 printk(KERN_ERR "EtherCAT: Could not register domain!\n"); |
|
169 goto out_release_master; |
|
170 } |
|
171 |
145 printk(KERN_INFO "Registering domain fields...\n"); |
172 printk(KERN_INFO "Registering domain fields...\n"); |
146 |
173 |
147 for (field = domain1_fields; field->data; field++) |
174 if (EtherCAT_rt_register_domain_fields(domain1, domain1_fields)) { |
148 { |
175 printk(KERN_ERR "Failed to register domain fields.\n"); |
149 if (!EtherCAT_rt_register_slave_field(domain1, |
176 goto out_release_master; |
150 field->address, |
177 } |
151 field->vendor, |
178 |
152 field->product, |
179 if (EtherCAT_rt_register_domain_fields(domain2, domain2_fields)) { |
153 field->data, |
180 printk(KERN_ERR "Failed to register domain fields.\n"); |
154 field->field_type, |
181 goto out_release_master; |
155 field->field_index, |
|
156 field->field_count)) { |
|
157 printk(KERN_ERR "Could not register field!\n"); |
|
158 goto out_release_master; |
|
159 } |
|
160 } |
182 } |
161 |
183 |
162 printk(KERN_INFO "Activating master...\n"); |
184 printk(KERN_INFO "Activating master...\n"); |
|
185 |
|
186 //EtherCAT_rt_master_debug(master, 2); |
163 |
187 |
164 if (EtherCAT_rt_master_activate(master)) { |
188 if (EtherCAT_rt_master_activate(master)) { |
165 printk(KERN_ERR "Could not activate master!\n"); |
189 printk(KERN_ERR "Could not activate master!\n"); |
166 goto out_release_master; |
190 goto out_release_master; |
167 } |
191 } |
168 |
192 |
|
193 //EtherCAT_rt_master_debug(master, 0); |
|
194 |
169 #if 1 |
195 #if 1 |
170 if (EtherCAT_rt_canopen_sdo_addr_read(master, "1", 0x100A, 1, |
196 if (EtherCAT_rt_canopen_sdo_addr_read(master, "6", 0x100A, 1, |
171 &version)) { |
197 &version)) { |
172 printk(KERN_ERR "Could not read SSI version!\n"); |
198 printk(KERN_ERR "Could not read SSI version!\n"); |
173 goto out_release_master; |
199 goto out_release_master; |
174 } |
200 } |
175 printk(KERN_INFO "Software-version: %u\n", version); |
201 printk(KERN_INFO "Software-version: %u\n", version); |
220 msr_rtlib_cleanup(); |
246 msr_rtlib_cleanup(); |
221 } |
247 } |
222 |
248 |
223 /*****************************************************************************/ |
249 /*****************************************************************************/ |
224 |
250 |
|
251 #define EC_LIT(X) #X |
|
252 #define EC_STR(X) EC_LIT(X) |
|
253 #define COMPILE_INFO "Revision " EC_STR(SVNREV) \ |
|
254 ", compiled by " EC_STR(USER) \ |
|
255 " at " __DATE__ " " __TIME__ |
|
256 |
225 MODULE_LICENSE("GPL"); |
257 MODULE_LICENSE("GPL"); |
226 MODULE_AUTHOR ("Florian Pose <fp@igh-essen.com>"); |
258 MODULE_AUTHOR ("Florian Pose <fp@igh-essen.com>"); |
227 MODULE_DESCRIPTION ("EtherCAT real-time test environment"); |
259 MODULE_DESCRIPTION ("EtherCAT real-time test environment"); |
|
260 MODULE_VERSION(COMPILE_INFO); |
228 |
261 |
229 module_init(init_rt_module); |
262 module_init(init_rt_module); |
230 module_exit(cleanup_rt_module); |
263 module_exit(cleanup_rt_module); |
231 |
264 |
232 /*****************************************************************************/ |
265 /*****************************************************************************/ |