コード例 #1
0
        static void Main(string[] args)
        {
            ModbusMachine _modbusTcpMachine = new ModbusMachine(ModbusType.Tcp, "192.168.2.2", null, true, 2, 0);

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

            _modbusTcpMachine.GetAddresses = addresses;
            var ans  = _modbusTcpMachine.GetDatasAsync(MachineGetDataType.Address).Result;
            var data = ans["3X 1.0"].PlcValue;

            Console.WriteLine(data);

            Console.ReadKey();
        }
コード例 #2
0
        public void GetUtility()
        {
            BaseMachine <int, int> baseMachine = new ModbusMachine <int, int>(ModbusType.Tcp, "192.168.3.12", null, true, 2, 0);
            var utility = baseMachine.GetUtility <IUtilityMethodTime>();
            var methods = utility.GetType().GetRuntimeMethods();

            Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "GetTimeAsync") != null, true);
            Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "SetTimeAsync") != null, true);
            baseMachine.Disconnect();
        }
コード例 #3
0
        public async Task InvokeUtility()
        {
            BaseMachine <int, int> baseMachine = new ModbusMachine <int, int>(ModbusType.Tcp, "192.168.3.12", null, true, 2, 0);
            var success = await baseMachine.BaseUtility.GetUtilityMethods <IUtilityMethodTime>().SetTimeAsync(DateTime.Now);

            Assert.AreEqual(success, true);
            var time = await baseMachine.BaseUtility.GetUtilityMethods <IUtilityMethodTime>().GetTimeAsync();

            Assert.AreEqual((time.ToUniversalTime() - DateTime.Now.ToUniversalTime()).Seconds < 10, true);
            baseMachine.Disconnect();
        }
コード例 #4
0
        public async Task InvokeUtility()
        {
            BaseMachine <int, int> baseMachine = new ModbusMachine <int, int>(ModbusTransportType.Tcp, LOCAL_ADDR_12, null, true, 2, 0);
            bool success = await baseMachine.BaseUtility.GetUtilityMethods <IUtilityMethodTime>().SetTimeAsync(DateTime.Now);

            Assert.True(success);

            //Casuses
            var time = await baseMachine.BaseUtility.GetUtilityMethods <IUtilityMethodTime>().GetTimeAsync();

            Assert.True((time.ToUniversalTime() - DateTime.Now.ToUniversalTime()).Seconds < 10);
            baseMachine.Disconnect();
        }
コード例 #5
0
        private bool ReadGO(string adr, ref ushort data)
        {
            var clinet = new ModbusMachine(ModbusType.Tcp, IP, null, false, 2, 0);

            clinet.Connect();

            int iAdr;
            var ret = int.TryParse(adr, out iAdr);

            if (ret != true)
            {
                return(ret);
            }

            var addresses = new List <AddressUnit>()
            {
                new AddressUnit
                {
                    Id               = "LOWPART",
                    Area             = "1X",
                    Address          = iAdr,
                    SubAddress       = 0,
                    CommunicationTag = "LOWPART",
                    DataType         = typeof(byte)
                },
                new AddressUnit
                {
                    Id               = "HIGHPART",
                    Area             = "1X",
                    Address          = iAdr + 8,
                    SubAddress       = 0,
                    CommunicationTag = "HIGHPART",
                    DataType         = typeof(byte)
                },
            };

            for (int j = 0; j < MaxRecon; j++)
            {
                clinet.GetAddresses = addresses;
                var ans = clinet.GetDatas(MachineGetDataType.CommunicationTag);

                if (ans != null)
                {
                    data = (ushort)(ans["LOWPART"].PlcValue + ans["HIGHPART"].PlcValue * 256);
                    return(true);
                }
            }

            clinet.Disconnect();
            return(false);
        }
コード例 #6
0
        private bool ReadDO(string adr, ref bool data)
        {
            var clinet = new ModbusMachine(ModbusType.Tcp, IP, null, false, 2, 0);

            clinet.Connect();

            int iAdr;
            var ret = int.TryParse(adr, out iAdr);

            if (ret != true)
            {
                return(ret);
            }

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

            for (int j = 0; j < MaxRecon; j++)
            {
                clinet.GetAddresses = addresses;
                var ans = clinet.GetDatas(MachineGetDataType.CommunicationTag);

                if (ans != null)
                {
                    data = ans["DO" + adr].PlcValue > 0 ? true : false;
                    clinet.Disconnect();
                    return(true);
                }
            }

            clinet.Disconnect();
            return(false);
        }
