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(); }
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); }
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(); }
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(); } }