コード例 #1
0
        async Task <bool> asyncSendCommandToDB(string dianYuanID, PowerDataPack_Send_CommandEnum command)
        {
            return(await Task.Run(() =>
            {
                PowerSendCMDEFModel vSendCMDEFModel = new PowerSendCMDEFModel()
                {
                    State = false,
                    IsSend = false,
                    IsReply = false,
                    CMD = (byte)command,
                    DianYuanID = dianYuanID,
                    SendTime = DateTime.Now,
                    SN = NetHelper.MarkSN_Byte()
                };
                int vID = m_BasicDBClassInsert.InsertRecord(vSendCMDEFModel);

                DateTime vStartTime = DateTime.Now;
                bool vResult = false;
                do
                {
                    PowerSendCMDEFModel vSelectResult = m_BasicDBClassSelect.SelectRecordByPrimaryKeyEx <PowerSendCMDEFModel>(vID);
                    vResult = vSelectResult.State ?? false;
                    if (!vResult && (DateTime.Now - vStartTime).TotalMilliseconds >= 2000)
                    {
                        break;
                    }
                    Thread.Sleep(200);
                } while (!vResult);
                return vResult;
            }));
        }
コード例 #2
0
        /// <summary>
        /// 处理接收到的获取时间数据
        /// </summary>
        /// <param name="dataPack"></param>
        void processorData_GetTime(PowerDataPack_Receive_GetTime dataPack)
        {
            string vMAC = NetHelper.BytesToString_MAC(new byte[] { dataPack.MAC1, dataPack.MAC2, dataPack.MAC3, dataPack.MAC4,
                                                                   dataPack.MAC5, dataPack.MAC6 });
            PowerTimeConfigEFModel vPowerTimeConfigEFModel = new PowerTimeConfigEFModel()
            {
                Time = BitConverter.ToInt32(new byte[] { dataPack.Time4, dataPack.Time3, dataPack.Time2, dataPack.Time1 }, 0)
            };
            bool vResult = m_BasicDBClass_Receive.UpdateRecord(vPowerTimeConfigEFModel, string.Format("DianYuanID='{0}'", vMAC));

            if (!vResult)
            {
                vPowerTimeConfigEFModel.DianYuanID = vMAC;
                vResult = m_BasicDBClass_Receive.InsertRecord(vPowerTimeConfigEFModel) > 0 ? true : false;
            }

            PowerSendCMDEFModel vPowerSendCMDEFModel = new PowerSendCMDEFModel()
            {
                IsReply = true
            };

            if (vResult)
            {
                vPowerSendCMDEFModel.State = true;
            }
            string vSql = string.Format("DianYuanID='{0}' and CMD={1:D} and SN={2}", vMAC, (byte)PowerDataPack_Send_CommandEnum.GetTime, dataPack.SN);

            m_BasicDBClass_Receive.UpdateRecord(vPowerSendCMDEFModel, vSql);
        }
コード例 #3
0
        async Task <bool> asyncSendCommandToDB <T>(string dianYuanID, PowerDataPack_Send_CommandEnum command, T SendData)
        {
            return(await Task.Run(() =>
            {
                // string vDataStr = System.Text.Encoding.Default.GetString(NetHelper.StructureToByte(SendData));
                PowerSendCMDEFModel vSendCMDEFModel = new PowerSendCMDEFModel()
                {
                    State = false,
                    IsSend = false,
                    IsReply = false,
                    CMD = (byte)command,
                    DianYuanID = dianYuanID,
                    SendTime = DateTime.Now,
                    SN = NetHelper.MarkSN_Byte(),
                    Data = NetHelper.StructureToByte(SendData)
                };

                int vID = m_BasicDBClass_Send.InsertRecord(vSendCMDEFModel);

                DateTime vStartTime = DateTime.Now;
                bool vResult = false;
                do
                {
                    PowerSendCMDEFModel vSelectResult = m_BasicDBClass_Send.SelectRecordByPrimaryKeyEx <PowerSendCMDEFModel>(vID);
                    vResult = vSelectResult.State ?? false;
                    if (!vResult && (DateTime.Now - vStartTime).TotalMilliseconds >= 2000)
                    {
                        break;
                    }
                    Thread.Sleep(200);
                } while (!vResult);
                //m_BasicDBClass.DeleteRecordByPrimaryKey<PowerSendCMDEFModel>(vID);
                return vResult;
            }));
        }
