探求流程化应用屏的普遍思路(以dwin为例)

[复制链接]
849|1
手机看帖
扫描二维码
随时随地手机跟帖
迪文科技|  楼主 | 2018-11-26 13:27 | 显示全部楼层 |阅读模式
目的:希望有一个普遍思路,引导这类产品的选择和快速运用。以下为DWIN屏应用过程。
(一)刚拿到屏,需要了解什么?(粗体字的参数影响对工业屏的选择)
一、屏幕:

1.电阻 or 电容屏

   电容屏支持多点触控,使得触摸屏按键支持组合键。

   反之,电阻屏(dwin采用)只能检测到一点,只要屏幕上一直有键不抬起(第一次按下的键或其他键),屏就检测不到其他按键。

   eg.dwin控件“同步数据返回” 

  背景知识:寄存器06记录当前屏幕是否有按压:03 一直按压中;02 抬起

  初始设置:假设页面上有同步A和同步B。同步A和B用mode1(对变量地址写值)。A和B键值设置为:
状态        键值
A按下        1E
A保持        1E
A抬起        9E
B按下        30
B保持        30
B抬起        B0
测试操作流程及结果:
step1:A先按下,B再按下 
读到的结果: A:001E
                        B:0000
                        Reg06:03
step2:A抬起
读到的结果: A:001E
                       B:0000
                       Reg06:03
... 
last step:B抬起,此时已没有键按下,则被认为是A抬起。
   结论:若需要知道触摸键是否在保持状态:电阻屏(不支持多点触控)只能通过判断整个屏幕是否有键按下来判断。



    若界面中有大的(越大越好)且要求正方形的控件(画布),则控件布局上16:9的比4:3有优势,更容易放下更多按键。

2.分辨率

手里的是800*600。图片分辨率要和屏相同。

3.位图要求:

    A.dwin屏幕采用16bit调色板,但要求图片均为24位色bmp。    见注释[2]

       dwin的16bit调色板导致24位色图片中一些细微的色彩看不到。

       我估计dwin内部流程是:1.检查所有图片是不是24位色bmp。2.调用页面时通过16bit调色板转成16位图。        

    B.图标图片要求和过滤背景色:见客服给的《简单用画图板处理图标使能过滤掉背景色》。  

  

二、串口通讯

1.选择串口协议

串口协议会影响主从关系的顺利实现。

eg. dwin支持485,232,TTL;项目上将单片机的485口留给dwin屏(为什么用485?注释[1] 232,485,TTL区别)。这就决定了:若单片机作为主机,查询从机时,主从可能在链路上打架(ysmz4:这个不太了解,如果主机在发送后很快释放(注释[2])不知道能不能彻底解决这个问题)。
2.232线序(232测试用)

PC上是DB9公头,所以自制一根线,一端是DB9母头,一端连屏的凤凰端子。DB9母头pin2(DB9定义为Tx)接屏的232_Tx.



3.屏如何处理传来的数据?

1/屏什么时候处理指令 —— 中断当下处理 or OS周期处理?指令缓冲区大小?

dwin:串口中断里不做处理,DGUS周期里处理255字节指令。见《DGUS与OS的关系》

2/实际指令长度若和指令中的设置长度不符,怎么办?(是否有线路超时主动丢弃包机制)

dwin测试:

单片机发送:连发两次 5A A5 04 83 0100 (两次发送之间间隔时间不限)
dwin返回:第二次发送后返回 5A A5 04 83 0100 5A + 5A个数据
结论:dwin屏只看指令中设置的长度,而没有线路超时主动丢弃包的机制。导致收发不同步,crc校验也没用。这是个大BUG!

三、下载调试

dwin有两种调试办法:

1.SD

   1/SD卡要求:size限制(dwin支持2G-16G),fat32格式,如果有问题则尝试格式化

   2/SD根目录下存放DWIN_SET文件夹。

