コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        /// <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();
            }
        }