MyEMS是行业领先的开源能源管理系统,基于Python语言开发。用于工厂、建筑、商场、数据中心、园区等能源数据采集、处理、分析、报表和展示。还具有设备管理、故障诊断、工单管理、人工智能优化控制等功能。MyEMS由资深专业团队开发维护,源代码基于MIT开源软件许可协议发布。用开源助力实现碳达峰碳中和目标。
本文介绍:在MyEMS管理界面中添加Modbus TCP数据源和数据点
注意:如果您修改了Modbus TCP数据源和点,请重新启动此服务:
systemctl restart myems-modbus-tcp.service
输入数据源协议:
modbus-tcp
数据源连接示例:
{"host":"10.9.67.99","port":502,"interval_in_seconds":60]}
数据点地址示例:
{"slave_id":1, "function_code":3, "offset":0, "number_of_registers":2, "format":", "byte_swap":true}
slave_id(从设备地址)
01 (0x01) Read Coils
02 (0x02) Read Discrete Inputs
03 (0x03) Read Holding Registers
04 (0x04) Read Input Registers
23 (0x17) Read/Write Multiple registers
offset(寄存器地址)
请求PDU中指定的起始寄存器地址
number_of_registers(寄存器个数)
请求PDU中指定的寄存器数量
format(格式)
使用python3库结构体格式化字节。
Python字节对象用于保存表示C结构的数据。
也可以作为格式字符串(下面解释)来描述C结构中的数据布局。
可选的第一个格式字符表示字节顺序、大小和对齐方式:
@: native order, size & alignment (default)
=: native order, std. size & alignment
<: little-endian, std. size & alignment
>: big-endian, std. size & alignment
!: same as >
其余字符表示参数的类型,必须完全匹配;
这些可以以十进制重复计数开头:
x: pad byte (no data); c:char; b:signed byte; B:unsigned byte;
?: _Bool (requires C99; if not available, char is used instead)
h:short; H:unsigned short; i:int; I:unsigned int;
l:long; L:unsigned long; f:float; d:double.
特殊情况(前面的十进制计数表示长度):
s:string (array of char); p: pascal string (with count byte).
特殊情况(仅以原生格式提供):
n:ssize_t; N:size_t;
P:an integer type that is wide enough to hold a pointer.
Special case (not in native mode unless ‘long long’ in platform C):
q:long long; Q:unsigned long long
格式之间的空白将被忽略。
byte_swap(字节翻转)
布尔值表示是否交换相邻字节。
交换32位(4字节)或64位(8字节)的相邻字节。
这不适用于小端和大端的交换,请使用format。
当number_of_registers为以太2(32位)或4(64位)时,该选项有效
否则,它将被忽略。
参考资料
[1]. http://myems.io
[2]. http://www.modbus.org/tech.php
[3]. https://github.com/ljean/modbus-tk
[4]. https://docs.python.org/3/library/struct.html#format-strings