Esempio n. 1
0
        public Result Connect(Commor commor)
        {
            var omronFinsNet   = new OmronFinsNet();
            var ethernetCommor = (EthernetCommor)commor.Communicator;

            try
            {
                omronFinsNet.ConnectTimeOut           = 2000;
                omronFinsNet.IpAddress                = ethernetCommor.IP;
                omronFinsNet.Port                     = ethernetCommor.Port;
                omronFinsNet.SA1                      = NetHelper.GetIpLastValue(NetHelper.GetLocalIpByRegex("192.168.1.*"));;
                omronFinsNet.DA2                      = 0;
                omronFinsNet.ByteTransform.DataFormat = (HslCommunication.Core.DataFormat)Enum.Parse(typeof(HslCommunication.Core.DataFormat), "CDAB");

                OperateResult connect = omronFinsNet.ConnectServer();
                if (connect.IsSuccess)
                {
                    commor.Connector = omronFinsNet;
                    return(Result.Success);
                }
                else
                {
                    return(new Result(string.Format("连接{0}失败({1} :{2})", ethernetCommor.Name, ethernetCommor.IP, ethernetCommor.Port)));
                }
            }
            catch (Exception ex)
            {
                return(new Result(ex.Message));
            }
        }
Esempio n. 2
0
        public void ReadExample( )
        {
            #region ReadExample1


            OmronFinsNet omronFinsNet = new OmronFinsNet("192.168.1.110", 6000);
            omronFinsNet.SA1 = 10;
            omronFinsNet.DA1 = 110;

            // 此处以D寄存器作为示例
            bool   D100_7      = omronFinsNet.ReadBool("D100.7").Content;    // 读取D100.7是否通断,注意D100.0等同于D100
            short  short_D100  = omronFinsNet.ReadInt16("D100").Content;     // 读取D100组成的字
            ushort ushort_D100 = omronFinsNet.ReadUInt16("D100").Content;    // 读取D100组成的无符号的值
            int    int_D100    = omronFinsNet.ReadInt32("D100").Content;     // 读取D100-D101组成的有符号的数据
            uint   uint_D100   = omronFinsNet.ReadUInt32("D100").Content;    // 读取D100-D101组成的无符号的值
            float  float_D100  = omronFinsNet.ReadFloat("D100").Content;     // 读取D100-D101组成的单精度值
            long   long_D100   = omronFinsNet.ReadInt64("D100").Content;     // 读取D100-D103组成的大数据值
            ulong  ulong_D100  = omronFinsNet.ReadUInt64("D100").Content;    // 读取D100-D103组成的无符号大数据
            double double_D100 = omronFinsNet.ReadDouble("D100").Content;    // 读取D100-D103组成的双精度值
            string str_D100    = omronFinsNet.ReadString("D100", 5).Content; // 读取D100-D104组成的ASCII字符串数据

            // 读取数组
            short[]  short_D1000_array  = omronFinsNet.ReadInt16("D1000", 10).Content;         // 读取D1000的short值
            ushort[] ushort_D1000_array = omronFinsNet.ReadUInt16("D1000", 10).Content;        // 读取D1000的ushort值
            int[]    int_D1000_array    = omronFinsNet.ReadInt32("D1000", 10).Content;         // 读取D1000-D1001组成的int数据
            uint[]   uint_D1000_array   = omronFinsNet.ReadUInt32("D1000", 10).Content;        // 读取D1000-D1001组成的uint数据
            float[]  float_D1000_array  = omronFinsNet.ReadFloat("D1000", 10).Content;         // 读取D1000-D1001组成的float数据
            long[]   long_D1000_array   = omronFinsNet.ReadInt64("D1000", 10).Content;         // 读取D1000-D1003组成的long数据
            ulong[]  ulong_D1000_array  = omronFinsNet.ReadUInt64("D1000", 10).Content;        // 读取D1000-D1003组成的long数据
            double[] double_D1000_array = omronFinsNet.ReadDouble("D1000", 10).Content;        // 读取D1000-D1003组成的double数据

            #endregion
        }
Esempio n. 3
0
        public void ReadExample2( )
        {
            #region ReadExample2

            OmronFinsNet omronFinsNet = new OmronFinsNet("192.168.1.110", 6000);
            omronFinsNet.SA1 = 10;
            omronFinsNet.DA1 = 110;

            OperateResult <byte[]> read = omronFinsNet.Read("D100", 4);
            if (read.IsSuccess)
            {
                float temp  = omronFinsNet.ByteTransform.TransInt16(read.Content, 0) / 10f;
                float press = omronFinsNet.ByteTransform.TransInt16(read.Content, 2) / 100f;
                int   count = omronFinsNet.ByteTransform.TransInt32(read.Content, 2);

                // do something
            }
            else
            {
                // failed
            }


            #endregion
        }
