//private bool inDataTicks = false; private void tmrData_Tick(object sender, EventArgs e) { //if (inDtuTicks || inDataTicks) return; //inDataTicks = true; try { //读取数据 DTUDataStruct dat = new DTUDataStruct(); while (this.DTUService.GetNextData(out dat)) { LogRecive(dat); Application.DoEvents(); if (!DTUService.Started) { return; } //自动回应 if (dat.m_data_type == 1 && this.chkSet_AutoReply.Checked) { if (!this.DTUService.SendHex(dat.m_modemId, dat.m_data_buf, dat.m_data_len)) { LogWarning("自动回应数据", DTUService.LastError); } } } } catch (Exception ee) { LogWarning("读取数据", ee.Message); } finally { //inDataTicks = false; } }
private void LogRecive(DTUDataStruct dat) { if (dat.m_data_type == 2) { string text = System.Text.Encoding.Default.GetString(dat.m_data_buf, 0, dat.m_data_len); this.Log("从用户 " + dat.m_modemId.ToString("X").PadLeft(8, '0') + " 接收控制命令回应", "(TextLen=" + text.Length.ToString() + ")\r\n" + text, Color.LightSeaGreen); } else if (this.cboSet_RcvType.SelectedIndex == 0) { string text = System.Text.Encoding.Default.GetString(dat.m_data_buf, 0, dat.m_data_len); this.Log("从用户 " + dat.m_modemId.ToString("X").PadLeft(8, '0') + " 接收文本", "(TextLen=" + text.Length.ToString() + ")\r\n" + text, Color.LightSeaGreen); } else { this.Log("从用户 " + dat.m_modemId.ToString("X").PadLeft(8, '0') + " 接收字节", "(HexCount=" + dat.m_data_len.ToString() + ")\r\n" + Util.ByteArrayToHexString(dat.m_data_buf, 0, dat.m_data_len), Color.LightSeaGreen); } if (dat.m_data_len > 0) { Byte[] Buffer = new byte[dat.m_data_len]; Array.Copy(dat.m_data_buf, 0, Buffer, 0, dat.m_data_len); _Client_OnReceived(Buffer); } }
//public static extern bool DLLGetNextData(ref DTUDataStruct pDataStruct, ushort waitseconds); private static extern bool DLLGetNextData(ref DTUDataStruct pDataStruct, ushort waitseconds);
public bool GetNextData(out DTUDataStruct dat) { dat = new DTUDataStruct(); return(DLLGetNextData(ref dat, 0)); }