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); }