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(); }
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(); }
//[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()); } }
/// <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())); } } }
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"); }
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); }
//[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) //{ // Ждём должно быть исключение //} }