2.ED2 (SD转USB)

   1/安装连接流程:连接ED2,安装驱动(驱动名和ED2毛关系没有,很不人性化。驱动安装:___T080,就是指T系列,8寸屏,安装XR那个驱动)。

   2/使用时的注意事项:进入软件,点击“DGUS”。最上面一排的Baudrate需要手动输入6250000(而不是在列表下选择)。

   3/注:当硬件配置有改动时(config.txt改动),只能用 SD下载到屏,而不能用ED2!

   ps:ED2要我70块钱,够坑!!
3.下载调试 常见问题与解决办法:

   1/hmi通过sd下载到迪文屏,若下载不成功则注意:
      A.sd根目录下存放DWIN_SET。
      B.手册中写着图片要求:所有图片必须是bmp,分辨率必须和屏幕一样(800*600),24位色。(注释[4] 如何修改分辨率,位色)

   2/下载后显示的图片不是我设置的图片?

      图片编号要从0号开始。SD下载进屏后,屏幕会停在0号图片处。


四、OS运行机制

eg.dwin DGUS

1.初始化:

   1/如果用到22.bin:将22.bin(放地址对应数值,56KB,但只有字节地址[0~0x6FFF]中的内容被copy)中的内容copy到DGUS flash的变量区(相当于RAM,掉电不保存)。

      ps:初始化时:将22.bin(56KB,[0~0xE000])映射到flash(256MB)中变量地址区间[0~0x6FFF],大于22.bin中大于0x6FFF的部分内容就废了,注意这部分不要写东西!!

   2/加载13.bin触控文件,14.bin显示变量文件。即把13.bin,14.bin的所有指令中变量地址部分映射到flash中的变量地址区间[0~0x6FFF]。

2.运行:

   1/每个DGUS周期处理一次触控变量和显示变量,处理255字节串口指令;按键中断和串口中断中只是标记,不处理。DGUS和PLC OS机制一样。



3.dwin tips:

复位WDT:相当于断电后再上电。(这句不知道什么意思)

大概在DGUS程序“处理配置寄存器”时不会关中断。

五、模块

1.按键

屏的通用性:输入:物理按键/触摸屏。是否为了通用性模仿键盘。

屏发出的是 键值or电平?

单点触控的屏幕不能实现键盘的组合键。

eg.dwin:同步数据返回 按下时写1,抬起时写0,主机定时扫描屏键值。屏发送的就是电平信号,具体怎么做由主机决定。



2.电机调速
六、FLASH地址规划
1.为什么要做地址规划?

   dwin如果不了解地址规则,很容易出错,而且不容易排查

   DGUS初始化时加载13.bin,14.bin。若其中两个变量地址空间有重合部分(有的变量地址占多个地址),生成和加载时dwin不报错,运行时出现异常,这时面对着一堆变量,已经不容易排查了。

2.怎么做地址规划?

   1/所有可用的地址空间

                                                                            对应指令读写空间

      DGUS硬件寄存器空间:256B                     指令80,81:0x00-0xFF(数据单位:字节)  

      DGUS用户变量存储空间:56KB                 指令82,83:0x0000-0x6FFF(数据单位:字)

      字库和图标库存储空间:32MB(其中字库空间: 32-127 号( 0x20-ox7F)汉字库, 24MB)                  

      图片存储空间:224M

      OS 变量寄存器:共 256 个       只能 OS 访问:R0—R255


     (开发指南P41 “页面地址”指的是14.bin里的地址,和flash里的无关。)
2/不同控件用到的地址

       首先说明,控件们会用到各种地址,有的叫变量地址(VP),描述指针(SP),辅助地址,,,它们的地址范围都是[0,0x6FFF]地址(除非当不需要某个SP时地址设为FFFF即无效)。

     关于地址冲突:

     dwin tool软件生成时检查的是所有VP和SP地址有没有一样的。但引起冲突的另一个原因是SP属性所占的地址长度长短不一,导致误使两个不同类型控件属性地址有重合。

     若控件能按位变量控制,希望控件A和控件B对应于同一个变量地址的不同位,则可以设置为:A变量地址=B变量地址=0x0000,A,B对应于不同位。该情况下A,B变量地址相同。

     Q:不同页面的两个控件能不能对同一个VP地址调节或显示?
     A:可以

