mini/mini.c
changeset 111 9963537ec776
parent 109 c6766baead5e
child 112 eec7639c7be9
--- a/mini/mini.c	Mon Mar 20 08:36:08 2006 +0000
+++ b/mini/mini.c	Mon Mar 20 11:02:39 2006 +0000
@@ -29,19 +29,22 @@
 ec_domain_t *domain1 = NULL;
 
 // Datenfelder
+void *r_ssi_input, *r_ssi_status;
 void *r_field[9];
 void *r_4102[3];
 
 // Kanäle
 uint32_t k_pos;
+uint8_t k_stat;
 
 ec_field_init_t domain1_fields[] = {
-    {&r_field[0],   "1", "Beckhoff", "EL5001", "InputValue", 0, 1},
+    {&r_ssi_input,  "1", "Beckhoff", "EL5001", "InputValue",  0, 1},
+    {&r_ssi_status, "1", "Beckhoff", "EL5001", "Status",      0, 1},
     {&r_field[1],   "2", "Beckhoff", "EL4132", "OutputValue", 0, 1},
-    {&r_field[2],   "3", "Beckhoff", "EL3162", "InputValue", 0, 1},
-    {r_4102,        "4", "Beckhoff", "EL4102", "OutputValue", 0, 3},
-    {&r_field[4],   "5", "Beckhoff", "EL5001", "InputValue", 0, 1},
-    {&r_field[5],   "6", "Beckhoff", "EL1014", "InputValue", 0, 1},
+    {&r_field[2],   "3", "Beckhoff", "EL3162", "InputValue",  0, 1},
+    {r_4102,        "4", "Beckhoff", "EL4102", "OutputValue", 0, 2},
+    {&r_field[4],   "5", "Beckhoff", "EL5001", "InputValue",  0, 1},
+    {&r_field[5],   "6", "Beckhoff", "EL1014", "InputValue",  0, 1},
     {&r_field[6],   "7", "Beckhoff", "EL2004", "OutputValue", 0, 1},
     {&r_field[7],   "8", "Beckhoff", "EL4132", "OutputValue", 0, 1},
     {&r_field[8],   "9", "Beckhoff", "EL4132", "OutputValue", 0, 1},
@@ -60,7 +63,8 @@
     ecrt_domain_process(domain1);
 
     // Prozessdaten verarbeiten
-    //  k_pos   = EC_READ_U32(r_ssi);
+    k_pos   = EC_READ_U32(r_ssi_input);
+    k_stat  = EC_READ_U8(r_ssi_status);
 
     // Prozessdaten senden
     ecrt_domain_queue(domain1);
@@ -80,7 +84,8 @@
     }
     else {
         counter = ABTASTFREQUENZ;
-        printk(KERN_INFO "k_pos   = %i\n", k_pos);
+        printk(KERN_INFO "k_pos    = %i\n", k_pos);
+        printk(KERN_INFO "k_stat   = 0x%02X\n", k_stat);
     }
 
     // Timer neu starten
@@ -123,6 +128,23 @@
         goto out_release_master;
     }
 
+    //ecrt_master_debug(master, 2);
+
+    if (ecrt_master_sdo_write(master, "1", 0x4061, 1,  0, 1) ||
+        ecrt_master_sdo_write(master, "1", 0x4061, 2,  1, 1) ||
+        ecrt_master_sdo_write(master, "1", 0x4061, 3,  1, 1) ||
+        ecrt_master_sdo_write(master, "1", 0x4066, 0,  0, 1) ||
+        ecrt_master_sdo_write(master, "1", 0x4067, 0,  4, 1) ||
+        ecrt_master_sdo_write(master, "1", 0x4068, 0,  0, 1) ||
+        ecrt_master_sdo_write(master, "1", 0x4069, 0, 25, 1) ||
+        ecrt_master_sdo_write(master, "1", 0x406A, 0, 25, 1) ||
+        ecrt_master_sdo_write(master, "1", 0x406B, 0, 50, 1)) {
+        printk(KERN_ERR "EtherCAT: Failed to configure SSI!\n");
+        goto out_deactivate;
+    }
+
+    //ecrt_master_debug(master, 0);
+
 #ifdef ASYNC
     // Einmal senden und warten...
     ecrt_master_prepare_async_io(master);
@@ -139,11 +161,14 @@
 
     return 0;
 
+ out_deactivate:
+    ecrt_master_deactivate(master);
+
  out_release_master:
-  ecrt_release_master(master);
+    ecrt_release_master(master);
 
  out_return:
-  return -1;
+    return -1;
 }
 
 /*****************************************************************************/