Esempio n. 4
0
        public void WriteExample( )
        {
            #region WriteExample1

            OmronFinsNet omronFinsNet = new OmronFinsNet("192.168.1.110", 6000);
            omronFinsNet.SA1 = 10;
            omronFinsNet.DA1 = 110;

            // 此处以D寄存器作为示例
            omronFinsNet.Write("D1000", (short)1234);                  // 写入D1000  short值  ,W3C0,R3C0 效果是一样的
            omronFinsNet.Write("D1000", (ushort)45678);                // 写入D1000  ushort值
            omronFinsNet.Write("D1000", 1234566);                      // 写入D1000  int值
            omronFinsNet.Write("D1000", (uint)1234566);                // 写入D1000  uint值
            omronFinsNet.Write("D1000", 123.456f);                     // 写入D1000  float值
            omronFinsNet.Write("D1000", 123.456d);                     // 写入D1000  double值
            omronFinsNet.Write("D1000", 123456661235123534L);          // 写入D1000  long值
            omronFinsNet.Write("D1000", 523456661235123534UL);         // 写入D1000  ulong值
            omronFinsNet.Write("D1000", "K123456789");                 // 写入D1000  string值

            // 读取数组
            omronFinsNet.Write("D1000", new short[] { 123, 3566, -123 });                                    // 写入D1000  short值  ,W3C0,R3C0 效果是一样的
            omronFinsNet.Write("D1000", new ushort[] { 12242, 42321, 12323 });                               // 写入D1000  ushort值
            omronFinsNet.Write("D1000", new int[] { 1234312312, 12312312, -1237213 });                       // 写入D1000  int值
            omronFinsNet.Write("D1000", new uint[] { 523123212, 213, 13123 });                               // 写入D1000  uint值
            omronFinsNet.Write("D1000", new float[] { 123.456f, 35.3f, -675.2f });                           // 写入D1000  float值
            omronFinsNet.Write("D1000", new double[] { 12343.542312d, 213123.123d, -231232.53432d });        // 写入D1000  double值
            omronFinsNet.Write("D1000", new long[] { 1231231242312, 34312312323214, -1283862312631823 });    // 写入D1000  long值
            omronFinsNet.Write("D1000", new ulong[] { 1231231242312, 34312312323214, 9731283862312631823 }); // 写入D1000  ulong值

            #endregion
        }
Esempio n. 5
0
        public void ConnectToPlc()
        {
            string[] ipArray;
            byte[]   values;
            deviceDriver = new OmronFinsNet(_device.Ip, _device.Port)
            {
                ConnectTimeOut = 2000
            };
            ipArray          = _device.Ip.Split('.');
            values           = System.BitConverter.GetBytes(int.Parse(ipArray[ipArray.Length - 1]));
            deviceDriver.SA1 = values[0]; // PC网络号,PC的IP地址的最后一个数.假如你的电脑的Ip地址为192.168.0.13,那么这个值就是13
            ipArray          = _device.Ip.Split('.');
            values           = System.BitConverter.GetBytes(int.Parse(ipArray[ipArray.Length - 1]));
            deviceDriver.DA1 = values[0]; // 0x10 PLC网络号,PLC的IP地址的最后一个数.假如你的PLC的Ip地址为192.168.0.10,那么这个值就是10
            //omronTcpNet.SA1 = 0x12; // PC网络号,PC的IP地址的最后一个数
            //omronTcpNet.DA1 = 0x10; // PLC网络号,PLC的IP地址的最后一个数
            deviceDriver.DA2 = 0x00;                // PLC单元号,通常为0
            deviceDriver.ConnectServer();
            deviceDriver.SetPersistentConnection(); // 设置长连接
            OperateResult res = deviceDriver.ConnectServer();

            if (res.IsSuccess)
            {
                _log.WriteLog($"{_device.Name}{_device.Ip}连接成功");
            }
            else
            {
                _log.WriteLog($"{_device.Name}{_device.Ip}连接失败");
            }
            _device.IsConnected = res.IsSuccess;
        }
        public override bool LoadFromConfig(XmlNode node)
        {
            var    xmlElement = (XmlElement)node;
            string _localIp   = xmlElement.GetAttribute("LocalIPAddress");

            string _PLCIp = xmlElement.GetAttribute("PLCIPAddress");

            PLC = new OmronFinsNet
            {
                IpAddress = _PLCIp,
            };

            if (xmlElement.HasAttribute("Port"))
            {
                PLC.Port = int.TryParse(xmlElement.GetAttribute("Port"), out int port) ? port : 44818;
            }
            else
            {
                PLC.Port = 44818;
            }

            PLC.SA1 = Convert.ToByte(_localIp.Split('.')[3]);

            return(base.LoadFromConfig(xmlElement));
        }