VP(变量地址)和SP(描述指针)通常是指显示变量功能的两种定义,两者共用0000到6FFF地址:

1、VP指某个变量显示功能必须需要的实际地址,必须要定义。

2、SP指某个VP地址显示的控件的属性地址,以便在应用中可以让用户指令修改,达到实时控制不同显示效果目的如字体颜色、位置、状态等属性。可以不定义(默认FFFF)。



以下是实验过程中摸索出来的,可能需要补充。



   eg.位变量图标显示控件的辅助地址:

      辅助地址在动画显示时有用。

      辅助地址的范围:[0,0x6FFF]

      我的做法:辅助地址跟在变量地址后面。比如变量地址=0x0000,辅助地址=0x0001(辅助地址占两个字地址)
      若希望控件A和控件B对应于同一个变量地址的不同位,则可以设置为:A变量地址=B变量地址=0x0000,A辅助地址=B辅助地址=0x0001,A,B对应于不同位。


eg.图标变量:
1.当SP无效(SP=0xFFFF):只访问*VP。
2.当SP有效,实验:
  实验1:查看SP地址区间存的是什么
    步骤:1.控件设置SP=0x0100,VP=0x0200:
          2.PC发:  5A A5 04 83 01 00 08
            屏应答:5A A5 14 83 01 00 08 02 00  02 8D 00 51 00 00 00 01 00 02 00 01 18 00 
                                         *SP=VP <--------------属性--------------------->
  实验2:能否SP=VP?
    步骤:1.控件设置SP=0x0100,VP=0x0100
          2.PC发:  5A A5 04 83 01 00 08 
            屏应答:5A A5 14 83 01 00 08 01 00 02 8D 00 51 00 00 00 01 00 02 00 01 18 00 
                                         <-VP-><--------------属性--------------------->
    结果:屏不能显示图标。
    结论:不能。
 
eg.动画图标显示
   实验1:查看SP地址区间存的是什么
     步骤:1.设置:SP=0x0100,VP=0x0200:
           2.PC发:  5A A5 04 83 0100 0a
             屏应答:5A A5 18 83 0100 0A 02 00 02 90 00 1D 00 00 00 00 00 01 00 04 00 03 00 04 18 00 
                                         <----VP----><--------------属性---------------------------->
   
     目标:实现图标定时切换-----begin
     PC发:  5A A5 04 83 0200 02
     屏应答:5A A5 08 83 0200 02 00 00 00 00 
     PC发:  5A A5 05 82 0200 00 01
     目标:实现图标定时切换-----end


   实验2:2个控件的VP能否设置为连续?
     步骤1.设置:控件A SP=0x0200,VP=0x0100
           控件B SP=0x0300,VP=0x0101
         2.PC发:  5A A5 05 82 0100 00 01
           屏显示:不能显示控件B。
     结论:不能。必须相差2个地址。



(二)如何使用屏的自带控件?

一、首先看:控件的实现效果,视频最直观。

二、拿到屏演示文件的源码,用哪做哪。

eg.dwin:

1.效果:第n次按下时,对变量地址写值(Xn)并改变图标显示。eg,滑块

   控件:图标变量+增量调节

注释

[1] 232,485,TTL区别

具体的去看协议。这里只列出为什么项目主板上偏爱485而不是232:

232是一对一的通讯,485是一对多的通讯。
传输速度:
一般的通讯多会用到,9600bps 38400bps 115200bps;
RS485采用差分传输,最远传输1200米,最高传输速率可以达到10M,
一般速率越高传输距离也就越短,当然还和传输的介质有关系了;
RS232受到电容负载的限制,只能通讯15米。
追问:
这个最高传输的10M是怎么设置的,是物理层面的限制吗?
追答:
对,物理层决定的
RS232,TTL232电压范围:

TTL输出
高电平: 2.4 < v < 5
低电平: 0 < v < 0.8
RS232输出
高电平: -15 < v < -3
低电平: 3 < v < 15



[2]Windows位图和调色板,bmp文件格式   http://blog.csdn.net/ysmz4/article/details/47776735

