硬汉嵌入式论坛

 找回密码
 立即注册
查看: 547|回复: 5
收起左侧

[emWin] emwin实时曲线绘制

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2023-8-15 10:40:10 | 显示全部楼层 |阅读模式
我想做一个实时显示曲线的界面,通过串口通讯,有没有相关例程
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-8-15 14:50:04 | 显示全部楼层
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2023-8-15 18:05:37 | 显示全部楼层
eric2013 发表于 2023-8-15 14:50
二代示波器就可以
https://www.armbbs.cn/forum.php?mod=viewthread&tid=45785&extra=page%3D1

大佬你好,主要是读电机参数(转矩、转速、电流、功率),用graph控件的函数,能方便输出曲线吗?
用这三个函数
hData=GRAPH_DATA_YT_Create();
GRAPH_AttachData();
GRAPH_DATA_YT_AddValue()
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-8-16 11:21:42 | 显示全部楼层
飞过沧海的蝴蝶 发表于 2023-8-15 18:05
大佬你好,主要是读电机参数(转矩、转速、电流、功率),用graph控件的函数,能方便输出曲线吗?
用这 ...

也可以的。

Graph控件快速刷新波形的方法
https://www.armbbs.cn/forum.php? ... 4997&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2023-8-22 15:40:56 | 显示全部楼层
请问下为什么我选中复选框后,不能隐藏和显示曲线
static void _cbDialog2(WM_MESSAGE* pMsg) {
    WM_HWIN hItem;
    GRAPH_SCALE_Handle hScaleV;
    int     NCode;
    int     Id;
                flag=2;
    switch (pMsg->MsgId) {
               
    case WM_INIT_DIALOG:
        //
        /*Framewin*/
        hItem = pMsg->hWin;
        FRAMEWIN_SetText(hItem, "CAN Analyzer");
        FRAMEWIN_SetFont(hItem, GUI_FONT_20_1);
    //
    //BUTTON
    //
        hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
        BUTTON_SetText(hItem, "Screen1");
        //
      /* Checkbox1 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0);
        CHECKBOX_SetText(hItem, "");
        CHECKBOX_SetFont(hItem, GUI_FONT_20_ASCII);
        /* Checkbox2 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_1);
        CHECKBOX_SetText(hItem, "");
        CHECKBOX_SetFont(hItem, GUI_FONT_20_ASCII);
        /* Checkbox3 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_2);
        CHECKBOX_SetText(hItem, "");
        CHECKBOX_SetFont(hItem, GUI_FONT_20_ASCII);
        /* Checkbox4 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_3);
        CHECKBOX_SetText(hItem, "");
        CHECKBOX_SetFont(hItem, GUI_FONT_20_ASCII);
        /* Button0 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
        BUTTON_SetFont(hItem, GUI_FONT_20B_1);
        /* Text0 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
        TEXT_SetFont(hItem, GUI_FONT_20_1);
        TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
        TEXT_SetText(hItem, "CURRENT");
        /* Text1 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
        TEXT_SetFont(hItem, GUI_FONT_20_1);
        TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
        TEXT_SetText(hItem, "POWER");
        /* Text2 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
        TEXT_SetFont(hItem, GUI_FONT_20_1);
        TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
        TEXT_SetText(hItem, "RPM");
        /* Text3 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
        TEXT_SetFont(hItem, GUI_FONT_20_1);
        TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
        TEXT_SetText(hItem, "TORQUE");
                                 /* Edit0 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
        EDIT_SetText(hItem, " ");
        EDIT_SetMaxLen(hEdit, 10);
        WM_SetFocus(hEdit);
        /* Edit1 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
        EDIT_SetText(hItem, " ");
        EDIT_SetMaxLen(hEdit, 10);
        WM_SetFocus(hEdit);
        /* Edit2 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_2);
        EDIT_SetText(hItem, " ");
        EDIT_SetMaxLen(hEdit, 10);
        WM_SetFocus(hEdit);
        /* Edit3 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_3);
        EDIT_SetText(hItem, " ");
        EDIT_SetMaxLen(hEdit, 10);
        WM_SetFocus(hEdit);
        /* downdrop1 */
        hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_0);
        DROPDOWN_SetListHeight(hItem, 100);
        DROPDOWN_SetFont(hItem, GUI_FONT_24B_1);
        DROPDOWN_AddString(hItem, "0x53f");
        DROPDOWN_AddString(hItem, "0x33f");
        DROPDOWN_AddString(hItem, "0x58f");
                                DROPDOWN_AddString(hItem, "0x18EF1220");//126电机扭矩
        DROPDOWN_AddString(hItem, "0x18EF1020");//126电机转速、电流
        DROPDOWN_SetAutoScroll(hItem, 1);
        DROPDOWN_SetScrollbarWidth(hItem, 20);
        /* Graph*/
        hItem = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
        GRAPH_SetColor(hItem, GUI_WHITE, GRAPH_CI_BK);
        GRAPH_SetColor(hItem, GUI_BLACK, GRAPH_CI_GRID);
        GRAPH_SetBorder(hItem, 30, 30, 10, 10);
        GRAPH_SetGridDistX(hItem, 50);
        GRAPH_SetGridDistY(hItem, 50);
        GRAPH_SetLineStyleH(hItem, GUI_LS_DOT);
        GRAPH_SetLineStyleV(hItem, GUI_LS_DOT);
        GRAPH_SetGridVis(hItem, 1);
               
        hScaleV = GRAPH_SCALE_Create(15, GUI_TA_HCENTER | GUI_TA_LEFT,
            GRAPH_SCALE_CF_HORIZONTAL, 60);
        GRAPH_AttachScale(hItem, hScaleV);
        GRAPH_SCALE_SetFactor(hScaleV, 0.1);
        /* 创建垂直刻度对象 */
        hScaleV = GRAPH_SCALE_Create(15, GUI_TA_HCENTER | GUI_TA_LEFT,
            GRAPH_SCALE_CF_VERTICAL, 20);
        GRAPH_AttachScale(hItem, hScaleV);
        GRAPH_SCALE_SetFactor(hScaleV, 0.1);
                                // 创建数据对象
                                hDataSpeed = GRAPH_DATA_YT_Create(GUI_RED, 700, NULL, 0);
        break;
                                case WM_NOTIFY_PARENT:
        Id = WM_GetId(pMsg->hWinSrc);
        NCode = pMsg->Data.v;
        switch (Id) {
                                        case ID_CHECKBOX_0: //选中则显示曲线,否则隐藏
            if (NCode == WM_NOTIFICATION_VALUE_CHANGED) {
                if (CHECKBOX_IsChecked(WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0))) {
                    GRAPH_AttachData(hGraph, hDataSpeed);//在控件添加数据对象
                }
                else {
                    GRAPH_DetachData(hGraph, hDataSpeed);//从控件分离数据对象
                }
            }
            break;

        case ID_BUTTON_0:
            switch (NCode) {
            case WM_NOTIFICATION_CLICKED:
                break;
            case WM_NOTIFICATION_RELEASED:
                GUI_EndDialog(pMsg->hWin, 0);
                GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), _cbDialog1, WM_HBKWIN, 0, 0);
                break;
            }
            break;
            switch (NCode) {
            case WM_NOTIFICATION_CLICKED:

                break;
            }
            break;
            switch (NCode) {
            case WM_NOTIFICATION_CLICKED:
                break;
            case WM_NOTIFICATION_RELEASED:
                break;
            case WM_NOTIFICATION_VALUE_CHANGED:
                break;
            }
            break;
        }
        break;
    default:
        WM_DefaultProc(pMsg);
        break;
    }
}