コード例 #4
0
        void processorData_ReplyCMD(byte comm, PowerDataPack_Receive_ReplyCMD dataPack)
        {
            string vSql = "";

            string vDianYuanID = BitConverter.ToString(new byte[] { dataPack.MAC1, dataPack.MAC2, dataPack.MAC3, dataPack.MAC4, dataPack.MAC5, dataPack.MAC6 });
            PowerSendCMDEFModel vPowerSendCMDEFModel = new PowerSendCMDEFModel()
            {
                IsReply = true,
                State   = dataPack.State == 0x00 ? true : false
            };

            //case (byte)PowerDataPack_Receive_CommandEnum.SwitchStatus://处理接收到回复电源开关状态数据
            //case (byte)PowerDataPack_Receive_CommandEnum.SetTime://设置时间
            //case (byte)PowerDataPack_Receive_CommandEnum.SetSwitchParam://开关参数设置
            //case (byte)PowerDataPack_Receive_CommandEnum.Timing: //定时设置
            //case (byte)PowerDataPack_Receive_CommandEnum.SetIPAddress: //设置IP地址
            switch (comm)
            {
            case (byte)PowerDataPack_Receive_CommandEnum.SwitchStatus:
                vSql = string.Format("DianYuanID='{0}' and CMD={1:D} and SN={2}", vDianYuanID, (byte)PowerDataPack_Send_CommandEnum.Switch, dataPack.SN);
                break;

            case (byte)PowerDataPack_Receive_CommandEnum.SetTime:
                vSql = string.Format("DianYuanID='{0}' and CMD={1:D} and SN={2}", vDianYuanID, (byte)PowerDataPack_Send_CommandEnum.SetTime, dataPack.SN);
                break;

            case (byte)PowerDataPack_Receive_CommandEnum.SetSwitchParam:
                vSql = string.Format("DianYuanID='{0}' and CMD={1:D} and SN={2}", vDianYuanID, (byte)PowerDataPack_Send_CommandEnum.SetSwitchParam, dataPack.SN);
                break;

            case (byte)PowerDataPack_Receive_CommandEnum.Timing:
                vSql = string.Format("DianYuanID='{0}' and CMD={1:D} and SN={2}", vDianYuanID, (byte)PowerDataPack_Send_CommandEnum.Timing, dataPack.SN);
                break;

            case (byte)PowerDataPack_Receive_CommandEnum.SetIPAddress:
                vSql = string.Format("DianYuanID='{0}' and CMD={1:D} and SN={2}", vDianYuanID, (byte)PowerDataPack_Send_CommandEnum.SetIPAddress, dataPack.SN);
                break;
            }

            if (vSql != "")
            {
                m_BasicDBClass_Return.UpdateRecord(vPowerSendCMDEFModel, vSql);
            }
        }
