Пример #1
0
 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);
 }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }