Ejemplo n.º 1
0
        private void ThreadAddP(object point)
        {
            var t2P = (STRUCT_2_D_POINT)point;

            //已经添加的个数
            var index = t2P.m_indexNo;
            var td    = new CMc.T2_D_COMPARE_DATA[t2P.m_listOfAxis1Position.Count - index];

            var maxL = t2P.m_listOfAxis1Position.Count - index;

            //提取剩下的点
            for (var i = 0; i < maxL; i++)
            {
                td[i].m_px = t2P.m_listOfAxis1Position[i + index];
                td[i].m_py = t2P.m_listOfAxis2Position[i + index];
            }

            //当前索引
            var preIndex = 0;

            while (index < t2P.m_listOfAxis1Position.Count)
            {
                short pStatus;    //0 :正在进行比较输出 1:比较输出完成
                int   pCount;     //位置比较已输出次数
                short pFifo;      //当前空闲 FIFO
                short pFifoCount; //当前空闲 FIFO 剩余空间
                short pBufCount;  //FPGA 中 FIFO 剩余空间,FPGA 的 FIFO 总大小为 512,启动位置比较之前,压入的数据先进入 FPGA 的 FIFO
                CMc.GT_2DCompareStatus(t2P.m_cardNo, t2P.m_chnNo, out pStatus, out pCount, out pFifo,
                                       out pFifoCount, out pBufCount);

                if (pFifoCount >= 1024)
                {
                    if (index + pFifoCount > t2P.m_listOfAxis1Position.Count)          //如果pFifoCount大于剩余点数量,
                    {
                        pFifoCount = (short)(t2P.m_listOfAxis1Position.Count - index); //=总数-已加数
                    }
                    //压入数据
                    CMc.GT_2DCompareData(t2P.m_cardNo, t2P.m_chnNo, pFifoCount, ref td[preIndex], pFifo);
                    index    = index + pFifoCount;
                    preIndex = preIndex + pFifoCount;
                }
            }
        }