[3]【为避免485冲突,主机占用后要立刻释放】STM32再学习——实现完美的RS485      http://blog.csdn.net/ysmz4/article/details/47750525

[4] 如何修改分辨率,位色
打开画图,ctrl+W(拉伸/扭曲)修改分辨率,保存时修改位色。

三)dwin实际应用遇到的问题


开发指南结构:
结构     P4
处理流程 P6
指令集   P15
寄存器表 P17
寄存器,变量,字库空间 5.1 P20
一、指令,地址

读地址指令
   5A A5 04 83 0000 1a  读flash的变量地址区间[0~0x6fff]! 读26个字!

二、文件
tips:

若两个文件文件号相同,则调用其中一个!当22.bin,22_config.bin同时存在,OS实际调用的是22_config.bin



13.bin

由若干条参数集合组成。PC软件写好后固化,运行时不被改写。

举例:

00 00      010200C701300104      FF00                    FF00           FE08                              xx..
页面ID    坐标                              目标切换页面       按压效果     触控键码TP_CODE      TP_FUN触控描述(长度32)

22.bin

1.每次生成时软件会自动清空22.bin!所以要将22.bin放到外部备份。

2.串口指令寻址存储器:字地址  

  PC软件配置22文件变量地址:字节地址   
  eg.22文件变量地址0x0300 数据量单位:字节 => 串口指令寻址0x0180,数据量单位:字   



文本显示
  变量地址0x0010 对应 22.bin的0x0020位置
  文本初始值:若软件里设置为“迪文科技”,同时22.bin 0x20位置开始为“我是大神”,则文本将显示“我是大神”
              可见22.bin优先级高于软件的设置。

三、按键控件

控件作用简述:

按键值返回:对某变量地址(对应控件eg变量图标)赋值以改变控件状态。
文本数据录入:按键键值写到*VP。
按键触发:指令对寄存器0x4F写键值,进入文本录入
基本触控:(按键效果),页面切换,短回路文本输入

增量调节:可用0-1范围调节

1.键控键值

  除了同步返回数据没有“键控键值”功能,其他按键控件都有。
  键控键值:设置键控键值以后,就不能在屏上进行触摸操作。只能发指令实现
  eg.按键返回+键控
     键控键值:0x12
     键值:0xabab
     变量地址:0x0010
     测试过程:
     发送指令查变量地址值:5A A5 04 83 0010 01   (返回5A A5 06 83 00 10 01 00 00 )
     发送键控指令:5A A5 03 80 4F 12
     发送指令查变量地址值:5A A5 04 83 0010 01   (返回5A A5 06 83 00 10 01 AB AB )
     即:通过键控(开键控则触控无效)改变变量地址值

2.Q:数据同步返回和带键控键值的基础触控 能否叠加使用?

A:可以实现这两个叠加的功能。
  那就按压的话就只有按压数据同步返回才能触摸有效
  带键控的就只能是发指令控制。
3.同步数据返回 VPxS,VPxT

   VPXS,VPXT范围:[0~0x6FFF],就是说初始化后它们都指向flash中的变量地址区间[0~0x6FFF]
   VPXS不能等于VPXT,否则会出现异常!!(做好地址规划)

4.同步数据返回   从按下到保持的时间:
客服说:小于500ms。

5.同步数据返回 ysmz4猜测检查按键状态的办法:

   http://home.**/my/space-uid-116926-blogid-15886.html   的最后一种

6.弹出菜单

弹出菜单:
命令控制菜单弹出,菜单上只能有基本触控,其他显示、触控无效。
当接收到一个触控后屏将键值写到“弹出菜单”控件的*VP并自动将菜单关闭。

触控下(非键控):弹出菜单后,按下基础触控后*VP修改,菜单立刻退出;只要没有按下基础触控使菜单关闭,菜单以外的按键就无效(比如希望用方位键控制菜单里的焦点就不可以,不过既然是触控也就不需要方位键选择了哦呵呵)。

键控实现长回路。命令:5A A5 03 80 4F xx(弹出菜单键值)

