码迷,mamicode.com
首页 > 其他好文 > 详细

Embedded Agent

时间:2018-09-20 01:09:52      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:group   back   同步   机制   集合   停止   线程间通信   sha   connect   

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

其他技术:1. 进程间通信:IpcPOSIX消息队列。2. 线程间通信:全局变量、BlockingQueue队列。3. 创建Timer机制: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的采集点采集时间到时。采集等待线程中:往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某个变量等。

Embedded Agent

标签:group   back   同步   机制   集合   停止   线程间通信   sha   connect   

原文地址:https://www.cnblogs.com/embeddedking/p/9665785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!