Esempio n. 1
0
        static void ShowExplanation()
        {
            ExplanationForm EF = new ExplanationForm();

            System.IO.StringWriter strw = new System.IO.StringWriter();
            strw.WriteLine("");
            strw.WriteLine("CSScanDriver");
            strw.WriteLine("--------------");
            strw.WriteLine("CSScanDriver scans a Plate doublet");
            strw.WriteLine();
            //strw.WriteLine("Type: CSScanDriver /Interrupt <batchmanager> <process operation id> <interrupt string>");
            //strw.WriteLine("to send an interrupt message to a running CSScanDriver process operation.");
            //strw.WriteLine("SUPPORTED INTERRUPTS:");
            //strw.WriteLine("IgnoreScanFailure False|True - instructs CSScanDriver to stop on failed zones or skip them and go on.");
            //strw.WriteLine("IgnoreRecalFailure False|True - instructs CSScanDriver to stop on failed recalibration tracks or skip them and go on.");
            //strw.WriteLine("Type: CSScanDriver /EasyInterrupt for a graphical user interface to send interrupts.");
            //strw.WriteLine("--------------");
            //strw.WriteLine("The following substitutions apply (case is disregarded):");
            //strw.WriteLine("%EXEREP% = Executable repository path specified in the Startup file.");
            //strw.WriteLine("%RWDDIR% = Output directory for Raw Data.");
            //strw.WriteLine("%TLGDIR% = Output directory for linked zones.");
            //strw.WriteLine("%RWD% = Scanning output file name (not including extension).");
            //strw.WriteLine("%TLG% = Linked zone file name (not including extension).");
            //strw.WriteLine("%SCRATCH% = Scratch directory specified in the Startup file.");
            //strw.WriteLine("%ZONEID% = Hexadecimal file name for a zone.");
            //strw.WriteLine("--------------");
            strw.WriteLine("The program settings should have the following structure:");
            CSScanDriverSettings pset = new CSScanDriverSettings();

            new System.Xml.Serialization.XmlSerializer(typeof(CSScanDriverSettings)).Serialize(strw, pset);
            strw.WriteLine("");
            EF.RTFOut.Text = strw.ToString();
            EF.ShowDialog();
        }
Esempio n. 2
0
        public frmConfig(long settingsId, SySal.OperaDb.OperaDbConnection connection)
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
            _connection = connection;
            Utilities.FillComboBox(cmbWasd, "SELECT ID, DESCRIPTION FROM TB_PROGRAMSETTINGS WHERE EXECUTABLE='" + _subDriverName + "'", _connection);

            if (settingsId != 0)
            {
                string settings = (string)(new SySal.OperaDb.OperaDbCommand("SELECT SETTINGS FROM TB_PROGRAMSETTINGS WHERE ID = " + settingsId, _connection)).ExecuteScalar();
                System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer(typeof(CSScanDriverSettings));
                _progSettings       = (CSScanDriverSettings)xmls.Deserialize(new System.IO.StringReader(settings));
                _originalConfigName = _currentConfigName = configNameTextBox.Text = (string)(new SySal.OperaDb.OperaDbCommand("SELECT DESCRIPTION FROM TB_PROGRAMSETTINGS WHERE ID = " + settingsId, _connection)).ExecuteScalar();
            }
            else
            {
                _progSettings = new CSScanDriverSettings();
            }
            _wasdSettingsId = _progSettings.WideAreaConfigId;
            //_predSettingsId = _progSettings.PredScanConfigId;
            //_progSettings.InitialQuery;
            Utilities.SelectId(cmbWasd, _wasdSettingsId);
        }
Esempio n. 3
0
        private void cmbConfig_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            _programsettings = ((Utilities.ConfigItem)cmbConfig.SelectedItem).Id;

            string settings = Convert.ToString(new SySal.OperaDb.OperaDbCommand("select settings from tb_programsettings where id = " + _programsettings, Conn).ExecuteScalar());

            System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer(typeof(CSScanDriverSettings));
            CSScanDriverSettings ProgSettings           = (CSScanDriverSettings)xmls.Deserialize(new System.IO.StringReader(settings));

            xmls = null;

            InterruptString = null;
            if (ProgSettings.WaitForScanningArea == true)
            {
                InsertScanningArea = buttonInsertArea.Enabled = true;
            }
            else
            {
                InsertScanningArea = buttonInsertArea.Enabled = false;
            }

            btnSchedule.Enabled = IsFormFilled();
        }