7.焦点:

   外部键盘按方位键,框依次落到不同控件上。当enter按下,主机发键值。
   办法:1.做个框的图标,图标变量设置了描述指针,发指令改变位置(指令eg.5A A5 07 82 0301 0010 0005);2.基本图形
8.分页显示图标们

   显示比较费劲。问题如下:

1.页面数不能动态改,要改系统程序。
2.图标可以根据命令移动,但是按键位置不能改。
所以要做的话,需要[页面,按键值]-花样的映射
3.外部导入花样时,生成图标要改系统程序。

9.列表显示

   注意:列数必须大于1,否则不显示。

四、寄存器

1.0x05和0x07一起用:
用07寄存器,坐标位置第一次点击屏后显示,后面点击坐标位置都没有更新了,需要再05寄存器里面写5A更
新触摸屏坐标,再点击屏,07寄存器读才会返回下一个坐标的位置

2.0x10-0x1c  配置寄存器的映射:就是写config.txt

五、图片图标

1.不要直接在它生成的图标文件夹里改图片,否则可能会被原来的图片重写,那就白改了!

2.图片和图标会在它从24位图改成16位时将背景变为粉色。

六、数据库
图片空间一共存32+209张图片,其中209张图片像素值可改。
2.图片占用空间

   比如32.bmp,占用字地址0~0x3FFFF(实际占用800*600*1B=480000B=0x3A980个字地址)。以此类推。

3.改一张图片

   ①串口发包数目

    一张图片的每个像素点占1BYTE(8位位图经运算转成16位位图),所以800*600图片占不到512KB,由于flash每页128KB,所以图片占4页。

    800*600=480000个点,480000*1Byte=480000Byte,假设串口每次发250Byte,480000/250=1920包。所以改一张图片串口要发送1920包。

   ②串口发送时间

    当波特率115200时,480000/115200=4s.

   ③页面擦写次数

    每次写数据库都是先擦页后写页。串口将数据copy到变量区,然后变量区写到数据库。变量区56KB,所以为了减少页面擦写次数,需要预留变量区空间(越大越好),假设预留了56KB,     当串口发送数据将56KB填满后,变量区缓冲整体copy到数据库,那么改一张图片则每页需要被擦128KB/56KB=3次。
4.Q:若只有一张图片32.bmp,存放到哪里,32.bmp所在地址(即数据库0地址)还是0.bmp所在地址?

   A:32.bmp所在地址
七、基本图形

     1.两个基本图形控件位置重合,一个用于剪切粘贴,一个用于画线。注意用于画线的控件要在另一个控件上面,否则画线被覆盖。

     2.放大指令测试:

两个基本图形控件所在上下层:
上层:地址0x3000
下层:地址0x0000

测试1:
下:端点连线
5aa5 13 82 0000 0002 0001 f800 0104 010E 0114 012E  
上:放大
5aa5 13 82 3000 0010 0001 0000 0000 0104 010E 01CC 01D6
结果:可以放大
测试2:
上:端点连线
5aa5 13 82 3000 0002 0001 f800 0104 010E 0114 012E  
下:放大
5aa5 13 82 0000 0010 0001 0000 0000 0104 010E 01CC 01D6                       
结果:不能放大


两个基本图形控件所在上下层改成:
上:0x0000
下:0x3000
测试3:
下:端点连线
5aa5 13 82 3000 0002 0001 f800 0104 010E 0114 012E  
上:放大
5aa5 13 82 0000 0010 0001 0000 0000 0104 010E 01CC 01D6
结果:可以放大

测试4:
上:端点连线
5aa5 13 82 0000 0002 0001 f800 0104 010E 0114 012E  
下:放大
5aa5 13 82 3000 0010 0001 0000 0000 0104 010E 01CC 01D6        
结果:不能放大

结论:实现放大的条件——被放大基本图形控件要置于下层,放大控件置于上层。和控件的地址无关。

八、flash数据导出

       导出文件是加密的。   

使用特权

评论回复

相关帖子

van28| | 2020-2-22 19:05 | 显示全部楼层
02 抬起

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

28

帖子

9

粉丝