コード例 #5
0
        /// <summary>
        /// 处理收到的数据包(IP地址设置)
        /// </summary>
        /// <param name="dataPack"></param>
        void processorData_GetIPAddress(PowerDataPack_Receive_GetIPAddress dataPack)
        {
            string vMAC = NetHelper.BytesToString_MAC(new byte[] { dataPack.MAC_1, dataPack.MAC_2, dataPack.MAC_3, dataPack.MAC_4,
                                                                   dataPack.MAC_5, dataPack.MAC_6 });
            PowerNetConfigEFModel vPowerNetConfigEFModel = new PowerNetConfigEFModel()
            {
                MAC             = vMAC,
                DHCP            = dataPack.DHCP == 0x01 ? true : false,
                Gateway         = NetHelper.BytesToString_IP(new byte[] { dataPack.gateway1, dataPack.gateway2, dataPack.gateway3, dataPack.gateway4 }),
                IPAddress       = NetHelper.BytesToString_IP(new byte[] { dataPack.IPAddress1, dataPack.IPAddress2, dataPack.IPAddress3, dataPack.IPAddress4 }),
                ServerIPAddress = NetHelper.BytesToString_IP(new byte[] { dataPack.ServerIPAddress1, dataPack.ServerIPAddress2, dataPack.ServerIPAddress3, dataPack.ServerIPAddress4 }),
                SubMask         = NetHelper.BytesToString_IP(new byte[] { dataPack.SubnetMask1, dataPack.SubnetMask2, dataPack.SubnetMask3, dataPack.SubnetMask4 }),
                Port            = BitConverter.ToInt16(new byte[] { dataPack.Port2, dataPack.Port1 }, 0),
                ServerPort      = BitConverter.ToInt16(new byte[] { dataPack.ServerPort2, dataPack.ServerPort1 }, 0)
            };

            try
            {
                m_BasicDBClass_Receive.TransactionBegin();
                m_BasicDBClass_Receive.DeleteRecordCustom <PowerNetConfigEFModel>(string.Format("MAC='{0}'", vMAC));
                m_BasicDBClass_Receive.InsertRecord(vPowerNetConfigEFModel);
                PowerSendCMDEFModel vPowerSendCMDEFModel = new PowerSendCMDEFModel()
                {
                    IsReply = true,
                    State   = true
                };
                string vSql = string.Format("DianYuanID='{0}' and CMD={1:D} and SN={2}", vMAC, (byte)PowerDataPack_Send_CommandEnum.Send_GetIPAddress, dataPack.SN);
                m_BasicDBClass_Receive.UpdateRecord(vPowerSendCMDEFModel, vSql);
                m_BasicDBClass_Receive.TransactionCommit();
            }
            catch (Exception ex)
            {
                string vOutInfo = string.Format("电源获取电源IP地址错误:{0}", ex.Message);
                Console.WriteLine(vOutInfo);
                LogHelper.WriteLog_Debug(typeof(PowerControl), vOutInfo);
                m_BasicDBClass_Receive.TransactionRollback();
            }
        }
コード例 #6
0
        /// <summary>
        /// 处理收到的开关参数设置(IP地址设置)
        /// </summary>
        /// <param name="dataPack"></param>
        void processorData_GetSwitchParam(PowerDataPack_Receive_GetSwitchParam dataPack)
        {
            string vMAC = NetHelper.BytesToString_MAC(new byte[] { dataPack.MAC1, dataPack.MAC2, dataPack.MAC3, dataPack.MAC4,
                                                                   dataPack.MAC5, dataPack.MAC6 });
            PowerSwithConfigEFModel vPowerSwithConfigEFModel = new PowerSwithConfigEFModel()
            {
                XianDingDN  = BitConverter.ToInt16(new byte[] { dataPack.XianDingDN2, dataPack.XianDingDN1 }, 0),
                XianDingGL  = BitConverter.ToInt16(new byte[] { dataPack.XianDingGL2, dataPack.XianDingGL1 }, 0),
                DianLiuLLZ  = BitConverter.ToInt16(new byte[] { dataPack.DianLiuRLZ2, dataPack.DianLiuRLZ1 }, 0),
                ChaoWenBHZ  = BitConverter.ToUInt16(new byte[] { dataPack.ChaoWenBHZ2, dataPack.ChaoWenBHZ1 }, 0),
                ChaoWenYJZ  = BitConverter.ToUInt16(new byte[] { dataPack.ChaoWenYJZ2, dataPack.ChaoWenYJZ1 }, 0),
                GuoYaSX     = BitConverter.ToInt16(new byte[] { dataPack.GuoYaSX2, dataPack.GuoYaSX1 }, 0),
                QianYaXX    = BitConverter.ToInt16(new byte[] { dataPack.QianYaXX2, dataPack.QianYaXX1 }, 0),
                EDingLDDZDL = BitConverter.ToInt16(new byte[] { dataPack.EDingLDDZDL2, dataPack.EDingLDDZDL1 }, 0),
                LouDianLYJZ = BitConverter.ToInt16(new byte[] { dataPack.LouDianLYJZ2, dataPack.LouDianLYJZ1 }, 0)
            };
            bool vResult = m_BasicDBClass_Receive.UpdateRecord(vPowerSwithConfigEFModel, string.Format("DianYuanID='{0}' and LuHao={1:D}", vMAC, dataPack.LuHao));

            if (!vResult)
            {
                vPowerSwithConfigEFModel.DianYuanID = vMAC;
                vResult = m_BasicDBClass_Receive.InsertRecord(vPowerSwithConfigEFModel) > 0 ? true : false;
            }

            PowerSendCMDEFModel vPowerSendCMDEFModel = new PowerSendCMDEFModel()
            {
                IsReply = true
            };

            if (vResult)
            {
                vPowerSendCMDEFModel.State = true;
            }
            string vSql = string.Format("DianYuanID='{0}' and CMD={1:D} and SN={2}", vMAC, (byte)PowerDataPack_Send_CommandEnum.GetSwitchParam, dataPack.SN);

            m_BasicDBClass_Receive.UpdateRecord(vPowerSendCMDEFModel, vSql);
        }
