Index: trunk/MagicSoft/Cosy/devdrv/macs.cc
===================================================================
--- trunk/MagicSoft/Cosy/devdrv/macs.cc	(revision 8863)
+++ trunk/MagicSoft/Cosy/devdrv/macs.cc	(revision 8864)
@@ -71,4 +71,6 @@
     case 0xa148: return "Drive controlled interpolated relative positioning lagless with encoder 1";
     case 0xa149: return "Drive controlled interpolated relative positioning lagless with encoder 2";
+    case 0xa150: return "Drive controlled positioning with encoder 1";
+    case 0xa151: return "Drive controlled positioning with encoder 2";
     case 0xa208: return "Jog mode positive";
     case 0xa218: return "Jog mode negative";
@@ -86,4 +88,6 @@
     case 0xe251: return "Motor overtemp warning";
     case 0xe252: return "Bleeder overtemp warning";
+    case 0xe257: return "Continous current limit active";
+    case 0xe264: return "Target position out of numerical range";
     case 0xe834: return "Emergency-Stop";
     case 0xe843: return "Positive end-switch activated";
@@ -95,4 +99,5 @@
     case 0xf224: return "Maximum breaking time exceeded";
     case 0xf228: return "Excessive control deviation";
+    case 0xf250: return "Overflow of target position preset memory";
     case 0xf269: return "Error during release of the motor holding brake";
     case 0xf276: return "Absolute encoder out of allowed window";
@@ -120,5 +125,5 @@
     const Int_t type = errinf&0xf000;
 
-    gLog << all << "DKC reports: ";
+    gLog << all << MTime(-1) << ": " << GetNodeName() << " DKC ";
 
     switch (type)
@@ -127,4 +132,6 @@
     case 0xe000: gLog << "WARNING"; break;
     case 0xa000: gLog << "Status"; break;
+    case 0xc000: 
+    case 0xd000: gLog << "Message"; break;
     default:     gLog << "Unknown"; break;
     }
@@ -134,5 +141,5 @@
     gLog << (type==0xf000 || type==0xe000 ? "!" : ".") << endl;
 
-    return type==0xa000;
+    return type!=0xf000;
 }
 
@@ -148,5 +155,5 @@
             return;
         gLog << inf2 << "- " << GetNodeName() << ": Error[0]=" << hex << val << dec << endl;
-        SetError(EvalStatus(val) ? 0 : val);
+        CheckErrorDKC(val);
         return;
 
@@ -680,4 +687,12 @@
 }
 
+void Macs::CheckErrorDKC(LWORD_t val)
+{
+    Bool_t rc = EvalStatus(val);
+    SetError(rc ? 0 : val);
+    if (!rc)
+        SetZombie();
+}
+
 void Macs::HandlePDO2(const BYTE_t *data, const timeval_t &tv)
 {
@@ -688,6 +703,5 @@
     if (errnum==0xff && (errinf&0xf000)<=0xe000)
     {
-        EvalStatus(errnum, errinf);
-        SetError(0);
+        CheckErrorDKC(errnum, errinf);
         return;
     }
@@ -915,5 +929,5 @@
     case 0xff:
         gLog << err << "DKC error! Go and check what is going on!" << endl;
-        DelError();
+        //DelError();
         return;
 /*
Index: trunk/MagicSoft/Cosy/devdrv/macs.h
===================================================================
--- trunk/MagicSoft/Cosy/devdrv/macs.h	(revision 8863)
+++ trunk/MagicSoft/Cosy/devdrv/macs.h	(revision 8864)
@@ -44,4 +44,10 @@
         return EvalStatus(errnum|(errinf<<16));
     }
+    void CheckErrorDKC(LWORD_t val);
+    void CheckErrorDKC(UInt_t errnum, UInt_t errinf)
+    {
+        CheckErrorDKC(errnum|(errinf<<16));
+    }
+
 
     void HandleSDO(WORD_t idx, BYTE_t subidx, LWORD_t val, const timeval_t &tv);