コード例 #7
0
        private bool WriteDI(string adr, bool data)
        {
            var clinet = new ModbusMachine(ModbusType.Tcp, IP, null, false, 2, 0);

            clinet.Connect();

            int iAdr;
            var ret = int.TryParse(adr, out iAdr);

            if (ret != true)
            {
                return(ret);
            }

            var div_adr = "0X " + iAdr.ToString();

            double div_data = data == false ? 0 : 1;

            var dic = new Dictionary <string, double>()
            {
                {
                    div_adr, div_data
                }
            };

            for (int j = 0; j < MaxRecon; j++)
            {
                ret = AsyncHelper.RunSync(() =>
                                          clinet.BaseUtility.GetUtilityMethods <IUtilityMethodWriteSingle>().SetSingleDataAsync(div_adr, dic[div_adr] >= 1));

                if (ret == true)
                {
                    break;
                }
            }

            clinet.Disconnect();
            return(ret);
        }
コード例 #8
0
        public async Task InvokeMachine()
        {
            BaseMachine <int, int> baseMachine = new ModbusMachine <int, int>(ModbusType.Tcp, "192.168.3.10", new List <AddressUnit <int> >
            {
                new AddressUnit <int>
                {
                    Id               = 0,
                    Area             = "0X",
                    Address          = 1,
                    SubAddress       = 0,
                    CommunicationTag = "A1",
                    DataType         = typeof(bool)
                }
            }, true, 2, 0);
            var success = await baseMachine.GetMachineMethods <IMachineMethodData>().SetDatasAsync(
                MachineSetDataType.Address,
                new Dictionary <string, double>
            {
                {
                    "0X 1.0", 1
                }
            });

            Assert.AreEqual(success, true);
            var datas = await baseMachine.GetMachineMethods <IMachineMethodData>().GetDatasAsync(MachineGetDataType.Address);

            Assert.AreEqual(datas["0X 1.0"].PlcValue, 1);
            success = await baseMachine.GetMachineMethods <IMachineMethodData>().SetDatasAsync(
                MachineSetDataType.Address,
                new Dictionary <string, double>
            {
                {
                    "0X 1.0", 0
                }
            });

            Assert.AreEqual(success, true);
            baseMachine.Disconnect();
        }
コード例 #9
0
        public void TaskManagerInit()
        {
            _taskManager = new TaskManager(20, true);

            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)
                }
            };

            BaseMachine machine = new ModbusMachine(ModbusType.Tcp, "192.168.3.10", addresses, true, 2, 0)
            {
                Id = "1"
            };

            _taskManager.AddMachine(machine);

            var r = new Random();

            _timer = new Timer(async state =>
            {
                lock (_valueDic)
                {
                    _valueDic = 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 _taskManager.InvokeOnceAll(new TaskItemSetData(() => _valueDic, MachineSetDataType.CommunicationTag));
            }, null, 0, 5000);
        }
コード例 #10
0
 public FanucRobotModbus(string ip)
 {
     IP      = ip;
     _clinet = new ModbusMachine(ModbusType.Tcp, IP, null, true, 2, 0);
 }
