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"后面的值改成%s string 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); }
需要确认型号或具体项目?联系技术支持 ↗