> 文章列表 > 自动化采集工具-前言

自动化采集工具-前言

自动化采集工具-前言

   在工业自动化项目中,上位软件需要跟PLC进行通信对接。一般的做法是定义好信号量,根据信号的变化执行对应的不同流程,比如当信号为1时执行,物料校验,信号为2时进行数据收集等等,因此PLC需要在相应的数据库定义好不同工位不同流程的DB块,块中包含各数据地址。传统的做法时需要对应不同工位定制需要读取的地址以及变量,写好不同的交互逻辑,通信与业务耦合在一起,当通信或者地址发生变化时,需要改动项目代码,有时会比较麻烦而且有改错或者改动到业务代码的风险。因此才有把采集通信数据块的业务,以及流程交互信号的业务抽离出来,最终向服务抛送数据,服务接口只需要关注数据业务的处理,不需要关系数据是如何获取的,标准可配置化的采集工具概念就诞生了,在应对中小场景的数据通信采集工作可以有很好的灵活性。

工具主要功能要求

  1. 交互信号可配置
  2. 数据DB地址可配置
  3. 调用数据服务回调可配置
  4. 日志报警可视化
  5. 构建读写DB RestAPI

一、交互信号可配置

其实工位上交互的流程都大同小异,都是依据变量的变化触发不同的操作,这部分代码如果每个项目每个工位单独实现 会是不少的工作量,因此工具可以实现配置化,既提高了防止出差的风险,又减少了工作量,而且灵活性也高 不会因为信号变化而影响到需要变更代码。

二、数据DB地址可配置

对于数据变量的增减可以进行配置,而不用在代码中频繁指定读取地址,提供可视化以及可维护性。

三、调用数据接口

当流程信号满足业务条件时需进行数据接口服务的调用,将当前工位的数据上传至业务接口进行处理,反馈后可能会有结果回写到PLC设备,完成一个双向业务通信的功能。

四、日志报警可视化

执行过程异常日志可视化,流程超时可视化,用于排错以及监控。

五、构建读写的webApi服务

对其他业务程序提供Api,读取变量,更新变量,使得其他业务也能轻松读写设备数据值,而不用关心实际的通信内容,大大提高了拓展性。

 public class TagGroup : CommonAttribute
    {

        /// <summary>
        /// 是否是标记组
        /// </summary>
        public bool IsGroup { set; get; } = false;

        /// <summary>
        /// 调用MQ
        /// </summary>
        public bool IsSendToMQ { set; get; }
        /// <summary>
        /// 交换器
        /// </summary>
        public string ExchangeName { set; get; }
        /// <summary>
        /// 是否回调数据
        /// </summary>
        public bool IsCallBack { set; get; }

        /// <summary>
        /// 回调数据Url
        /// </summary>
        public string CallBackApiUrl { set; get; }

        /// <summary>
        /// 是否回写到PLC
        /// </summary>
        public bool IsCallBackWrite { set; get; }

        /// <summary>
        /// 是否开启采集
        /// </summary>
        public bool IsCollection { set; get; }

        /// <summary>
        /// 检查写结果
        /// </summary>
        public bool IsConfirmRewrite { get; set; } = true;
        /// <summary>
        /// 采集间隔
        /// </summary>
        public int CollectInterval { set; get; }
        /// <summary>
        /// 附件Json 数据
        /// </summary>
        public string AppendJson { set; get; } = "{\\"WorkStationCode\\":\\"\\",\\"StepCode\\":\\"\\",\\"DeviceNumber\\":\\"\\"}";
        /// <summary>
        /// 回写  plc 标记列表
        /// </summary>
        public List<Tag> CallBackWriteTags { set; get; } = new List<Tag>();

        /// <summary>
        /// 标记集合
        /// </summary>
        public List<Tag> Tags { set; get; } = new List<Tag>();

        public List<TagGroup> Tag_groups { set; get; } = new List<TagGroup>();

        public List<DynamicParamModel> DynamicParams { get; set; }

        public List<Step> StepConfigs { get; set; }

        public bool IsHeartBeat { get; set; }
    }