/// <summary> /// 写入多个寄存器值 /// </summary> /// <param name="startREG"></param> /// <param name="regVal"></param> /// <returns></returns> public bool AddMutiIOWrite(int devAddr, ERegType regType, int regNo, int[] regVal) { try { string regName = string.Empty; for (int i = 0; i < regVal.Length; i++) { for (int z = 0; z < 8; z++) { regName = devAddr.ToString("D2") + "_" + regType.ToString() + (regNo + i).ToString(); if (wIOVal.ContainsKey(regName)) { wIOVal[regName] = -1; } } } CWMutiIOVal mutiIo = new CWMutiIOVal(devAddr, regType, regNo, regVal); if (!wSetMutiIOVal.Contains(mutiIo)) { wSetMutiIOVal.Enqueue(mutiIo); } return(true); } catch (Exception) { return(false); } }
/// <summary> /// 写多个寄存器值 /// </summary> /// <param name="er"></param> /// <returns></returns> private bool writeMutiIO(out string er) { er = string.Empty; try { ioWriteLock.AcquireWriterLock(-1); for (int i = 0; i < wSetMutiIOVal.Count;) { if (_dispose) { return(true); } Thread.Sleep(_delayMs); bool writeOK = true; CWMutiIOVal mutiIO = wSetMutiIOVal.Dequeue(); if (!_devIO.Write(mutiIO.devAddr, mutiIO.regType, mutiIO.regNo, mutiIO.regVal, out er)) { Thread.Sleep(_delayMs); if (!_devIO.Write(mutiIO.devAddr, mutiIO.regType, mutiIO.regNo, mutiIO.regVal, out er)) { er = "[" + mutiIO.regNo + "]" + CLanguage.Lan("写操作错误") + ":" + er; writeOK = false; } } if (!writeOK) { wSetMutiIOVal.Enqueue(mutiIO); } } return(true); } catch (Exception ex) { er = ex.ToString(); return(false); } finally { ioWriteLock.ReleaseWriterLock(); } }