Ejemplo n.º 1
0
        private void OnLaserReportReceived(byte[] data)
        {
            LaserReport report = new LaserReport();

            report.Parse(data);                                                                                      //fill the properties with received data from USB

            if (currentLaser >= 0 && currentLaser < experiment.lasers.Count)                                         //Check if it is a valid laser
            {
                experiment.lasers[currentLaser].reports.Add(report);                                                 //Save report from usb
                experiment.lasers[currentLaser].Current += experiment.lasers[currentLaser].InitialRequest.Increment; //set current using last report + increment

                if (experiment.lasers[currentLaser].Current <= experiment.lasers[currentLaser].DesiredCurrent)       //check if the program needs resent a new config with incremented value of current
                {
                    LaserConfigRequest updateRequest = new LaserConfigRequest();                                     // new config that will be

                    updateRequest = experiment.lasers[currentLaser].InitialRequest;                                  //get all informations from first request
                    updateRequest.MinPowerCurrent = Convert.ToByte(experiment.lasers[currentLaser].Current);         //update just the min value
                    SendUSBData(updateRequest.GetByteArray());                                                       // sending updated config
                }
                else
                {
                    experiment.lasers[currentLaser].ProcessFinishedEvent.Set();// Unlock the current laser process
                }
            }
        }
Ejemplo n.º 2
0
        private void SendDataToAllLasers()
        {
            experiment.EraseData();// Erase Data of last experiment
            if (checkLaser1.Checked)
            {
                currentLaser = 0;
                LaserConfigRequest laser1ConfigRequest = new LaserConfigRequest();
                laser1ConfigRequest.ID = 1;
                laser1ConfigRequest.MinPowerCurrent    = Convert.ToByte(I1min.Text);
                laser1ConfigRequest.MaxPowerCurrent    = Convert.ToByte(I1max.Text);
                laser1ConfigRequest.Increment          = Convert.ToByte(Inc1.Text);
                laser1ConfigRequest.DesiredTemperature = Convert.ToByte(Temp1.Text);

                experiment.lasers[0].ID                 = 1;                                      //It is the laser ID
                experiment.lasers[0].Current            = laser1ConfigRequest.MinPowerCurrent;    //min value of current
                experiment.lasers[0].DesiredCurrent     = laser1ConfigRequest.MaxPowerCurrent;    //max value of current
                experiment.lasers[0].DesiredTemperature = laser1ConfigRequest.DesiredTemperature; //target temperature
                experiment.lasers[0].InitialRequest     = laser1ConfigRequest;                    //Saving first request to storage on specified laser

                byte[] dataToSend = laser1ConfigRequest.GetByteArray();                           //Get byte array that represents config request that will be sent to laser
                SendUSBData(dataToSend);                                                          //Sending data to laser1
                experiment.lasers[0].ProcessFinishedEvent.WaitOne();                              //Lock program and wait for "singal" to continue
            }

            if (checkLaser2.Checked)
            {
                currentLaser = 1;
                LaserConfigRequest laser2ConfigRequest = new LaserConfigRequest();
                laser2ConfigRequest.ID = 2;
                laser2ConfigRequest.MinPowerCurrent    = Convert.ToByte(I2min.Text);
                laser2ConfigRequest.MaxPowerCurrent    = Convert.ToByte(I2max.Text);
                laser2ConfigRequest.Increment          = Convert.ToByte(Inc2.Text);
                laser2ConfigRequest.DesiredTemperature = Convert.ToByte(Temp2.Text);

                experiment.lasers[1].ID                 = 2;
                experiment.lasers[1].Current            = laser2ConfigRequest.MinPowerCurrent;
                experiment.lasers[1].DesiredCurrent     = laser2ConfigRequest.MaxPowerCurrent;
                experiment.lasers[1].DesiredTemperature = laser2ConfigRequest.DesiredTemperature;
                experiment.lasers[1].InitialRequest     = laser2ConfigRequest;

                byte[] dataToSend = laser2ConfigRequest.GetByteArray();
                SendUSBData(dataToSend);
                experiment.lasers[1].ProcessFinishedEvent.WaitOne();
            }

            if (checkLaser3.Checked)
            {
                currentLaser = 2;
                LaserConfigRequest laser3ConfigRequest = new LaserConfigRequest();
                laser3ConfigRequest.ID = 3;
                laser3ConfigRequest.MinPowerCurrent    = Convert.ToByte(I3min.Text);
                laser3ConfigRequest.MaxPowerCurrent    = Convert.ToByte(I3max.Text);
                laser3ConfigRequest.Increment          = Convert.ToByte(Inc3.Text);
                laser3ConfigRequest.DesiredTemperature = Convert.ToByte(Temp3.Text);

                experiment.lasers[2].ID                 = 3;
                experiment.lasers[2].Current            = laser3ConfigRequest.MinPowerCurrent;
                experiment.lasers[2].DesiredCurrent     = laser3ConfigRequest.MaxPowerCurrent;
                experiment.lasers[2].DesiredTemperature = laser3ConfigRequest.DesiredTemperature;
                experiment.lasers[2].InitialRequest     = laser3ConfigRequest;

                byte[] dataToSend = laser3ConfigRequest.GetByteArray();
                SendUSBData(dataToSend);
                experiment.lasers[2].ProcessFinishedEvent.WaitOne();
            }

            if (checkLaser4.Checked)
            {
                currentLaser = 3;
                LaserConfigRequest laser4ConfigRequest = new LaserConfigRequest();
                laser4ConfigRequest.ID = 4;
                laser4ConfigRequest.MinPowerCurrent    = Convert.ToByte(I4min.Text);
                laser4ConfigRequest.MaxPowerCurrent    = Convert.ToByte(I4max.Text);
                laser4ConfigRequest.Increment          = Convert.ToByte(Inc4.Text);
                laser4ConfigRequest.DesiredTemperature = Convert.ToByte(Temp4.Text);

                experiment.lasers[3].ID                 = 4;
                experiment.lasers[3].Current            = laser4ConfigRequest.MinPowerCurrent;
                experiment.lasers[3].DesiredCurrent     = laser4ConfigRequest.MaxPowerCurrent;
                experiment.lasers[3].DesiredTemperature = laser4ConfigRequest.DesiredTemperature;
                experiment.lasers[3].InitialRequest     = laser4ConfigRequest;

                byte[] dataToSend = laser4ConfigRequest.GetByteArray();
                SendUSBData(dataToSend);
                experiment.lasers[3].ProcessFinishedEvent.WaitOne();
            }

            if (checkLaser5.Checked)
            {
                currentLaser = 4;
                LaserConfigRequest laser5ConfigRequest = new LaserConfigRequest();
                laser5ConfigRequest.ID = 5;
                laser5ConfigRequest.MinPowerCurrent    = Convert.ToByte(I5min.Text);
                laser5ConfigRequest.MaxPowerCurrent    = Convert.ToByte(I5max.Text);
                laser5ConfigRequest.Increment          = Convert.ToByte(Inc5.Text);
                laser5ConfigRequest.DesiredTemperature = Convert.ToByte(Temp5.Text);

                experiment.lasers[4].ID                 = 5;
                experiment.lasers[4].Current            = laser5ConfigRequest.MinPowerCurrent;
                experiment.lasers[4].DesiredCurrent     = laser5ConfigRequest.MaxPowerCurrent;
                experiment.lasers[4].DesiredTemperature = laser5ConfigRequest.DesiredTemperature;
                experiment.lasers[4].InitialRequest     = laser5ConfigRequest;

                byte[] dataToSend = laser5ConfigRequest.GetByteArray();
                SendUSBData(dataToSend);
                experiment.lasers[4].ProcessFinishedEvent.WaitOne();
            }


            Iniciar.Invoke(new Action(() =>
            {
                Iniciar.Enabled = true;
            }));

            Parar.Invoke(new Action(() =>
            {
                Parar.Enabled = false;
            }));

            LaserConfigRequest finalConfigRequest = new LaserConfigRequest();

            SendUSBData(finalConfigRequest.GetByteArray()); // sending last and empty message
            currentLaser = -1;                              // back to non existent laser
            MessageBox.Show("Finished All tests");
        }