通过MINIC教程DEMO讲述如何使用MINIC设置变量值。
MINIC编辑器
-
1
1. 上位机VisualTFT内部已集成了MINIC开发编译环境,点击菜单栏工具,选择MINIC编辑器,如图所示。
-
2
2. 打开编辑器后,Visual TFT画面如图所示;
END
实现功能
-
1
教程DEMO中功能的实现步骤如下:
1. 新建工程;
2. 配置MODBUS协议;
3. 画面配置;
4. 运行预览。
-
2
1.1.1 新建工程
打开VisualTFT软件的菜单栏【文件】→【新建工程】,弹出新建工程窗口,设置工程名称、路径、 设备型号,点击【确定】,如图所示;
-
3
1.1.2 MODBUS协议配置
1. 点击软件VisualTFT菜单栏中的【工具】并选择【协议与变量设置】,如图所示;
-
4
在“协议与变量设置”窗口中,先点击左侧的【协议设置】,然后在右侧【启用协议】选择“启用”,【协议类型】选择“MODBUS从机协议”,协议配置详细如图 所示。
-
5
配置协议完成后,点击【变量定义】,然后点击“添加”按钮添加变量,详细配置如图所示;
-
6
1.1.3 配置工程画面
1. 首页画面配置
画面中放置六个按钮并设置为切换画面属性,分别指向相对应的画面,如图所示;
-
7
2. on_init画面配置
(1) 打开VisualTFT软件的菜单栏【工具】→【协议与变量设置】,在协议与变量设置画面中添加两个保存寄存器,寄存器地址分别为0和1并分别命名为“电压”和“电流”,如图1所示;
(2) 将画面中文本控件1、2分别绑定变量“电压”、“电流”,如图2所示。
-
8
(3) 画面功能:系统初始化时调用函数对变量赋值。对应的功能函数编写程序如程序清单 1所示;
程序清单 1 on_init程序
/**************************************************************************
** 函数:on_init
** 功能:系统执行初始化
** 注意:局部变量定义,只能在函数的最前面定义
***************************************************************************/
void on_init()
{
//
// 画面:on_init
// 功能:初始化电压为10、电流为2
//
"电压" = 10;
"电流" = 2;
......
}
-
9
3. on_systick画面配置
(1) 打开VisualTFT软件的菜单栏【工具】→【协议与变量设置】,在协议与变量设置画面中添加一个保存寄存器,寄存器地址为2并命名为“运行时间”,如图 1所示;
(2) 将画面中文本控件1绑定变量“运行时间”,如图2所示;
-
10
(3) 画面功能:系统运行后,每一秒调用一次on_systick,在on_systick函数内添加一个计数器,可以算出运行时间。对应的功能函数编写程序如程序清单 2所示。
程序清单 2 on_systick
/**************************************************************************
** 函数:on_systick
** 功能:定期执行任务(1秒1次)
** 局部变量定义,只能在函数的最前面定义
***************************************************************************/
void on_systick()
{
//
// 画面:on_systick
// 功能:每次增加一秒
// 注意:局部变量定义,只能在函数的最前面定义
//
++"运行时间";
}
-
11
4. on_timer画面配置
(1) 打开VisualTFT软件的菜单栏【工具】→【协议与变量设置】,在协议与变量设置画面中添加一个保存寄存器,寄存器地址为3并命名为“计数”,如图 1所示
(2) 将画面中文本控件3绑定变量“计数”,如图 2所示。
-
12
(3) 画面功能:按下开启定时器后,按照设定的时间循环调用定时器函数on_timer,每次调用都让计数器自加一,通过绑定文本控件将计数器的值在画面中显示出来,对应的功能函数编写程序如程序清单 3和程序清单 4所示
程序清单 3 on_timer程序
void on_timer(int timer_id)
{
if(timer_id == 0)
{
//
//画面:on_timer
//功能:计数器,记录定时器触发次数
//注意:局部变量定义,只能在函数的最前面定义
//
"计数"++;
}
}
程序清单 4 按钮触发函数
/****************************************************************************
** 函数:on_control_notify
** 功能:控件值更新通知
** 参数:screen_id,画面ID
** 参数:control_id,控件ID
** 参数:value,新值
** 注意:局部变量定义,只能在函数的最前面定义
****************************************************************************/
void on_control_notify(int screen_id,int control_id,int value)
{
if(screen_id == 3)
{
//
// 功能:按钮控制开启定时器和停止定时器
// 函数:start_timer(timer_id, timeout, countdown, repeat)
// 函数功能:启动定时器
// 参数: timer_id, 定时器ID;
// timeout, 超时时间;
// countdown, 1顺计时,0倒计时
// repeat 计时次数,0无限循环
//
if(control_id == 1 && value == 1)
{
start_timer(0, 1000, 1, 0 );
}
//
// 函数:stop_timer(timer_id)
// 函数功能:启动定时器
// 参数: timer_id, 定时器ID;
//
if(control_id == 2 && value == 1)
{
//停止定时器
stop_timer(0);
}
}
......
}
-
13
5. on_variant_update 画面配置
(1) 打开VisualTFT软件的菜单栏【工具】→【协议与变量设置】,在协议与变量设置画面中添加三个保存寄存器,寄存器地址分别为4、5、6并将寄存器分别命名为“速度”、“时间”、“里程”,如图1所示
(1) 将画面中文本控件1、2、3分别绑定变量“速度”、“时间”、“里程”,如图2所示
-
14
(3) 画面功能:当变量发生变化后会触发此函数,对应的功能函数编写程序,如程序清单 5所示
程序清单 5 变量更新回调函数
/**************************************************************************
** 函数:on_variant_upate
** 功能:串口通信导致变量更新时,执行此函数
** 注意:局部变量定义,只能在函数的最前面定义
***************************************************************************/
void on_variant_upate()
{
//
//功能:操作符'@'用于判定某个寄存器是否发生改变
// 速度或者时间发生变化时,重新计算里程
//注意:局部变量定义,只能在函数的最前面定义
//
if(@"速度" || @"时间")
{
"里程" = "速度" * "时间";
}
}
-
15
6. on_control_notify 画面配置
(1) 打开VisualTFT软件的菜单栏【工具】→【协议与变量设置】,在协议与变量设置画面中添加一个保存寄存器,寄存器地址为7并命名为“通知次数”,如图 1所示
(2) 将画面中文本控件7绑定变量“通知次数”,如图 2所示;
-
16
(4) 画面功能:每次操作控件都会相应调用一次on_control_notify,通过一个计数器将每次触发都统计起来,并绑定文本控件在画面中显示次数。对应的功能函数编写程序,如程序清单 6所示
程序清单 6 on_control_notify 程序
/****************************************************************************
** 函数:on_control_notify
** 功能:控件值更新通知
** 参数:screen_id,画面ID
** 参数:control_id,控件ID
** 参数:value,新值
** 注意:局部变量定义,只能在函数的最前面定义
****************************************************************************/
void on_control_notify(int screen_id,int control_id,int value)
{
......
if(screen_id == 5)
{
if(control_id == 1) //运行按钮
{
if(value == 0) //弹起通知
{
"通知次数" ++;
}
else if(value == 1) //按下通知
{
"通知次数" ++;
}
else if(value == 2) //长按通知
{
"通知次数" ++;
}
}
else if(control_id == 2) //文本控件
{
"通知次数" ++;
}
else if(control_id == 3) //图标控件
{
if(value == 0)
{
"通知次数" ++; //弹起通知
}
else if(value == 1)
{
"通知次数" ++; //按下通知
}
}
else if(control_id == 4) //选择控件
{
"通知次数" ++;
}
else if(control_id == 5) //菜单
{
"通知次数" ++;
}
else if(control_id == 6) //滑块
{
"通知次数" ++;
}
}
}
END
文章评论