[教程]用开源工业控制软件PLCSharp扫码
今天我演示用PLCSharp做一个扫码小项目,效果是:
- 用PLCSharp建立一个Socket服务器
- 用一个客户端工具连接上它,发送一个指令
- PLCSharp拍一张照,解码,返回内容
开始配置工程

新建一个Socket服务器


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

配置相机


配置视觉项目


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

配置工艺流程脚本
收到网络指令,启动视觉项目,返回条码内容。

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


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;
}
}
}