コード例 #11
0
        static void Main(string[] args)
        {
            var _modbusTcpMachine = new ModbusMachine(ModbusType.Tcp, "192.168.1.172", null, true, 2, 0);

            #region DO READ
            if (false)
            {
#pragma warning disable CS0162 // 检测到无法访问的代码
                var addresses = new List <AddressUnit>();
#pragma warning restore CS0162 // 检测到无法访问的代码
                for (int i = 0; i < 100; i++)
                {
                    addresses.Add(
                        new AddressUnit
                    {
                        Id               = i.ToString(),
                        Area             = "1X",
                        Address          = 129 + i,
                        SubAddress       = 0,
                        CommunicationTag = "A" + i.ToString(),
                        DataType         = typeof(bool)
                    }
                        );
                }



                _modbusTcpMachine.GetAddresses = addresses;

                var ans = _modbusTcpMachine.GetDatas(MachineGetDataType.Address);

                foreach (var an in ans)
                {
                    if (an.Value.PlcValue != 0)
                    {
                        Console.WriteLine(an.Key);
                    }
                }
            }
            #endregion

            #region DI READ
            if (false)
            {
#pragma warning disable CS0162 // 检测到无法访问的代码
                var addresses = new List <AddressUnit>();
#pragma warning restore CS0162 // 检测到无法访问的代码
                for (int i = 0; i < 100; i++)
                {
                    addresses.Add(
                        new AddressUnit
                    {
                        Id               = i.ToString(),
                        Area             = "0X",
                        Address          = 129 + i,
                        SubAddress       = 0,
                        CommunicationTag = "A" + i.ToString(),
                        DataType         = typeof(bool)
                    }
                        );
                }



                _modbusTcpMachine.GetAddresses = addresses;

                var ans = _modbusTcpMachine.GetDatas(MachineGetDataType.Address);

                foreach (var an in ans)
                {
                    if (an.Value.PlcValue != 0)
                    {
                        Console.WriteLine(an.Key);
                    }
                }
            }
            #endregion

            #region DI WRITE
            if (true)
            {
                var dic2 = new Dictionary <string, double>()
                {
                    {
                        "0X 129", 0
                    }
                };

                var ret = _modbusTcpMachine.BaseUtility.GetUtilityMethods <IUtilityMethodWriteSingle>().SetSingleDataAsync("0X 129", dic2["0X 129"] >= 1).Result;

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

                //var dic1 = new Dictionary<string, double>()
                //{
                //    {
                //       "0X 71", 0
                //    }
                //};

                //_modbusTcpMachine.GetAddresses = addresses;
                //var ret = _modbusTcpMachine.SetDatas(MachineSetDataType.Address, dic1);
                //var ans = _modbusTcpMachine.GetDatas(MachineGetDataType.Address);
                Console.WriteLine(ret);
            }
            #endregion

            #region GO READ
            if (false)
            {
#pragma warning disable CS0162 // 检测到无法访问的代码
                var addresses = new List <AddressUnit>()
#pragma warning restore CS0162 // 检测到无法访问的代码
                {
                    new AddressUnit
                    {
                        Id               = "81",
                        Area             = "1X",
                        Address          = 81,
                        SubAddress       = 0,
                        CommunicationTag = "GO1",
                        DataType         = typeof(UInt16)
                    },
                    new AddressUnit
                    {
                        Id               = "97",
                        Area             = "1X",
                        Address          = 97,
                        SubAddress       = 0,
                        CommunicationTag = "GO2",
                        DataType         = typeof(UInt16)
                    },
                };



                _modbusTcpMachine.GetAddresses = addresses;

                var ans = _modbusTcpMachine.GetDatas(MachineGetDataType.Address);

                foreach (var an in ans)
                {
                    if (an.Value.PlcValue != 0)
                    {
                        Console.WriteLine(an.Key + ":" + an.Value.PlcValue);
                    }
                }
            }

            #endregion

            #region GI WRITE
            if (false)
            {
#pragma warning disable CS0162 // 检测到无法访问的代码
                var adr = "81";
#pragma warning restore CS0162 // 检测到无法访问的代码
                ushort data = 10;

                int iAdr;
                var ret = int.TryParse(adr, out iAdr);

                for (int i = 0; i < 16; i++)
                {
                    var    div_adr  = "0X " + (iAdr + i).ToString();
                    double div_data = data & (0x01 << i);

                    var dic = new Dictionary <string, double>()
                    {
                        {
                            div_adr, div_data
                        }
                    };

                    ret = AsyncHelper.RunSync(() =>
                                              _modbusTcpMachine.BaseUtility.GetUtilityMethods <IUtilityMethodWriteSingle>().SetSingleDataAsync(div_adr, dic[div_adr] >= 1));
                }

                Console.WriteLine("HERE");
            }

            #endregion

            #region 连续读取
            if (false)
            {
#pragma warning disable CS0162 // 检测到无法访问的代码
                CancellationTokenSource token = new CancellationTokenSource();
#pragma warning restore CS0162 // 检测到无法访问的代码
                Task.Factory.StartNew(() =>
                {
                    var _modbusTcpMachine2 = new ModbusMachine(ModbusType.Tcp, "192.168.0.11", null, true, 2, 0);

                    while (true)
                    {
                        if (true)
                        {
                            var addresses = new List <AddressUnit>();
                            for (int i = 0; i < 200; i++)
                            {
                                addresses.Add(
                                    new AddressUnit
                                {
                                    Id               = i.ToString(),
                                    Area             = "1X",
                                    Address          = 1 + i,
                                    SubAddress       = 0,
                                    CommunicationTag = "A" + i.ToString(),
                                    DataType         = typeof(bool)
                                }
                                    );
                            }

                            _modbusTcpMachine2.GetAddresses = addresses;

                            var ans = _modbusTcpMachine2.GetDatas(MachineGetDataType.Address) ?? new Dictionary <string, ReturnUnit>();

                            foreach (var an in ans)
                            {
                                if (an.Value.PlcValue != 0)
                                {
                                    Console.WriteLine(an.Key);
                                }
                            }
                            Console.WriteLine(DateTime.Now);
                        }
                    }
#pragma warning disable CS0162 // 检测到无法访问的代码
                    _modbusTcpMachine2.Disconnect();
#pragma warning restore CS0162 // 检测到无法访问的代码
                }, token.Token);
            }

            #endregion

            _modbusTcpMachine.Disconnect();
            Console.ReadKey();
        }
