コード例 #1
0
ファイル: Program.cs プロジェクト: xbadcode/Rubezh
		static void Init()
		{
			Console.WriteLine("Инициализация системы...");

			var connection = new ComPort
			{
				PortName = "COM2",
				BaudRate = 9600,
			};

			var network = new IncotexNetworkController
			{
				Connection = connection
			};

			_Device = new Mercury203
			{
				Address = 23801823
			};

			network.Devices.Add(_Device);

			NetworksManager.Instance.Networks.Add(network);

			_Device.Start();
			network.Start();
		}
コード例 #2
0
ファイル: FormMain.cs プロジェクト: xbadcode/Rubezh
		void EventHandler_FormMain_Load(object sender, EventArgs e)
		{
			#region the code is For debug

			var connection = 
				new ResursNetwork.Incotex.NetworkControllers.DataLinkLayer.ComPort
			{
				PortName = "COM2",
				BaudRate = 9600,
			};

			var network = new IncotexNetworkController
			{
				Connection = connection
			};

			var device = new Mercury203
			{
				Address = 23801823
			};

			network.Devices.Add(device);

			_NetworksManager.Networks.Add(network);

			device.Start();
			network.Start();

			#endregion
			
			InitTreeViewSystem(_treeViewSystem);
			InitContextMenuSystem();
		}
コード例 #3
0
        //[ExpectedException(typeof(InvalidOperationException), "")]
        public void TestWriteByWrongReqeustType()
        {
            // Arrange
            var msg = new DataMessage(new byte[] { 0, 0, 0, 2 })
            {
                Address = 1,
                CmdCode = 0x20,
                MessageType = MessageType.IncomingMessage
            };

            Mock<IDataLinkPort> comPort = new Mock<IDataLinkPort>();
            comPort.Setup(p => p.IsOpen).Returns(true);
            comPort.Setup(p => p.MessagesToRead).Returns(0);

            comPort.Setup(p => p.Write(It.IsAny<IMessage>()))
                .Raises(m => m.MessageReceived += null, new EventArgs());
            comPort.Setup(p => p.Read()).Returns(msg);

            var controller = new IncotexNetworkController();
            controller.Connection = comPort.Object;
            var device = new Mercury203();
            controller.Devices.Add(device);
            controller.Start();

            var request = new DataMessage()
            {
                Address = 0x1,
                CmdCode = Convert.ToByte(Mercury203CmdCode.ReadGroupAddress)
            };
            var wrongTrans = new Transaction(null, TransactionType.Undefined, request) { Sender = device }; // Ошибка !!!
            var networkRequest = new NetworkRequest(wrongTrans);

            // Act
            try
            {
                controller.Write(networkRequest);

                while (networkRequest.Status != NetworkRequestStatus.Failed)
                {
                    // Ждём, должно быть исключение
                }
            }
            catch (Exception ex)
            {
                // Assert
                Assert.AreEqual(typeof(InvalidOperationException), ex.GetType());
            }
        }
コード例 #4
0
ファイル: NetworksManager.cs プロジェクト: xbadcode/Rubezh
        /// <summary>
        /// Создаёт устройтсво на основе типа и добавляет в коллекцию
        /// </summary>
        public void AddDevice(ResursAPI.Device device)
        {
            switch (device.DeviceType)
            {
                case ResursAPI.DeviceType.Network:
                    {
                        throw new InvalidCastException(
                            "Попытка приветсти к контроллер сети к устройтсву");
                    }
                case ResursAPI.DeviceType.Counter:
                    {
                        switch (device.DriverType)
                        {
                            case ResursAPI.DriverType.Mercury203Counter:
                                {
                                    var mercury203 = new Mercury203
                                    {
                                        Id = (Guid)device.GetParameter(ParameterNamesMercury203.Id),
                                        Address = (UInt32)device.GetParameter(ParameterNamesMercury203.Address),
                                        Status = device.IsActive ? Status.Running : Status.Stopped
                                    };

                                    mercury203.Parameters[ParameterNamesMercury203.GADDR].Value =
                                        device.GetParameter(ParameterNamesMercury203.GADDR);
                                    mercury203.Parameters[ParameterNamesMercury203.PowerLimit].Value =
                                        device.GetParameter(ParameterNamesMercury203.PowerLimit);
                                    mercury203.Parameters[ParameterNamesMercury203.PowerLimitPerMonth].Value =
                                        device.GetParameter(ParameterNamesMercury203.PowerLimitPerMonth);
                                    //TODO: Сделать таблицу параметров доконца

                                    var owner = device.Parent;
                                    
                                    if ((owner == null) || 
                                        (owner.DriverType != DriverType.IncotextNetwork))
                                    {
                                        throw new InvalidOperationException(
                                            "Невозможно добавить устройтсво. Владельцем устройства не является IncotextNetwork");
                                    }

                                    _NetworkControllers[(Guid)owner.GetParameter(ParameterNamesBase.Id)]
                                        .Devices.Add(mercury203);
                                    break;
                                }
							case DriverType.VirtualMercury203Counter:
								{
									var mercury203 = new Mercury203Virtual
									{
										Id = (Guid)device.GetParameter(ParameterNamesMercury203.Id),
										Address = (UInt32)device.GetParameter(ParameterNamesMercury203.Address),
										Status = device.IsActive ? Status.Running : Status.Stopped
									};

									mercury203.Parameters[ParameterNamesMercury203.GADDR].Value =
										device.GetParameter(ParameterNamesMercury203.GADDR);
									mercury203.Parameters[ParameterNamesMercury203.PowerLimit].Value =
										device.GetParameter(ParameterNamesMercury203.PowerLimit);
									//mercury203.Parameters[ParameterNamesMercury203.PowerLimitPerMonth].Value =
									//	device.GetParameter(ParameterNamesMercury203.PowerLimitPerMonth);
									//TODO: Сделать таблицу параметров доконца

									var owner = device.Parent;

									if ((owner == null) ||
										(owner.DriverType != DriverType.VirtualIncotextNetwork))
									{
										throw new InvalidOperationException(
											"Невозможно добавить устройтсво. Владельцем устройства не является VirtualIncotextNetwork");
									}

									_NetworkControllers[(Guid)owner.GetParameter(ParameterNamesBase.Id)]
										.Devices.Add(mercury203);
									break;
								}
                            default:
                                {
                                    throw new NotSupportedException(String.Format(
                                        "Устройтсво с DriverType={0} не поддерживается",
                                        device.DriverType.ToString()));
                                }
                        }
                        break;
                    }
                default:
                    {
                        throw new InvalidCastException(String.Format(
                          "Неудалось привести типы. Устройтсво с DeviceType={0} не поддерживается",
                          device.DeviceType.ToString()));
                    }
            }
        }