Esempio n. 4
0
        private static void Execute()
        {
            try
            {
                //System.Windows.Forms.MessageBox.Show("Eccomi");
                ThisThread = System.Threading.Thread.CurrentThread;

                StartupInfo = (SySal.DAQSystem.Drivers.VolumeOperationInfo)HE.StartupInfo;
                Conn        = new SySal.OperaDb.OperaDbConnection(StartupInfo.DBServers, StartupInfo.DBUserName, StartupInfo.DBPassword);
                Conn.Open();
                (DBKeepAliveThread = new System.Threading.Thread(DBKeepAliveThreadExec)).Start();

                System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer(typeof(CSScanDriverSettings));
                ProgSettings = (CSScanDriverSettings)xmls.Deserialize(new System.IO.StringReader(HE.ProgramSettings));
                xmls         = null;

                if (StartupInfo.ExeRepository.EndsWith("\\"))
                {
                    StartupInfo.ExeRepository = StartupInfo.ExeRepository.Remove(StartupInfo.ExeRepository.Length - 1, 1);
                }
                if (StartupInfo.ScratchDir.EndsWith("\\"))
                {
                    StartupInfo.ScratchDir = StartupInfo.ScratchDir.Remove(StartupInfo.ScratchDir.Length - 1, 1);
                }
                if (StartupInfo.LinkedZonePath.EndsWith("\\"))
                {
                    StartupInfo.LinkedZonePath = StartupInfo.LinkedZonePath.Remove(StartupInfo.LinkedZonePath.Length - 1, 1);
                }
                if (StartupInfo.RawDataPath.EndsWith("\\"))
                {
                    StartupInfo.RawDataPath = StartupInfo.RawDataPath.Remove(StartupInfo.RawDataPath.Length - 1, 1);
                }

                //create a directory where to put all acquisition files
                if (StartupInfo.RawDataPath.IndexOf(System.Convert.ToString(StartupInfo.ProcessOperationId)) < 0)
                {
                    StartupInfo.RawDataPath = StartupInfo.RawDataPath + "\\cssd_" + StartupInfo.BrickId + "_" + StartupInfo.ProcessOperationId;
                    if (!System.IO.Directory.Exists(StartupInfo.RawDataPath))
                    {
                        System.IO.Directory.CreateDirectory(StartupInfo.RawDataPath);
                    }
                }

                ProgressInfo = HE.ProgressInfo;
                if (StartupInfo.RecoverFromProgressFile)
                {
                    try
                    {
                        XmlDocument xmldoc = new XmlDocument();
                        xmldoc.LoadXml(ProgressInfo.CustomInfo.Replace('[', '<').Replace(']', '>'));
                        System.Xml.XmlNode xmlprog = xmldoc.FirstChild;

                        WaitingOnId                    = Convert.ToInt64(xmlprog["WaitingOnId"].InnerText);
                        CS1WideAreaScanDone            = Convert.ToBoolean(xmlprog["CS1WideAreaScanDone"].InnerText);
                        CS2WideAreaScanDone            = Convert.ToBoolean(xmlprog["CS2WideAreaScanDone"].InnerText);
                        CS1WideAreaScanProcOperationId = Convert.ToInt64(xmlprog["CS1WideAreaScanProcOperationId"].InnerText);
                        CS2WideAreaScanProcOperationId = Convert.ToInt64(xmlprog["CS2WideAreaScanProcOperationId"].InnerText);
                        CSMappingDone                  = Convert.ToBoolean(xmlprog["CSMappingDone"].InnerText);
                        CSCandidatesDone               = Convert.ToBoolean(xmlprog["CSCandidatesDone"].InnerText);
                        ComputeScanArea                = Convert.ToBoolean(xmlprog["ComputeScanArea"].InnerText);
                        MinX = Convert.ToDouble(xmlprog["MinX"].InnerText, System.Globalization.CultureInfo.InvariantCulture);
                        MaxX = Convert.ToDouble(xmlprog["MaxX"].InnerText, System.Globalization.CultureInfo.InvariantCulture);
                        MinY = Convert.ToDouble(xmlprog["MinY"].InnerText, System.Globalization.CultureInfo.InvariantCulture);
                        MaxY = Convert.ToDouble(xmlprog["MaxY"].InnerText, System.Globalization.CultureInfo.InvariantCulture);

                        ProgressInfo.ExitException = null;
                        HE.WriteLine("Restarting complete");
                    }
                    catch (Exception ex)
                    {
                        HE.WriteLine("Restarting failed - proceeding to re-initialize process.");
                        ProgressInfo            = HE.ProgressInfo;
                        ProgressInfo.Progress   = 0.0;
                        ProgressInfo.StartTime  = System.DateTime.Now;
                        ProgressInfo.FinishTime = ProgressInfo.StartTime.AddYears(1);
                        HE.WriteLine(ex.Message);
                    }
                }
                else
                {
                    CS1WideAreaScanDone            = false;
                    CS2WideAreaScanDone            = false;
                    CS1WideAreaScanProcOperationId = 0;
                    CS2WideAreaScanProcOperationId = 0;
                    CSMappingDone              = false;
                    CSCandidatesDone           = false;
                    ComputeScanArea            = true;
                    ProgressInfo               = new TaskProgressInfo();
                    ProgressInfo.Complete      = false;
                    ProgressInfo.ExitException = null;
                    ProgressInfo.Progress      = 0.0;
                    ProgressInfo.StartTime     = System.DateTime.Now;
                    ProgressInfo.FinishTime    = ProgressInfo.StartTime.AddYears(1);
                }

                UpdateProgress();

                HE.InterruptNotifier = new Exe();

                if (ProgSettings.WaitForScanningArea)
                {
                    while (ComputeScanArea == true)
                    {
                        System.Threading.Thread.Sleep(1000);
                    }
                }

                UpdateProgress();

                for (int i = 0; i < 2; i++)
                {
                    bool WideAreaScanDone = (i == 0) ? CS1WideAreaScanDone : CS2WideAreaScanDone;

                    while (WideAreaScanDone == false)
                    {
                        if (WaitingOnId == 0)
                        {
                            SySal.DAQSystem.Drivers.ScanningStartupInfo wasdstartupinfo = new SySal.DAQSystem.Drivers.ScanningStartupInfo();
                            wasdstartupinfo.DBPassword     = StartupInfo.DBPassword;
                            wasdstartupinfo.DBServers      = StartupInfo.DBServers;
                            wasdstartupinfo.DBUserName     = StartupInfo.DBUserName;
                            wasdstartupinfo.ExeRepository  = StartupInfo.ExeRepository;
                            wasdstartupinfo.LinkedZonePath = StartupInfo.LinkedZonePath;
                            wasdstartupinfo.MachineId      = StartupInfo.MachineId;
                            wasdstartupinfo.Plate          = new SySal.DAQSystem.Scanning.MountPlateDesc();
                            wasdstartupinfo.Plate.BrickId  = StartupInfo.BrickId;
                            wasdstartupinfo.Plate.PlateId  = i + 1;
                            long calibrationId;
                            wasdstartupinfo.MarkSet                 = MarkType.SpotXRay;
                            wasdstartupinfo.Plate.MapInitString     = SySal.OperaDb.Scanning.Utilities.GetMapString(wasdstartupinfo.Plate.BrickId, wasdstartupinfo.Plate.PlateId, false, MarkType.SpotXRay, out calibrationId, Conn, null);
                            wasdstartupinfo.Plate.TextDesc          = "Brick #" + wasdstartupinfo.Plate.BrickId + " Plate #" + wasdstartupinfo.Plate.PlateId;
                            wasdstartupinfo.ProcessOperationId      = 0;
                            wasdstartupinfo.ProgramSettingsId       = ProgSettings.WideAreaConfigId;
                            wasdstartupinfo.ProgressFile            = "";
                            wasdstartupinfo.RawDataPath             = StartupInfo.RawDataPath;
                            wasdstartupinfo.RecoverFromProgressFile = false;
                            wasdstartupinfo.ScratchDir              = StartupInfo.ScratchDir;
                            if (ComputeScanArea == true)
                            {
                                wasdstartupinfo.Zones = CalculateZones(wasdstartupinfo.Plate.BrickId, wasdstartupinfo.Plate.PlateId);
                            }
                            else
                            {
                                wasdstartupinfo.Zones         = new SySal.DAQSystem.Scanning.ZoneDesc[1];
                                wasdstartupinfo.Zones[0]      = new SySal.DAQSystem.Scanning.ZoneDesc();
                                wasdstartupinfo.Zones[0].MinX = MinX;
                                wasdstartupinfo.Zones[0].MaxX = MaxX;
                                wasdstartupinfo.Zones[0].MinY = MinY;
                                wasdstartupinfo.Zones[0].MaxY = MaxY;
                            }
                            WaitingOnId = HE.Start(wasdstartupinfo);
                            UpdateProgress();

                            HE.WriteLine("Starting wasd " + WaitingOnId);
                        }

                        SySal.DAQSystem.Drivers.Status status;
                        if (WaitingOnId != 0)
                        {
                            status = HE.Wait(WaitingOnId);
                            if (status == SySal.DAQSystem.Drivers.Status.Failed)
                            {
                                WaitingOnId = 0;
                                throw new Exception("Scan of the changeable sheet " + (i + 1) + " failed!\n");
                            }

                            HE.WriteLine("Waiting wasd " + WaitingOnId);
                        }

                        if (WaitingOnId != 0)
                        {
                            status = HE.GetStatus(WaitingOnId);
                            if (status == SySal.DAQSystem.Drivers.Status.Completed)
                            {
                                if (i == 0)
                                {
                                    CS1WideAreaScanDone            = true;
                                    CS1WideAreaScanProcOperationId = WaitingOnId;
                                }
                                else
                                {
                                    CS2WideAreaScanDone            = true;
                                    CS2WideAreaScanProcOperationId = WaitingOnId;
                                }
                                ProgressInfo.Progress = 0.45 * (i + 1);
                                WaitingOnId           = 0;
                                break;
                            }

                            HE.WriteLine("Checking status wasd " + WaitingOnId);
                        }
                        UpdateProgress();
                    }
                }

                if (CSMappingDone == false)
                {
                    HE.WriteLine("Start mapping");

                    DataProcSrv = HE.DataProcSrv;

                    SySal.DAQSystem.DataProcessingBatchDesc dbd = new SySal.DAQSystem.DataProcessingBatchDesc();
                    dbd.AliasUsername     = StartupInfo.DBUserName;
                    dbd.AliasPassword     = StartupInfo.DBPassword;
                    dbd.Description       = "Plate doublet mapping B#" + StartupInfo.BrickId;
                    dbd.Id                = DataProcSrv.SuggestId;
                    dbd.Token             = HE.Token;
                    dbd.MachinePowerClass = 5;
                    dbd.Filename          = StartupInfo.ExeRepository + @"\CSMap.exe";
//                    dbd.CommandLineArguments = StartupInfo.ProcessOperationId + " db:\\" + ProgSettings.CSMapConfigId + ".xml CSMap_" + StartupInfo.BrickId + "_" + StartupInfo.ProcessOperationId + " false " + StartupInfo.ProcessOperationId;
                    dbd.CommandLineArguments =
                        "db:\\" + CS1WideAreaScanProcOperationId + ".tlg " +
                        "db:\\" + CS2WideAreaScanProcOperationId + ".tlg " +
                        "db:\\" + StartupInfo.BrickId + " " +
                        "db:\\" + ProgSettings.CSMapConfigId + ".xml " +
                        StartupInfo.RawDataPath + @"\CSSD " +
                        StartupInfo.ProcessOperationId;

                    if (!DataProcSrv.Enqueue(dbd))
                    {
                        throw new Exception("Cannot schedule CSd mapping batch " + dbd.Id + " for brick " + StartupInfo.BrickId + ". Aborting.");
                    }
                    while (DataProcSrv.DoneWith(dbd.Id) == false)
                    {
                        System.Threading.Thread.Sleep(100);
                    }
                    dbd = DataProcSrv.Result(dbd.Id);

                    if (System.IO.File.Exists(StartupInfo.RawDataPath + @"\CHECK") == true)
                    {
                        CSMappingDone = true;
                    }
                    else
                    {
                        throw new Exception("Plate Mapping failure");
                    }
                }

                //DUMP MARK FILE
                System.IO.StreamWriter markFile = null;
                try
                {
                    long   CalibrationId;
                    string markString = SySal.OperaDb.Scanning.Utilities.GetMapString(StartupInfo.BrickId, 1, false, MarkType.SpotXRay, out CalibrationId, Conn, null);
                    markFile = new System.IO.StreamWriter(StartupInfo.RawDataPath + @"\marks.txt");
                    markFile.WriteLine(markString);
                    markFile.Flush();
                }
                catch { }
                finally
                {
                    if (markFile != null)
                    {
                        markFile.Close();
                    }
                }

                WaitingOnId           = 0;
                ProgressInfo.Progress = 1.0;
                ProgressInfo.Complete = true;
                UpdateProgress();
            }
            catch (Exception ex)
            {
                if (ProgressInfo == null)
                {
                    ProgressInfo = new SySal.DAQSystem.Drivers.TaskProgressInfo();
                }
                HE.WriteLine(ex.Message);
                ProgressInfo.Complete      = false;
                ProgressInfo.ExitException = ex.ToString();
                UpdateProgress();
            }
        }