Oxford Cryosystems 700 series serial line communications    home | protocols | wiring diagram

Cryostream | Cobra | PheniX | HeliX   status packets | command packets

PheniX status packet

typedef struct {
    unsigned char    Length;              /* Length of this packet = 32 (bytes) */ 
    unsigned char    Type;                /* Status Packet ID = 100 */ 
    unsigned short   SampleSetPoint;      /* Set Temp 100*K */
    unsigned short   SampleTemp;          /* Sample Temp 100*K */
    signed short     SampleError;         /* Error 100*K */
    unsigned char    RunMode;             /* The current run mode */
    unsigned char    PhaseId;             /* The id of the current phase - see below */
    unsigned short   RampRate;            /* The ramp rate of the current phase */
    unsigned short   TargetTemp;          /* The target temperature of the current phase */
    unsigned short   ShieldTemp;          /* Shield temp, 100*K */
    unsigned short   Unused1;             /* Unused in PheniX */
    unsigned short   Remaining;           /* Time remaining in phase */
    unsigned char    CryoSpeed;           /* Cryodrive speed */
    unsigned char    SampleHeat;          /* Sample stage heater, % */
    unsigned char    ShieldHeat;          /* Shield heater, % */
    unsigned char    Unused2;             /* Unused in PheniX */
    unsigned char    CryoStatus;          /* Cryodrive status */
    unsigned char    AlarmCode;           /* Indicates most serious alarm condition */
    unsigned short   RunTime;             /* Time in minutes pump has been up */
    unsigned short   ControllerNumber;    /* Controller number, from ROM */
    unsigned char    SoftwareVersion;     /* Software version */
    unsigned char    CryoAdjust;          /* Cryodrive speed adjustment */
} PhenixStatus ;

notes

enum { 
    StartUp,     /* = 0: Initial transient value - run through system checks */ 
    StartUpFail, /* = 1: Some failure in system checks - leave results on screen */
    StartUpOK,   /* = 2: System checks OK - awaiting Start button */
    Run,         /* = 3: Machine is running */
    SetUp,       /* = 4: Special commissioning mode */
    ShutdownOK,  /* = 5: System has shut down cleanly */
    ShutdownFail /* = 6: System has shut down due to hardware error */
};

enum { 
    Ramp,        /* = 0: Current phase is a Ramp */
    Cool,        /* = 1: Current phase is a Cool */
    Plat,        /* = 2: Current phase is a Plat */
    Hold,        /* = 3: Current phase is a Hold */
    Warm,        /* = 4: Current phase is a Warm */
    DeletePhase, /* = 5: Internal use only */
    LoadProgram, /* = 6: Internal use only */
    SaveProgram, /* = 7: Internal use only */
    Soak,        /* = 8: The end part of the Warm phase */
    Wait         /* = 9: Part of Ramp/Wait */
};

enum {
    STATUS_ACTIVATED = 1,             // Bit 0 
    STATUS_HIGH_TEMP_WARNING = 2,     // Bit 1 
    STATUS_HIGH_TEMP_TRIP = 4,        // Bit 2 
    STATUS_LOW_PRESSURE_WARNING = 8,  // Bit 3
    STATUS_MANUAL = 32,               // Bit 5
    STATUS_START = 64,                // Bit 6
}

The
STATUS_START and STATUS_ACTIVATED fields are potentially confusing. 
if ((
CryoStatus & STATUS_START) == STATUS_START) then this indicates that the Cryodrive has received a command to switch on - it should be on. The STATUS_ACTIVATED bit can be inspected to see if the Cryodrive has successfully switched on.

if ((CryoStatus &
STATUS_ACTIVATED) == 0) this means that the Cryodrive is actually on. Otherwise it is off, and the STATUS_START bit should be examined to see if this an error or not.

if ((CryoStatus &
STATUS_HIGH_TEMP_WARNING) == 0) this means the Cryodrive is reporting a high temperature warning. This logic applies also to STATUS_HIGH_TEMP_TRIP and STATUS_LOW_PRESSURE_WARNING.

if (CryoStatus & STATUS_MANUAL) == 0 this indicates that the Cryodrive has been incorrectly set into manual control mode using the dipsticks in the unit's interior.

enum {
    AlarmConditionNone,                    /* = 0:  No alarms exist */
    AlarmConditionStopPressed,             /* = 1:  Stop button has been pressed */
    AlarmConditionStopCommand,             /* = 2:  Stop command received */
    AlarmConditionEnd,                     /* = 3:  End phase complete */
    AlarmConditionPurge,                   /* = 4:  Purge phase complete */
    AlarmConditionTempWarning,             /* = 5:  Temp error > 5 K */
    AlarmConditionHighPressure,            /* = 6:  Back pressure > 0.5 bar */
    AlarmConditionVacuum,                  /* = 7:  Evaporator reduction at max */
    AlarmConditionStartUpFail,             /* = 8:  Self-check fail */
    AlarmConditionLowFlow,                 /* = 9:  Gas flow < 2 l/min */
    AlarmConditionTempFail,                /* = 10: Temp error > 25 K */
    AlarmConditionGasTypeError,            /* = 11: Sensor detects wrong gas type */
    AlarmConditionTempReadingError,        /* = 12: Unphysical temp. reported */
    AlarmConditionSuctTemp,                /* = 13: Suct temperature out of range */
    AlarmConditionSensorFail,              /* = 14: Invalid ADC reading */
    AlarmConditionBrownOut,                /* = 15: Degradation of power supply */
    AlarmConditionHeatsinkOverheat,        /* = 16: Heat sink overheating */
    AlarmConditionPsuOverheat,             /* = 17: Power supply overheating */
    AlarmConditionPowerLoss,               /* = 18: Power failure */
    AlarmConditionRefrigeratorTooCold,     /* = 19: Refrigerator stage is too cold  */
    AlarmConditionRefrigeratorTimedOut,    /* = 20: Refrigerator stage failed to reach base in time  */
    AlarmConditionCryodriveNotResponding,  /* = 21: Cryodrive is not responding  */
    AlarmConditionCryodriveError,          /* = 22: Cryodrive reports an error  */
    AlarmConditionNoNitrogen,              /* = 23: No nitrogen available  */
    AlarmConditionNoHelium,                /* = 24: No helium available  */
    AlarmConditionVacuumGauge,             /* = 25: Vacuum gauge is not responding  */
    AlarmConditionVacuumReading            /* = 26: Vacuum is out of range  */
};