コード例 #7
0
        void processorData_GetControlInfo(PowerDataPack_Receive_GetControlInfo dataPack)
        {
            string vMAC = NetHelper.BytesToString_MAC(new byte[] { dataPack.MAC1, dataPack.MAC2, dataPack.MAC3, dataPack.MAC4,
                                                                   dataPack.MAC5, dataPack.MAC6 });

            vMAC = vMAC.ToUpper();
            m_BasicDBClass_Receive.DeleteRecordCustom <PowerSwithConfigEFModel>(string.Format("DianYuanID='{0}'", vMAC));

            //漏保设备
            int vLouBaoSBLS = BitConverter.ToInt32(new byte[] { dataPack.LouBaoSBLS, 0x00, 0x00, 0x00 }, 0);

            for (int i = 1; i <= vLouBaoSBLS; i++)
            {
                PowerSwithConfigEFModel vPowerSwithConfigEFModel = new PowerSwithConfigEFModel()
                {
                    DianYuanID = vMAC,
                    LuHao      = i,
                    MinCheng   = string.Format("漏保{0}", i),
                    LeiXing    = "漏保"
                };
                m_BasicDBClass_Receive.InsertRecord(vPowerSwithConfigEFModel);
            }
            //分路路数
            int vFenLuLS = BitConverter.ToInt32(new byte[] { dataPack.FenLuLS, 0x00, 0x00, 0x00 }, 0);

            for (int i = 1; i <= vFenLuLS; i++)
            {
                PowerSwithConfigEFModel vPowerSwithConfigEFModel = new PowerSwithConfigEFModel()
                {
                    DianYuanID = vMAC,
                    LuHao      = i,
                    MinCheng   = string.Format("分路{0}", i),
                    LeiXing    = "分路"
                };
                m_BasicDBClass_Receive.InsertRecord(vPowerSwithConfigEFModel);
            }
            //漏保分路路数
            int vLouBaoFLLS = BitConverter.ToInt32(new byte[] { dataPack.LouBaoSBLS, 0x00, 0x00, 0x00 }, 0);

            for (int i = 1; i <= vLouBaoFLLS; i++)
            {
                PowerSwithConfigEFModel vPowerSwithConfigEFModel = new PowerSwithConfigEFModel()
                {
                    DianYuanID = vMAC,
                    LuHao      = i,
                    MinCheng   = string.Format("分路{0}(带漏保)", i),
                    LeiXing    = "分路(带漏保)"
                };
                m_BasicDBClass_Receive.InsertRecord(vPowerSwithConfigEFModel);
            }
            //漏保插座路数
            int vLouBaoCZLS = BitConverter.ToInt32(new byte[] { dataPack.LouBaoCZLS, 0x00, 0x00, 0x00 }, 0);

            for (int i = 1; i <= vLouBaoCZLS; i++)
            {
                PowerSwithConfigEFModel vPowerSwithConfigEFModel = new PowerSwithConfigEFModel()
                {
                    DianYuanID = vMAC,
                    LuHao      = i,
                    MinCheng   = string.Format("漏保插座{0}", i),
                    LeiXing    = "漏保插座"
                };
                m_BasicDBClass_Receive.InsertRecord(vPowerSwithConfigEFModel);
            }
            //插座路数
            int vChaZhuoLS = BitConverter.ToInt32(new byte[] { dataPack.ChaZhuoLS, 0x00, 0x00, 0x00 }, 0);

            for (int i = 1; i <= vChaZhuoLS; i++)
            {
                PowerSwithConfigEFModel vPowerSwithConfigEFModel = new PowerSwithConfigEFModel()
                {
                    DianYuanID = vMAC,
                    LuHao      = i,
                    MinCheng   = string.Format("普插座{0}", i),
                    LeiXing    = "普插座"
                };
                m_BasicDBClass_Receive.InsertRecord(vPowerSwithConfigEFModel);
            }

            PowerSendCMDEFModel vPowerSendCMDEFModel = new PowerSendCMDEFModel()
            {
                IsReply = true
            };

            vPowerSendCMDEFModel.State = true;
            string vSql = string.Format("DianYuanID='{0}' and CMD={1:D} and SN={2}", vMAC, (byte)PowerDataPack_Send_CommandEnum.GetControlInfo, dataPack.SN);

            m_BasicDBClass_Receive.UpdateRecord(vPowerSendCMDEFModel, vSql);
        }
