# 配置文件
## 命名规范
### TAG名
注册到UA TAG名称一律用大驼峰,如:"AlarmFlag"
### 设备名
在设备配置中一律用大写
### 设备下TAG分类
在设备配置中一律用大写
### 设备配置
设备编号(no) 用大写
模板文件名(template) 用大写
其余所有字段都小写
### 设备模板
所有key全部用小写
## UA Browse 根节点名称规范
### System 下层 
用大驼峰
### System 下下层
用大驼峰
### Objects 下层
和[设备名]一样
### Objects 下下层
和[设备下TAG分类]一样



## 模板
所有南向采集的设备点位文件,按照类型,厂商,型号,其他附加信息的规则命名
项目中用到的模板,全部放置此处
```
/app/template/
```

ems自动产生的模板复用UA,无需维护
```
ems_template_master_config.json
```
## 采集设备
每次随项目定制默认配置
```
device_config.json
```

ems自动产生的设备,无需维护
```
ems_device_master_config.json
```

## 系统

端口配置
```
port_config.json
```

系统配置
```
proto_sys.json
```

系统运行时参数,如果和系统配置参数冲突,运行时CLI参数优先级更高
```
/app/proto_forward -l 6 -e
```



# 开发笔记
## 调试
rm *.ipk;scp ghzhang@192.168.22.104:lede-sdk-imx6_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/bin/packages/arm_cortex-a7_neon-vfpv4/base/proto_forward_5.253.0000_arm_cortex-a7_neon-vfpv4.ipk .;opkg install --force-reinstall proto_forward_5.253.0000_arm_cortex-a7_neon-vfpv4.ipk;logread -f | grep proto

## 打开core
ulimit -c unlimited

## 运行
scp ghzhang@192.168.22.104:lede-sdk-imx6_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/staging_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/root-imx6/app/proto_forward /app;/app/proto_forward -e -c -l5


## 拷贝
scp /tmp/*.core ghzhang@192.168.22.104:tmp/ ;rm proto_forward.*.core

## 调试
staging_dir/toolchain-arm_cortex-a7+neon-vfpv4_gcc-5.4.0_musl-1.1.16_eabi/bin/arm-openwrt-linux-gdb staging_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/root-imx6/app/proto_forward ~/tmp/proto_forward.1687347760.23855.11.core

## 拷贝库到SDK
cp /home/ghzhang/openwrt_lora/staging_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/usr/lib/libopen62541.so* ~/lede-sdk-imx6_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/staging_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/usr/lib/

cp /home/ghzhang/openwrt_lora/staging_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/usr/include/open62541.h  ~/lede-sdk-imx6_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/staging_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/usr/include/open62541/

## 拷贝动态库到板子
scp ghzhang@192.168.22.104:lede-sdk-imx6_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/staging_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/usr/lib/libopen62541* /usr/lib/

scp ghzhang@192.168.22.104:openwrt_lora/staging_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/root-imx6/usr/lib/libopen62541.so* /usr/lib/
scp ghzhang@192.168.22.104:openwrt_lora/staging_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/usr/lib/libopen62541.so* /usr/lib/

#7623的

在104服务器操作

密码 bms123 

代码
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/app/proto_forward    root@192.168.20.59:/root

库
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libopen62541.so* root@192.168.20.59:/usr/lib/ ;
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libdyutils.so* root@192.168.20.59:/usr/lib/;
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libmqtt_session.so* root@192.168.20.59:/usr/lib/;
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libipc_helper.so* root@192.168.20.59:/usr/lib/;
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libubuslog.so root@192.168.20.59:/usr/lib/;
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libmbedtls.so* root@192.168.20.59:/usr/lib/;
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libmbedx509.so* root@192.168.20.59:/usr/lib/;
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libmbedcrypto.so* root@192.168.20.59:/usr/lib/;
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/lib/libubox.so.20210516* root@192.168.20.59:/lib/;
scp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/lib/libubus.so.20210630* root@192.168.20.59:/lib/;

cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/app/proto_forward             .;
cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libopen62541.so*      .;
cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libdyutils.so*        .;
cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libmqtt_session.so*   .;
cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libipc_helper.so*     .;
cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libubuslog.so         .;
cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libmbedtls.so*        .;
cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libmbedx509.so*       .;
cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/usr/lib/libmbedcrypto.so*     .;
cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/lib/libubox.so.20210516*      .;
cp  /home/ghzhang/openwrt-20220127/staging_dir/target-aarch64_generic_glibc/root-rockchip/lib/libubus.so.20210630*      .;
配置文件


## 默认opcua端口
4840

## 同步模板
scp ghzhang@192.168.22.104:lede-sdk-imx6_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/package/proto_forward/files/template_demo*.json /app/config/

## 拷贝库到自己sdk
/home/ghzhang/openwrt_lora/build_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/open62541-1.3.6/include
/home/ghzhang/openwrt_lora/build_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/open62541-1.3.6/ipkg-arm_cortex-a7_neon-vfpv4/open62541/usr/lib/

## 打开的包
findutils-xargs

## 2023-11-6最新编译

 前面的几行替换
lede-sdk-imx6_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/staging_dir/toolchain-arm_cortex-a7+neon-vfpv4_gcc-5.4.0_musl-1.1.16_eabi/include/netinet/if_ether.h
----------------------------------
/* -#ifndef _NETINET_IF_ETHER_H */
/* Check for <linux/if_ether.h> - _LINUX_IF_ETHER_H will also work */
#if !defined(_NETINET_IF_ETHER_H) || !defined(ETH_ALEN)
#define _INCLUDE_NETINET_IF_ETHER_H
#define _NETINET_IF_ETHER_H
#define _LINUX_IF_ETHER_H /* linux/if_ether.h defines the same stuff */