Esempio n. 7
0
 /// <summary>
 /// 初始化连接参数
 /// </summary>
 /// <param name="ip"></param>
 /// <param name="port"></param>
 /// <param name="sa1"></param>
 /// <param name="da1"></param>
 /// <param name="da2"></param>
 public ReadValue(string ip, UInt16 port, byte sa1, byte da1, byte da2)
 {
     omronFinsNet     = new OmronFinsNet(ip, port);
     omronFinsNet.SA1 = sa1; // PC网络号,PC的IP地址的最后一个数
     omronFinsNet.DA1 = da1; // PLC网络号,PLC的IP地址的最后一个数
     omronFinsNet.DA2 = da2; // PLC单元号,通常为0
 }
Esempio n. 8
0
        public bool Connect(out string msg)
        {
            msg = "";
            if (!Net.IsPingSuccess(this.IP))
            {
                msg = "无法连接到 " + this.IP;
                return(false);
            }

            if (omron_net == null)
            {
                omron_net = new OmronFinsNet(this.IP, this.Port);
                var ips = this.IP.Split('.');
                omron_net.SA1 = Net.GetIpLastValue(Net.GetLocalIpByRegex(string.Format("{0}.{1}.{2}.*", ips[0], ips[1], ips[2]))); // PC网络号,PC的IP地址的最后一个数
                omron_net.DA1 = Net.GetIpLastValue(this.IP);                                                                       // PLC网络号,PLC的IP地址的最后一个数0
                omron_net.DA2 = 0x00;                                                                                              // PLC单元号,通常为0

                omron_net.ReceiveTimeOut = 1000;
                omron_net.ConnectTimeOut = 1000;
                OperateResult result = omron_net.ConnectServer();
                System.Diagnostics.Debug.WriteLine("连接欧姆龙 :" + result.IsSuccess);
                if (!result.IsSuccess)
                {
                    msg = result.Message;
                    this.IsConnected = false;
                    return(false);
                }
            }
            this.IsConnected = true;
            return(true);
        }
Esempio n. 9
0
 public FormOmron( )
 {
     InitializeComponent( );
     omronFinsNet = new OmronFinsNet( );
     omronFinsNet.ConnectTimeOut = 2000;
     // omronFinsNet.LogNet = new HslCommunication.LogNet.LogNetSingle( "omron.log.txt" );
 }
Esempio n. 10
0
        public void WriteExample2( )
        {
            #region WriteExample2

            OmronFinsNet omronFinsNet = new OmronFinsNet("192.168.1.110", 6000);
            omronFinsNet.SA1 = 10;
            omronFinsNet.DA1 = 110;

            // 拼凑数据,这样的话,一次通讯就完成数据的全部写入
            byte[] buffer = new byte[8];
            omronFinsNet.ByteTransform.TransByte((short)1234).CopyTo(buffer, 0);
            omronFinsNet.ByteTransform.TransByte((short)2100).CopyTo(buffer, 2);
            omronFinsNet.ByteTransform.TransByte(12353423).CopyTo(buffer, 4);

            OperateResult write = omronFinsNet.Write("D100", buffer);
            if (write.IsSuccess)
            {
                // success
            }
            else
            {
                // failed
            }

            // 上面的功能等同于三个数据分别写入,下面的性能更差点,因为进行了三次通讯,而且每次还要判断是否写入成功
            //omronFinsNet.Write( "D100", (short)1234 );
            //omronFinsNet.Write( "D100", (short)2100 );
            //omronFinsNet.Write( "D100", 12353423 );

            #endregion
        }
Esempio n. 11
0
 public void ClosePLC()
 {
     if (_OmronFinsNet != null)
     {
         _OmronFinsNet.ConnectClose();
         _OmronFinsNet = null;
         PLCIsopen     = false;
     }
 }
Esempio n. 12
0
 public bool DisConnect(out string msg)
 {
     msg = "";
     if (omron_net != null)
     {
         omron_net.ConnectClose();
         omron_net = null;
     }
     this.IsConnected = false;
     return(true);
 }
