public bool SetInfo(string address, ushort val, out string msg) { msg = string.Empty; if (this.Company == PlcCompany.OMRON.ToString() && (this.Model == "SYSMAC CP1H" || this.Model == "NX102")) { TcpConnect(out msg); HslCommunice533.OperateResult result = omron_net.Write(address, val); TcpDisConnect(out msg); if (result.IsSuccess) { return(true); } msg = result.Message; } else if (this.Company == PlcCompany.OMRON.ToString() && this.Model == "NX1P2") { try { // string send = "80000200-11-0000-FE-0000-0101-82-03E8-0000-02"; string send = string.Format("80000200-{0:X2}-0000-{1:X2}-0000-0102-82-{2:X4}-000001-{3:X4}", TengDa.Net.GetIpLastValue(this.IP), TengDa.Net.GetIpLastValue(Net.GetLocalIpByRegex("192.168.*")), Convert.ToUInt32(address.Replace("D", "")), val); byte[] data = _Convert.HexStrTobyte(send.Replace("-", "")); Socket.SendTo(data, point); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint remote = (EndPoint)sender; byte[] receiveData = new byte[1024]; int len = Socket.ReceiveFrom(receiveData, ref remote); string recv = BitConverter.ToString(receiveData, 0, len); string[] recvs = recv.Split('-'); var results = new List <ushort>(); if (recvs[12] == "00") { return(true); } msg = "写入出现错误"; } catch (Exception ex) { msg = ex.Message; } } if (this.Company == "MCGS" && this.Model == "TPC1061TI(Hi)") { TcpConnect(out msg); HslCommunice533.OperateResult result = busTcpClient.Write(address, val); TcpDisConnect(out msg); if (result.IsSuccess) { LogHelper.WriteInfo(string.Format("{0} 成功写入数据 {1}:{2}", this.Name, address, val)); return(true); } msg = result.Message; } return(false); }
public bool TcpConnect(out string msg) { msg = string.Empty; try { if (this.Company == PlcCompany.Mitsubishi.ToString()) { //初始化 melsec_net.PLCIpAddress = System.Net.IPAddress.Parse(this.IP); // PLC的IP地址 melsec_net.PortRead = Port; // 端口 melsec_net.PortWrite = 6001; // 写入端口,最好和读取分开 melsec_net.NetworkNumber = 0; // 网络号 melsec_net.NetworkStationNumber = 0; // 网络站号 melsec_net.ConnectTimeout = 500; // 连接超时时间 // 如果需要长连接,就取消下面这行代码的注释,对于数据读写的代码,没有影响 melsec_net.ConnectServer(); // 切换长连接,这行代码可以放在其他任何地方 IsAlive = true; } else if (this.Company == PlcCompany.Siemens.ToString()) { siemensS7Net = new HslCommunice533.Profinet.Siemens.SiemensS7Net(HslCommunice533.Profinet.Siemens.SiemensPLCS.S1200); siemensS7Net.IpAddress = this.IP; // PLC的IP地址 //siemens_net.PortRead = Port; // 端口 //siemens_net.PortWrite = 102; // 写入端口,最好和读取分开 //siemens_net.ConnectTimeout = 500; // 连接超时时间 siemensS7Net.ConnectServer(); IsAlive = true; } else if (this.Company == PlcCompany.OMRON.ToString() && (this.Model == "SYSMAC CP1H" || this.Model == "NX102")) { if (omron_net == null) { omron_net = new HslCommunice533.Profinet.Omron.OmronFinsNet(this.IP, this.Port); var ips = this.IP.Split('.'); omron_net.SA1 = TengDa.Net.GetIpLastValue(Net.GetLocalIpByRegex(string.Format("{0}.{1}.{2}.*", ips[0], ips[1], ips[2]))); // PC网络号,PC的IP地址的最后一个数 omron_net.DA1 = TengDa.Net.GetIpLastValue(this.IP); // PLC网络号,PLC的IP地址的最后一个数0 omron_net.DA2 = 0x00; // PLC单元号,通常为0 omron_net.ReceiveTimeOut = 1000; omron_net.ConnectTimeOut = 1000; HslCommunice533.OperateResult result = omron_net.ConnectServer(); if (!result.IsSuccess) { msg = result.Message; IsAlive = false; return(false); } } IsAlive = true; } else if (this.Company == "MCGS" && this.Model == "TPC1061TI(Hi)") { if (busTcpClient == null) { busTcpClient?.ConnectClose(); busTcpClient = new HslCommunice533.ModBus.ModbusTcpNet(this.IP, this.Port, 1); busTcpClient.AddressStartWithZero = true; busTcpClient.IsStringReverse = false; HslCommunice533.OperateResult result = busTcpClient.ConnectServer(); if (!result.IsSuccess) { msg = result.Message; IsAlive = false; return(false); } } IsAlive = true; } else if (this.Company == PlcCompany.OMRON.ToString() && this.Model == "NX1P2") { point = new IPEndPoint(IPAddress.Parse(this.IP), this.Port); IsAlive = true; } else if (!Socket.Connected) { Socket.Connect(IpAddress, Port); IsAlive = true; } } catch (Exception ex) { msg = ex.Message; IsAlive = false; return(false); } return(true); }
public bool GetInfo(bool checkPingSuccess, string address, ushort length, out ushort[] output, out string msg) { output = new ushort[] { }; msg = string.Empty; if (checkPingSuccess) { if (!IsPingSuccess) { IsAlive = false; msg = string.Format("无法连接到【{0}】,IP:{1}", this.Name, this.IP); return(false); } } if (this.Company == PlcCompany.OMRON.ToString() && (this.Model == "SYSMAC CP1H" || this.Model == "NX102")) { TcpConnect(out msg); HslCommunice533.OperateResult <ushort[]> result = omron_net.ReadUInt16(address, length); TcpDisConnect(out msg); if (result.IsSuccess) { output = result.Content; return(true); } msg = this.Name + "获取数据出现异常 " + result.Message; } else if (this.Company == PlcCompany.OMRON.ToString() && this.Model == "NX1P2") { try { // string send = "80000200-11-0000-FE-0000-0101-82-03E8-0000-02"; string send = string.Format("80000200-{0:X2}-0000-{1:X2}-0000-0101-82-{2:X4}-0000-{3:X2}", TengDa.Net.GetIpLastValue(this.IP), TengDa.Net.GetIpLastValue(Net.GetLocalIpByRegex("192.168.*")), Convert.ToUInt32(address.Replace("D", "")), length); byte[] data = _Convert.HexStrTobyte(send.Replace("-", "")); Socket.SendTo(data, point); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint remote = (EndPoint)sender; byte[] receiveData = new byte[1024]; int len = Socket.ReceiveFrom(receiveData, ref remote); string recv = BitConverter.ToString(receiveData, 0, len); string[] recvs = recv.Split('-'); var results = new List <ushort>(); if (recvs[12] == "00") { for (int n = 0; n < length; n++) { results.Add(Convert.ToUInt16(recvs[14 + 2 * n] + recvs[15 + 2 * n], 16)); } output = results.ToArray(); return(true); } msg = "读取数据出现错误"; } catch (Exception ex) { msg = ex.ToString(); } } else if (this.Company == "MCGS" && this.Model == "TPC1061TI(Hi)") { TcpConnect(out msg); HslCommunice533.OperateResult <ushort[]> result = busTcpClient.ReadUInt16(address, length); TcpDisConnect(out msg); if (result.IsSuccess) { output = result.Content; return(true); } msg = this.Name + "获取数据出现异常 " + result.Message; } return(false); }
public bool GetInfo(bool checkPingSuccess, PlcCompany plcCompany, bool isRead, string address, ushort value, out ushort output, out string msg) { output = 0; msg = string.Empty; if (checkPingSuccess) { if (!IsPingSuccess) { IsAlive = false; msg = string.Format("无法连接到【{0}】,IP:{1}", this.Name, this.IP); return(false); } } try { if (plcCompany == PlcCompany.Mitsubishi) { if (isRead)//读 { OperateResult <ushort> result = melsec_net.ReadUShortFromPLC(address); if (result.IsSuccess) { output = result.Content; IsAlive = true; return(true); } else { msg = string.Format("从{0}中读取数据出现错误,代码:{1}", address, result.ErrorCode); IsAlive = false; return(false); } } else//写 { OperateResult result = melsec_net.WriteIntoPLC(address, value); if (result.IsSuccess) { IsAlive = true; return(true); } else { msg = string.Format("{0} 中写入 {1} 出现错误,代码:{2}", address, value, result.ErrorCode); IsAlive = false; return(false); } } } else if (plcCompany == PlcCompany.Siemens) { if (isRead)//读 { HslCommunice533.OperateResult <ushort> result = siemensS7Net.ReadUInt16(address); if (result.IsSuccess) { output = result.Content; IsAlive = true; return(true); } else { msg = string.Format("从{0}中读取数据出现错误,代码:{1}", address, result.ErrorCode); IsAlive = false; return(false); } } else//写 { HslCommunice533.OperateResult result = siemensS7Net.Write(address, value); if (result.IsSuccess) { IsAlive = true; return(true); } else { msg = string.Format("{0} 中写入 {1} 出现错误,代码:{2}", address, value, result.ErrorCode); IsAlive = false; return(false); } } } } catch (Exception ex) { msg = string.Format("和{0}通信出现异常!原因:{1}", Name, ex.Message); } IsAlive = false; return(false); }