ApusIDE的组态变量的地址是固定的,无法在组态时实现地址偏移。
若在安装时,不同的设备可能使用了不同的地址,解决如下
1.在设置页面中,设置动态地址时,存入数据库
KVUtil::setVal("唯一id", "地址值");//注意第一个参数的唯一性
2.在HmiApp.cpp的HmiApp::construct()中,将相应的组态变量的代码复制到onReady中,如
vm->add("某变量", DataType::D_UINT16, R"({"dvc":"Modbus/RTU_DO","a":"1","r":"1","c":"[4区]输出寄存器","t":"1","id":"v27","l":"0"})")->onTriHandler(Event::READY, this, (EHandler) &HmiApp::v27_tri_cb);


3. 添加代码,获取第1步设置的值,并修改到这个组态变量的"a"值中
void HmiApp::onReady(){//用户在此添加客户化代码//1.定义一个默认地址string str_def = "111";//2.获取第1步设置的值,若没设置,则使用默认值string str_addr = KVUtil::getVal("唯一id", str_def);//3.先移除一下vm->remove("某变量");//4.把R"()"这串字符拿出来,组合变量的设置,"a"后面的值改成%sstring str_val = R"({"dvc":"Modbus/RTU_DO","a":"%s","r":"1","c":"[4区]输出寄存器","t":"1","id":"v27","l":"0"})";cout<<str_val<<endl;str_val = StringUtil::snprintf(str_val.c_str(), str_addr.c_str());cout<<str_val<<endl;//5.重新加入变量vm->add("某变量", DataType::D_UINT16, str_val)->onTriHandler(Event::READY, this, (EHandler) &HmiApp::v27_tri_cb);}