Beispiel #1
0
        public async Task ModbusCoilSingle()
        {
            var addresses = new List<AddressUnit>
            {
                new AddressUnit
                {
                    Id = "0",
                    Area = "0X",
                    Address = 1,
                    SubAddress = 0,
                    CommunicationTag = "A1",
                    DataType = typeof(bool)
                }
            };

            _modbusTcpMachine.GetAddresses = addresses;
            await _modbusTcpMachine.SetDatasAsync(MachineSetDataType.Address, new Dictionary<string, double>()
            {
                {
                    "0X 1.0", 1
                }
            });
            var ans = await _modbusTcpMachine.GetDatasAsync(MachineGetDataType.Address);
            Assert.AreEqual(ans["0X 1.0"].PlcValue, 1);
        }
Beispiel #2
0
        public async Task ModbusEndianSingle()
        {
            Random r = new Random();

            var addresses = new List <AddressUnit>
            {
                new AddressUnit
                {
                    Id               = "0",
                    Area             = "4X",
                    Address          = 1,
                    SubAddress       = 0,
                    CommunicationTag = "A1",
                    DataType         = typeof(ushort)
                }
            };

            var dic1 = new Dictionary <string, double>()
            {
                {
                    "4X 1", r.Next(0, UInt16.MaxValue)
                }
            };

            _modbusTcpMachine.GetAddresses  = addresses;
            _modbusTcpMachine2.GetAddresses = addresses;
            await _modbusTcpMachine.SetDatasAsync(MachineSetDataType.Address, dic1);

            var ans = await _modbusTcpMachine.GetDatasAsync(MachineGetDataType.Address);

            var ans2 = await _modbusTcpMachine2.GetDatasAsync(MachineGetDataType.Address);

            Assert.AreEqual(ans["4X 1.0"].PlcValue, dic1["4X 1"]);
            Assert.AreEqual(ans2["4X 1.0"].PlcValue, (ushort)dic1["4X 1"] % 256 * 256 + (ushort)dic1["4X 1"] / 256);
        }
Beispiel #3
0
        private async Task <TripleAddViewModel> GetMachineEnter()
        {
            if (machine == null)
            {
                machine = new ModbusMachine(ModbusType.Tcp, "192.168.3.10", new List <AddressUnit>()
                {
                    new AddressUnit()
                    {
                        Id = "1", Area = "4X", Address = 1, CommunicationTag = "Add1", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0
                    },
                    new AddressUnit()
                    {
                        Id = "2", Area = "4X", Address = 2, CommunicationTag = "Add2", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0
                    },
                    new AddressUnit()
                    {
                        Id = "3", Area = "4X", Address = 3, CommunicationTag = "Add3", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0
                    },
                    new AddressUnit()
                    {
                        Id = "4", Area = "4X", Address = 4, CommunicationTag = "Ans", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0
                    },
                }, 2, 0);
                machine.AddressCombiner    = new AddressCombinerContinus(machine.AddressTranslator);
                machine.AddressCombinerSet = new AddressCombinerContinus(machine.AddressTranslator);
            }
            var resultFormat = (await machine.GetDatasAsync(MachineGetDataType.CommunicationTag)).MapGetValuesToSetValues();

            return(SetValue(new ushort[4] {
                (ushort)resultFormat["Add1"], (ushort)resultFormat["Add2"], (ushort)resultFormat["Add3"], (ushort)resultFormat["Ans"]
            }));
        }
Beispiel #4
0
        public async Task OpcSingle()
        {
            _opcMachine.GetAddresses = new List <AddressUnit>
            {
                new AddressUnit()
                {
                    Id       = "1",
                    Name     = "蒸汽压力下限",
                    Area     = "0",
                    Address  = 1,
                    DataType = typeof(ushort)
                }
            };
            var ans = await _opcMachine.GetDatasAsync(MachineGetDataType.Id);

            Assert.AreEqual(ans["1"].PlcValue, 525);
        }
