//---------------------------------------------------------------------------------------//
        /// <summary>
        /// 
        /// </summary>
        /// <param name="labEquipmentConfiguration"></param>
        public DeviceGeneric(LabEquipmentConfiguration labEquipmentConfiguration, string deviceName)
        {
            const string methodName = "DeviceGeneric";
            Logfile.WriteCalled(logLevel, STR_ClassName, methodName);

            try
            {
                /*
                 * Check that parameters are valid
                 */
                if (labEquipmentConfiguration == null)
                {
                    throw new ArgumentNullException(LabEquipmentConfiguration.ClassName);
                }

                /*
                 * Get the device configuration from the XML string
                 */
                XmlDocument xmlDocument = XmlUtilities.GetDocumentFromString(labEquipmentConfiguration.GetXmlDeviceConfiguration(deviceName));
                this.xmlNodeDevice = XmlUtilities.GetRootNode(xmlDocument, LabConsts.STRXML_Device);
                this.deviceName = deviceName;

                /*
                 * Get the initialise information
                 */
                XmlNode xmlNodeInitialise = XmlUtilities.GetChildNode(this.xmlNodeDevice, LabConsts.STRXML_Initialise);
                this.initialiseEnabled = XmlUtilities.GetChildValueAsBool(xmlNodeInitialise, LabConsts.STRXML_InitialiseEnabled);
                this.initialiseDelay = XmlUtilities.GetChildValueAsInt(xmlNodeInitialise, LabConsts.STRXML_InitialiseDelay);
            }
            catch (Exception ex)
            {
                Logfile.WriteError(ex.Message);
                throw ex;
            }

            Logfile.WriteCompleted(logLevel, STR_ClassName, methodName);
        }
        //---------------------------------------------------------------------------------------//
        /// <summary>
        /// 
        /// </summary>
        /// <param name="labEquipmentConfiguration"></param>
        public DriverGeneric(LabEquipmentConfiguration labEquipmentConfiguration)
        {
            const String methodName = "DriverGeneric";
            Logfile.WriteCalled(logLevel, STR_ClassName, methodName);

            try
            {
                /*
                 * Check that parameters are valid
                 */
                if (labEquipmentConfiguration == null)
                {
                    throw new ArgumentNullException(LabEquipmentConfiguration.ClassName);
                }

                /*
                 * Get the driver configuration from the XML String
                 */
                XmlDocument xmlDocument = XmlUtilities.GetDocumentFromString(labEquipmentConfiguration.GetXmlDriverConfiguration(this.DriverName));
                XmlNode nodeRoot = XmlUtilities.GetRootNode(xmlDocument, LabConsts.STRXML_Driver);

                /*
                 * Get the execution times for each of the driver states
                 */
                XmlNode xmlNodeExecutionTimes = XmlUtilities.GetChildNode(nodeRoot, LabConsts.STRXML_ExecutionTimes);
                this.executionTimes = ExecutionTimes.ToObject(XmlUtilities.ToXmlString(xmlNodeExecutionTimes));

                /*
                 * Get the experiment results XML template
                 */
                XmlNode xmlNodeExperimentResults = XmlUtilities.GetChildNode(nodeRoot, LabConsts.STRXML_ExperimentResults);
                this.xmlExperimentResultsTemplate = XmlUtilities.ToXmlString(xmlNodeExperimentResults);

                /*
                 * Initialise local variables
                 */
                this.completionTime = DateTime.Now;
                this.executionId = 0;
                this.executionStatusLock = new Object();
                this.executionStatus = new ExecutionStatus();
                this.executionStatus.ExecuteStatus = ExecutionStatus.Status.Created;
                this.executionStatus.TimeRemaining = this.executionTimes.TotalExecutionTime;
                this.cancelled = false;

                /*
                 * Save a copy of the driver XML node for the derived class
                 */
                this.xmlNodeDriver = nodeRoot.Clone();

                /*
                 * Get the experiment validation from the XML String
                 */
                xmlDocument = XmlUtilities.GetDocumentFromString(labEquipmentConfiguration.XmlValidation);
                nodeRoot = XmlUtilities.GetRootNode(xmlDocument, LabConsts.STRXML_Validation);

                /*
                 * Save a copy of the experiment validation XML node for the derived class
                 */
                this.xmlNodeValidation = nodeRoot.Clone();
            }
            catch (Exception ex)
            {
                Logfile.WriteError(ex.Message);
                throw ex;
            }

            String logMessage = String.Format(STRLOG_ExecutionStatus_arg5, executionStatus.ExecutionId,
                    Enum.GetName(typeof(ExecutionStatus.Status), executionStatus.ExecuteStatus),
                    Enum.GetName(typeof(ExecutionStatus.Status), executionStatus.ResultStatus),
                executionStatus.TimeRemaining, executionStatus.ErrorMessage);

            Logfile.WriteCompleted(logLevel, STR_ClassName, methodName, logMessage);
        }
 //---------------------------------------------------------------------------------------//
 public DeviceGeneric(LabEquipmentConfiguration labEquipmentConfiguration)
     : this(labEquipmentConfiguration, STR_ClassName)
 {
 }