Exemplo n.º 1
0
        /// <summary>
        /// 读输入寄存器状态
        /// </summary>
        /// <param name="reg">寄存器名称</param>
        /// <returns>返回输入状态 '0'或‘非0’,0xffff表示访问错误</returns>
        private async Task <UInt16> ReadReg(ReadableRegs reg)
        {
            UInt16 val = 0;

            byte[] ar = generate_read_command((UInt16)reg);
            await Task.Run(() =>
            {
                bool wait;
                //串口资源互斥锁
                //Console.WriteLine($"Before wait, thread id is {Thread.CurrentThread.ManagedThreadId}");
                wait = _spmutex.WaitOne(50);
                if (!wait)
                {
                    val = 0xffff;
                }
                else
                {
                    //Console.WriteLine($"Fetch wait, thread id is {Thread.CurrentThread.ManagedThreadId}");
                    _sp.Write(ar, 0, ar.Length);
                    val = recv_proc((UInt16)reg);
                    _spmutex.ReleaseMutex();
                }
                //Console.WriteLine($"after wait, thread id is {Thread.CurrentThread.ManagedThreadId}");
            }).ConfigureAwait(false);

            return(val);
        }
        public UInt16 ReadReg(ReadableRegs rr)
        {
            UInt16 val = 0;

            return(val);
        }