Exemple #1
0
        private void QueueBatchList_Click(object sender, System.EventArgs e)
        {
            OpenFileDialog mydlg = new OpenFileDialog();

            mydlg.Title  = "Select batch list";
            mydlg.Filter = "Batch list files (*.txt)|*.txt|All files (*.*)|*.*";
            if (mydlg.ShowDialog() == DialogResult.OK)
            {
                System.IO.StreamReader r = null;
                System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer(typeof(BatchList));
                SySal.DAQSystem.IDataProcessingServer  Srv  = null;
                BatchList bl = null;
                try
                {
                    r   = new System.IO.StreamReader(mydlg.FileName);
                    bl  = (BatchList)xmls.Deserialize(r);
                    Srv = new SySal.DAQSystem.SyncDataProcessingServerWrapper((SySal.DAQSystem.IDataProcessingServer)System.Runtime.Remoting.RemotingServices.Connect(typeof(SySal.DAQSystem.IDataProcessingServer), "tcp://" + DataProcText.Text + ":" + (BatchManagerCheck.Checked ? (int)SySal.DAQSystem.OperaPort.BatchServer : (int)SySal.DAQSystem.OperaPort.DataProcessingServer).ToString() + "/DataProcessingServer.rem"), System.TimeSpan.FromMilliseconds(10000));
                    foreach (Batch b in bl.List)
                    {
                        SySal.DAQSystem.DataProcessingBatchDesc d = new SySal.DAQSystem.DataProcessingBatchDesc();
                        d.MachinePowerClass    = b.MachinePowerClass;
                        d.Description          = b.Description;
                        d.Filename             = b.Filename;
                        d.CommandLineArguments = b.CommandLineArguments;
                        d.Username             = UsernameText.Text;
                        d.Password             = PasswordText.Text;
                        d.Id = Srv.SuggestId;
                        Srv.Enqueue(d);
                    }
                }
                catch (Exception) {}
                if (r != null)
                {
                    r.Close();
                    r = null;
                }
                if (Srv != null)
                {
                    Srv = null;
                }
                GC.Collect();
            }
        }
Exemple #2
0
            public override bool Execute()
            {
                SySal.DAQSystem.IDataProcessingServer   DataProcSrv = (SySal.DAQSystem.IDataProcessingServer)System.Runtime.Remoting.RemotingServices.Connect(typeof(SySal.DAQSystem.IDataProcessingServer), "tcp://" + BatchServer + ":" + ((int)SySal.DAQSystem.OperaPort.BatchServer) + "/DataProcessingServer.rem");
                SySal.DAQSystem.DataProcessingBatchDesc bd          = new SySal.DAQSystem.DataProcessingBatchDesc();
                SySal.OperaDb.OperaDbCredentials        cred        = SySal.OperaDb.OperaDbCredentials.CreateFromRecord();
                bd.Username           = cred.OPERAUserName;
                bd.Password           = cred.OPERAPassword;
                bd.Description        = "ListScan - " + LineNumber;
                bd.Id                 = DataProcSrv.SuggestId;
                bd.MachinePowerClass  = MachinePowerClass;
                bd.OutputTextSaveFile = LogFile;
                bd.Filename           = ExeFile;
                bd.AliasPassword      = "";
                bd.AliasUsername      = "";
                Console.Write("(batch=" + bd.Id.ToString("X16") + ")");
                string s = "";
                int    i;

                for (i = 0; i < Arguments.Length; i++)
                {
                    if (i > 0)
                    {
                        s += " ";
                    }
                    if (Arguments[i].StartsWith("\"") == false)
                    {
                        s += "\"" + Arguments[i] + "\"";
                    }
                    else
                    {
                        s += Arguments[i];
                    }
                }
                bd.CommandLineArguments = s;
                return(DataProcSrv.Enqueue(bd));
            }
Exemple #3
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();
            }
        }