[教程]用开源工业控制软件PLCSharp扫码

📅 2026年08月08日 📂 技术

[教程]用开源工业控制软件PLCSharp扫码

今天我演示用PLCSharp做一个扫码小项目,效果是:

  • 用PLCSharp建立一个Socket服务器
  • 用一个客户端工具连接上它,发送一个指令
  • PLCSharp拍一张照,解码,返回内容

开始配置工程

新建工程

新建一个Socket服务器

Socket服务器

设置

设置IP/端口,保存,Socket服务器就好了。

IP端口

配置相机

配置相机1

配置相机2

配置视觉项目

视觉项目1

视觉项目2

在要检码的区域画框,视觉项目就设置完成了。

画框

配置工艺流程脚本

收到网络指令,启动视觉项目,返回条码内容。

工艺流程脚本

编辑脚本,编译,设置自动运行。

编辑脚本1

编辑脚本2

using System;
using System.Linq;
using PLCSharp.Models;
using PLCSharp.Core.Common;
using PLCSharp.VVMs.Connects;
using PLCSharp.VVMs.GlobalVariables;
using PLCSharp.VVMs.Homepage;
using PLCSharp.VVMs.MotionController;
using PLCSharp.VVMs.Robots;
using PLCSharp.VVMs.Vision;
using PLCSharp.VVMs.Connects;

public class Extension_0290cedeca4e4fee875231b24caa4787
{

    private Connect CurrConnect;

    private VisionFunction CurrVision;

    public void Run(GlobalModel globalModel, FlowModel flow)
    {
        switch (flow.Step)
        {
            case 0:
                CurrConnect = globalModel.GetConnect("TcpServer1");
                CurrVision = globalModel.GetVisionFunction("V1");
                CurrConnect.ReceiveInfo = "";
                flow.Step++;
                break;
            case 1:
                if (!string.IsNullOrEmpty(CurrConnect.ReceiveInfo))
                {
                    if (CurrConnect.ReceiveInfo != "T")
                    {
                        CurrConnect.SendAsync(CurrConnect.ReceiveInfo + " Not T");
                    }
                    else
                    {

                        flow.Step++;
                    }
                    CurrConnect.ReceiveInfo = "";
                }

                break;
            case 2:
                //视觉功能

                CurrVision.Flow.Reset();
                flow.TaskBool = CurrVision.RunAllAsync();
                flow.Step++;

                break;
            case 3:
                if (flow.TaskBool.IsCompleted)
                {
                    if (flow.TaskBool.Result)
                    {

                        flow.Step++;
                    }
                    else if (flow.CheckStepTime(3))
                    {
                        flow.Step--;
                        throw new Exception("视觉流程失败!");
                    }
                }
                break;
            case 4:
                flow.TaskBool = CurrConnect.SendAsync(CurrVision.ResultBarcode.Info);
                flow.Step++;

                break;
            case 5:
                if (flow.TaskBool.IsCompleted)
                {

                    //这里处理 接收到的消息 CurrConnect.ReceiveInfo
                    flow.Step = 1;
                }

                else if (flow.CheckStepTime(3))
                {

                    flow.Step--;
                    throw new Exception("发送超时!");
                }

                break;
        }
    }
}
An error has occurred. This application may no longer respond until reloaded. Reload 🗙