如何对DWIN的86盒或线控器进行二次开发?

[复制链接]
875|0
手机看帖
扫描二维码
随时随地手机跟帖
迪文科技|  楼主 | 2018-9-30 10:21 | 显示全部楼层 |阅读模式
一、产品二次开发指南
T5UID1开发指南,以及OS开发指南,见迪文官方网站有下载。
1. 86盒开发场景总述
1.1. 通讯接口
86盒有对外的一个485接口,所以针对该接口有以下三种使用情况:
1、支持迪文命令接口82H\83H,通过这两个命令接口实现对内部变量的读和写
2、支持Modbus_slave模式,86盒工作在modbus slave模式,通过该模式,外部实现对内部变量的读和写(modbus命令只支持 03H,10H读写)
3、支持modbus_Master模式,该模式需要编写迪文OS,利用迪文屏上的CPU,实现对外部的控制。
开发包目录下有三个文件夹,App_82H83H、APP_Modbus_slave、APP_OS。里面有对应的应用工程。
如何切换86盒的三个工作模式?
将Lib文件夹下的 00.lib、01.lib、T5OS_VXX.bin三个文件,以及上面说的所需要的对应工作模式下的DWINOS_main.bin文件,拷贝到SD卡的 DWIN_SET目录下,然后插卡进行升级。升级一般是先上电,再插升级的SD卡,会出现蓝色屏幕提示升级过程。以后再切换模式,只需升级对应的DWINOS_main.bin文件即可。
1.2. 功能实现
新的迪文DGUSII开发平台,所有的功能都是通过变量接口进行的。0000-0FFF变量接口为系统功能接口,请查阅相关的开发指南。8000H-FFFF作为库和图片等的缓冲区。
接下来的介绍,会从86盒的硬件和库方面进行介绍,通过接口对内部的变量进行有序的操作之后,可以实现对应的功能。


2. Demo展示
与5合1传感器连接之后,就可以显示传感器的值,继电器三档可控,同时PWM2会输出不同的电压值,以便用户接EC风机或直流风机的PWM控制端实现风速可控,支持氦氪云远程控制
DEMO_035_002A_01
DEMO_043_014A_01
3. 硬件介绍
86盒里面有2块PCB,分别为显示板和外设控制板。两个板之间通过FCC10_1.0线连接,线缆的定义为:5V PPWM2 PPWM1 PIO3 PRXD PTXD PIO2 PIO1 PIO0 GND
86盒有内置WIFI模块,用的是氦氪云的WIFI模块,可以参考其官网上的资料进行开发。WIFI模块占用T5芯片的UART4。
T5芯片还引出一个串口到背板,转化为485电路后,通过接线柱引出,占用的是UART5。
显示板上通过T5的编程,可以驱动线缆上信号的变化,进而控制外设控制板上的继电器和PWM以及485总线。
4. 软件介绍
由于是基于T5UID1平台的产品,所以参考T5UID1开发指南和基于T5的DWIN_OS开发指南是必不可少的。
请联系迪文工程师拿到《T5UID1开发指南》以及《基于T5的DWIN_OS开发指南》两个文件。

为了完成86盒的开发工作,实现完整的控制和UI输入与输出,需要经过以下步骤:
1、地址规划分配
2、DGUS的UI人机交互界面设计----用迪文提供的 DGUSv6.03及更高版本
3、编写OS,实现应用层逻辑。
一、地址规划
查阅T5UID1的开发指南,T5UID1平台有128Kbytes数据变量空间,而OS系统中每个地址是Word类型,所以总共地址空间是0-0xFFFF。而其中0x0100-0x0FFF 变量存储器空间被系统保留使用,0x1000-0xFFFF 变量存储空间用户可以自由使用。
另外,产品中会提供一些基本的库,所以规划了 0xA000-0xFFF空间被库提前占用,所以实际编程中应用程序可用的空间为0x1000-0x9FFF。

