日期:2014-05-17  浏览次数:21053 次

多线程发送,接收串口数据
目前多线程接收,解析数据处理好了,但用多线程发送数据时数据出了问题,一是有些指令没有数据返回,二是线程执行顺序是错了,我是用c#.NET 线程池处理的

小弟想实现这样的功能,用多线程发送数据,多线程接收数据,多线程解析数据,保证实时读取串口接收的数据。可下面贴出来的这些方法没有实现要的功能,琢磨了快一个星期了,希望各位大哥指教,能给好的指导思想,有串口多线程发送,接收的项目例子更好。

 /// <summary>
        /// 发送多条指令,用异步的方式接收数据
        /// </summary>
        /// <param name="vData">发送的数据和读取返回的数据)</param>
        ///  <param name="IsReturn">true 读取返回的数据 false 不返回数据)</param>
        /// <returns></returns>
        public bool SendData(string[] cmd, string tagData, bool fag)
        {
            DateTime a1 = DateTime.Now;
            //for (int i = 0; i < 1000; i++)
            //{
            foreach (string s in cmd)
            {
                if (s == string.Empty || tagData == string.Empty)
                    return false;
                if (!serialState)
                    this.InitPortCom();
                tab = parms.PtlParms(s);
                if (tab == null || tab.Rows.Count == 0)
                    return false;
                DataRow frameData = tab.Select(string.Format("type='{0}' and name='{1}' ", "Output", "命令长度"))[0];
                int frameLen = Convert.ToInt32(basefun.valtag(frameData["pms"].ToString(), "{命令长度}")) * 2 + 12;
                byte[] buffData = analy.SetPtlData(tab, tagData);
                serialPort.Write(buffData, 0, buffData.Length);
                this.WaiteSendData(new SendTaskInfo(buffData, s));
                this.WaiteReceiveData(new ReceiveTaskInfo(s, frameLen));
                this.WaitAnalysisData(new ReceiveTaskInfo(s, frameLen));
       &n