/// <summary> /// 作者:np /// 时间:2014年6月3日 /// 内容:成批写值 /// </summary> /// <param name="addr"></param> /// <param name="blockNum"></param> /// <param name="vals"></param> /// <returns></returns> public bool WriteMultiDB(string addr, int blockNum, short[] vals) { try { lock (lockObj) { if (this.netFailTimes > 2 || (!isConnected))//超过2次就触发断开事件 { isConnected = false; // OnLinkLost(); return(false); } List <byte> sendBuffer = new List <byte>();//发送缓存 sendBuffer.AddRange(constantByte); short sendLength = (short)(0x0c + blockNum * 2); sendBuffer.AddRange(BitConverter.GetBytes(sendLength)); sendBuffer.Add(cpuMonitorTimeL); sendBuffer.Add(cpuMonitorTimeH); sendBuffer.Add(orderWriteL); sendBuffer.Add(orderWriteH); sendBuffer.Add(childWOderCodeL); sendBuffer.Add(childWOderCodeH); short addrValue = Convert.ToInt16(addr.Substring(1, 4)); byte[] addrBytes = BitConverter.GetBytes(addrValue); byte addrHigh = 0; sendBuffer.AddRange(addrBytes); sendBuffer.Add(addrHigh); sendBuffer.Add(writeTypeCode); sendBuffer.AddRange(BitConverter.GetBytes((short)blockNum)); for (int i = 0; i < vals.Count(); i++) { byte[] sendValue = BitConverter.GetBytes(vals[i]); sendBuffer.AddRange(sendValue); } SendData(sendBuffer.ToArray()); enumRequireType = EnumRequireType.成批写入; if (recvAutoEvent.WaitOne(recvTimeOut, false)) { if (CheckWriteStatus(this.recBuffer.ToArray())) { this.netFailTimes = 0; return(true); } else { this.netFailTimes++; return(false); } } else { this.netFailTimes++; return(false); } } } catch { this.netFailTimes++; return(false); } }
/// <summary> /// 作者:np /// 时间:2014年6月3日 /// 内容:成批写值 /// </summary> /// <param name="addr"></param> /// <param name="blockNum"></param> /// <param name="vals"></param> /// <returns></returns> public bool WriteMultiDB(string addr, int blockNum, short[] vals) { try { lock (lockObj) { //if (!isConnected) //{ // return false; //} if (this.netFailTimes > 2) //超过2次就触发断开事件 { isConnected = false; // OnLinkLost(); return(false); } List <byte> sendBuffer = new List <byte>();//发送缓存 switch (plcCata) { case EnumPlcCata.Qn: case EnumPlcCata.FX5U: { sendBuffer.AddRange(constantByte); short sendLength = (short)(0x0c + blockNum * 2); sendBuffer.AddRange(BitConverter.GetBytes(sendLength)); sendBuffer.Add(cpuMonitorTimeL); sendBuffer.Add(cpuMonitorTimeH); sendBuffer.Add(orderWriteL); sendBuffer.Add(orderWriteH); sendBuffer.Add(childWOderCodeL); sendBuffer.Add(childWOderCodeH); short addrValue = Convert.ToInt16(addr.Substring(1)); byte[] addrBytes = BitConverter.GetBytes(addrValue); byte addrHigh = 0; sendBuffer.AddRange(addrBytes); sendBuffer.Add(addrHigh); sendBuffer.Add(writeTypeCode); sendBuffer.AddRange(BitConverter.GetBytes((short)blockNum)); for (int i = 0; i < vals.Count(); i++) { byte[] sendValue = BitConverter.GetBytes(vals[i]); sendBuffer.AddRange(sendValue); } recvLenRequire = 11; break; } case EnumPlcCata.FX3UENET: { byte[] title = new byte[] { 0x03, 0xFF, 0x0A, 0x00 }; sendBuffer.AddRange(title); Int32 addrSt = Int32.Parse(addr.Substring(1)); byte[] addrBytes = BitConverter.GetBytes(addrSt); sendBuffer.AddRange(addrBytes); byte[] zoneCode = new byte[] { 0x20, 0x44 }; sendBuffer.AddRange(zoneCode); sendBuffer.Add((byte)blockNum); sendBuffer.Add(0x00); for (int i = 0; i < vals.Count(); i++) { byte[] sendValue = BitConverter.GetBytes(vals[i]); sendBuffer.AddRange(sendValue); } recvLenRequire = 2; break; } default: break; } if (!SendData(sendBuffer.ToArray())) { this.netFailTimes++; return(false); } enumRequireType = EnumRequireType.成批写入; // if (recvAutoEvent.WaitOne(recvTimeOut, false)) if (WaitRecvOK(recvTimeOut)) { if (CheckWriteStatus(this.recBuffer.ToArray())) { this.netFailTimes = 0; return(true); } else { this.netFailTimes++; return(false); } } else { this.netFailTimes++; return(false); } } } catch (Exception ex) { Console.WriteLine("PLC写入发生异常," + ex.ToString()); this.netFailTimes++; return(false); } }
/// <summary> /// 作者:np /// 时间:2014年6月3日 /// 内容:成批读取地址值 /// </summary> /// <param name="addr"></param> /// <param name="blockNum"></param> /// <param name="vals"></param> /// <returns></returns> public bool ReadMultiDB(string addr, int blockNum, ref short[] vals) { try { lock (lockObj) { if (this.netFailTimes > 2 || (!isConnected))//超过2次就触发断开事件 { isConnected = false; // OnLinkLost(); return(false); } List <byte> sendBuffer = new List <byte>();//发送缓存 sendBuffer.AddRange(constantByte); sendBuffer.Add(dataLengthL); sendBuffer.Add(dataLengthH); sendBuffer.Add(cpuMonitorTimeL); sendBuffer.Add(cpuMonitorTimeH); sendBuffer.Add(orderReadL); sendBuffer.Add(orderReadH); sendBuffer.Add(childROderCodeL); sendBuffer.Add(childROderCodeH); short addrValue = Convert.ToInt16(addr.Substring(1, 4)); byte[] addrBytes = BitConverter.GetBytes(addrValue); byte addrHigh = 0; sendBuffer.AddRange(addrBytes); sendBuffer.Add(addrHigh); sendBuffer.Add(readTypeCode); sendBuffer.AddRange(BitConverter.GetBytes((short)blockNum)); SendData(sendBuffer.ToArray()); enumRequireType = EnumRequireType.成批读取; if (recvAutoEvent.WaitOne(recvTimeOut, false)) { bool analysisStatus = GetRecShortValues(this.recBuffer.ToArray(), blockNum, ref vals); if (analysisStatus) { this.netFailTimes = 0; return(true); } else { this.netFailTimes++; return(false); } } else { this.netFailTimes++; return(false); } } } catch { this.netFailTimes++; return(false); } }
/// <summary> /// 作者:np /// 时间:2014年6月3日 /// 内容:成批读取地址值 /// </summary> /// <param name="addr"></param> /// <param name="blockNum"></param> /// <param name="vals"></param> /// <returns></returns> public bool ReadMultiDB(string addr, int blockNum, ref short[] vals) { try { lock (lockObj) { //if(!isConnected) //{ // return false; //} if (this.netFailTimes > 2) //超过2次就触发断开事件 { isConnected = false; return(false); } List <byte> sendBuffer = new List <byte>();//发送缓存 switch (plcCata) { case EnumPlcCata.Qn: case EnumPlcCata.FX5U: { sendBuffer.AddRange(constantByte); sendBuffer.Add(dataLengthL); sendBuffer.Add(dataLengthH); sendBuffer.Add(cpuMonitorTimeL); sendBuffer.Add(cpuMonitorTimeH); sendBuffer.Add(orderReadL); sendBuffer.Add(orderReadH); sendBuffer.Add(childROderCodeL); sendBuffer.Add(childROderCodeH); short addrValue = Convert.ToInt16(addr.Substring(1)); byte[] addrBytes = BitConverter.GetBytes(addrValue); byte addrHigh = 0; sendBuffer.AddRange(addrBytes); sendBuffer.Add(addrHigh); sendBuffer.Add(readTypeCode); sendBuffer.AddRange(BitConverter.GetBytes((short)blockNum)); recvLenRequire = 11 + 2 * blockNum; break; } case EnumPlcCata.FX3UENET: { byte[] title = new byte[] { 0x01, 0xFF, 0x0A, 0x00 }; sendBuffer.AddRange(title); Int32 addrSt = Int32.Parse(addr.Substring(1)); byte[] addrBytes = BitConverter.GetBytes(addrSt); sendBuffer.AddRange(addrBytes); byte[] zoneCode = new byte[] { 0x20, 0x44 }; sendBuffer.AddRange(zoneCode); sendBuffer.Add((byte)blockNum); sendBuffer.Add(0x00); recvLenRequire = 2 + blockNum * 2; break; } default: break; } if (!SendData(sendBuffer.ToArray())) { this.netFailTimes++; return(false); } enumRequireType = EnumRequireType.成批读取; // if (recvAutoEvent.WaitOne(recvTimeOut, false)) if (WaitRecvOK(recvTimeOut)) { bool analysisStatus = GetRecShortValues(this.recBuffer.ToArray(), blockNum, ref vals); if (analysisStatus) { this.netFailTimes = 0; return(true); } else { this.netFailTimes++; return(false); } } else { this.netFailTimes++; return(false); } } } catch (Exception ex) { Console.WriteLine("PLC读取发生异常," + ex.ToString()); this.netFailTimes++; return(false); } }