//复位函数 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("设备复位失败,请检查设备!"); } }
//发送设置参数到下位机 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(); //调用关闭测试的函数 } }
//校验得到的SCPI指令是否正确 public static void SCPIReceiveCheck(byte[] buf) { int sum = 0; for (int i = 0; i < buf.Length - 3; i++) { sum += buf[i]; } byte low = (byte)(sum & 0xFF); low = (byte)(low | 0x80); if (low == buf[buf.Length - 3]) { SCPIReceiveAnalysis(Form1.receiveTempData.ToArray());//显示并解析收到的SCPI指令 } else { UsbIO.sendToARM(Form1.errorCode + Form1.end1 + Form1.end2);//返回指令校验错误信息 Form1.dialogMessageShow("接收的指令校验结果出错"); } }