一、产品二次开发指南
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控制端实现风速可控,支持氦氪云远程控制 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总线。
(以下接线柱定义,顺序有所不同,请以拿到的实物为准) 86盒(5继电器)接线柱定义
86盒(3继电器+2PWM)接线柱定义
86盒(单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是迪文屏通用的读写寄存器指令,在开发指南中都有描述。 地址定义如下: 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是迪文屏通用的读写寄存器指令,在开发指南中都有描述。
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:****所有页面下均执行指令0x0001 age_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。
如果电脑上有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盒内部的寄存器
|