コード例 #1
0
        static bool SendPLC_DPJ_485(string send, string mark, out string response, out int err, out string errStr)
        {
            bool result = false;

            err      = 0; errStr = "";
            response = "";
            //添加起始符
            send  = PLC_Tcp_CP.Get16String(send.Length / 2 + 1, 2) + send;
            send += GetFCS(send);
            send  = BeginString + send + EndString;

            try
            {
                while (DPJIsBusy)
                {
                    Thread.Sleep(50);
                }
                DPJIsBusy = true;
                spDPJ.DiscardInBuffer();
                spDPJ.DiscardOutBuffer();

                //写入串口
                byte[] buffer_send = PLC_Tcp_CP.GetBytes(send);
                spDPJ.Write(buffer_send, 0, buffer_send.Length);


                DateTime begin = DateTime.Now;
                int      m = 0, n = 0;
                do
                {
                    Thread.Sleep(50);
                    m = spDPJ.BytesToRead;
                    Thread.Sleep(50);
                    n = spDPJ.BytesToRead;
                }while ((m == 0 || m < n) && DateTime.Now <= begin.AddMilliseconds(1000));
                if (DateTime.Now > begin.AddMilliseconds(1000))
                {
                    errStr = "通讯超时";
                    //记录错误信息
                    string msg = mark + ":" + errStr;
                    csLog.WriteLog(msg);
                }
                if (m > 0)
                {
                    byte[] buffer_response = new byte[m];
                    spDPJ.Read(buffer_response, 0, m);
                    response = PLC_Tcp_CP.GetString(buffer_response);
                }

                DPJIsBusy = false;

                if (CheckResponse(response, out err, out errStr))
                {
                    result = true;
                }
                else
                {
                    //记录错误信息
                    string msg = response + "---" + mark + ":" + errStr;
                    csLog.WriteLog(msg);
                }
            }
            catch (Exception ex)
            {
                DPJIsBusy = false;
                //记录错误信息
                string msg = response + "---" + mark + ":" + ex.Message;
                csLog.WriteLog(msg);
            }
            return(result);
        }