由于在DGUS设计中,UI中的很多控件会绑定一个数据变量,而且为了便于DCS系统设计,最好需要把输入数据和输出数据以及中间数据进行规划。
比如新风应用中,把传感器等的数据都连续存放,把继电器,风机速度输出等变量连续存放,通过modbus总线就可以通过块读(0x03)和块写(0x10)两个指令完成数据交换。

二、UI人机交互界面设计
    请联系迪文的客服部门索要DGUS软件的视频教程,开发出满足需求的交互UI。这里省略。

三、编写OS
    T5的OS性能强大,运算速度很快。OS是用一套特殊的汇编语言指令集实现的,指令集请参考《基于T5的DWIN_OS开发指南》。
    编译器请使用迪文的  T5_OS_BUILDER 2.0.6.0 及以后版本。

    为了便于86盒的应用开发,提供了简单的库,可以实现最基本的一些功能。
    当然这些库,也是用OS编写的,只是进行了LIB封装。你也可以不用库,自己用OS写代码,实现应有的功能。
5. 程序框架和库调用
APP_OS、APP_Modbus_slave、App_82H83H这三个程序是对86盒的三个应用程序例子。这三个的区别主要是485接口工作在不同的协议上,APP_OS工作在modbus_master下,APP_Modbus_slave工作在Modbus_slave下,App_82H83H工作在指令接口82H,83H读写指令。82H,83H是迪文屏通用的读写寄存器指令,在开发指南中都有描述。
相应的下载
6. 基本库介绍
6.1. 基本定时
地址定义如下:
VP_SYS_TIMER_ACC            EQU E200H ;定时累加器,不要改动
VP_SYS_TIMER_SEC_PULSE      EQU E201H   ;基本秒脉冲
VP_SYS_TIMER_SEC_PULSE_SLOT EQU E202H     ;高字节表示时隙0-7   低字节每125ms会变1,脉冲形式;(高字节为2并且低字节为1同时满足时,可以认为秒信号A到来;高字节为3并且低字节为1同时满足,也是一个秒信号B到来,但A、B两个秒信号差125ms。)
VP_SYS_TIMER_MM_ACC         EQU E203H ;分钟定时累加器,不要改动
VP_SYS_TIMER_MM_PULSE       EQU E204H  ;分钟定时脉冲,每1分钟会变1一次


6.2. 蜂鸣器
新版本的蜂鸣器不需要通过该接口进行配置,硬件功能已合并到T5UID1的功能接口中。所以请先确定自己拿到的产品版本。

VP_BEEP_EN            EQU    F420H    ;高字节为0x5A表示使能,低字节无效   不使能的话,对 F421H寄存器直接写入响的时长,也可以让蜂鸣器产生响声
VP_BEEP_LAST_MSCNT    EQU    F421H    ;总共响的时长,持续递减,减到0就不再响了。直接向该地址写数,也可以让蜂鸣器响。
如果需要按屏幕,蜂鸣器就响,就将 VP_BEEP_EN写 5A00H,但这种响声是按任意屏幕都会响,如果需要按到真实的键上,需要将VP_BEEP_EN关闭,然后用OS写代码,向VP_BEEP_LAST_MSCNT中写你希望的时长就行。
向VP_BEEP_LAST_MSCNT中写入一个非0的数,蜂鸣器就会响,每ms数值减1,减到0后,蜂鸣器就停止响了。

6.3. RTC
0xF430  -  0xF433  设置时钟时间  D7:0x5A表示有效,其余值无效,设置成功后自动清零;D6-D0:   yy:mm:dd:ww:hh:mm:ss   hex码
RTC时间的读取,在OS中可以读取,在T5UID1开发指南中,可以查到接口地址。
在UI上显示时钟,只需将时钟控件放到页面上就可以了。
如果需要设置时钟,接口在 0xF430-0xF433中,按要求写入接口就可以了。
注意86盒的相关应用设置时钟接口在00.lib库里实现的,并不是T5UID1中实现的,所以不能用T5UID1开发指南的设置RTC接口。

