rt/msr_module.c
changeset 56 36d1fa37f5e1
parent 55 059a9e712aa7
child 57 bae4965439b8
--- a/rt/msr_module.c	Fri Jan 20 13:32:31 2006 +0000
+++ b/rt/msr_module.c	Fri Jan 20 16:04:10 2006 +0000
@@ -33,6 +33,7 @@
 
 // EtherCAT
 #include "../include/EtherCAT_rt.h"
+#include "../eclib/eclib.h"
 
 // Defines/Makros
 #define TSC2US(T1, T2) ((T2 - T1) * 1000UL / cpu_khz)
@@ -55,8 +56,7 @@
 static unsigned int ecat_bus_time = 0;
 static unsigned int ecat_timeouts = 0;
 
-ec_slave_t *s_controller;
-ec_slave_t *s_analog_in;
+ec_slave_t *s_in1, *s_out1, *s_out2, *s_out3;
 
 double value;
 int dig1;
@@ -65,12 +65,12 @@
 
 static int register_slaves(void)
 {
-    s_controller = EtherCAT_rt_register_slave(master, 0,
-                                              "Beckhoff", "EK1100", 0);
-    s_analog_in = EtherCAT_rt_register_slave(master, 1,
-                                             "Beckhoff", "EL3102", 0);
-
-    return !s_controller || !s_analog_in;
+    s_in1 = EtherCAT_rt_register_slave(master, 1, "Beckhoff", "EL3102", 0);
+    s_out1 = EtherCAT_rt_register_slave(master, 8, "Beckhoff", "EL2004", 0);
+    s_out2 = EtherCAT_rt_register_slave(master, 9, "Beckhoff", "EL2004", 0);
+    s_out3 = EtherCAT_rt_register_slave(master, 10, "Beckhoff", "EL2004", 0);
+
+    return !s_in1 || !s_out1 || !s_out2 || !s_out3;
 }
 
 /******************************************************************************
@@ -81,30 +81,30 @@
 
 static void msr_controller_run(void)
 {
-    static unsigned int debug_counter = 0;
-
-    // Prozessdaten lesen
+    static unsigned int counter = 0;
+
     msr_jitter_run(MSR_ABTASTFREQUENZ);
 
-#if 0
-    if (debug_counter == 0) {
-        master->debug_level = 2;
-    }
-#endif
+    if (counter) {
+        counter--;
+    }
+    else {
+        // "Star Trek"-Effekte
+        *((unsigned char *) s_out1->process_data) = jiffies;
+        *((unsigned char *) s_out2->process_data) = jiffies >> 4;
+        *((unsigned char *) s_out3->process_data) = jiffies >> 8;
+
+        counter = MSR_ABTASTFREQUENZ / 4;
+    }
+
+    if (((char *) s_in1->process_data)[2] < 0)
+        ((unsigned char *) s_out3->process_data)[0] |= 8;
+    else
+        ((unsigned char *) s_out3->process_data)[0] &= ~8;
+
 
     // Prozessdaten lesen und schreiben
-    EtherCAT_rt_exchange_io(master, 0, 40);
-
-#if 0
-    if (debug_counter == 0) {
-        master->debug_level = 0;
-    }
-#endif
-
-    //    value = EtherCAT_read_value(&ecat_slaves[1], 0);
-
-    debug_counter++;
-    if (debug_counter >= MSR_ABTASTFREQUENZ * 5) debug_counter = 0;
+    EtherCAT_rt_domain_xio(master, 0, 40);
 }
 
 /******************************************************************************
@@ -126,8 +126,6 @@
 {
     static int counter = 0;
 
-    // Schreibe Kanal1 von Klemme X auf 1
-
     timeval_add(&process_time, &process_time, &msr_time_increment);
     MSR_ADEOS_INTERRUPT_CODE(msr_controller_run(); msr_write_kanal_list(););