储能EMS架构篇

为什么选择python开发

简单!!!

怎么解决同时采集多个设备问题

因python程序的GIL锁机制,导致即使开启多线程,也不能保证同步执行,在计算密集型任务中,因为GIL确保了在任何给定时间只有一个线程可以执行Python字节码。因此采用多进程解决采集设备多并发的问题。

带屏幕的EMS

个人选择做带屏幕的EMS,因为个人亲身体验来看,这样不仅可节省资源,在满足ems基本功能的前提下。又适应了物联网发展的趋势。

基本设计

EMS最大的一个挑战就是不同的项目,有不一样的数据点表,怎么解决这个问题,就是将各个设备的点表存储成单个点表。然后根据项目需要,加载不同的点表。

软件架构设计

这里将EMS软件架构划分成,数据采集服务、数据清洗服务、数据业务逻辑、API服务、后端管理平台、前端管理平台。最重要的就是数据采集服务。

数据库选择

前期如果是工商业柜体,则数据量不会很大,数据点位大概在2000点以内。而且还需要有很多附加的关系表。因此没必要采用influxdb这种时许数据库,为了降低难度,个人采用更熟悉的mysql数据库。如何使用influxdb数据库会在后续篇章描述。

数据采集服务

在main.py中开启数据采集服务。以及在数据库中查询相关的需要开启的进程的设备。我将各个设备按如下划分成几个进程,PCS一个进程、BMS一个进程、不管有几个电表,合并到一个进程,温湿度传感器、空调等其他设备开一个进程。故障保护一个进程,防逆流和需量保护一个进程。剩余有光伏的话,也会再开启一个进程。

数据库equipments设计

第一步查询设备

 SELECT * from tbl_equipments

第二步,根据上面描述的情况,和数据库查询出的字段,建立进程,如下示例。

 Process(target=acquisition_pcs.process,
            args=(logger,1,'127.0.0.1', '502', interval_in_seconds)).start()

第三步编写进程相关代码,其实基本都是modbus协议,基本就是modbusRTU和modbusTCP两个协议。

进程的内容

检查连接-连接对应的设备点表-查询-解析数据-入库

modbus库采用modbus_tk

点表设计

如此重复将所有的进程编写完成,最后在main.py中加上日志操作。则完成相关采集服务。

    logger = logging.getLogger('myems-modbus-tcp')
    # specifies the lowest-severity log message a logger will handle,
    # where debug is the lowest built-in severity level and critical is the highest built-in severity.
    # For example, if the severity level is INFO, the logger will handle only INFO, WARNING, ERROR, and CRITICAL
    # messages and will ignore DEBUG messages.
    logger.setLevel(logging.ERROR)
    # create file handler which logs messages
    fh = RotatingFileHandler('myems-modbus-tcp.log', maxBytes=1024*1024, backupCount=1)
    # create formatter and add it to the handlers
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    # add the handlers to logger
    logger.addHandler(fh)
    # send logging output to sys.stderr
    logger.addHandler(logging.StreamHandler())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张凯的工作室

给我一块,我替你解决问题

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值