#define _NETINET_IF_ETHER_H

#include <stdint.h>
#include <sys/types.h>
----------------------------------

lede-sdk-imx6_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/staging_dir/toolchain-arm_cortex-a7+neon-vfpv4_gcc-5.4.0_musl-1.1.16_eabi/include/linux/if_ether.h
----------------------------------
/*#ifndef _LINUX_IF_ETHER_H
#define _LINUX_IF_ETHER_H*/
/* -#ifndef _NETINET_IF_ETHER_H */
/* Check for <linux/if_ether.h> - _LINUX_IF_ETHER_H will also work */
#if !defined(_NETINET_IF_ETHER_H) || !defined(ETH_ALEN)
#define _INCLUDE_NETINET_IF_ETHER_H
#define _NETINET_IF_ETHER_H
#define _LINUX_IF_ETHER_H /* linux/if_ether.h defines the same stuff */

#define _NETINET_IF_ETHER_H



#include <linux/types.h>

----------------------------------
## 大概的功率设置过程
1. 对等或者单柜模式或者bau
~~~
从策略中获取功率
-> 设置有功功率[SetPower] -> 经过防逆流或者需量，柜分配(对等模式)
-> LC输入功率[LocalCtrlPower]-> 检查禁充禁放功率分配,BMS功率限制
-> 柜X期望有功功率[ExpectPowerX]和期望有功功率[ExpectPower],期望有功功率等于柜X期望有功功率的总和 -> 写入到PCS
~~~
2. 主从LC
~~~
从策略中获取功率
-> 设置有功功率[SetPower] -> 经过防逆流或者需量，柜分配
-> LC输入功率[LocalCtrlPower]-> 检查LC的禁充禁放功率分配，检查LC的系统状态
-> 柜X期望有功功率[ExpectPowerX]和期望有功功率[ExpectPower],期望有功功率等于柜X期望有功功率的总和 -> 写入LC -> (后面流程都在LC)
-> 设置有功功率[SetPower] -> [检查禁充禁放功率分配,BMS功率限制] 
-> 柜X期望有功功率[ExpectPowerX]和期望有功功率[ExpectPower],期望有功功率等于柜X期望有功功率的总和 -> 写入到PCS
~~~


# 构建固件
缺省构建ems固件
## 构建ems
product=ems ./build.bash

## 构建emu
product=emu ./build.bash
