コード例 #1
0
        public void TestAddAndRetrieveAccelerationBlob()
        {
            Acceleration[] accArray = new Acceleration[1];

            long dateTime1          = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            SensorLocationEnum loc1 = SensorLocationEnum.AZ_MOTOR;

            Acceleration acc = new Acceleration();

            acc         = Acceleration.Generate(dateTime1, 1.1, 2.2, 3.3, loc1);
            accArray[0] = acc;

            AccelerationBlob accBLob = new AccelerationBlob();

            accBLob.BuildAccelerationString(accArray, dateTime1, true);

            //DatabaseOperations.AddAccelerationBlobData(acc, dateTime1, true);
            List <AccelerationBlob> accReturn = DatabaseOperations.GetAccBlobData(dateTime1 - 1, dateTime1 + 1);

            Assert.AreEqual(1, accReturn.Count);

            //Test only acc
            Assert.AreEqual("4.11582312545134~1.1~2.2~3.3~0-", accReturn[0].Blob);
            Assert.AreEqual(dateTime1, accReturn[0].TimeCaptured);
        }
コード例 #2
0
        /// <summary>
        /// Constructor used to set the values needed to initialize the components of the class. It will not start waiting for data until
        /// StartSensorMonitoringRoutine() is called.
        ///
        /// The reason the client IP address is a string and not an IPAddress is because none of the TCPClient class's
        /// constructors take an IPAddress. :(
        /// </summary>
        /// <param name="serverIPAddress">This is the IP address the SensorNetworkServer is "listening" to.</param>
        /// <param name="serverPort">This is the port the SensorNetworkServer is "listening" to.</param>
        /// <param name="clientIPAddress">This is the IP address of the SensorNetwork that we will be sending the sensor initialization to.</param>
        /// <param name="clientPort">This is the port of the SensorNetwork that we will be sending the sensor initialization to.</param>
        /// <param name="telescopeId">The Radio Telescope that the SensorNetworkConfig will apply to.</param>
        /// <param name="isSimulation">Tells the SensorNetworkServer if it should initialize the SimulationSensorNetwork,
        /// or if it is connecting to the production hardware (or maybe an outside simulation).</param>
        public SensorNetworkServer(IPAddress serverIPAddress, int serverPort, string clientIPAddress, int clientPort, int telescopeId, bool isSimulation)
        {
            // Initialize main parts of the Sensor Network
            Server = new TcpListener(serverIPAddress, serverPort);
            InitializationClient = new SensorNetworkClient(clientIPAddress, clientPort, telescopeId);

            // Sensor data initialization
            CurrentElevationMotorTemp    = new Temperature[1];
            CurrentElevationMotorTemp[0] = new Temperature();

            CurrentAzimuthMotorTemp    = new Temperature[1];
            CurrentAzimuthMotorTemp[0] = new Temperature();

            CurrentAbsoluteOrientation = new Orientation();

            CurrentElevationMotorAccl    = new Acceleration[1];
            CurrentElevationMotorAccl[0] = new Acceleration();

            CurrentAzimuthMotorAccl    = new Acceleration[1];
            CurrentAzimuthMotorAccl[0] = new Acceleration();

            CurrentCounterbalanceAccl    = new Acceleration[1];
            CurrentCounterbalanceAccl[0] = new Acceleration();

            AbsoluteOrientationOffset = new Orientation();

            // Sensor error initialization
            SensorStatuses = new SensorStatuses();
            SensorStatuses.AzimuthAbsoluteEncoderStatus      = SensorNetworkSensorStatus.Okay;
            SensorStatuses.ElevationAbsoluteEncoderStatus    = SensorNetworkSensorStatus.Okay;
            SensorStatuses.AzimuthTemperature1Status         = SensorNetworkSensorStatus.Okay;
            SensorStatuses.AzimuthTemperature2Status         = SensorNetworkSensorStatus.Okay;
            SensorStatuses.ElevationTemperature1Status       = SensorNetworkSensorStatus.Okay;
            SensorStatuses.ElevationTemperature2Status       = SensorNetworkSensorStatus.Okay;
            SensorStatuses.AzimuthAccelerometerStatus        = SensorNetworkSensorStatus.Okay;
            SensorStatuses.ElevationAccelerometerStatus      = SensorNetworkSensorStatus.Okay;
            SensorStatuses.CounterbalanceAccelerometerStatus = SensorNetworkSensorStatus.Okay;

            // Initialize threads and additional processes, if applicable
            SensorMonitoringThread      = new Thread(() => { SensorMonitoringRoutine(); });
            SensorMonitoringThread.Name = "SensorMonitorThread";

            // We only want to run the internal simulation if the user selected to run the Simulated Sensor Network
            if (isSimulation)
            {
                SimulationSensorNetwork = new SimulationSensorNetwork(serverIPAddress.ToString(), serverPort, IPAddress.Parse(clientIPAddress), clientPort);
            }
            else
            {
                SimulationSensorNetwork = null;
            }

            // Initialize the timeout timer but don't start it yet
            Timeout           = new System.Timers.Timer();
            Timeout.Elapsed  += TimedOut; // TimedOut is the function at the bottom that executes when this elapses
            Timeout.AutoReset = false;

            AccBlob = new AccelerationBlob();
        }
