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)); } }
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 }
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 }
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 }
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)); }
/// <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 }
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); }
public FormOmron( ) { InitializeComponent( ); omronFinsNet = new OmronFinsNet( ); omronFinsNet.ConnectTimeOut = 2000; // omronFinsNet.LogNet = new HslCommunication.LogNet.LogNetSingle( "omron.log.txt" ); }
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 }
public void ClosePLC() { if (_OmronFinsNet != null) { _OmronFinsNet.ConnectClose(); _OmronFinsNet = null; PLCIsopen = false; } }
public bool DisConnect(out string msg) { msg = ""; if (omron_net != null) { omron_net.ConnectClose(); omron_net = null; } this.IsConnected = false; return(true); }
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 }
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 }
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); }
/// <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 = "欧姆龙设备"; }
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"); } }
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); } }
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 }
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 }
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 }
public FormOmron( ) { InitializeComponent( ); omronFinsNet = new OmronFinsNet( ); }