Esempio n. 13
0
        public void ClassTest( )
        {
            #region Usage

            // 实例化对象,指定PLC的ip地址和端口号
            OmronFinsNet omronFinsNet = new OmronFinsNet("192.168.1.110", 6000);
            omronFinsNet.SA1 = 10;
            omronFinsNet.DA1 = 110;
            // 举例读取D100的值
            short D100 = omronFinsNet.ReadInt16("D100").Content;

            #endregion
        }
Esempio n. 14
0
        public void ReadBool( )
        {
            #region ReadBool

            OmronFinsNet omronFinsNet = new OmronFinsNet("192.168.1.110", 6000);
            omronFinsNet.SA1 = 10;
            omronFinsNet.DA1 = 110;

            // 以下是简单的读取,没有仔细校验的方式
            bool   X1    = omronFinsNet.ReadBool("D100.1").Content;
            bool[] X1_10 = omronFinsNet.ReadBool("D100.1", 10).Content;

            // 如果需要判断是否读取成功
            OperateResult <bool> R_X1 = omronFinsNet.ReadBool("D100.1");
            if (R_X1.IsSuccess)
            {
                // success
                bool value = R_X1.Content;
            }
            else
            {
                // failed
            }


            OperateResult <bool[]> R_X1_10 = omronFinsNet.ReadBool("D100.1", 10);
            if (R_X1_10.IsSuccess)
            {
                // success
                bool x1 = R_X1_10.Content[0];
                bool x2 = R_X1_10.Content[1];
                bool x3 = R_X1_10.Content[2];
                bool x4 = R_X1_10.Content[3];
                bool x5 = R_X1_10.Content[4];
                bool x6 = R_X1_10.Content[5];
                bool x7 = R_X1_10.Content[6];
                bool x8 = R_X1_10.Content[7];
                bool x9 = R_X1_10.Content[8];
                bool xa = R_X1_10.Content[9];
            }
            else
            {
                // failed
            }


            #endregion
        }
Esempio n. 15
0
 public bool Connect()
 {
     if (omr != null)
     {
         omr.ConnectClose();
         omr = null;
     }
     omr = new OmronFinsNet(Properties.Settings.Default.PLC_IP, Properties.Settings.Default.PLC_PORT)
     {
         SA1 = 0,
         DA1 = 0
     };
     Task.Factory.StartNew(() =>
     {
         while (true)
         {
             var op      = omr.ConnectServer();
             IsConnected = op.IsSuccess;
             if (!op.IsSuccess)
             {
                 Events.Publish(new MsgItem {
                     Time = DateTime.Now, Level = "E", Value = op.Message
                 });
             }
             if (IsConnected)
             {
                 foreach (var v in AM.alarms)
                 {
                     var b = omr.ReadBool(v.Address);
                     if (b.IsSuccess)
                     {
                         if (v.Value != b.Content)
                         {
                             v.Value = b.Content;
                             Events.Publish(v);
                         }
                     }
                 }
                 omr.ConnectClose();
             }
             System.Threading.Thread.Sleep(10);
         }
     });
     return(IsConnected);
 }
Esempio n. 16
0
        /// <summary>
        /// 默认的构造方法
        /// </summary>
        /// <param name="dtu"></param>
        /// <param name="element"></param>
        public DeviceOmron(XElement element)
        {
            NodeOmron nodeOmron = new NodeOmron( );

            nodeOmron.LoadByXmlElement(element);

            LoadRequest(element);

            omronFinsNet                = new OmronFinsNet(nodeOmron.IpAddress, nodeOmron.Port);
            omronFinsNet.DA1            = nodeOmron.DA1;
            omronFinsNet.DA2            = nodeOmron.DA2;
            omronFinsNet.SA1            = nodeOmron.SA1;
            omronFinsNet.ConnectTimeOut = nodeOmron.ConnectTimeOut;

            ByteTransform = omronFinsNet.ByteTransform;
            UniqueId      = omronFinsNet.ConnectionId;

            TypeName = "欧姆龙设备";
        }
Esempio n. 17
0
        public override void DeviceConn(OmronFinsNetConfig config)
        {
            OmronFinsNet omronFinsNet = new OmronFinsNet();

            omronFinsNet.ConnectTimeOut             = config.ConnectTimeOut;
            omronFinsNet.IpAddress                  = config.IP;
            omronFinsNet.Port                       = config.Port;
            omronFinsNet.SA1                        = config.SA1;
            omronFinsNet.SA2                        = config.SA2;
            omronFinsNet.ByteTransform.DataFormat   = (HslCommunication.Core.DataFormat)config.ByteTransformDataFormat;
            omronFinsNet.IsChangeSA1AfterReadFailed = config.IsChangeSA1AfterReadFailed;
            OperateResult connect = omronFinsNet.ConnectServer();

            NetworkDevice = omronFinsNet;
            if (!connect.IsSuccess)
            {
                throw new Exception("Connect Failed");
            }
        }
