• Embedded Agent


    第三方库:1. 采集数据端:plcconnector、libmodbus、RS232。2. 发送数据端:libmosquitto。3. 数据存储:libsqlite3。

    其他技术:1. 进程间通信:IpcPOSIX消息队列(阻塞读写)。2. 线程间通信:BlockingQueue队列(阻塞读取)。3. 定时器:timerfd.h。4. 线程同步:异步阻塞IO(epoll)、互斥锁(mutex)。5. 智能指针:std::make_shared<class>()。6. 数据格式化:JsonFormatter

    1. 获取采集点:利用plcconnector库获取PLC程序中暴露的采集点,Format成Json格式后发送到MQTT SERVER端。

    2. 配置采集点:Web界面配置需要采集的Tag点,主要包括采集频率、发送频率、报警阈值、计算公式等。

    3. 开始采集:Web界面发送配置到DataAgent,DataAgent根据不同的采集、发送频率分成不同的Group,分别注册不同的采集点集合、采集Timer定时器、发送Timer定时器

    4. 采集逻辑:DataAgent主进程中:当某个Group的采集点采集时间到时。epollevent线程中:往BlockingQueue里面放一个request。发送请求到PlcAdapter的线程中:得到请求,向PlcAdapter发送采集命令。

          PlcAdapter主进程中:收到开始采集命令开始采集,采集完成后将数据发送给DataAgent,DataAgent将数据保存到sqlite数据库中。

    5. 发送逻辑:DataAgent主进程中:当某个Group的采集点发送时间到时。发送等待线程中:往BlockingQueue里面放一个request。发送数据线程中:得到请求,将这个Group对应采集到的数据从DataPool中取出,Format成Json格式,并发送到MQTT Server。如果发生成功则删除sqlite数据库中的这些数据,如果失败,则等到下次发送时间一起发送。

    6. 反向控制逻辑:在Mosquitto库初始化时初始化了on_message、on_connect、on_disconnect、on_publish和on_subscribe等callback,一旦MQTT Server端下达命令,DataAgent会得到响应调用on_message中的方法执行对应命令,包括开始采集、停止采集、开始灌溉、停止灌溉、下载时间表、赋值给PLC某个变量等。

  • 相关阅读:
    CPU飙高,OOM排查?
    反射
    Mybatits
    spring 基础问题
    java中格式化数字0和#区别
    java中File对象的mkdir和mkdirs的区别
    java截取字符串几种方式
    java工厂模式
    Java获取文件路径的几种方式
    jxl生成excel时,增加批注和冻结窗口
  • 原文地址:https://www.cnblogs.com/embeddedking/p/9665785.html
Copyright © 2020-2023  润新知