工具/软件:Code Composer Studio
在我的 GUI Composer 应用程序上、有几个选项卡、其中包含几个数字框。 这些框包含目标应用程序的参数。 每次我需要重新启动目标时、所有这些参数都不会自动发送到目标。 我需要更改这些值以触发发送到目标。 是否有方法一次性将所有数字框的值发送到目标? 可能由按钮或目标命令触发。 我使用具有 JSON 协议的串行链路进行目标连接。
谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
在我的 GUI Composer 应用程序上、有几个选项卡、其中包含几个数字框。 这些框包含目标应用程序的参数。 每次我需要重新启动目标时、所有这些参数都不会自动发送到目标。 我需要更改这些值以触发发送到目标。 是否有方法一次性将所有数字框的值发送到目标? 可能由按钮或目标命令触发。 我使用具有 JSON 协议的串行链路进行目标连接。
谢谢
您好 Erik、
您可以在设计中添加按钮、而不是在 javascript 中添加一个 click 侦听器。 在 Click 侦听器处理程序中、从小工具和目标变量绑定中获取值。 然后使用强制写入标志将小工具中的值设置为目标变量绑定。
使用设计器中的菜单创建新的 javascript 文件、并取消注释文件末尾的示例"init"代码。 将此示例代码添加到该.async 回调函数中。
templateObj.$.ti_widget_button.addEventListener ('click'、()=>{
const 值= templateObj.$.ti_widget_textbox.value;
const blink = gc.DataBind 注册表.getBinding ('ti_model_streaming.blink');
blink.setValue(value、空/* ProgressMonitor */、true /*强制写入*/);
});
此致、
Patrick
尊敬的 Patrik:
我发现、对于单个值、它有效、但对于多个值、只发送第一个值。
下面是我的实现:
var initComplete = false;
增值经销商模板目标;
//在尝试访问应用程序模板之前等待 DOMContentLoaded 事件
var init = function(){
templateObj = document.querySelector ('#template_obj');
//等待模板启动 Dom 更改事件以指示它已"放大"
//然后再尝试访问应用程序中的组件。
templateObj.addEventListener ('dm-change'、function(){
if (initComplete) return;
this.async (function()){
initComplete = true;
console.log ("应用程序模板已盖章。");
//现在模板已标记,您可以使用“自动节点查找”$语法访问小工具。
//例如,要访问 ID 为'widget_id'的 widget,可以使用 templateObj.$.widgetId
templateObj.$.ti_widget_button.addEventListener ('click'、()=>{
update_element ("ti_widget_numberbox_heater_base"、"a");
update_element ("ti_widget_numberbox_heater_阳 极_reimation"、"b");
update_element ("ti_widget_numberbox_heater_keeper _reimination"、"c");
update_element ("ti_widget_numberbox3"、"d");//Keeper
update_element ("ti_widget_numberbox4"、"e");//Keeper
update_element ("ti_widget_numberbox5"、"f");//Keeper
update_element ("ti_widget_numberbox6"、"g");//阳极设置电流
});
},1);
});
};
templateObj = document.querySelector ('#template_obj');
if (模板对象){
init();
}否则{
document.addEventListener ('OMContentLoaded'、init.bind (此))
}
函数 update_element (SID、绑定){
VAR obj = document.getElementById (SID);
const 值= obj.value;
//const 值= templateObj.$.ti_widget_numberbox_heater_base.value;
const a = gc.DataBind 注册表.getBinding ('ti_model_streaming' +绑定);
a.setValue(value、空/* ProgressMonitor */、true /*强制写入*/);
}
当我翻转呼叫时、没有区别、只有第一个呼叫将被传输。
我添加控制台日志、如下所示:
函数 update_element (SID、绑定){
VAR obj = document.getElementById (SID);
const 值= obj.value;
const a = gc.DataBind 注册表.getBinding ('ti_model_streaming' +绑定);
console.log (value +"-"+ a.getValue ()+"-"+绑定);
a.setValue(value、空/* ProgressMonitor */、true /*强制写入*/);
}
我获得了日志、它也可以在某种程度上用于更多项目。 日志:
首次:
0.8 -未定义- b
2 -未定义- A
0.8 -未定义- c
0 -未定义- d
0 -未定义- e
0 -未定义- f
0 -未定义- g
后来的:
0.8 - 0.8 - b
2 - 2 - A
0.8 - 0.8 - c
0 - 0 - d
0 - 0 - e
0 - 0 - f
0 - 0 - g
激活日志后、将发送更多项目、有时会全部发送。 但不可靠。 对我来说、看起来更改不会排队。 因此传输层与第一项有总线连接、并丢弃以下内容。
此致
Erik
您好 Erik、
我创建了一个演示并发布到 Gallery 此处 https://dev.ti.com/gallery/view/4199/Demo_SendValuesWithButton/ver/1.0.0/。
本演示使用的是具有 XDS 程序模型的 MSP432。 请参阅应用程序中的 javascript 文件以了解设置值的实现。 它有两个实现、一个是序列化的、另一个不是。 该应用程序中还包含固件二进制文件(.out)。
在您的应用中、尝试将小工具的值转换为数字、看看它是否适合您。 即 a.setValue(+value、null、true);
此致、
Patrick
尊敬的 Patrick:
感谢您的支持。 最后、它可以正常工作。 我实现了串行化版本。 另一个问题导致了问题:
来自 TI 工程师的日志:
按下按钮:
{"ti_model_program\":{\b\":0.8}}\n"]}
{"ti_model_program\":{"a\":2}}\n"]}
{"ti_model_program\":{"c\":0.8}}\n"]}
更改单个值:
{\"a\":2.1}\n"]}
字符串"ti_model_program"导致目标应答上的缓冲区溢出也不是目标预期的。
我改变了
const 绑定= gc.DataBind 注册表.getBinding ('ti_model_program.'+ bindingId);
更改为
const 绑定= gc.DataBind 注册表.getBinding (bindingId);
问题已解决。 非常好的支持、谢谢
此致、
Erik