Esempio n. 18
0
        public bool OpenPLC(string IPAddress, Byte sa1, Byte da1, Byte da2)
        {
            try
            {
                _OmronFinsNet     = new OmronFinsNet(IPAddress, 9600);
                _OmronFinsNet.SA1 = sa1;
                _OmronFinsNet.DA1 = da1;
                _OmronFinsNet.DA2 = da2;

                //_OmronFinsNet.ConnectTimeOut = 5000;
                //_SiementsTcpNet.Port = 102;
                OperateResult result = _OmronFinsNet.ConnectServer();

                //MessageBox.Show((result.IsSuccess).ToString());

                if (result.IsSuccess)
                {
                    //AtuoRun = true;
                    //MessageBox.Show("连接PLC成功");

                    //NetLog.WriteTextLog("连接PLC成功");
                    PLCIsopen = result.IsSuccess;
                    return(true);
                }
                else
                {
                    //MessageBox.Show("连接PLC失败");

                    //NetLog.WriteTextLog("连接PLC失败");
                    PLCIsopen = result.IsSuccess;
                    return(false);
                }
            }
            catch (Exception ex)
            {
                PLCIsopen = false;
                //MessageBox.Show(ex.Message);

                //NetLog.WriteTextLog("连接PLC错误"+ex.Message);
                return(false);
            }
        }
Esempio n. 19
0
        public MainWindow()
        {
            InitializeComponent();
            #region 启动时串口最大化显示
            this.WindowState = WindowState.Maximized;
            Rect rc = SystemParameters.WorkArea; //获取工作区大小
            //this.Topmost = true;
            this.Left   = 0;                     //设置位置
            this.Top    = 0;
            this.Width  = rc.Width;
            this.Height = rc.Height;
            #endregion

            LoadJsonData();
            Init();

            //plc = new SiemensS7Net(SiemensPLCS.S1200, config.IpAddress)
            //{
            //    ConnectTimeOut = 5000
            //};

            plc = new OmronFinsNet(config.IpAddress, config.IpPort)
            {
                SA1            = 10,
                ConnectTimeOut = 5000
            };


            connect = plc.ConnectServer();

            #region PLC连接定时器
            //timer = new System.Windows.Threading.DispatcherTimer();
            //timer.Tick += new EventHandler(ThreadCheck);
            //timer.Interval = new TimeSpan(0, 0, 0, 5);
            //timer.Start();
            #endregion
        }
Esempio n. 20
0
        public void WriteBool( )
        {
            #region WriteBool

            OmronFinsNet omronFinsNet = new OmronFinsNet("192.168.1.110", 6000);
            omronFinsNet.SA1 = 10;
            omronFinsNet.DA1 = 110;

            // 以下是简单的写入,没有仔细校验的方式
            omronFinsNet.Write("D100.1", true);
            omronFinsNet.Write("D100.1", new bool[] { true, false, true, false });

            // 如果需要判断是否读取成功
            OperateResult write1 = omronFinsNet.Write("D100.1", true);
            if (write1.IsSuccess)
            {
                // success
            }
            else
            {
                // failed
            }


            OperateResult write2 = omronFinsNet.Write("D100.1", new bool[] { true, false, true, false });
            if (write2.IsSuccess)
            {
                // success
            }
            else
            {
                // failed
            }


            #endregion
        }
Esempio n. 21
0
        public void ClassTest2( )
        {
            #region Usage2

            // 实例化对象,指定PLC的ip地址和端口号
            OmronFinsNet omronFinsNet = new OmronFinsNet("192.168.1.110", 6000);
            omronFinsNet.SA1 = 10;
            omronFinsNet.DA1 = 110;

            // 连接对象
            OperateResult connect = omronFinsNet.ConnectServer( );
            if (!connect.IsSuccess)
            {
                Console.WriteLine("connect failed:" + connect.Message);
                return;
            }

            // 举例读取D100的值
            short D100 = omronFinsNet.ReadInt16("D100").Content;

            omronFinsNet.ConnectClose( );

            #endregion
        }
Esempio n. 22
0
 public FormOmron( )
 {
     InitializeComponent( );
     omronFinsNet = new OmronFinsNet( );
 }