static WM_HWIN CreateFramewin1(void) {
    WM_HWIN hWin;

    hWin = GUI_CreateDialogBox(_aDialogCreate2, GUI_COUNTOF(_aDialogCreate2), _cbDialog2, WM_HBKWIN, 0, 0);
    return hWin;
}

/**
* @brief 以对话框方式间接创建控件
* @retval hWin:资源表中第一个控件的句柄
*/

void MainTask(void) {
        int i;
        WM_HWIN hWin;
    #if GUI_SUPPORT_MEMDEV
        WM_SetCreateFlags(WM_CF_MEMDEV);
    #endif
    if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
        GUI_ErrorOut("内存不足");
        return;
    }
    GUI_Init();
    FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
    BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
    CreateFramewin1();
    while (1) {
                hWin=WM_GetActiveWindow();
                if(flag==2){
                        for(i = 0; i < 50; i++)
                        GRAPH_DATA_YT_AddValue(hDataSpeed, GraphValue);                       
                };
       GUI_Delay(30);
    }
        }

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-8-22 17:55:17 | 显示全部楼层
飞过沧海的蝴蝶 发表于 2023-8-22 15:40
请问下为什么我选中复选框后,不能隐藏和显示曲线
static void _cbDialog2(WM_MESSAGE* pMsg) {
    WM_H ...

1、正常进入对应的回调消息了吧
2、调用的句柄对不对
3、实现不好使的话,可以考虑删除这个Graph,然后重新创建个,不创建波形看看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 07:03 , Processed in 0.223077 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表