Beispiel #5
0
        public async Task ModbusCoilSingle()
        {
            Random r = new Random();

            var addresses = new List <AddressUnit>
            {
                new AddressUnit
                {
                    Id               = "0",
                    Area             = "0X",
                    Address          = 1,
                    SubAddress       = 0,
                    CommunicationTag = "A1",
                    DataType         = typeof(bool)
                }
            };

            var dic1 = new Dictionary <string, double>()
            {
                {
                    "0X 1.0", r.Next(0, 2)
                }
            };

            _modbusTcpMachine.GetAddresses   = addresses;
            _modbusAsciiMachine.GetAddresses = addresses;
            _modbusRtuMachine.GetAddresses   = addresses;
            await _modbusTcpMachine.SetDatasAsync(MachineSetDataType.Address, dic1);

            await _modbusAsciiMachine.SetDatasAsync(MachineSetDataType.Address, dic1);

            await _modbusRtuMachine.SetDatasAsync(MachineSetDataType.Address, dic1);

            var ans = await _modbusTcpMachine.GetDatasAsync(MachineGetDataType.Address);

            var ans2 = await _modbusRtuMachine.GetDatasAsync(MachineGetDataType.Address);

            var ans3 = await _modbusAsciiMachine.GetDatasAsync(MachineGetDataType.Address);

            Assert.AreEqual(ans["0X 1.0"].PlcValue, dic1["0X 1.0"]);
            Assert.AreEqual(ans2["0X 1.0"].PlcValue, dic1["0X 1.0"]);
            Assert.AreEqual(ans3["0X 1.0"].PlcValue, dic1["0X 1.0"]);
        }
        public async Task MultiStation()
        {
            var addresses = new List <AddressUnit>
            {
                new AddressUnit
                {
                    Id               = "0",
                    Area             = "4X",
                    Address          = 2,
                    SubAddress       = 0,
                    CommunicationTag = "A1",
                    DataType         = typeof(ushort)
                },
                new AddressUnit
                {
                    Id               = "1",
                    Area             = "4X",
                    Address          = 3,
                    SubAddress       = 0,
                    CommunicationTag = "A2",
                    DataType         = typeof(ushort)
                },
                new AddressUnit
                {
                    Id               = "2",
                    Area             = "4X",
                    Address          = 4,
                    SubAddress       = 0,
                    CommunicationTag = "A3",
                    DataType         = typeof(ushort)
                },
                new AddressUnit
                {
                    Id               = "3",
                    Area             = "4X",
                    Address          = 5,
                    SubAddress       = 0,
                    CommunicationTag = "A4",
                    DataType         = typeof(ushort)
                },
                new AddressUnit
                {
                    Id               = "4",
                    Area             = "4X",
                    Address          = 6,
                    SubAddress       = 0,
                    CommunicationTag = "A5",
                    DataType         = typeof(uint)
                },
                new AddressUnit
                {
                    Id               = "5",
                    Area             = "4X",
                    Address          = 8,
                    SubAddress       = 0,
                    CommunicationTag = "A6",
                    DataType         = typeof(uint)
                }
            };

            _modbusRtuMachine1.GetAddresses = addresses.ToList();
            _modbusRtuMachine2.GetAddresses = addresses.ToList();

            Random r    = new Random();
            var    dic1 = new Dictionary <string, double>()
            {
                {
                    "A1", r.Next(0, UInt16.MaxValue)
                },
                {
                    "A2", r.Next(0, UInt16.MaxValue)
                },
                {
                    "A3", r.Next(0, UInt16.MaxValue)
                },
                {
                    "A4", r.Next(0, UInt16.MaxValue)
                },
                {
                    "A5", r.Next()
                },
                {
                    "A6", r.Next()
                },
            };

            var dic2 = new Dictionary <string, double>()
            {
                {
                    "A1", r.Next(0, UInt16.MaxValue)
                },
                {
                    "A2", r.Next(0, UInt16.MaxValue)
                },
                {
                    "A3", r.Next(0, UInt16.MaxValue)
                },
                {
                    "A4", r.Next(0, UInt16.MaxValue)
                },
                {
                    "A5", r.Next()
                },
                {
                    "A6", r.Next()
                },
            };

            await _modbusRtuMachine1.SetDatasAsync(MachineSetDataType.CommunicationTag, dic1);

            await _modbusRtuMachine2.SetDatasAsync(MachineSetDataType.CommunicationTag, dic2);

            var ans = await _modbusRtuMachine1.GetDatasAsync(MachineGetDataType.CommunicationTag);

            var ans2 = await _modbusRtuMachine2.GetDatasAsync(MachineGetDataType.CommunicationTag);

            _modbusRtuMachine1.Disconnect();
            _modbusRtuMachine2.Disconnect();

            Assert.AreEqual(ans["A1"].PlcValue, dic1["A1"]);
            Assert.AreEqual(ans2["A1"].PlcValue, dic2["A1"]);
            Assert.AreEqual(ans["A2"].PlcValue, dic1["A2"]);
            Assert.AreEqual(ans2["A2"].PlcValue, dic2["A2"]);
            Assert.AreEqual(ans["A3"].PlcValue, dic1["A3"]);
            Assert.AreEqual(ans2["A3"].PlcValue, dic2["A3"]);
            Assert.AreEqual(ans["A4"].PlcValue, dic1["A4"]);
            Assert.AreEqual(ans2["A4"].PlcValue, dic2["A4"]);
            Assert.AreEqual(ans["A5"].PlcValue, dic1["A5"]);
            Assert.AreEqual(ans2["A5"].PlcValue, dic2["A5"]);
            Assert.AreEqual(ans["A6"].PlcValue, dic1["A6"]);
            Assert.AreEqual(ans2["A6"].PlcValue, dic2["A6"]);
        }
Beispiel #7
0
 private async Task RunTask(BaseMachine machine)
 {
     try
     {
         //var ans = machine.GetDatas();
         CancellationTokenSource cts = new CancellationTokenSource();
         cts.CancelAfter(TimeSpan.FromSeconds(_getCycle));
         var ans = await machine.GetDatasAsync().WithCancellation(cts.Token);
         if (!machine.IsConnected)
         {
             MoveMachineToUnlinked(machine.Id);
         }
         else
         {
             MoveMachineToLinked(machine.Id);
         }
         if (ReturnValues != null)
         {
             ReturnValues(new KeyValuePair<int, Dictionary<string,ReturnUnit>>(machine.Id, ans));
         }
     }
     catch (Exception e)
     {
         if (!machine.IsConnected)
         {
             MoveMachineToUnlinked(machine.Id);
         }
         if (ReturnValues != null)
         {
             ReturnValues(new KeyValuePair<int, Dictionary<string,ReturnUnit>>(machine.Id, null));
         }
     }
 }