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

DWIN_IOT   2018-12-18 13:40 楼主
一、产品二次开发指南
1. 86盒开发场景总述
1.1. 通讯接口
86盒有对外的一个485接口,所以针对该接口有以下三种使用情况:
1、支持迪文命令接口82H\83H,通过这两个命令接口实现对内部变量的读和写
2、支持Modbus_slave模式,86盒工作在modbus slave模式,通过该模式,外部实现对内部变量的读和写(modbus命令只支持 03H,10H读写)
3、支持modbus_Master模式,该模式需要编写迪文OS,利用迪文屏上的CPU,实现对外部的控制。
开发包目录下有三个文件夹,App_82H83HAPP_Modbus_slaveAPP_OS。里面有对应的应用工程。
如何切换86盒的三个工作模式?
Lib文件夹下的 00.lib01.libT5OS_VXX.bin三个文件,以及上面说的所需要的对应工作模式下的DWINOS_main.bin文件,拷贝到SD卡的 DWIN_SET目录下,然后插卡进行升级。升级一般是先上电,再插升级的SD卡,会出现蓝色屏幕提示升级过程。以后再切换模式,只需升级对应的DWINOS_main.bin文件即可。
1.2. 功能实现
新的迪文DGUSII开发平台,所有的功能都是通过变量接口进行的。0000-0FFF变量接口为系统功能接口,请查阅相关的开发指南。8000H-FFFF作为库和图片等的缓冲区。
接下来的介绍,会从86盒的硬件和库方面进行介绍,通过接口对内部的变量进行有序的操作之后,可以实现对应的功能。


2. Demo展示
51传感器连接之后,就可以显示传感器的值,继电器三档可控,同时PWM2会输出不同的电压值,以便用户接EC风机或直流风机的PWM控制端实现风速可控,支持氦氪云远程控制
3. 硬件介绍
86盒里面有2PCB,分别为显示板和外设控制板。两个板之间通过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总线。

(以下接线柱定义,顺序有所不同,请以拿到的实物为准)
86盒(5继电器)接线柱定义
1
2
3
4
5
6
7
8
9
10
11
L
N
K1
K2
K3
K4
K5
5V(OUT)
GND
485-(B)
485+(A)


86盒(3继电器+2PWM)接线柱定义

1
2
3
4
5
6
7
8
9
10
11
L
N
K1
K2
K3
PWM1
PWM2
5V(OUT)
GND
485-(B)
485+(A)

86盒(单485总线)接线柱定义

1
2
3
4
5
VCC
GND
485-
485+
5V(OUT)

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的值。使用前,在初始化代码处需要初始化外设的类型。然后在需要控制继电器的时候,向对应的寄存器写入10就可以达到吸合和断开的目的。
VP_PERI_TYPE                   EQU   F450H  ;外设类型   0:无外设,即单485总线款 13继电器+2PWM类型     25继电器类型
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是迪文屏通用的读写寄存器指令,在开发指南中都有描述。



VP_变量地址
定义
说明

EA00H
Modbus 启用标记
0x5AA5 表示启用 Modbus_Master 通信
0x5AAA 表示启用 Modbus_Slave  通信
0x5AAB 表示启用 82H,83H读写指令
其余值,不启用 modbus功能


EA01H-EA0F
驱动占用
其中:
EA01H:modbus_slave_ID_addr,当工作在modbus_slave模式时,设定本地地址。高字节保留,低字节为从机地址。上电默认为01地址。
EA04H是82H,83H读写指令的配置寄存器,高字节D1表示自动上传地址的高位,比如自动上传地址为2000H-20FFH区,那么D1=20H;低字节D0,bit7:区域初始化,必须配置为1,bit0:CRC-16校验使能,0不使能,1使能CRC校验

EA10H
ModBus结构命令起始地址



MODBUS 指令   00 字节
0x5A=本条指令有效其他=本条指令无效


01
读写的 Modbus 设备地址


02
读/写使用的 Modbus 指令,只支持 03H和10H


03
读写数据长度,单位 word


04:05
本条指令处理定时时间,包含指令传送时间,单位为 ms。对于读指令,定时时间是从机响应的最长时间。


06:07
4 个字节规定了 Modbus 读写指令的发送方式
0x0000:****所有页面下均执行指令0x0001age_ID 仅在指定页面下执行指令0x0002:VP 仅在 VP 指向的变量缓冲区低字节内容为 0x5A 时才执行指令,所有相关指令执行完后自动清零 VP 指向的内容


08:09
06:07的参数


0A:0B
本条指令读写数据在 DGUS 屏变量存储区的起始地址。


0C:0D
本条指令读写的数据在 Modbus 设备上的数据起始地址。



















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

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

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

回复评论 (1)

了解有限,有不对的地方请批评指正!
点赞  2018-12-21 17:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复