菜单

如何在组态变量中使用动态设备地址

下载

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);
}
上一个
如何修改设备名称
下一个
字体相关问题
最近修改: 2026-07-25Powered by