Exemplo n.º 1
0
 /// <summary>
 /// 实时查询
 /// </summary>
 public void ReceSelectFromWeb(string userName)
 {
     lock (sendLock)
     {
         RtuRegistPackage rtuPackage = new RtuRegistPackage(userName, "查询车位信息", descriptor.Salve, 0x03, readRegist, 1);
         sendQueue.Enqueue(rtuPackage);
         Monitor.Pulse(sendLock);
     }
 }
Exemplo n.º 2
0
 private void SendTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
 {
     if (tcpPort != null && tcpPort.ConnStatus == PortStatus.Connected)
     {
         //发送了以后 如果没出队列,将不再发送
         if (sendQueue.Count == 0)
         {
             lock (sendLock)
             {
                 RtuRegistPackage rtuPackage = new RtuRegistPackage("System", "查询车位状态", descriptor.Salve, 0x03, readRegist, 1);
                 sendQueue.Enqueue(rtuPackage);
                 Monitor.Pulse(sendLock);
             }
         }
     }
 }
Exemplo n.º 3
0
 /// <summary>
 /// 半双工 发送 同时返回数据包
 /// </summary>
 /// <param name="sendPackage"></param>
 /// <returns></returns>
 private RtuRecePackage Write(RtuRegistPackage sendPackage)
 {
     cmdResponseBytes = null;
     modBusRtuMessage = sendPackage;
     if (tcpPort.ConnStatus == PortStatus.Connected)
     {
         response.Reset();
         lock (parseLock)
         {
             receBytesCache.Clear();
         }
         tcpPort.Write(sendPackage.PackageBytes);
         if (response.WaitOne(1000))
         {
             return(new RtuRecePackage(sendPackage, cmdResponseBytes));
         }
     }
     return(null);
 }
Exemplo n.º 4
0
        /// <summary>
        /// 从web端 接受命令
        /// </summary>
        /// <param name="index"></param>
        /// <param name="isUp"></param>
        public void ReceCommandFromWeb(string userName, int index, bool isUp)
        {
            RtuRegistPackage sendPackage = null;
            RtuRegistPackage tempPackage = null;

            if (isUp)
            {
                if (index <= 8)
                {
                    sendPackage = new RtuRegistPackage(userName, $"{index}#车位 上升", descriptor.Salve, 0x06, upRegist1, (ushort)(1 << index - 1));
                    tempPackage = new RtuRegistPackage("System", $"{index}#车位 上升状态置0", descriptor.Salve, 0x06, upRegist1, 0);
                }
                else
                {
                    sendPackage = new RtuRegistPackage(userName, $"{index}#车位 上升", descriptor.Salve, 0x06, upRegist2, (ushort)(1 << index - 1));
                    tempPackage = new RtuRegistPackage("System", $"{index}#车位 上升状态置0", descriptor.Salve, 0x06, upRegist2, 0);
                }
            }
            else
            {
                if (index <= 8)
                {
                    sendPackage = new RtuRegistPackage(userName, $"{index}#车位 下降", descriptor.Salve, 0x06, downRegist1, (ushort)(1 << index - 1));
                    tempPackage = new RtuRegistPackage("System", $"{index}#车位 下降状态置0", descriptor.Salve, 0x06, downRegist1, 0);
                }
                else
                {
                    sendPackage = new RtuRegistPackage(userName, $"{index}#车位 下降", descriptor.Salve, 0x06, downRegist2, (ushort)(1 << index - 1));
                    tempPackage = new RtuRegistPackage("System", $"{index}#车位 下降状态置0", descriptor.Salve, 0x06, downRegist2, 0);
                }
            }
            lock (sendLock)
            {
                fastQueue.Enqueue(sendPackage);
                fastQueue.Enqueue(tempPackage);
                Monitor.Pulse(sendLock);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 发送数据包
        /// </summary>
        void SendModBusPackage()
        {
            while (!isExit)
            {
                if (fastQueue.Count + sendQueue.Count == 0)
                {
                    lock (sendLock)
                    {
                        Monitor.Wait(sendLock);
                    }
                }
                else
                {
                    RtuRegistPackage sendPackage = null;
                    int waitTime = 100;
                    lock (sendLock)
                    {
                        if (fastQueue.Count > 0)
                        {
                            sendPackage = fastQueue.Dequeue();
                        }
                        else
                        {
                            if (sendQueue.Count > 0)
                            {
                                sendPackage = sendQueue.Dequeue();
                            }
                        }
                    }



                    if (sendPackage != null)
                    {
                        sendPackage.SendTime = DateTime.Now;
                        Console.WriteLine(sendPackage.ToString());
                        //不是查询指令
                        if (sendPackage.FunctionCode != 0x03)
                        {
                            //不是还原指令
                            if (sendPackage.LengthOrValue != 0)
                            {
                                waitTime = 2000;
                            }
                        }
                        RtuRecePackage recePackage = Write(sendPackage);

                        if (recePackage != null)
                        {
                            if (sendPackage.FunctionCode == 0x03)
                            {
                                UpdataStatus(sendPackage.CreateTime, DateTime.Now, true, recePackage);
                            }
                        }
                        Console.WriteLine("发送指令成功");
                    }
                    else
                    {
                        if (sendPackage.FunctionCode == 0x03)
                        {
                            UpdataStatus(sendPackage.CreateTime, DateTime.Now, false, null);
                        }
                        Console.WriteLine("发送指令,返回超时!");
                    }
                    Thread.Sleep(waitTime);
                }
            }
        }