コード例 #8
0
        async void asyncProcessorDBSendCMD()
        {
            await Task.Run(() =>
            {
                while (m_IsRun)
                {
                    PowerSendCMDEFModel vModel = new PowerSendCMDEFModel()
                    {
                        IsSend = false
                    };
                    var vSelectResult = m_BasicDBClass_Send.SelectRecordsEx(vModel);
                    foreach (PowerSendCMDEFModel vTempResult in vSelectResult)
                    {
                        //AsyncUserToken vAsyncUserToken = findAsyncUserToken(vTempResult.DianYuanID.Value);
                        AsyncUserToken vAsyncUserToken = null;
                        if (m_SocketManager != null && m_SocketManager.ClientList.Count > 0)
                        {
                            if (m_ClientDict.ContainsKey(vTempResult.DianYuanID))
                            {
                                string vIPAddress = m_ClientDict[vTempResult.DianYuanID];
                                vAsyncUserToken   = m_SocketManager.ClientList.Where(m => m.IPAddress.ToString() == vIPAddress).FirstOrDefault();
                            }
                            //vAsyncUserToken = m_SocketManager.ClientList[0];
                        }
                        if (vAsyncUserToken != null)
                        {
                            byte[] vMac = NetHelper.StringToBytes_MAC(vTempResult.DianYuanID);
                            PowerDataPack_Main vCommandDataPack = new PowerDataPack_Main()
                            {
                                Head     = 0x5a,
                                Tail     = 0x5b,
                                SN       = vTempResult.SN ?? 0x00,// 0x01,//vTempResult.SN ?? 0x00,
                                CMD      = vTempResult.CMD ?? 0x00,
                                Addition = 0x00,
                                MAC1     = vMac[0],
                                MAC2     = vMac[1],
                                MAC3     = vMac[2],
                                MAC4     = vMac[3],
                                MAC5     = vMac[4],
                                MAC6     = vMac[5],
                            };
                            List <byte> vCMDDataPack = Helper.NetHelper.StructureToByte(vCommandDataPack).ToList();
                            if (vTempResult.Data != null)
                            {
                                List <byte> vDataPack = vTempResult.Data.ToList();
                                vCMDDataPack.InsertRange(12, vDataPack);
                            }
                            byte[] vLength = BitConverter.GetBytes((short)vCMDDataPack.Count);
                            //包长度
                            vCMDDataPack[1] = vLength[1];
                            vCMDDataPack[2] = vLength[0];
                            //校验和
                            vCMDDataPack[vCMDDataPack.Count - 2] = calcCheckCode(vCMDDataPack.ToArray());

                            m_SocketManager.SendMessage(vAsyncUserToken, vCMDDataPack.ToArray());
                            string vOutInfo = string.Format("电源发送命令数据包,IP地址({0}):{1}", vAsyncUserToken.IPAddress.ToString(), BitConverter.ToString(vCMDDataPack.ToArray()));
                            Console.WriteLine(vOutInfo);
                            LogHelper.WriteLog_Debug(typeof(PowerControl), vOutInfo);
                            //更新数据库状态
                            vModel.IsSend = true;
                            vModel.ID     = vTempResult.ID;
                            m_BasicDBClass_Send.UpdateRecord <PowerSendCMDEFModel>(vModel);
                        }
                    }
                    Thread.Sleep(100);
                }
            });
        }