コード例 #3
0
        public void TestAddAndRetrieveAccelerationBlob()
        {
            long dateTime1 = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();

            AccelerationBlob acc = new AccelerationBlob();

            acc.Blob = "abcdefghijklmnopqrstuvwxyz";

            DatabaseOperations.AddAccelerationBlobData(acc, dateTime1, true);
            List <AccelerationBlob> accReturn = DatabaseOperations.GetAccBlobData(dateTime1 - 1, dateTime1 + 1);

            Assert.AreEqual(1, accReturn.Count);

            //Test only acc
            Assert.AreEqual(acc.Blob, accReturn[0].Blob);
            Assert.AreEqual(acc.TimeCaptured, accReturn[0].TimeCaptured);
        }
コード例 #4
0
        public void TestGettersAndSetters()
        {
            // Initialize appointment entity
            SensorLocationEnum loc1 = SensorLocationEnum.AZ_MOTOR;

            //Generate current time
            long dateTime1 = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            long dateTime2 = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();

            //Generate Acceleration
            AccelerationBlob a1 = new AccelerationBlob();

            //Acceleration t2 = Acceleration.Generate(dateTime, 2.0, loc1);

            a1.Blob         = "abc";
            a1.Id           = 17;
            a1.TimeCaptured = dateTime1;

            a1.TimeCaptured = dateTime2;
            Assert.AreEqual(a1.TimeCaptured, dateTime2);
            Assert.AreEqual(a1.Blob, "abc");
            Assert.AreEqual(a1.Id, 17);
        }
コード例 #5
0
        /// <summary>
        /// add an string of sensor data to the apropriat table
        /// </summary>
        /// <param name="acc"></param>
        public static void AddAccelerationBlobData(AccelerationBlob acc, long dateTime1, bool testflag = false)
        {
            Thread t = new Thread(() =>
            {
                acc.TimeCaptured = dateTime1;

                if (!USING_REMOTE_DATABASE)
                {
                    using (RTDbContext Context = InitializeDatabaseContext())
                    {
                        Context.AccelerationBlobs.Add(acc);
                        //foreach(Temperature tump in temp) {}
                        SaveContext(Context);
                    }
                }
            });

            t.Start();

            if (testflag)
            {
                t.Join();
            }
        }
コード例 #6
0
        /// <summary>
        /// add an Blob of acceleration data to the apropriate table
        /// </summary>
        /// <param name="acc"></param>
        /// <param name="location"></param>
        /// <param name="testflag"></param>
        public static void AddAccelerationBlobData(AccelerationBlob acc, SensorLocationEnum location, bool testflag = false)
        {
            Thread t = new Thread(() =>
            {
                if (!USING_REMOTE_DATABASE)
                {
                    using (RTDbContext Context = InitializeDatabaseContext())
                    {
                        //based on the specified location enum, add the blob to the corret table
                        switch (location)
                        {
                        case SensorLocationEnum.AZ_MOTOR:
                            Context.AzimuthAccelerationBlobs.Add((AzimuthAccelerationBlob)acc);
                            break;

                        case SensorLocationEnum.COUNTERBALANCE:
                            Context.CounterbalanceAccelerationBlobs.Add((CounterbalanceAccelerationBlob)acc);
                            break;

                        case SensorLocationEnum.EL_MOTOR:
                            Context.ElevationAccelerationBlobs.Add((ElevationAccelerationBlob)acc);
                            break;
                        }

                        SaveContext(Context);
                    }
                }
            });

            t.Start();

            if (testflag)
            {
                t.Join();
            }
        }