Пример #1
0
        public void UpdataStatus(DateTime sendTime, DateTime receTime, bool isSuccess, RtuRecePackage recePackage)
        {
            bool[] status = new bool[10];
            if (isSuccess)
            {
                int result = (recePackage.ReceBytes[3] << 8) + recePackage.ReceBytes[4];
                for (int i = 0; i < 10; i++)
                {
                    int temp = ((1 << i) & result);
                    if (temp != 0)
                    {
                        status[i] = true;
                    }
                    else
                    {
                        status[i] = false;
                    }
                }
            }
            ParkingLotStatusEventArgs info = new ParkingLotStatusEventArgs(isSuccess, descriptor.IpAddress, descriptor.Port, status, sendTime, receTime);

            SelectedInfoEventMethod(info);
        }
Пример #2
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);
                }
            }
        }