【开源】基于DGUS II迪文屏的智能化生产控制系统
本帖最后由 lihui163 于 2021-3-22 09:31 编辑简单了解一下DGUS II迪文屏,软件仿真功能太给力了,省去了硬件串口打印调试,非常方便,节省了项目开发时间。
DGUS II是基于T5 CPU的第2代DGUS系统,主要特点包括:(1)T5双核CPU架构,DGUS和DWIN OS在各自独立的CPU并行运行,两个CPU运行最高可达250MHz,响应快,功耗低。
(2)数据处理速度是基于T2处理器的第1代DGUS的大约30倍,UI极其流畅。
(3)最高支持1280*800分辨率,变量刷新周期40mS。
(4)8 UARTs,可以扩展非常完备的通信接口:232、 485、LAN、CAN、USB、WIFI、3G。
(5)完善的高品质音乐播放,远程网络管理(字库、图片、音乐)的能力。
(6)高可靠性数据库和强大的数据管理接口。
(7)可直接拓展连接迪文DCS设备 。
(8)迪文专利的硬件加密算法和专用CPU设计,更好的客户知识产权安全性。
对智能化生产线的控制系统,实时检测设备的运行状态,并通过DGUS II屏实时显示,完整的人机界面控制系统,界面控制采用多级切换,具体通过单片机USART与DGUS屏通讯协议来控制,可用触摸方式或者按键来触发控件消息。
整个界面系统主要需要五个功能:1.自动化产线(设备监控)界面;2.参数设置及保存界面;3.产线产量统计;4.四系统异常界面提醒及常规解决方法;5.试用提醒功能及广告。
具体硬件配置如下:1.采用T5UID2屏,分辨率为1024*6002.整体供电采用24V开关电源3.232通讯,波特率为1152004.单片机为STM32F103VET6,100引脚,lqfp封装 硬件原理图如下,原理图的功能比较多,有485和CAN通讯等,大家可以简单参考一下人机界面主界面如下
下面是程序详细功能说明控制系统,主要由动力部分、倍捻单元、传动部分三大部分构成。动力部分:电动机、电气控制箱、指示器、操作面板或者人机交互界面;先看下主函数//程序入口
int main(void)
{
qsizesize = 0;
u8 iFor;
uint32 timer_tick_last_update = {0}; //上一次更新的时间
/*配置时钟*/
SystemInit();
/*配置串口中断*/
Interrupts_Config();
/*配置滴答定时器时钟节拍*/
systicket_init();
/*定时器配置*/
TIMER_Config();//定时器2 1ms中断
/*LED配置*/
LED_GPIO_Config();
/*key配置*/
Key_GPIO_Config();
/*串口初始化,波特率设置为115200*/
Uart1Init(115200);
/*清空串口接收缓冲区*/
queue_reset();
/*读取eeprom*/
FLASH_ReadBytes((u8 *)&readflash,Flash_ADDR,sizeof(readflash));//sizeof(readflash)字节长度
// /*将读出EEPROM的数据发送至显示屏*/
// for(iFor=0; iFor<12; iFor++)
// {
// }
// /*读取显示屏&单片机RTC时间*/
// {
// }
/*清除密码存放区数据*/
CLRsetKeyReg(0x82,M1_KEY_REG,0);
delay_ms(1000);
CLRsetKeyReg(0x82,M2_KEY_REG,0);
delay_ms(1000);
CLRsetKeyReg(0x82,BUY_KEY_REG,0);
delay_ms(1000);
/*切换页面显示*/
SetScreen(0);
delay_ms(3000);
SetScreen(1);
delay_ms(3000);
SetScreen(2);
delay_ms(3000);
SetScreen(3);
delay_ms(3000);
/*看门狗初始化*/
wdoginit();
while(1)
1.设备监控生产界面主要包括:产线编号、电动机运行状态、锭子状态、减速装置状态、各个传感器状态指示等,如下图所示。
a) 产线编号:方便产线巡检时查看,一目了然,如上图所示的1号机、2号机。b) 电动机运行状态:正常运行与故障。c) 锭子状态:正常运行与故障。d) 减速装置:正常运行与故障。e) 各个传感器状态:传感器采集采用闭环回路,防止因传感器损坏而影响产线生产。
2.参数设置参数只能由工程师或管理员来设置,为了防止工人误操作,故加密码防护,进入需要输入登陆密码,密码界面如下图:
a) 密码区域由变量输入、数据变量显示构成,其中变量输入绑定键盘实现手动输入功能,数据变量显示与变量输入绑定到同一个地址,实现键盘输入后数据回显。b) 登陆密码为6位整数,通过键盘输入,输入完成点击确认,单片机进行密码校验。参数设置界面图5主要用来设置倍捻机参数,主要包括锭速、捻速、电机速度等,单片机运动之前会获取这些配置参数。c) 用户点击每一栏的参数设置区域,会唤醒键盘,用户输入完相应数据后,点击保存,将当前页面数据写入EEPROM和液晶屏对应的位置。除下“捻向”参数是一个1位整数,设置范围0~9;其余参数都是4位整数,设置范围0~9999。
程序代码如下case 0xB7://读取 M1 锭速 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*0,4);
break;
}
case 0xB9://读取 M2 锭速 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*1,4);
break;
}
case 0xBB://读取 M1 捻速 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*2,4);
break;
}
case 0xBD://读取 M2 捻速 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*3,4);
break;
}
case 0xBF://读取 M1 捻向 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*4,4);
break;
}
case 0xC1://读取 M2 捻向 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*5,4);
break;
}
case 0xC3://读取 M1 卷绕速度 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*6,4);
break;
}
case 0xC5://读取 M2 卷绕速度 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*7,4);
break;
}
case 0xC7:////读取 M1 电机速度 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*8,4);
break;
}
case 0xC9:////读取 M2 电机速度 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*9,4);
break;
}
case 0xCB:////读取 M1 往复次数 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*10,4);
break;
}
case 0xCD:////读取 M2 往复次数 寄存器数据
{
ReadReg=((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
FLASH_WriteBytes(msg->data,Flash_ADDR+4*11,4);
break;
}
default:
break;
}
break;三、产量统计功能产量统计以天为单位,循环记录,每个页面最多显示14组数据,主要通过对当天产量进行记录,在液晶屏上进行显示。主要界面如下图
a) 序号、生产日期、产量都是一个4位整型变量,用户进入产量统计界面后单片机读取EEPROM来获取日期和当天的产量,单片机通过写入对应的变量来显示序号、产量和日期。用户通过上一页下一页下发命令到单片机更新数据域。程序如下,主要是采用滴答定时器1ms中断来递增时间变量,来刷新生产数据。#if (1)
//更新1~14序列号,滴答定时器
if(timer_tick_count_-timer_tick_last_update>=2000)
{
UpdateSerRec0();
timer_tick_last_update = timer_tick_count_;
}
#endif
#if (1)
//更新14~28序列号
if(timer_tick_count_-timer_tick_last_update>=3000)
{
UpdateSerRec1();
timer_tick_last_update = timer_tick_count_;
}
#endif
#if (1)
//更新生产记录-日期
if(timer_tick_count_-timer_tick_last_update>=30)
{
UpdateDateRec0();
timer_tick_last_update = timer_tick_count_;
}
// if(timer_tick_count_-timer_tick_last_update>=100)
// {
// UpdateDateRec1();
// timer_tick_last_update = timer_tick_count_;
// }
#endif
#if (1)
//更新生产记录-产量
if(timer_tick_count_-timer_tick_last_update>=50)
{
UpdateProductRec0();
timer_tick_last_update = timer_tick_count_;
}
#endif
四、试用到期提醒界面系统第一次开机时会获取RTC时间,记录到EEPROM中。以后每次运行时,单片机从液晶屏读取RTC信息,与第一次开机时间做对比,如果超过60天,且开启了试用到期提醒功能,则在弹出试用到期提醒界面图9,用户可以在试用到期提醒界面输入购买密钥,来解锁设备。如图所示也可以通过按键来模拟,程序如下 /*模拟试用期到期,弹出提示框*/
if( Key_Scan(keyPort,keyPin5) == KEY_ON)
{
LED2(0);
SetScreen(31);
buykeyflag=1;
}
else
{
LED2(1);
}密码检验程序/*****读寄存器值************/
address = ((u16)msg->addr)<<8|msg->addr;
switch(address)
{
case 0x00B1://M1参数设置密码校验
{
keyData = ((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
if(keyData==123456) //校验正确
{
SetScreen(37);
CLRsetKeyReg(0x82,0x00B1,0);
keyData=0;
}
break;
}
case 0x00B3://M2参数设置密码校验
{
keyData = ((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
if(keyData==654321) //校验正确
{
SetScreen(28);
CLRsetKeyReg(0x82,0x00B3,0);
keyData=0;
}
break;
}
case 0x00B5://试用到期密码校验
{
keyData = ((u32)msg->data)<<24|((u32)msg->data)<<16|((u32)msg->data)<<8|msg->data;
if(keyData==123654) //校验正确
{
buykeyflag=0;
SetScreen(4);
CLRsetKeyReg(0x82,0X00B5,0);
keyData=0;
}
else //校验错误
{
keyData=0;
SetScreen(31);
}
break;
}五、调节屏幕背光亮度我们可以通过寄存器来设置背光亮度,非常方便
图片上传不了? 本帖最后由 lihui163 于 2021-3-22 09:32 编辑
对于串口接受这块,特别是对于工业串口屏,串口使用非常频繁,健壮的串口程序注意几点
1.对于没有dma和空闲中断功能的单片机,最好采用环形队列+超时的方法,保证不会出现丢帧等串口问题,对于那种串口接受,比如接受数据的同时判断解析数据的话,肯定会出问题的
2.对于具备dma和空闲中断功能的单片机,建议采用DMA+空闲中断的方法,帧接受中断,效率非常高,对于不等长的数据非常方便。
3.对于串口设备初始化后最好延时一段时间,时间具体情况而定
感谢分享,DGUS II迪文屏功能和DGUS屏有啥区别 liuxiaofei 发表于 2021-3-23 07:31
感谢分享,DGUS II迪文屏功能和DGUS屏有啥区别
看看这个图
lihui163 发表于 2021-3-23 13:09
看看这个图
好的,非常感谢 你这么多界面,这么多控件,请问你的VP和SP地址怎么管理的,每个控件都要手工指定地址很烦躁啊。。。。。 spy 发表于 2021-10-16 16:25
你这么多界面,这么多控件,请问你的VP和SP地址怎么管理的,每个控件都要手工指定地址很烦躁啊。。。。。 ...
您好,一般建议在工程之前做好地址规划 spy 发表于 2021-10-16 16:25
你这么多界面,这么多控件,请问你的VP和SP地址怎么管理的,每个控件都要手工指定地址很烦躁啊。。。。。 ...
的确没有更好的办法 你好,程序上怎么没看到连续发送83读取指令啊,小白一枚,麻烦解答一下:lol
页:
[1]
2