C#联合Halcon视觉框架,可以根据项目配置工程,选择对应halcon脚本,可以编译修改脚本,调试相机,创建模板,可以查看检测信息,生产履历,保存历史图像,跟三菱FX5U以太网通讯,相机是海康网口sdk,halcon版本17.12,
在工业视觉领域,将 C# 与 Halcon 框架相结合,能够释放出令人惊叹的能力。今天就来聊聊如何利用这两者,打造一个功能丰富的视觉项目。
一、项目配置与 Halcon 脚本选择
在开始项目前,我们要先进行工程配置。Halcon 提供了脚本的方式来处理视觉任务,我们可以根据项目需求灵活选择对应的 Halcon 脚本。例如,在一个简单的产品外观检测项目中,可能会有检测产品表面划痕的脚本,以及检测产品是否组装完整的脚本。
在 C# 中,我们可以通过代码来加载不同的 Halcon 脚本。假设已经将 Halcon 的运行时环境集成到项目中,可以这样加载脚本:
using HalconDotNet; class Program { static void Main() { HOperatorSet.GenEmptyObj(out HObject ho_Image); HOperatorSet.ReadImage(out ho_Image, "your_image_path"); // 加载 Halcon 脚本文件 HDevProgram program = new HDevProgram("your_script_path.hdev"); HDevEngine engine = new HDevEngine(program); // 执行脚本中的函数 engine.Execute(); } }在这段代码中,首先生成一个空的 Halcon 对象ho_Image,然后读取一张图片。接着加载指定路径下的 Halcon 脚本文件,并创建一个执行引擎来执行脚本中的操作。
二、编译与修改脚本
Halcon 的脚本并不是一成不变的,我们可以根据实际情况对其进行编译和修改。比如在实际检测过程中,发现检测精度不够,就需要调整脚本中的参数。
C#联合Halcon视觉框架,可以根据项目配置工程,选择对应halcon脚本,可以编译修改脚本,调试相机,创建模板,可以查看检测信息,生产履历,保存历史图像,跟三菱FX5U以太网通讯,相机是海康网口sdk,halcon版本17.12,
在 Halcon 的开发环境中,可以直接打开脚本文件进行修改。修改完成后,重新编译。在 C# 代码中加载修改后的脚本,就可以使用新的逻辑进行视觉处理。
三、调试相机
本项目使用海康网口 SDK 的相机。在 C# 中调用海康相机 SDK 来调试相机,确保相机能够正常采集图像是关键的一步。以下是一个简单的相机初始化代码示例:
using System; using HikVision; class CameraManager { private Camera camera; public CameraManager() { camera = new Camera(); // 初始化相机参数 camera.Init("192.168.1.100", 8000, "admin", "password"); camera.Connect(); } public HObject GetImage() { byte[] imageData = camera.GetImageData(); // 将相机采集到的数据转换为 Halcon 可处理的图像对象 HOperatorSet.GenImage1(out HObject ho_Image, "byte", camera.Width, camera.Height, imageData); return ho_Image; } }这段代码定义了一个CameraManager类来管理相机的连接和图像获取。在构造函数中初始化相机并连接,GetImage方法获取相机采集的图像数据,并转换为 Halcon 能处理的图像对象。
四、创建模板
模板匹配在视觉检测中非常重要。使用 Halcon 可以轻松创建模板。以下是一个简单的创建模板示例:
HOperatorSet.GenEmptyObj(out HObject ho_Template); HOperatorSet.ReadImage(out HObject ho_ImageForTemplate, "template_image_path"); HOperatorSet.CreateShapeModel(ho_ImageForTemplate, "auto", 0, Math.PI, "auto", "none", "use_polarity", "auto", 0.5, out HTuple hv_ModelID); HOperatorSet.GenEmptyObj(out ho_Template); HOperatorSet.GetShapeModelContours(out ho_Template, hv_ModelID, 1);上述代码首先读取一张用于创建模板的图片,然后使用CreateShapeModel函数创建形状模型,并获取模型的轮廓作为模板。
五、查看检测信息与生产履历
在检测完成后,我们需要查看检测信息,并记录生产履历。可以在 C# 中使用数据库来存储这些信息。例如使用 SQLite 数据库:
using System.Data.SQLite; class HistoryManager { private SQLiteConnection connection; public HistoryManager() { string connectionString = "Data Source=production_history.db;Version=3;"; connection = new SQLiteConnection(connectionString); connection.Open(); // 创建表(如果不存在) string createTableQuery = "CREATE TABLE IF NOT EXISTS ProductionHistory (Id INTEGER PRIMARY KEY AUTOINCREMENT, DetectionResult TEXT, ImagePath TEXT, Timestamp DATETIME)"; SQLiteCommand command = new SQLiteCommand(createTableQuery, connection); command.ExecuteNonQuery(); } public void SaveHistory(string result, string imagePath) { string insertQuery = "INSERT INTO ProductionHistory (DetectionResult, ImagePath, Timestamp) VALUES (@result, @imagePath, @timestamp)"; SQLiteCommand command = new SQLiteCommand(insertQuery, connection); command.Parameters.AddWithValue("@result", result); command.Parameters.AddWithValue("@imagePath", imagePath); command.Parameters.AddWithValue("@timestamp", DateTime.Now); command.ExecuteNonQuery(); } }这段代码创建了一个HistoryManager类,用于管理生产履历的存储。构造函数中创建数据库连接并创建存储检测历史的表,SaveHistory方法将每次检测的结果、图像路径和时间戳保存到数据库中。
六、保存历史图像
为了后续分析和追溯,保存历史图像是必要的。可以使用 C# 的文件操作来实现:
string savePath = "history_images\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"; HOperatorSet.WriteImage(ho_Image, "jpeg", 0, savePath);上述代码将当前处理的图像以 JPEG 格式保存到指定的历史图像文件夹中,文件名包含时间戳。
七、与三菱 FX5U 以太网通讯
最后,实现与三菱 FX5U 的以太网通讯,可以将检测结果发送给 PLC。这里使用三菱提供的通讯库来实现:
using MitsubishiFx5u; class PLCCommunication { private Fx5uPlc plc; public PLCCommunication() { plc = new Fx5uPlc("192.168.1.200", 5007); plc.Connect(); } public void SendData(string data) { // 将数据转换为 PLC 可接收的格式并发送 byte[] dataBytes = System.Text.Encoding.ASCII.GetBytes(data); plc.Write(dataBytes, 0, dataBytes.Length); } }这段代码创建了一个PLCCommunication类,用于连接三菱 FX5U PLC 并发送数据。在构造函数中建立连接,SendData方法将检测结果数据转换为字节数组并发送给 PLC。
通过以上步骤,我们利用 C# 和 Halcon 17.12,结合海康相机以及与三菱 PLC 的通讯,打造了一个功能全面的视觉项目。无论是从相机调试、视觉处理,还是数据记录与通讯,各个环节紧密配合,为工业生产中的视觉检测提供了强大的解决方案。