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.

[参考译文] CCS:GUI Composer:一次性发送参数的按钮

Guru**** 2999690 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/920223/ccs-gui-composer-button-to-send-parameter-all-at-once

工具/软件:Code Composer Studio

在我的 GUI Composer 应用程序上、有几个选项卡、其中包含几个数字框。 这些框包含目标应用程序的参数。 每次我需要重新启动目标时、所有这些参数都不会自动发送到目标。 我需要更改这些值以触发发送到目标。 是否有方法一次性将所有数字框的值发送到目标? 可能由按钮或目标命令触发。 我使用具有 JSON 协议的串行链路进行目标连接。

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Erik、

    我已就此联系过一位专家。 我们将在收到更多信息后尽快回复您。
    感谢您的耐心等待。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Patrick:

    感谢您的快速回答。 我根据您的说明实施了这些协议。它的工作方式是 perfekt。

    谢谢

    此致

    Erik

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 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 /*强制写入*/);
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    奇怪的是、您能否尝试翻转加热器基座和加热器阳极_减少、看看两者是否都已设置?

    在调试器中,调用 a.getValue()并在调用 a.setValue 之前比较当前值,当前值是否与您尝试设置的值不同?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我翻转呼叫时、没有区别、只有第一个呼叫将被传输。

    我添加控制台日志、如下所示:

    函数 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