摘要:
- 检测需求:将特征点检测结果数据保存到CSV文件的功能。
- 检测逻辑:首先检查文件是否存在,不存在则创建并写入表头。然后获取当前时间、将这些3D数据拼接成CSV格式的行数据,最后追加写入到指定路径的文件中。数据包含输入输出坐标、结果状态和匹配分数等信息,便于后续追溯分析
//数据保存地址stringfile=@"D:\DataLog\2.FuZhouZheng.csv";if(!File.Exists(file)){stringheader="时间,输入X,输入Y,输入Z,输入RX,输入RY,输入RZ,输出X,输出Y,输出Z,输出RX,输出RY,输出RZ,输出Result,输出PMA_Score";File.WriteAllText(file,header+Environment.NewLine);}//输出到文件夹stringcurrentTime=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//输入机械手坐标doubleinput_dX=this.Inputs.dX;doubleinput_dY=this.Inputs.dY;doubleinput_dZ=this.Inputs.dZ;doubleinput_dRx=this.Inputs.dRx;doubleinput_dRy=this.Inputs.dRy;doubleinput_dRz=this.Inputs.dRz;//输出3D坐标doubleoutput_X=this.Outputs.X;doubleoutput_Y=this.Outputs.Y;doubleoutput_Z=this.Outputs.Z;doubleoutput_RX=this.Outputs.RX;doubleoutput_RY=this.Outputs.RY;doubleoutput_RZ=this.Outputs.RZ;doubleoutput_Result=this.Outputs.Result;doubleoutput_PMA_Score=this.Tools.Cog3DPatMaxTool1.Results[0].Score;stringline=currentTime+","+input_dX+","+input_dY+","+input_dZ+","+input_dRx+","+input_dRy+","+input_dRz+","+output_X+","+output_Y+","+output_Z+","+output_RX+","+output_RY+","+output_RZ+","+output_Result+","+output_PMA_Score;using(StreamWritersw=newStreamWriter(file,true)){sw.WriteLine(line);}生成函数,并以日期为文件名:
/// <summary>/// 保存检测数据到CSV文件,自动按当天日期生成csv文件名/// </summary>/// <param name="pixData">像素坐标/像素测量值(字符串类型)</param>/// <param name="physicalData">物理尺寸/实际测量值(字符串类型)</param>/// <param name="result">产品检测结果,true=合格,false=不合格</param>publicvoidsaveData(stringpixData,stringphysicalData,boolresult){//以日期为文件名称stringfolder=@"D:\VisionNow\DataFile";//文件夹stringcurrentDay=DateTime.Now.ToString("yyyy-MM-dd");//文件名stringfileName=Path.Combine(folder,currentDay+".csv");//判断文件不存在:新建文件,写入表头(列名)//如果电脑没有 D:\VisionNow\DataFile 文件夹,代码直接报错!不会自动创建文件夹if(!File.Exists(fileName)){stringheader="时间,像素数据,物理数据,结果";File.WriteAllText(fileName,header+Environment.NewLine);}//当前时间stringcurrentTime=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//每次追加一行的数据stringline=currentTime+","+pixData+","+physicalData+","+result;//追加写入 csv 文件using(StreamWritersw=newStreamWriter(fileName,true))//StreamWriter(file, true):true = 追加模式,不会覆盖原有数据; using:自动关闭文件,防止文件占用{sw.WriteLine(line);//写入一行并换行}}调用函数:
//保存数据saveData(ca.Results[0].PositionX.ToString("f1"),realValue.ToString("f1"),Convert.ToBoolean(mToolBlock.Outputs["FlowResult"].Value));