//复位函数
        public static void reset()
        {
            int sendCount = 0;//每条指令最多发送的次数变量,如果次数超过则报错

            //UsbIO.sendToARM(Form1.SCPIReset + SCPIStrSumChkGet(Form1.SCPIReset) + Form1.end1 + Form1.end2);
            UsbIO.sendToARM(Form1.SCPIReset);
            Form1.Delay(40);//先延时40ms,然后判断是否返回接收成功的信息,如果返回继续发送下一条,没返回则,每隔一段时间发送一次相同的请求,五次后还没返回正确信息则报错
            while (!Form1.SCPIsendSuccessFlag)
            {
                sendCount++;
                Form1.Delay(900);//延时900ms
                if (sendCount < 5)
                {
                    //UsbIO.sendToARM(Form1.SCPIReset + SCPIStrSumChkGet(Form1.SCPIReset) + Form1.end1 + Form1.end2);
                    UsbIO.sendToARM(Form1.SCPIReset);
                }
                else
                {
                    break;
                }
                Form1.SCPIsendSuccessFlag = false; //返回该指令的接收成功信息后再把标志置为false
            }
            Form1.SCPIsendSuccessFlag = false;     //返回该指令的接收成功信息后再把标志置为false
            if (sendCount < 5)
            {
                sendCount = 0;
                Form1.dialogMessageShow("复位成功!");
            }
            else
            {
                Form1.dialogMessageShow("设备复位失败,请检查设备!");
            }
        }
예제 #2
0
        /*在SerialPort类中有DataReceived事件,当串口的读缓存
         * 有数据到达时则触发DataReceived事件,其中SerialPort.ReceivedBytesThreshold属性决
         * 定了当串口读缓存中数据多少个时才触发DataReceived事件,默认为1。
         */
        //数据接收处理函数
        public static void DataRecieve(object sender, SerialDataReceivedEventArgs e)
        {
            Form1.Delay(10);              //延时10毫秒,已达到直接读取整个一条指令的目的
            int count = port.BytesToRead; //获取输入缓冲区的字节个数

            if (count <= 0)
            {
                return;
            }
            lock ("lock")
            {
                byte[] buf = new byte[count];            //建立一个与缓冲区字节数大小相等字节数组
                port.Read(buf, 0, count);                //把缓冲区的数据存入buf数组
                ReceiveDataHandle.SCPIReceiveJudge(buf); //根据SCPI协议对从缓冲区读入的数据进行解析,并进行相应的数据操作
            }
        }
        //发送设置参数到下位机
        public static void SendToCMDMachine(SysSet.SettingsStruct setData)
        {
            string[] packData = PackageData(setData); //把设置参数封装成SCPI指令
            //需要添加参数发送成功标志,通过条件判断,读取返回的设置成功与否的标志
            int  sendCount = 0;                       //每条指令最多发送的次数变量,如果次数超过则报错
            bool setDataDownloadSuccessFlag = true;   //设置参数全部下载到下位机的成功标志

            foreach (string s in packData)
            {
                UsbIO.sendToARM(s);
                Form1.Delay(40);//先延时40ms,然后判断是否返回接收成功的信息,如果返回继续发送下一条,没返回则,每隔一段时间发送一次相同的请求,五次后还没返回正确信息则报错
                while (!Form1.SCPIsendSuccessFlag)
                {
                    sendCount++;
                    Form1.Delay(900);//延时900ms
                    if (sendCount < 5)
                    {
                        UsbIO.sendToARM(s);
                    }
                    else
                    {
                        setDataDownloadSuccessFlag = false;
                        break;
                    }
                }
                if (sendCount < 5)
                {
                    sendCount = 0;
                }
                else
                {
                    break;
                }
                Form1.SCPIsendSuccessFlag = false;//返回该指令的接收成功信息后再把标志置为false
            }

            Form1.SCPIsendSuccessFlag = false;//返回该指令的接收成功信息后再把标志置为false
            if (setDataDownloadSuccessFlag)
            {
                Form1.dialogMessageShow("参数下载成功!");      //弹出提示对话框
                Form1.setDataDownloadSuccessFlag = true; //参数下载成功的标志
            }
            else
            {
                Form1.dialogMessageShow("参数下载失败,请检查设备并重新下载!");//弹出提示对话框
            }
        }
        //发送SCPI模块联机顺序指令到下位机中
        public static bool SCPIConnect()
        {
            int sendCount = 0;//每条指令最多发送的次数变量,如果次数超过则报错

            foreach (string s in Form1.SCPIConnect)
            {
                //UsbIO.sendToARM(s+ SCPIStrSumChkGet(s) + Form1.end1+Form1.end2);
                UsbIO.sendToARM(s);
                Form1.Delay(40);//先延时40ms,然后判断是否返回接收成功的信息,如果返回继续发送下一条,没返回则,每隔一段时间发送一次相同的请求,五次后还没返回正确信息则报错
                while (!Form1.SCPIsendSuccessFlag)
                {
                    sendCount++;
                    Form1.Delay(900);//延时900ms
                    if (sendCount < 5)
                    {
                        //UsbIO.sendToARM(s + SCPIStrSumChkGet(s) + Form1.end1 + Form1.end2);
                        UsbIO.sendToARM(s);
                    }
                    else
                    {
                        break;
                    }
                }
                if (sendCount < 5)
                {
                    sendCount = 0;
                }
                else
                {
                    Form1.dialogMessageShow("SCPI联机指令发送失败");
                    break;
                }
                Form1.SCPIsendSuccessFlag = false;//返回该指令的接收成功信息后再把标志置为false
            }
            //UsbIO.sendToARM(Form1.successReceiveMes + SCPIStrSumChkGet(Form1.successReceiveMes) + Form1.end1 + Form1.end2);
            Form1.SCPIsendSuccessFlag = false;//返回该指令的接收成功信息后再把标志置为false
            if (sendCount == 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        //发送请求结果数据的函数
        public static void sendGet(string[] str)
        {
            bool setDataDownloadSuccessFlag = true;//请求结果的SCPI指令全部下载到下位机的成功标志
            int  sendCount = 0;

            foreach (string s in str)
            {
                UsbIO.sendToARM(s);
                Form1.Delay(40);//先延时40ms,然后判断是否返回接收成功的信息,如果返回继续发送下一条,没返回则,每隔一段时间发送一次相同的请求,五次后还没返回正确信息则报错
                while (!Form1.SCPIsendSuccessFlag)
                {
                    sendCount++;
                    Form1.Delay(900);//延时900ms
                    if (sendCount < 5)
                    {
                        UsbIO.sendToARM(s);
                    }
                    else
                    {
                        //五次连续发送该条指令都没有返回接收成功的返回信息,则参数请求失败
                        setDataDownloadSuccessFlag = false;
                        break;
                    }
                }
                if (sendCount < 5)
                {
                    sendCount = 0;
                }
                else
                {
                    break;
                }
                Form1.SCPIsendSuccessFlag = false; //返回该指令的接收成功信息后再把标志置为false
            }
            Form1.SCPIsendSuccessFlag = false;     //返回该指令的接收成功信息后再把标志置为false
            if (!setDataDownloadSuccessFlag)
            {
                Form1.dialogMessageShow("结果参数请求失败,测试已停止,请检查设备!"); //弹出提示对话框
                //是否关闭测试?
                Form1.closeTest();                                //调用关闭测试的函数
            }
        }