コード例 #5
0
        public void TestReadGroupAddressSuccess()
        {
            // Arrange
            int amount = 1;

            var msg = new DataMessage(new byte[] { 0, 0, 0, 2 })
            {
                Address = 1,
                CmdCode = 0x20,
                MessageType = MessageType.IncomingMessage
            };

            Mock<IDataLinkPort> comPort = new Mock<IDataLinkPort>();
            //comPort.Setup(p => p.GetType()).Returns(typeof(IncotexNetworkController));
            comPort.Setup(p => p.IsOpen).Returns(true);
            comPort.Setup(p => p.MessagesToRead)
                .Returns(() => amount)
                .Callback(() => amount--);

            comPort.Setup(p => p.Write(It.IsAny<IMessage>()))
                .Raises(m => m.MessageReceived += null, new EventArgs());
            comPort.Setup(p => p.Read()).Returns(msg);

            var controller = new IncotexNetworkController();
            controller.Connection = comPort.Object;
            controller.Start();
            //controller.Stop();

            var device = new Mercury203()
            {
                Address = 1,
            };

            controller.Devices.Add(device);

            // Act
            var result = device.ReadGroupAddress();
            //controller.Write(trans);
            do
            {
                // Ждём выполения комманды
            }
            while (!result.IsCompleted);

            // Assert
            Assert.AreEqual(TransactionStatus.Completed, result.Stack[result.Stack.Length - 1].Status, "Success");
        }
コード例 #6
0
        public void TestReadGroupAddressByIsNotController()
        {
            // Arrange
            var device = new Mercury203()
            {
                Address = 1,
            };

            // Act
            var result = device.ReadGroupAddress();
            do {}
            while(!result.IsCompleted);

            // Assert
            Assert.AreEqual(TransactionStatus.Aborted, result.Stack[result.Stack.Length - 1].Status);
        }
コード例 #7
0
        //[ExpectedException(typeof(InvalidOperationException), "")]
        public void TestReadGroupAddressByControllerIsStopped()
        {
            // Arrange
            var msg = new DataMessage(new byte[] { 0, 0, 0, 2 })
            {
                Address = 1,
                CmdCode = 0x20,
                MessageType = MessageType.IncomingMessage
            };

            Mock<IDataLinkPort> comPort = new Mock<IDataLinkPort>();
            comPort.Setup(p => p.IsOpen).Returns(true);
            comPort.Setup(p => p.MessagesToRead).Returns(0);

            comPort.Setup(p => p.Write(It.IsAny<IMessage>()))
                .Raises(m => m.MessageReceived += null, new EventArgs());
            comPort.Setup(p => p.Read()).Returns(msg);

            var controller = new IncotexNetworkController();
            controller.Connection = comPort.Object;
            controller.Stop(); // Контроллер остановлен

            var device = new Mercury203()
            {
                Address = 1,
            };

            controller.Devices.Add(device);

            Type type = null;

            // Act
            try
            {
                var result = device.ReadGroupAddress();
            }
            catch (Exception ex)
            {
                type = ex.GetType();
            }

            // Assert
            Assert.AreEqual(typeof(InvalidOperationException), type);

            // Assert
            //while(true)
            //{
                // Ждём должно быть исключение
            //}
        }