6.4. 温度
86盒中有一个不太精准的温度,可以通过接口将环境温度大致读到。
VP_NTC_TEMP_INT                         EQU   F440H  ;温度整数部分
VP_NTC_TEMP_DEC                        EQU  F441H   ;温度小数部分
VP_NTC_TEMP_ALL                        EQU  F442H    ;定点温度 1位小数 = VP_NTC_TEMP_INT*10 +VP_NTC_TEMP_DEC
6.5. 外设控制
86盒的外设控制主要是控制继电器和PWM的值。使用前,在初始化代码处需要初始化外设的类型。然后在需要控制继电器的时候,向对应的寄存器写入1或0就可以达到吸合和断开的目的。
VP_PERI_TYPE                   EQU   F450H  ;外设类型   0:无外设,即单485总线款 1:3继电器+2PWM类型     2:5继电器类型
VP_PERI_REL1_SET           EQU   F451H
VP_PERI_REL2_SET           EQU   F452H
VP_PERI_REL3_SET           EQU   F453H

VP_PERI_REL4_SET           EQU   F454H
VP_PERI_REL5_SET           EQU   F455H

VP_PERI_PWM1_DUTY_SET        EQU   F456H        ;占空比 0-1000    0:恒0    1000:恒1
VP_PERI_PWM2_DUTY_SET        EQU   F457H
例如:需要先设F450H为1,3继电器+2PWM类型,然后向 F451H-F453H写入1,则对应的继电器吸合,写0则断开。向F456H中写对应的占空比,就能得到对应的PWM或0-10V电平输出。注意,50%点空比需要写入500,10%占空比需要写 100。
6.6. 485通讯
APP_OS、APP_Modbus_slave、App_82H83H这三个程序是对86盒的三个应用程序例子。这三个的区别主要是485接口工作在不同的协议上,APP_OS工作在modbus_master下,APP_Modbus_slave工作在Modbus_slave下,App_82H83H工作在指令接口82H,83H读写指令。82H,83H是迪文屏通用的读写寄存器指令,在开发指南中都有描述。
6.6.1. 485 modbus_master模式
    这种模式,86盒是主控,控制逻辑需要OS编写。只实现了modbus-master的0x03和0x10指令,其余没有实现。
需要对MODBUS进行操作的话,只需配置相应的结构体即可。
结构体定义见EA10H地址(上表):

通过查看示例代码,程序最后会有结构体的定义:
MODBUS_STRUCT_TABLE:   DB   5AH,01H,03H,08H,02H,00H,00H,00H,00H,00H,40H,00H,00H,00H,00H,00H,    5AH,01H,10H,08H,02H,00H,00H,00H,00H,00H,40H,08H,00H,08H,00H,00H
实现了向01从机地址读和写的过程。
第一条:5AH,01H,03H,08H,02H,00H,00H,00H,00H,00H,40H,00H,00H,00H,00H,00H,
读指令,向01从机地址读,长度8words,最长等待从机响应时间为 512ms(02H,00H),从机的寄存器超始地址是0000H,读到本地起始地址是 4000H。
第二条:5AH,01H,10H,08H,02H,00H,00H,00H,00H,00H,40H,08H,00H,08H,00H,00H
写指令,向01从机地址写,长度8words,最长等待从机响应时间为512ms,将本地起始地址4008H处写入从机起始地址0008H。

如果电脑上有USB转485功能,可以通过串口助手看到modbus协议数据。

6.6.2. 485 modbus_slave模式
将EA00H地址写为 5AA5H,即可将485接口配置为slave模式。只支持 03H,10H指令。
6.6.3. 485_8283H模式
参考EA00地址,将其写为5AABH,即可实现8283H模式。
外部485主机可以通过以上两条读写指令,读写86盒内部的寄存器

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

28

帖子

9

粉丝