如何在Cognex In-Sight Visio Studio中基于实时序列号创建FTP文件夹
Cognex相机FTP存图:动态创建序列号文件夹的实现方案
针对你已经能生成序列号命名图片的情况,只需补充先创建对应FTP文件夹,再上传图片的逻辑即可,分两种常用场景实现:
一、VisionPro图形化配置(无需编码)
- 确认你的ID/OCR工具已将读取到的序列号存入变量(比如
SerialNum)。 - 添加
FTP Tool到作业流程,配置FTP服务器的地址、账号、密码。 - 在FTP Tool的「Remote Path」中填写动态路径:
/目标根目录/${SerialNum},勾选「Create Directory if Not Exists」选项——这会自动检测文件夹是否存在,不存在则创建。 - 将本地的序列号命名图片(比如
${SerialNum}.jpg)设为FTP Tool的本地文件路径,远程路径指向刚创建的文件夹,执行上传即可。
二、SDK开发实现(以C#为例)
假设你已经通过Cognex SDK获取到序列号serialNumber,且本地图片serialNumber.jpg已生成:
1. 创建FTP文件夹
string ftpServer = "ftp://your-server-address/"; string remoteFolder = $"images/{serialNumber}"; string folderUri = ftpServer + remoteFolder; FtpWebRequest createFolderReq = (FtpWebRequest)WebRequest.Create(folderUri); createFolderReq.Method = WebRequestMethods.Ftp.MakeDirectory; createFolderReq.Credentials = new NetworkCredential("ftp-username", "ftp-password"); try { using (FtpWebResponse resp = (FtpWebResponse)createFolderReq.GetResponse()) {} } catch (WebException ex) { // 忽略"文件夹已存在"的异常,其他异常抛出 var resp = (FtpWebResponse)ex.Response; if (resp.StatusCode != FtpStatusCode.ActionNotTakenFileUnavailable) throw; }
2. 上传图片到指定文件夹
string localImgPath = $"C:/captured/{serialNumber}.jpg"; string remoteImgPath = $"{remoteFolder}/{serialNumber}.jpg"; FtpWebRequest uploadReq = (FtpWebRequest)WebRequest.Create(ftpServer + remoteImgPath); uploadReq.Method = WebRequestMethods.Ftp.UploadFile; uploadReq.Credentials = new NetworkCredential("ftp-username", "ftp-password"); using (Stream localStream = File.OpenRead(localImgPath)) using (Stream ftpStream = uploadReq.GetRequestStream()) { localStream.CopyTo(ftpStream); }
注意事项
- 确保FTP账号拥有创建文件夹和写入文件的权限;
- 加入网络异常处理(比如超时、断连),避免程序崩溃;
- 如果用其他语言(如VB.NET),逻辑一致,仅语法调整即可。
内容的提问来源于stack exchange,提问作者Andrey Kotelnikov
相关产品推荐
相关产品推荐