コード例 #12
0
ファイル: UnitTest1.cs プロジェクト: JC-85/Modbus.Net.Simple
        public UnitTest1()
        {
            _addressUnits = new List <AddressUnit <int> >
            {
                new AddressUnit <int>
                {
                    Id         = 1,
                    Area       = "3X",
                    Address    = 1,
                    SubAddress = 0,
                    DataType   = typeof(bool)
                },
                new AddressUnit <int>
                {
                    Id         = 2,
                    Area       = "3X",
                    Address    = 1,
                    SubAddress = 1,
                    DataType   = typeof(bool)
                },
                new AddressUnit <int>
                {
                    Id         = 3,
                    Area       = "3X",
                    Address    = 1,
                    SubAddress = 2,
                    DataType   = typeof(bool)
                },
                new AddressUnit <int>
                {
                    Id         = 4,
                    Area       = "3X",
                    Address    = 2,
                    SubAddress = 0,
                    DataType   = typeof(byte)
                },
                new AddressUnit <int>
                {
                    Id         = 5,
                    Area       = "3X",
                    Address    = 2,
                    SubAddress = 8,
                    DataType   = typeof(byte)
                },
                new AddressUnit <int>
                {
                    Id         = 6,
                    Area       = "3X",
                    Address    = 3,
                    SubAddress = 0,
                    DataType   = typeof(ushort)
                },
                new AddressUnit <int>
                {
                    Id         = 7,
                    Area       = "3X",
                    Address    = 4,
                    SubAddress = 0,
                    DataType   = typeof(ushort)
                },
                new AddressUnit <int>
                {
                    Id         = 8,
                    Area       = "3X",
                    Address    = 6,
                    SubAddress = 0,
                    DataType   = typeof(ushort)
                },
                new AddressUnit <int>
                {
                    Id         = 9,
                    Area       = "3X",
                    Address    = 9,
                    SubAddress = 0,
                    DataType   = typeof(ushort)
                },
                new AddressUnit <int>
                {
                    Id         = 10,
                    Area       = "3X",
                    Address    = 10,
                    SubAddress = 0,
                    DataType   = typeof(ushort)
                },
                new AddressUnit <int>
                {
                    Id         = 11,
                    Area       = "3X",
                    Address    = 100,
                    SubAddress = 0,
                    DataType   = typeof(ushort)
                },
                new AddressUnit <int>
                {
                    Id         = 12,
                    Area       = "4X",
                    Address    = 1,
                    SubAddress = 0,
                    DataType   = typeof(uint)
                },
                new AddressUnit <int>
                {
                    Id         = 13,
                    Area       = "4X",
                    Address    = 4,
                    SubAddress = 0,
                    DataType   = typeof(ushort)
                },
            };

            _baseMachine = new ModbusMachine <int, int>(ModbusTransportType.Tcp, LOCAL_ADDR_1, _addressUnits, true, 2, 0)
            {
                Id          = 1,
                ProjectName = "Project 1",
                MachineName = "Test 1"
            };

            /*
             * _taskManager = new TaskManager<int>(10, true);
             *
             * _taskManager.AddMachine(_baseMachine);
             */
        }