private void tmrData_Elapsed(object sender, ElapsedEventArgs e) { if (inDataTicks || inDtuTicks) { return; } inDataTicks = true; try { //读取数据 ModemDataStruct dat = new ModemDataStruct(); while (this.GetNextData(out dat)) { if (!this.GetStarted()) { return; } //byte[] bts = new byte[] { 84, 82, 85, 13, 10 }; String str = System.Text.Encoding.Default.GetString(dat.m_data_buf); //if (str.Contains("1G21") || str.Contains("1G22")) //{ // InvokeMessage("TRU,modemId: " + dat.m_modemId, "发送"); // InvokeMessage("bts: " + bts, "发送"); // InvokeMessage("bts.length: " + (ushort)bts.Length, "发送"); // // 发送回执 // DTUdll.Instance.SendHex(dat.m_modemId, bts, (ushort)bts.Length); //} // //发送回执 //DTUdll.Instance.SendHex(dat.m_modemId, bts, (ushort)bts.Length); m_mutexListDatas.WaitOne(); String a = System.Text.Encoding.Default.GetString(dat.m_data_buf); // Debug.WriteLine("协议接收数据: " + System.Text.Encoding.Default.GetString(dat.m_data_buf)); m_listDatas.Add(dat); m_semaphoreData.Release(1); m_mutexListDatas.ReleaseMutex(); } } catch (Exception ee) { Debug.WriteLine("读取数据", ee.Message); } finally { inDataTicks = false; } }
public bool GetNextData(out ModemDataStruct dat) { try { //WriteToFileClass writeClass = new WriteToFileClass(); //Thread t = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile)); //t.Start("Test" + "\r\n"); dat = new ModemDataStruct(); return(DSGetNextData(ref dat, 0)); } catch (Exception e) { WriteToFileClass writeClass = new WriteToFileClass("Buginfo"); Thread t = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile)); t.Start("f**k" + "\r\n"); dat = new ModemDataStruct(); return(false); } }
// 处理内存缓存中的数据 private void DealData() { //InvokeMessage("协议。。。 ", "进入函数6"); while (true) { //阻塞0.05s,防止过快获取数据 Thread.Sleep(50); m_semaphoreData.WaitOne(); //阻塞当前线程,知道被其它线程唤醒 // 获取对data内存缓存的访问权 m_mutexListDatas.WaitOne(); List <ModemDataStruct> dataListTmp = m_listDatas; m_listDatas = new List <ModemDataStruct>(); //开辟一快新的缓存区 m_mutexListDatas.ReleaseMutex(); // 开始处理数据 for (int i = 0; i < dataListTmp.Count; ++i) { try { ModemDataStruct dat = dataListTmp[i]; string data = System.Text.Encoding.Default.GetString(dat.m_data_buf).Trim(); string gprsId = ((uint)dat.m_modemId).ToString("X").PadLeft(8, '0'); //1119 //WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog"); //Thread t = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile)); //string logStr = data.Replace("00000000000", ""); //t.Start("GPRS: " + "长度:" + logStr.Length + " " + logStr + "\r\n"); if (data.Contains("TRU")) { Debug.WriteLine("接收数据TRU完成,停止计时器"); //m_timer.Stop(); InvokeMessage("TRU " + ((uint)dat.m_modemId).ToString("X").PadLeft(8, '0'), "接收"); if (this.ErrorReceived != null) { this.ErrorReceived.Invoke(null, new ReceiveErrorEventArgs() { // Msg = "TRU " + dat.m_modemId Msg = "TRU " + gprsId }); } } if (data.Contains("ATE0")) { Debug.WriteLine("接收数据ATE0完成,停止计时器"); //m_timer.Stop(); // InvokeMessage("ATE0", "接收"); if (this.ErrorReceived != null) { this.ErrorReceived.Invoke(null, new ReceiveErrorEventArgs() { Msg = "ATE0" }); } } if (data.Contains("$")) { if (data.Contains("1G21") || data.Contains("1G22") || data.Contains("1G23")) { // 发送回执 SendTru(dat.m_modemId); } if (data.Contains("$TS")) { Debug.WriteLine("接收数据正确完成,停止计时器"); int indexStart = data.IndexOf("$"); data = data.Substring(indexStart + 3); int length = data.IndexOf(CSpecialChars.ENTER_CHAR); data = data.Substring(0, length); data = "$" + data; data = data.Trim(); data = data + "TS"; if (this.ParseData(data, gprsId)) { if (this.ModemDataReceived != null) { this.ModemDataReceived.Invoke(this, new ModemDataEventArgs() { Msg = data, Value = dat }); } } } else { Debug.WriteLine("接收数据正确完成,停止计时器"); //m_timer.Stop(); int indexStart = data.IndexOf("$"); data = data.Substring(indexStart); int length = data.IndexOf(CSpecialChars.ENTER_CHAR); data = data.Substring(0, length); data = data.Trim(); //this.ParseData(data,gprsId); if (this.ParseData(data, gprsId)) { if (this.ModemDataReceived != null) { this.ModemDataReceived.Invoke(this, new ModemDataEventArgs() { Msg = data, Value = dat }); } } } } if (data.Contains("#")) { Debug.WriteLine("接收数据正确完成,停止计时器"); //m_timer.Stop(); int indexStart = data.IndexOf("#"); data = data.Substring(indexStart); int length = data.IndexOf(CSpecialChars.ENTER_CHAR); data = data.Substring(0, length); data = data.Trim(); //this.ParseData(data,gprsId); if (this.ParseData(data, gprsId)) { if (this.ModemDataReceived != null) { this.ModemDataReceived.Invoke(this, new ModemDataEventArgs() { Msg = data, Value = dat }); } } } m_timer.Stop(); } catch (Exception exp) { Debug.WriteLine(exp.Message); } } //end of for } //end of while }
// 获取下一条指令或者数据 private bool GetNextData(out ModemDataStruct dat) { return(DTUdll.Instance.GetNextData(out dat)); }
private static extern bool DSGetNextData(ref ModemDataStruct pDataStruct, ushort waitseconds);