Ignore:
Timestamp:
05/20/04 04:42:48 (20 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/devdrv/shaftencoder.cc

    r4076 r4104  
    88#include <TGLabel.h>       // TGLabel->SetText
    99
     10#include "macs.h"
     11
    1012ClassImp(ShaftEncoder);
    1113
     
    1416ShaftEncoder::ShaftEncoder(const BYTE_t nodeid, const char *name, MLog &out)
    1517    : NodeDrv(nodeid, name, out), fPos(0), fVel(0), fAcc(0),
    16     fTurn(0), fLabel(NULL), fPosHasChanged(false), fReport(NULL)
    17 {
    18 }
    19 
     18    fTurn(0), fLabel(NULL), fPosHasChanged(false), fReport(NULL),/*fTwin(0),
     19    fIsUpdated(kFALSE),*/ fMotor(0), fOffset(0)
     20{
     21}
     22/*
     23void ShaftEncoder::CheckTwin(Int_t diff) const
     24{
     25    if (!fTwin)
     26        return;
     27
     28    if (fTwin->fIsUpdated)
     29        fTwin->fIsUpdated = kFALSE;
     30    else
     31        fTwin->fOffset += diff;
     32}
     33*/
    2034void ShaftEncoder::HandleSDO(WORD_t idx, BYTE_t subidx, LWORD_t val, timeval_t *tv)
    2135{
     
    7993        fPos  = val;
    8094        fTurn = 0;
     95        fOffset = fMotor ? fMotor->GetPdoPos() : 0;
     96        //fIsUpdated=kTRUE;
     97        //fOffset = 0;
    8198        return;
    8299
     
    154171void ShaftEncoder::DisplayVal()
    155172{
     173    const LWORDS_t pos = GetPos();
    156174    if (IsZombieNode())
    157175    {
    158176        fLabel->SetText(new TGString(""));
    159         fUpdPos = ~fPos;
     177        fUpdPos = ~pos;
    160178        return;
    161179    }
    162180
    163181    char text[21];
    164 
    165     if (fPos!=fUpdPos && fLabel)
    166     {
    167         sprintf(text, "%ld", fPos);
     182    if (pos!=fUpdPos && fLabel)
     183    {
     184        sprintf(text, "%ld", pos);
    168185        fLabel->SetText(new TGString(text));
    169         fUpdPos = fPos;
     186        fUpdPos = pos;
    170187    }
    171188}
     
    177194    //
    178195    LWORDS_t pos = data[0] | (data[1]<<8) | (data[2]<<16); // | (data[3]<<24);
    179     if (pos==fPos)
    180         return;
     196
     197    //if (pos==fPos)
     198    //    return;
    181199
    182200    fPos = pos;
     201    fOffset = fMotor ? fMotor->GetPdoPos() : 0;
    183202    fTime.Set(*tv);
    184203    fPosHasChanged = true;
    185204
     205    //CheckTwin(fPos-pos);
     206    //fIsUpdated=kTRUE;
     207
    186208    if (fReport)
    187209    {
    188         fReport->Lock();
     210        fReport->Lock("ShaftEncoder::HandlePDOType0");
    189211        *fReport << "SE-REPORT " << (int)GetId() << " " << fTime << " PDO0 " << pos << " " << GetNodeName() << endl;
    190         fReport->UnLock();
     212        fReport->UnLock("ShaftEncoder::HandlePDOType0");
    191213    }
    192214}
     
    200222    BYTE_t   flag = data[4];
    201223
    202     if (fPos==pos)
    203         return;
    204 
     224    //if (fPos==pos)
     225    //    return;
     226
     227    //CheckTwin(fPos-pos);
    205228    fPos=pos;
     229    fOffset = fMotor ? fMotor->GetPdoPos() : 0;
    206230    fTime.Set(*tv);
    207231    fPosHasChanged=true;
     232    //fIsUpdated=kTRUE;
     233    //fOffset = 0;
    208234
    209235    flag=flag;
     
    211237    if (fReport)
    212238    {
    213         fReport->Lock();
     239        fReport->Lock("ShaftEncoder::HandlePDOType1");
    214240        *fReport << "SE-REPORT " << (int)GetId() << " " << fTime << " PDO1 " << pos << " " << (int)flag << " " << GetNodeName() << endl;
    215         fReport->UnLock();
     241        fReport->UnLock("ShaftEncoder::HandlePDOType1");
    216242    }
    217243}
     
    241267        turn--;
    242268
    243     if (fPos==pos && fTurn==fTurn)
    244         return;
     269    //if (fPos==pos && fTurn==fTurn)
     270    //    return;
     271
     272    //CheckTwin(fPos-pos);
    245273
    246274    fPos  = pos;
    247275    fTurn = turn;
    248276
     277    fOffset = fMotor ? fMotor->GetPdoPos() : 0;
    249278    fTime.Set(*tv);
    250279    fPosHasChanged=true;
     280    //fIsUpdated=kTRUE;
     281    //fOffset = 0;
     282
    251283
    252284    if (fReport)
    253285    {
    254         fReport->Lock();
     286        fReport->Lock("ShaftEncoder::HandlePDOType2");
    255287        *fReport << "SE-REPORT " << (int)GetId() << " " << fTime << " PDO2 " << pos << " " << fVel << " " << fAcc << " " << GetNodeName() << endl;
    256         fReport->UnLock();
     288        fReport->UnLock("ShaftEncoder::HandlePDOType2");
    257289    }
    258290}
     
    383415    fPos  = pre%16384;
    384416    fTurn = pre/16384;
     417
     418    fOffset = fMotor ? fMotor->GetPdoPos() : 0;
    385419}
    386420
Note: See TracChangeset for help on using the changeset viewer.