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; })); }
/// <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); }
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; })); }
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); } }
/// <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(); } }
/// <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); }
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); }
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); } }); }