示例#1
0
        private bool ConnectPLCUdp(ref string reStr)
        {
            try
            {
                lock (lockObj)
                {
                    if (string.IsNullOrEmpty(this.connStr))
                    {
                        reStr = "PLC通信地址为空!";
                        return(false);
                    }
                    //this.connStr = plcAddr;
                    string[] splitStr = new string[] { ",", ";", ":", "-", "|" };
                    string[] strArray = this.connStr.Split(splitStr, StringSplitOptions.RemoveEmptyEntries);
                    if (strArray.Count() < 2)
                    {
                        isConnected = false;
                    }
                    string remoteIP   = strArray[0];
                    int    remotePort = int.Parse(strArray[1]);
                    if (udpClient == null)
                    {
                        udpClient = new UdpClient(9898);
                    }
                    this.udpRemotePoint = new IPEndPoint(IPAddress.Parse(remoteIP), remotePort);

                    UdpState udpReceiveState = new UdpState();
                    udpReceiveState.ipEndPoint = this.udpRemotePoint;
                    udpReceiveState.udpClient  = udpClient;

                    udpClient.BeginReceive(UdpRecvCallback, udpReceiveState);
                    //if(udpRecvThread == null)
                    //{
                    //    udpRecvThread = new Thread(UdpRecvProc);
                    //    udpRecvThread.IsBackground = true;
                    //    exitUdpRecv = false;

                    //}
                    //if (this.udpRecvThread.ThreadState == (ThreadState.Background | ThreadState.Unstarted))
                    //{
                    //    udpRecvThread.Start();
                    //}
                    //pauseUdpRecv = false;
                    reStr             = "PLC连接成功";
                    isConnected       = true;
                    this.netFailTimes = 0;  //读写失败次数清零
                    return(true);
                }
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }
        }
示例#2
0
        private void UdpRecvCallback(IAsyncResult iar)
        {
            UdpState udpState = iar.AsyncState as UdpState;

            if (iar.IsCompleted)
            {
                Byte[] recBytes = udpState.udpClient.EndReceive(iar, ref udpState.ipEndPoint);
                if (recBytes != null && recBytes.Count() > 0)
                {
                    OnRecComplete(recBytes);
                }
            }
            udpClient.BeginReceive(UdpRecvCallback, udpState);
        }
示例#3
0
        public bool  Connect(string ip, int port, ref string reStr)
        {
            try
            {
                lock (lockObj)
                {
                    if (string.IsNullOrEmpty(ip))
                    {
                        reStr = "PLC通信地址为空!";
                        return(false);
                    }

                    if (this.udpClientEnabled == false)
                    {
                        this.udpClientEnabled = true;
                        this.LocalPort        = GetLocalPort();
                        udpClient             = new UdpClient(this.LocalPort);
                        currUsePort.Add(this.LocalPort);
                        this.udpRemotePoint = new IPEndPoint(IPAddress.Parse(ip), port);

                        udpReceiveState            = new UdpState();
                        udpReceiveState.ipEndPoint = this.udpRemotePoint;
                        udpReceiveState.udpClient  = udpClient;
                    }

                    this.ServerIP   = ip;
                    this.ServerPort = port;


                    udpClient.BeginReceive(UdpRecvCallback, udpReceiveState);

                    reStr           = "PLC连接成功";
                    this.isConected = true;

                    return(true);
                }
            }
            catch (Exception ex)
            {
                reStr           = ex.ToString();
                this.isConected = false;

                this.udpClientEnabled = false;
                currUsePort.Remove(this.LocalPort);

                return(false);
            }
        }
示例#4
0
 private void UdpRecvCallback(IAsyncResult iar)
 {
     try
     {
         UdpState udpState = iar.AsyncState as UdpState;
         if (iar.IsCompleted)
         {
             Byte[] recBytes = udpState.udpClient.EndReceive(iar, ref udpState.ipEndPoint);
             if (recBytes != null && recBytes.Count() > 0)
             {
                 for (int i = 0; i < recBytes.Count(); i++)
                 {
                     if (recBytes[i] == '{')
                     {
                         this.recvStr   = "";
                         this.recvPhase = 1;
                         continue;
                     }
                     else if (recBytes[i] == '}')
                     {
                         this.recvPhase = 2;
                         break;
                     }
                     if (this.recvPhase == 1)
                     {
                         this.recBuffer.Add(recBytes[i]);
                     }
                 }
                 // this.recBuffer.AddRange(recBytes);
                 if (this.recvPhase == 2)
                 {
                     Encoding gb2312 = Encoding.GetEncoding("GB2312");
                     this.recvStr = gb2312.GetString(this.recBuffer.ToArray()).Trim();
                     //Console.WriteLine("收到{0}数据:{1}", connStr, recvStr);
                 }
             }
         }
         udpClient.BeginReceive(UdpRecvCallback, udpState);
     }
     catch (Exception ex)
     {
         isConnected = false;
         Console.WriteLine("{0}数据通信异常,{1}", this.DevID, ex.ToString());
     }
 }
示例#5
0
        private void UdpRecvCallback(IAsyncResult iar)
        {
            UdpState udpState = iar.AsyncState as UdpState;

            if (iar.IsCompleted)
            {
                Byte[] recBytes = udpState.udpClient.EndReceive(iar, ref udpState.ipEndPoint);
                if (recBytes != null && recBytes.Count() > 0)
                {
                    this.recBuffer.AddRange(recBytes);
                    //Console.Write("Recv:");
                    //for(int i=0;i<recBytes.Count();i++)
                    //{
                    //    Console.Write("{0}", recBytes[i].ToString("X2"));
                    //}
                    //Console.WriteLine("");
                }
            }
            udpClient.BeginReceive(UdpRecvCallback, udpState);
        }
示例#6
0
 private void UdpRecvCallback(IAsyncResult iar)
 {
     try
     {
         UdpState udpState = iar.AsyncState as UdpState;
         if (iar.IsCompleted)
         {
             Byte[] recBytes = udpState.udpClient.EndReceive(iar, ref udpState.ipEndPoint);
             if (recBytes != null && recBytes.Count() > 0)
             {
                 OnRecComplete(recBytes);
             }
         }
         udpClient.BeginReceive(UdpRecvCallback, udpState);
     }
     catch (Exception ex)
     {
         Console.WriteLine("SUdpClient类UdpRecvCallback错误:" + ex.StackTrace.ToString());
     }
 }
示例#7
0
        public bool Connect(ref string reStr)
        {
            try
            {
                lock (lockObj)
                {
                    if (string.IsNullOrEmpty(this.connStr))
                    {
                        reStr = "PLC通信地址为空!";
                        return(false);
                    }
                    //this.connStr = plcAddr;
                    string[] splitStr = new string[] { ",", ";", ":", "-", "|" };
                    string[] strArray = this.connStr.Split(splitStr, StringSplitOptions.RemoveEmptyEntries);
                    if (strArray.Count() < 2)
                    {
                        isConnected = false;
                    }
                    string remoteIP   = strArray[0];
                    int    remotePort = int.Parse(strArray[1]);
                    if (udpClient == null)
                    {
                        udpClient = new UdpClient(LocalPort);
                    }
                    this.udpRemotePoint = new IPEndPoint(IPAddress.Parse(remoteIP), remotePort);

                    UdpState udpReceiveState = new UdpState();
                    udpReceiveState.ipEndPoint = this.udpRemotePoint;
                    udpReceiveState.udpClient  = udpClient;

                    udpClient.BeginReceive(UdpRecvCallback, udpReceiveState);
                    return(true);
                }
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }
        }