搜档网
当前位置:搜档网 › 基于2410的MDK例程移植

基于2410的MDK例程移植

基于2410的MDK例程移植
基于2410的MDK例程移植

基于S3C2410的MDK例程移植

1前言

Keil是业界最好的51单片机开发工具之一,它拥有流畅的用户界面与强大的仿真功能。ARM将Keil公司收购之后,正式推出了针对ARM微控制器的开发工具RVMDK,它将ARM编译器RVCT与Keil的工程管理、调试仿真工具集成在一起,是一款非常强大的ARM微控制器开发工具。2007年5月,ARM正式授权中国深圳英蓓特公司代理中文版RVMDK的出售事务。

S3C2410目前已经在国内外市场得到了普遍的应用,因此移植S3C2410的MDK例程,对于推广MDK具有比较重要的意义。其实,对于MDK例程的移植,无论是从Embest IDE下,还是从ADS下,其过程都是相似的。

S3C2410基于ARM920T内核,16KB指令Cache,16KB数据Cache,支持MMU,Nand Flash BootLoader,内部嵌有4KBRAM,即启动石,亦可在系统启动完成后,做为他用。同时S3CEV2410开发板还集成了32M*2NorFLash,

64MSDRAM。因此在移植的时候,可以将程序分别运行在SDRAM和Nor Flash 中。

2相关技术说明

2.1启动代码

MDK一个强大的功能就是能够自动生成启动代码,而且可以进行图形化的代码设置,这就可以极大地方便了工程师,减少了百余行的汇编代码的编写。虽然一些老工程师习惯而且更喜欢文本编辑的方式,但是不可否认,MDK提供的启动代码生成向导,对于加快项目开发进度,提高工作效率,帮助新人迅速进入开发工作具有十分重要的意义。

同样,MDK支持S3C2410启动代码自动生成。

1)在MDK中新建工程

打开RVMDK,在主菜单中选择Project?New…?uVision Project,并给新工程命名为New_MDK.uv2,单击“保存”,见图2-1。

图2-1在RVMDK中新建工程

在RVMDK自动弹出的器件选择窗口(Select Device for Target)中选择该工程所对应的处理器型号,“S3C2410”,并单击“确定”,见图2-2。当RVMDK 提示用户是否自动添加启动代码时,选择“是”。

图2-2启动代码自动生成向导

双击打开S3C2410A.S文件,在MDK的文本编辑区中,显示S3C2410的默认配置的启动代码。点击Configuration Wizard,就可以通过图形化的形式对

生成的默认启动代码进行个性化的配置,包括:堆栈,时钟管理,中断向量表,看门狗时钟,存储器控制,I/O配置等。如图2-3所示:

图2-3启动代码图形化配置界面

这样,通过以上的步骤,我们就可以快速方便地完成启动代码的生成配置了。

2.2分散加载文件

关于散加载文件的具体内容介绍,可参考附录1“Realview MDK中链接脚本详细解析”,这里只针对S3C2410以及开发板的特点,给出具体的代码参考。

之前提到的S3C2410及其开发板的一些基本参数,这里我们要关心的是SDRAM和Nor Flash的编址问题。通过阅读S3C2410用户指南可知,地址分布如下:

0x00000000~~0x01000000:32M Nor Flash

0x80000000~~0x81000000:32M Nor Flash

0x30000000~~0x02000000:64M SDRAM

因此,针对不同的程序运行地址,就有不同的分散加载文件:

1)程序运行在Nor Flash中(RuninFlash.sct):

;*************************************************************

;***Scatter-Loading Description File generated by uVision***

;*************************************************************

;Run in Flash

LR_ROM10x00000000{;load region

ER_ROM10x000000000x0200000{;load address=execution address

*.o(RESET,+First)

*(InRoot$$Sections)

.ANY(+RO)

}

RW_RAM10x300000000x4000000{;RW data

.ANY(+RW+ZI)

}

RW_IRAM10x400000000x00001000{

.ANY(+RW+ZI)

}

}

2)程序运行在SDRAM中(RuninRAM.sct):

;*************************************************************

;***Scatter-Loading Description File generated by uVision***

;*************************************************************

;Run in RAM

LR_ROM10x30000000{;load region

ER_ROM10x300000000x02000000{;load address=execution address

*.o(RESET,+First)

*(InRoot$$Sections)

.ANY(+RO)

}

RW_RAM10x302000000x3E00000{;RW data

.ANY(+RW+ZI)

}

RW_IRAM10x400000000x00001000{

.ANY(+RW+ZI)

}

}

2.3调试脚本

关于调试脚本的更多原理介绍,请参考

的详细解析”。

在S3C2410的MDK移植过程中,调试脚本(SDRAM.INI)主要的内容是进行SDRAM的配置和初始化运行指针。

/*******************************************************************/

/*Ext_RAM.INI:External RAM(SDRAM)Initialization File

*/

/*******************************************************************/

//<<>>// /*******************************************************************/

/*This file is part of the uVision/ARM development tools.

*/

/*Copyright(c)2005-2006Keil Software.All rights reserved.

*/

/*This software may only be used under the terms of a valid,current, */

/*end user licence from KEIL for a compatible version of KEIL software */

/*development tools.Nothing else gives you the right to use this software.*/

/********************************************************************/ FUNC void Setup(void){

_WDWORD(0x53000000,0x00000000);

_WDWORD(0x4A000008,0xFFFFFFFF);

_WDWORD(0x4A00001C,0x000007FF);

_WDWORD(0x4C000014,0x00000003);

_WDWORD(0x4C000004,0x0005c042);

_WDWORD(0x56000070,0x00280000);

_WDWORD(0x56000078,0x00000000);

_WDWORD(0x48000000,0x22111110);

_WDWORD(0x48000004,0x00000700);

_WDWORD(0x48000008,0x00000700);

_WDWORD(0x4800000C,0x00000700);

_WDWORD(0x48000010,0x00000700);

_WDWORD(0x48000014,0x00000700);

_WDWORD(0x48000018,0x00000700);

_WDWORD(0x4800001c,0x00018005);

_WDWORD(0x48000020,0x00000700);

_WDWORD(0x48000024,0x008e0459);

_WDWORD(0x48000028,0x000000B2);

_WDWORD(0x4800002c,0x00000030);

_WDWORD(0x48000030,0x00000030);

_WDWORD(0x56000014,0x00000001);

_WDWORD(0x56000020,0xAAAA55AA);

_WDWORD(0x56000028,0x0000FFFF);

_WDWORD(0x56000024,0x00000000);

}

Setup();//Setup for Init

LOAD SDRAM\Button_Test.axf INCREMENTAL//Download

PC=0x30000000;//Program Entry Point

g,main//Run to main function 具体的寄存器地址以及初始化参数请查阅S3C2410用户指南。

2.4Nor Flash烧写算法

MDK支持多种Nor Flash芯片的烧写,故在移植的过程中,只需要选择对应的Nor Flash烧写算法即可。

在MDK工具栏中点击或是Project?Options forTarget“XXX”,选择Uilities选项卡,如图2-4所示:

图2-4Flash烧写配置界面

点击Settings按钮,添加Flash烧写算法。已知S3C2410开发板用到的烧写算法为AM29F160DB Flash,因此,只需在点击Add按钮后,在里面找到对应的算法即可。添加算法后,界面如图2-5所示:

图2-5Flash算法配置界面

2.5MMU

S3C2410支持MMU,具体的内容可见附录3“RealView MDK中如何对MMU进行操作”。

当程序运行在SDRAM中时,需要运行MMU,以便能够找到正确的异常入口。具体的函数实现过程如下:

/****************************************************************

*name:EnableMMU

*func:Enable the MMU

*para:none

*ret:none

*modify:

*comment:

****************************************************************/

void EnableMMU()

{

unsigned int ctl;

ctl=ARM_ReadControl();

ctl|=(1<<0);

ARM_WriteControl(ctl);

}

/***********************************************************

*name:InitMMU

*func:Initialization the MMU

*para:pTranslationTable-TranslationTable Address

*ret:none

*modify:

*comment:

*****************************************************************/ void InitMMU(unsigned int*pTranslationTable)

{

int i;

//Program the TTB

ARM_WriteTTB((unsigned int)pTranslationTable);

//Program the domain access register

ARM_WriteDomain(0xC0000000);//domain15:access are not checked

//Reset table entries

for(i=0;i<0x200;++i)

pTranslationTable[i]=0;

//Program level1page table entry

pTranslationTable[0x0]=

(0x300<<20)|//Physical Address

(1<<10)|//Access in supervisor mode

(15<<5)|//Domain

1<<4|

0x2;//Set as1Mbyte section pTranslationTable[0x1]=

(0x301<<20)|//Physical Address

(1<<10)|//Access in supervisor mode

(15<<5)|//Domain

1<<4|

0x2;//Set as1Mbyte section pTranslationTable[0x2]=

(0x302<<20)|//Physical Address

(1<<10)|//Access in supervisor mode

(15<<5)|//Domain

1<<4|

0x2;//Set as1Mbyte section pTranslationTable[0x3]=

(0x303<<20)|//Physical Address

(1<<10)|//Access in supervisor mode

(15<<5)|//Domain

1<<4|

0x2;//Set as1Mbyte section

for(i=0x200;i<0xFFF;++i)

pTranslationTable[i]=

(i<<20)|//Physical Address

(1<<10)|//Access in supervisor mode

(15<<5)|//Domain

1<<4|

0x2;//Set as1Mbyte section

EnableMMU();//Enable the MMU

}

/****************************************************************

*name:ARM_WriteTTB

*func:Write Translation table base register

*para:TTB Address

*ret:none

*modify:

*comment:

*************************************************************/

__inline void ARM_WriteTTB(unsigned int ttb)

{

__asm("MCR p15,0,(ttb&0xFFFFC000),c2,c0,0");

}

/*************************************************************

*name:ARM_WriteDomain

*func:Write domain access control

*para:Domain NO.

*ret:none

*modify:

*comment:

*******************************************************************/

__inline void ARM_WriteDomain(unsigned int domain)

{

__asm("MCR p15,0,domain,c3,c0,0");

}

因为对于MMU的控制必须在管理态下进行,故应该对启动代码进行相应的修改。其中粗体部分为添加的内容。

;Enter Supervisor Mode and set its Stack Pointer

MSR CPSR_c,#Mode_SVC:OR:I_Bit:OR:F_Bit

MOV SP,R0

SUB R0,R0,#SVC_Stack_Size

;Enable MMU Map Address0x00to0x300000000,So if have no norflash the interrupt can also work!

IF:DEF:ENABLEMMU

IMPORT InitMMU

STMFD SP!,{R0}

LDR R0,=TTB_ADDR

BL InitMMU

LDMFD SP!,{R0}

ENDIF

;Enter User Mode and set its Stack Pointer

MSR CPSR_c,#Mode_USR

MOV SP,R0

SUB SL,SP,#USR_Stack_Size

2.6工程管理

在S3C2410的MDK例程移植中,需要建立两个目标工程:Run in RAM和Run in Flash。具体的工程管理方法,请参考附4“RealView MDK中如何方便实现同一程序在不同地址运行的工程管理”。

移植步骤

下面就介绍下如何从其他的开发工具上移植例程到MDK上。

3.1Run in SDRAM

1)新建一个文件夹,用于保存例程的所有文件,将例程中与开发工具无关的源文件拷到该目录下。

2)参照2.1启动代码一节,利用MDK自动生成启动代码,并配置好所需要的参数。同时,依据2.5MMU一节,对启动代码进行修改。

3)根据2.7工程管理,建立工程目录,同时添加相应的源文件。如图3-1所示:

图3-1工程结构目录

4)单击工程属性快捷键,打开工程属性设置窗口,并选择C/C++标签页,设置编译器属性。选择优化等级,以及优化选项,同时添加包含头文件的目录。如图3-2所示:

图3-2编译器属性配置界面

5)选择Asm标签页进行汇编器属性配置。因为程序运行在SDRAM中时,需要MMU,故需要在Define中预定义:ENABLEMMU。该标号用来作为启动代码中的“IF:DEF:ENABLEMMU”的判断条件。

图3-3汇编器属性配置界面

6)选择Linker标签页进行链接器配置。在链接器的属性配置中,主要添加

分散加载文件,即添加RuninRAM.sct路径,如图3-4所示。

图3-4链接器属性配置界面

7)选择Debug标签页进行调试属性配置。包括添加调试脚本(SDRAM.ini),设置调试方式等。如图3-5所示:

图3-5调试属性配置界面

8)Build工程并适当修改代码。当所有的工程属性都设置好之后,单击“Build

all target file”快捷键,对整个工程进行编译链接。对出现的错误或警告进行相应的修改,重新编译工程。

9)点击Debug调试快捷键,将生成的.axf文件下载到SDRAM中进行

在线调试。

10)配置超级终端。在PC机上运行windows自带的超级终端串口通信程序,,设置超级终端:波特率115200、1位停止位、无校验位、无硬件流控制,或者使用其它串口通信程序。(注:超级终端串口的选择根据用户的PC串口硬件不同,请自行选择,如果PC机只有一个串口,一般是COM1)。

11)单击,顺利执行程序;或执行单步运行,观察开发板上指示灯和超级终端输出信息。

12)编写Readme文件,以方便用户进行程序实验。

3.2Run in Flash

1)配置完Run in RAM工程属性后,通过选择

程序运行在Flash中,单击工程属性快捷键,打开工程属性设置窗口,对与Run in Flash进行工程配置。

2)选择C/C++标签页,设置编译器属性。选择优化等级,以及优化选项,同时添加包含头文件的目录。如图3-6所示:

图3-6编译器属性配置界面

3)选择Asm标签页进行汇编器属性配置。注意,与Run in RAM不同,当程序运行在Nor Flash中时是不需要MMU的,故不需要预定义“ENABLEMMU”

标号。

图3-7汇编器属性配置界面

4)选择Linker标签页进行链接器配置。在链接器的属性配置中,主要添加分散加载文件,即添加RuninFlash.sct路径,如图3-8所示。

图3-8链接器属性配置界面

5)选择Debug标签页进行调试属性配置。包括添加调试脚本(Flash.ini),设置调试方式等。其实Flash.ini和SDRAM.ini类似,只是在.axf引用的位置和最后PC指向的位置不同。在Flash.ini中,PC=0x00000000。这样程序就可以在Flash中进行调试了,需要说明的是在Flash中调试的时候,只能设置2个断

点。如图3-9所示:

图3-9调试属性配置界面

6)参照2.4Nor Flash烧写算法一节,添加Nor Flash烧写算法。同时在Uilities标签页中选上“Update Target before Debugging”。并添加“Init File”,Flash.ini。

如图3-10所示:

图3-10烧写算法属性配置界面

7)Build工程并适当修改代码。当所有的工程属性都设置好之后,单击“Build

all target file”快捷键,对整个工程进行编译链接。对出现的错误或警告进行

相应的修改,重新编译工程。

8)点击Debug调试快捷键,将生成的.axf文件下载到Flash中进行在线调试。或直接点击,将.asf文件下到Nor Flash中。

9)配置超级终端。在PC机上运行windows自带的超级终端串口通信程序,,设置超级终端:波特率115200、1位停止位、无校验位、无硬件流控制,或者使用其它串口通信程序。(注:超级终端串口的选择根据用户的PC串口硬件不同,请自行选择,如果PC机只有一个串口,一般是COM1)。

10)在Flash中调试时,单击,顺利执行程序;或执行单步运行,观察开发板上指示灯和超级终端输出信息。重启开发板,观察开发板上指示灯和超级终端输出信息。

11)编写Readme文件,以方便用户进行程序实验。

4注意事项

1)在移植开始前,请仔细阅读S3C2410用户指南,尤其是memory controller, clock power management,I/O ports和Interrupt controller这几章。

2)仔细阅读开发板的使用说明,主要关注点在于SDRAM,Nor Flash的大小,跳线的设置,LED灯采用的I/O端口等。

3)在编写链接脚本文件的时候,尤其是Run in SDRAM,要注意RW区和RO区不要有交叉。

4)注意.s和.c文件中定义的标号,如果需要的话,应该在编译器和汇编器的属性配置中进行预定义。

5)移植的时候,如果超级终端不能显示,检查软件无误后,可考虑是串口线的问题(交叉或是直连)。

6)注意最后生成文件的大小和实际分配给各个区段的大小。

7)MDK有时候会出现未知原因的不稳定,确定程序无误后,可以考虑多试几次。

附录

附1Realview MDK中链接脚本详细解析

使用Realview MDK时不可避免的要涉及到链接脚本文件,特别是编译链接

那些大的工程文件时更是如此。在链接脚本中可以指定代码的存储布局,可以将代码段、只读数据段、可读写的数据段分别存放,甚至可以精确地指定代码放置的位置,这一点是关键的,譬如说启动代码就必须放在可知型文件的开始位置。由于链接脚本重要性,开发者必须掌握其编写的方法。

Realview MDK链接程序使用了两种方式控制程序的链接,即链接控制命令选项和链接脚本文件。当使用链接控制命令选项时,链接器定义了Image$$RW$$Base、Image$$RW$$Limit、Image$$RO$$Base、Image$$RO$$Limit、Image$$ZI$$Base和Image$$ZI$$Limit等6个段地址描述符。这6个描述符可以直接在程序中引用。而在使用链接脚本文件后,这6个描述符号没有了,取而代之的是链接脚本文件中的段描述符,格式为:Image$$段名$$Base和Image$$段名$$Limit。下面将结合3个具体的例子说明链接脚

本文件的使用。

例1一个加载区域,多个连续的执行区域。

LR_10x040000;定义载入区域LR_1的起始地址为0x040000。

{

ER_RO+0;执行区域ER_RO的起始地址紧接载于区域LR_1的起始地址,即为0x040000.

{

*(+RO);所有的只读代码段都连续地放在这个区域。

}

ER_RW+0;可读写数据段ER_RW紧接ER_RO段的尾地址存放,即0x040000+ ER_RO的容量。

{

*(+RW);所有的可读写的程序都连续地放在这个区域。

}

ER_ZI+0;清零数据段ER_ZI紧接ER_RW段的尾地址存放。

{

*(+ZI);所有清零数据都连续地放在这个区域。

}

}

例2一个加载区域,多个非连续的执行区域。

LR_10x010000;定义载入区域LR_1的起始地址为0x010000。

{

ER_RO+0;执行区域ER_RO的起始地址紧接载于区域LR_1的起始地址,即为0x010000.

{

*(+RO);所有的只读代码段都连续地放在这个区域。

}

ER_RW0x040000;定义可读写数据段ER_RW的起始地址为0x040000.

{

*(+RW);所有的可读写的程序都连续地放在这个区域。

}

ER_ZI+0;清零数据段ER_ZI紧接ER_RW段的尾地址存放,即为0x040000+ER_RW的容量。

{

*(+ZI);所有清零数据都连续地放在这个区域。

}

}

例3二个加载区域,多个非连续的执行区域。

LR_10x010000;载入区域LR_1的起始地址为0x010000。

{

ER_RO+0;ER_RO段的起始地址为0x010000.

{

*(+RO)

}

}

LR_20x040000;载入区域LR_2的起始地址为0x040000。

{

ER_RW+0;ER_RO段的起始地址为0x010000.

{

*(+RW);所有可读写的数据段都放在这里。

}

ER_ZI+0;清零段ER_Z的起始地址为0x040000+ER_RW段的容量。

{

*(+ZI);所有清零段ZI的数据都连续的放在这里。

}

}

上面三个例子中,载入区域和执行区域的名字是可以任意命名的,对这些段地址的引用可以使用如Image$$LR_1$$Base、Image$$LR_1$$Limit、Image$$ER_RW$$Base和Image$$ER_RW$$Limit等。

附2Realview MDK中调试脚本的详细解析

和其他集成开发环境一样,Realview MDK中也使用了调试脚本。调试脚本除了可以初始化软硬件的调试环境以外,还可以初始化Flash的烧写环境,甚至可以提供信号函数模拟片上外围设备。所以在使用Realview MDK调试和烧写的过程中,到处都有调试脚本的身影。下面将分三个方面详细地研究调试脚本的编写和使用。在介绍调试脚本之前,先必须了解Realview MDK预定义的一些常用

命令和函数的用法。

1.常用预定义命令的说明及注意事项:

2.调试脚本在硬件仿真中的应用

Realview MDK编译链接好的程序在硬件上运行之前,要求硬件具有合适的环境(例如,时钟的配置、存储控制的配置等),一般这些工作是由启动代码完成的。在Realview MDK中,通过调试脚本使用MDK预先定义好的寄存器读写命名设置硬件环境。这一工作在硬件调试之前是必须进行的。下面是一个初始化硬件环境的调试脚本函数:

FUNC void Setup(void)

{

_WWORD(0xfffffd44,0x00008000);//配置看门狗模式寄存器;

_WWORD(0xfffffd60,0x00320100);//配置电压效验模式寄存器;

_WWORD(0xfffffc20,0x00000601);//配置主晶振寄存器;

_WWORD(0xfffffc2c,0x00191C05);//配置锁相环寄存器;

_WWORD(0xfffffc30,0x00000007);//配置主时钟寄存器;

_WWORD(0xfffffd08,0xa5000001);//配置复位控制模式寄存器;

pc=0x200000;//设置PC的值。

}

3.调试脚本在软件仿真调试中的应用

使用Realview MDK软件模拟器调试程序时,除了像硬件调试那样配置相关的寄存器以外,有时还必须使用信号函数模拟外设信号的输入/输出,甚至完全模拟一个外围设备。下面的程序将模拟一个外围设备向ADC接口输入方波信号:

signal void ADC4_Square(void){

float volts;//峰值的电压;

float frequency;//输出的始终频率,单位HZ;

float offset;//偏移电压;

float duration;//持续的时间,单位S;

volts= 1.6;

offset=0.5;

frequency=2400;

duration=1000;

while(duration>0.0){

AD4=volts+offset;

swatch(0.5/frequency);

AD4=offset;

swatch(0.5/frequency);

duration-= 1.0/frequency;

}

}

4.调试脚本在Flash下载中的应用:

使用Realview MDK进行Flash下载时,目标板的硬件环境也需要配置,其配置方法和硬件调试的情况是一样的,在此不再赘述。

超级XY曲线控件例程说明文档

超级XY曲线控件 例程说明文档 北京亚控科技发展有限公司 2009年6月

目录 1. 功能概述 (1) 2. 工程实例 (1) 3. 操作步骤 (1) 3.1 定义设备 (1) 3.2 定义变量 (1) 3.3 制作画面 (2) 3.4 功能实现说明 (10) 3.5 进入运行系统 (12) 4. 注意事项 (14)

1. 功能概述 常规需求:很多工业现场会用到XY曲线,也就是X轴非时间轴的情况。 组态王中的实现方法: 1)利用组态王内置控件中的X-Y轴曲线,通过调用此控件的函数来实现。 2)利用组态王通用控件中的超级XY曲线,通过调用此控件的属性、方法来实现。 超级XY曲线相对于X-Y轴曲线功能更加强大,使用更方便。其主要优势在于提供了更加灵活方便的控件方法来实现更多的功能,Y轴支持多个坐标,最多可以支持16条曲线,曲线可以保存、调用等,所有的功能都提供了相应的控件方法,可以根据需要灵活的在各种命令语言脚本程序中进行调用。 2. 工程实例 我们举一个例子来说明超级XY曲线控件的使用。在此例程中我们定义三个变量,分别为“压力”、“温度”、“密度”,通过XY曲线来观察压力、温度对于密度的影响。下面就以此为例来演示完成这一要求的具体步骤。 3. 操作步骤 3.1定义设备 新建一个工程,根据工程中实际使用的设备进行定义,本例程使用亚控的仿真PLC 设备,使用“PLC-亚控-仿真PLC-串口”驱动,定义设备名称为“PLC”。 3.2定义变量 在组态王中定义三个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO 实数类型)。压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。 温度变量:最小值0,最大值50,最小原始值0,最大原始值100,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。 密度变量:最小值0,最大值1,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。

打地鼠程序说明文档

打地鼠程序说明文档 项目是一款打地鼠的游戏,程序用到了延时函数、LED、电阻屏、按键灯功能,这些功能的初始化例程里面都有,我们可以直接调用来完成初始化。 完成了初始化就开始程序的主干了,既然我们用到了电阻屏,肯定就需要对它进行校准,校准函数在触摸屏例程也有,我们可以通过KEY0按键直接调用校准函数,用来防止触摸屏不准。 然后我们先进行的是界面显示,先通过图片取模软件取出一个背景图,注意取模的时候由于例程显示那里标注了,在液晶上画图(仅支持:从左到右,从上到下 or 从上到下,从左到右的扫描方式!),图片数据(必须包含图片信息头, 4096色/16位真彩色/18位真彩色/24位真彩色/32位真彩色的图像数据头),针对STM32,不能选择image2lcd的"高位在前(MSB First)"选项,否则imginfo的数据将不正确!我们按照标注选择了16位真彩色的取模方式,通过PS将图片改为屏幕合适尺寸,就可以在屏幕上显示出背景了。将前20行用来显示分数,等级,生命属性,他们通过字符串和数字变量的显示函数来实现,后面300行做成3*3的地鼠洞,地鼠洞通过例程里面的画实心圆来表示,用一个for来遍历每个圆心坐标,让代码简介,在用个随机数函数产生0-8的数字来代表老鼠出现的位置,然后通过同样的方法取出老鼠的图片,根据洞圆心的坐标,找到老鼠显示的坐标显示出老鼠,这里背景是指显示一次的,老鼠变换一次刷新一次屏幕,

刷新就只用刷新你目前的状态,洞的显示和老鼠的位置,让洞把老鼠覆盖就可以不用刷新背景了。再游戏结束之后再重新刷新背景显示游戏结束和继续就好了。 显示完成了接下来就是触摸,由于它的例程里面自带触摸函数,可以直接调用来返回当前的x,y坐标,这样触摸就很容易了key_9=(tp_dev.x[0]+1)/80+3*(tp_dev.y[0]+1-20)/100; 用以上这段代码就可以识别出触摸的是之前分的3*3的那个位置,返回的1-9,然后再和老鼠对应的坐标进行判断就可以知道打对与否,对就加分,分到就升级,升级了就提高地鼠刷新次数,错就减分,减生命,分为0时就不减了,生命为0就游戏结束。还有不管对错,只要点击了屏幕地鼠的持续时间就会减短,马上刷新下一只地鼠。就不用多余的等待。

组态王 历史数据查询例程说明文档

例程说明文档

目录 1. 功能概述 (1) 2. 工程实例 (1) 3. 操作步骤 (1) 3.1 定义设备 (1) 3.2 定义变量 (1) 3.3 制作画面 (2) 3.4 进入运行系统 (10) 4. 注意事项 (14)

1. 功能概述 常规需求:很多工业现场会存储数据并对存储的历史数据进行查询、打印输出。 历史数据查询一般为起始时间、结束时间、间隔时间都不固定,最终用户根据实际需要进行查询。 组态王中的实现方法: 利用组态王内置报表以及报表的函数来实现对历史数据的查询。 组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。 2. 工程实例 我们举一个例子来说明实现方法。在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,下面就以此为例来演示完成这一要求的具体步骤。 3. 操作步骤 3.1定义设备 根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC -亚控-仿真PLC-串口”驱动,定义设备名称为“PLC”。 3.2定义变量 在组态王中定义五个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO 实数类型)、电压(IO实数类型)、电流(IO实数类型)。 压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。 温度变量:最小值0,最大值50,最小原始值0,最大原始值100,连接设备PLC,

软件(结构)设计说明(SDD)文档标准模版

软件(结构)设计说明(SDD) XXXX公司

文件更改记录

文件版本变更记录

软件(结构)设计说明(SDD) 说明: 1.《软件(结构)设计说明》(SDD)描述了计算机软件配置项(CSCI的设计。它描述了CSCI级设计决策、CSCI体系结构设计(概要设计)和实现该软件所需的详细设计。SDD可用接口设计说明IDD和数据库(顶层)设计说明DBDD加以补充。 2.SDD连同相关的IDD和DBDD是实现该软件的基础。向需方提供了设计的可视性,为软件支持提供了所需要的信息。 3.IDD和DBDD是否单独成册抑或与SDD合为一份资料视情况繁简而定。 模版说明: 1、文档字体设定: 标题1:小一 标题2:二号 标题3:小二 标题4:三号 标题5:小三 标题6:四号 正文:四号 2、文章编号,请使用格式刷刷,不要手工编号。目前格式都 是对的。 3、内容根据实际情况裁剪,一般可行性研究报告,模版章节 不可缺。 4、封面图片请根据实际情况自行替换。 5、关于修订记录,请根据文档需要自行添加。

1.引言 本章应分为以下几条。 1.1.标识 本条应包含本文档适用的系统和软件的完整标识。(若适用)包括标识号、标题、缩略词语、版本号、发行号。 1.2.系统概述 本条应简述本文档适用的系统和软件的用途。它应描述系统与软件的一般性质;概述系统开发、运行和维护的历史;标识项目的投资方、需方、用户、开发方和支持机构;标识当前和计划的运行现场;并列出其他有关文档。 1.3.文档概述 本条应概述本文档的用途与内容,并描述与其使用有关的保密性或私密性要求。 1.4.基线 说明编写本系统设计说明书所依据的设计基线。

代码编写规范说明书

代码编写规范说明书(c#.net与https://www.sodocs.net/doc/1f13971805.html,)目录 1 目的 2 范围 3 注释规范 3.1 概述 3.2 自建代码文件注释 3.3 模块(类)注释 3.4 类属性注释 3.5 方法注释 3.6 代码间注释 4 命名总体规则 5 命名规范 5.1 变量(Variable)命名 5.2 常量命名 5.3 类(Class)命名 5.4 接口(Interface)命名 5.5 方法(Method)命名 5.6 名称空间Namespace)命名 6 编码规则 6.1 错误检查规则 6.2 大括号规则 6.3 缩进规则 6.4 小括号规则 6.5 If Then Else规则 6.6 比较规则 6.7 Case规则 6.8 对齐规则 6.9 单语句规则 6.10 单一功能规则 6.11 简单功能规则 6.12 明确条件规则 6.13 选用FALSE规则 6.14 独立赋值规则 6.15 定义常量规则 6.16 模块化规则 6.17 交流规则 7 编程准则 7.1 变量使用 7.2 数据库操作 7.3 对象使用 7.4 模块设计原则 7.5 结构化要求 7.6 函数返回值原则 8 代码包规范 8.1 代码包的版本号

8.2 代码包的标识 9 代码的控制 9.1 代码库/目录的建立 9.2 代码归档 10 输入控制校验规则 10.1 登陆控制 10.2 数据录入控制 附件1:数据类型缩写表 附件2:服务器控件名缩写表 1 目的 一.为了统一公司软件开发设计过程的编程规范 二.使网站开发人员能很方便的理解每个目录,变量,控件,类,方法的意义 三.为了保证编写出的程序都符合相同的规范,保证一致性、统一性而建立的程序编码规范。 四.编码规范和约定必须能明显改善代码可读性,并有助于代码管理、分类范围适用于企业所有基于.NET平台的软件开发工作 2 范围 本规范适用于开发组全体人员,作用于软件项目开发的代码编写阶段和后期维护阶段。 3 注释规范 3.1 概述 a) 注释要求英文及英文的标点符号。 b) 注释中,应标明对象的完整的名称及其用途,但应避免对代码过于详细的描述。 c) 每行注释的最大长度为100个字符。 d) 将注释与注释分隔符用一个空格分开。 e) 不允许给注释加外框。 f) 编码的同时书写注释。 g) 重要变量必须有注释。 h) 变量注释和变量在同一行,所有注释必须对齐,与变量分开至少四个“空格”键。 如:int m_iLevel,m_iCount; // m_iLevel ....tree level // m_iCount ....count of tree items string m_strSql; //SQL i) 典型算法必须有注释。 j) 在循环和逻辑分支地方的上行必须就近书写注释。 k) 程序段或语句的注释在程序段或语句的上一行 l) 在代码交付之前,必须删掉临时的或无关的注释。 m) 为便于阅读代码,每行代码的长度应少于100个字符。 3.2 自建代码文件注释 对于自己创建的代码文件(如函数、脚本),在文件开头,一般编写如下注释: /****************************************************** FileName: Copyright (c) 2004-xxxx *********公司技术开发部 Writer: create Date: Rewriter:

组态王报警例程文档

报警系统应用例程 说明文档 此文档由北京亚控公司提供,仅作为KingSCADA3.0报警系统应用的使用参考,其中涉及内容的详细说明请参考KingSCADA3.0的使用说明或咨询技术支持工程师。

目录 1. 概述 (1) 2. 例程 (1) 2.1 定义变量的报警属性 (1) 2.2 报警配置 (3) 2.3 报警显示 (6) 2.4 报警查询 (12) 2.5 报警窗的方法应用 (17) 3. 注意事项 (18)

1.概述 在工业控制系统中,当现场的数据超出正常范围时,系统应以报警的方式将其通知相关工作人员,工作人员接收到报警信息后会对报警做出相应的处理,所以报警系统在工业控制系统中是一个非常重要的组成部分。KingSCADA3.0提供了强大的报警操作功能:包括报警存储功能、报警打印功能、报警显示功能、报警转发功能等等,下面将具体介绍每种功能的操作过程。 2.例程 2.1定义变量的报警属性 在使用报警功能前,必须先要对变量的报警属性进行定义。 在开发系统“数据词典”中新建变量,本工程中我们以模拟量为例。 ●变量名:temperature ●变量类型:基本变量 ●数据类型:Mem Float ●变量描述:温度 ●初始值:0 ●灵敏度:0 ●最小值:0 ●最大值:100 变量temperature的报警属性如图1所示。

图1 变量temperatrue报警属性 ●变量名:pressure ●变量类型:基本变量 ●数据类型:Mem Float ●变量描述:压力 ●初始值:0 ●灵敏度:0 ●最小值:0 ●最大值:5 变量pressure的报警属性如图2所示。

组态王报警存储与查询例程说明文档分析-共27页

例程说明文档 北京亚控科技发展××公司 2019年7月

目录 1. 功能概述 (1) 2. 工程实例 (1) 3. 操作步骤 (1) 3.1 新建工程 (1) 3.2 报警配置 (7) 3.3 进入运行系统 (14) 3.4 历史报警查询 (15) 4. 注意事项 (25)

1. 功能概述 常规需求:很多工业现场要求将变量的报警信息进行存储,并且可以灵活的进行历史报警的查询、打印。 组态王中的实现方法:组态王支持通过ODBC接口将数据存储到关系数据库中,并且提供KVADODBGrid控件对存储的历史报警信息进行条件查询,并可以对查询结果进行打印。关系数据库可以为Access数据库或者SQLServer数据库。 2. 工程实例 我们通过一个简单的工程对报警信息的存储以及历史报警信息的查询进行讲解。历史报警的查询主要根据日期、报警组为条件进行查询。报警信息存储的数据库以Access 数据库为例进行。下面就以此为例来演示完成这一现场需求的设置步骤。 3. 操作步骤 3.1新建工程 3.1.1定义设备 新建一个工程,在设备处新建设备,我们在本例中定义一个仿真PLC的设备,设备列表为“PLC-亚控-仿真PLC-串口”,设备名称为“PLC1”。此仿真PLC可以做为虚拟设备与组态王进行通讯。仿真PLC主要有如下的寄存器:自动加1寄存器INCREA,自动减1寄存器DECREA,随机寄存器RADOM,常量寄存器STATIC,常量字符串寄存器STRING,CommErr寄存器。具体的寄存器的使用请参考组态王IO驱动帮助。 3.1.2定义变量 在数据词典中新建两个IO变量,变量名称分别为压力、流量,变量类型为IO实数,连接的设备为前面定义的仿真PLC设备“PLC1”,寄存器分别为INCREA100,DECREA100,数据类型为short,读写属性为“只读”。这样压力变量就会从0开始自动加1,其变化范围是0到100,流量变量从100开始自动减1,其变化范围是0到100。变量定义画面如下图一、图二所示:

IBMS系统需求说明书系统V

智能建筑设备管理系统(IBMS)集成平台 用户需求说明书 深圳市贝尔信智能系统有限公司

修订历史记录 A- 增加M- 修订D-

目录 1引言4 1.1编写目的 (4) 1.2范围 (4) 1.3术语与缩写解释 (5) 1.4参考资料 (5) 1.5假设与约定 (6) 1.6先进性与可扩展性 (6) 2产品介绍 (8) 3产品面向的用户群体 (9) 10 11 11 11 12 12 12 13 13 13 14 14 14 14 14 14 14 14 14 15 16 16 16 7.3网络环境需求 (18) 8需求签字确认 (19)

1引言 1.1编写目的 编写本需求说明书的目的是为了更好的建立起设计者与用户的联系,明确用户需要什么,对每一项功能的实现有什么要求。并准确的定义“系统必 2.2安全防范 视频监控系统 入侵报警系统 2.3公共类 停车场管理系统 机房监控系统

1.3术语与缩写解释 7.《民用闭路监视系统工程技术规范》(GB50198-2011) 8.《防盗报警控制器通用技术条件》(GB 12663-2001) 9.《建筑设计防火规范》(GB50016-2006) 10.《火灾自动报警系统设计规范》(GB50116-98) 11.《绿色建筑评价标准》(GB/T50378-2006) 12.《安全防范工程技术规范》(GB50348-2004)

13.《入侵报警系统工程设计规范》(GB50394-2007) 14.《视频安防监控系统工程设计规范》(GB50395-2007) 15.《出入口控制系统工程设计规范》(GB50396-2007) 16.《商业建筑物综合布线系统国际标准》(ISO/IEC11801) 17.《通信布线管道和空间设计施工标准》(EIA/TIA 569) 18.《综合布线系统工程设计规范》(GB50311-2007) 19.《综合布线系统工程验收规范》(GB50312-2007) 1.6先进性与可扩展性 本系统有很强的前瞻性设计,充分预留了各种标准协议的支持接口, 可根据具体项目进行订制: ●本系统支持BACnet 楼宇自动化和控制网络协议。 ●本系统支持OPC / ModBus 作为公共的标准接口采集协议。

金龙207、407网络例程说明文档

金龙开发板网络例程说明文档 硬件平台:金龙207开发板、金龙407开发板 软件平台: 固件库版本:1.0 Freertos版本:6.1.0 Lwip版本:1.3.2 深圳旺宝电子

实验一:Ping 对于网络通信首先必须得保证网络连接正常,Ping命令是我们最常使用的检测网络的方法,将开发板与电脑用网线连接,首先我们需要对电脑进行如下配置,打开电脑网络,双击“本地连接” 设置本地连接“属性”

设置TCP/IP属性 选择手动设置IP地址,这里设置为192.168.1.203,点击确定即可。

打开工程“金龙207网络之ping”。 打开main.h我们可以看出开发板IP地址为192.168.1.199,开发板IP地址与电脑IP地址必须在一个网段内(这里是192.168.1.xxx),如果不需要使用LCD显示(使用旺宝电子3.2寸触摸屏模块),可关掉宏“USE_LCD”。STM32与DP83848采用的是RMII接口,STM32为DP83848提供50MHz时钟,使用宏“RMII_MODE”。 如下图为金龙207开发板照片,若网络灯不亮,请检查J8跳线帽是否连接(如下标注,需连接上),可用示波器测试此处波形频率为50MHz正弦波。

JLINK下载运行后,使用交叉网线将电脑与开发板连接,点击开始->运行输入cmd出现命令提示符界面,输入ping192.168.1.199,如下图,可以看到Reply from192.168.1.199: bytes=32time<1ms TTL=255则说明开发板与电脑连接正常。LCD显示板卡IP地址,若不需要LCD显示可在main.h中将USE_LCD宏关掉。

MPI例程说明文档

很简单的一个小程序,理解了MPI中的几个基本函数。 以及环境的使用方法。 #include #include"mpi.h" #include #include #include using namespace std; int main(int argc, char *argv[]) { int myid, numprocs; MPI_Status status;//状态记录 MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myid);//myid为当前线程编号 MPI_Comm_size(MPI_COMM_WORLD, &numprocs);//numprocs为该任务总线程数 if (numprocs == 1)//线程数若为1时特殊处理,避免自己向自己发消息的deadlock { int data = 123456; double start = MPI_Wtime(); cout << "data is " << data << endl; cout << "time left " << endl; cout << (MPI_Wtime() - start) << "s" << endl; //输出时间 } else//正文 { if (myid == 0)//对于第一个线程 { int data = 123456, feedback;//记录当前时间start_time,以及数据data double start = MPI_Wtime(); MPI_Send(&data, 1, MPI_INT, (myid + 1) % numprocs, 1, MPI_COMM_WORLD);//向下一进程发送数据 MPI_Recv(&feedback, (myid - 1 + numprocs) % numprocs, MPI_INT, numprocs - 1, 1, MPI_COMM_WORLD, &status);//等待最后一个进程的数据 cout << "data is " << feedback << endl; cout << "time left " << endl; cout << (MPI_Wtime() - start) << "s" << endl; //输出时间 } else//而对于其它进程 { int deliever; MPI_Recv(&deliever, 1, MPI_INT, myid - 1, 1, MPI_COMM_WORLD, &status);//等待上一线程所给数据 MPI_Send(&deliever, 1, MPI_INT, (myid + 1) % numprocs, 1, MPI_COMM_WORLD);//将数据给下一进程

盘点说明书

盘点程序说明书 欢迎使用轻睿科技开发的网络版固定资产盘点程序 一功能概述: 1:条码扫描,二维码扫描,可扫描手机WIFI二维码,读取对方手机WiFi密码。(设置-无线和网络-WLAN-点击列表-扫描二维码) 2:进行条码扫描录入数据,保存到服务器实现数据共享,固定资产盘点功能。 3:语音识别,支持多国语音翻译功能,可语音朗读中英文。 4:隐藏的语音识别功能:(设定,设置,信息,联系人,手电筒,关,闪光灯开,闪光灯关,退出,网络数据,通讯录,时钟,闹钟,QQ,微信,现在几点,几点了,几点啦,相册,救命,着火啦,着火了,起火了,119,110,120,救护车,录音,指南针,计算器,返回,桌面,跑步,跑了多少步,锻炼,记事本,备忘录,音乐,删除资产,天气),点击讯飞语音识别按钮后,可语音唤醒以上功能。 5.多功能计算器,可累积多段分别计算。 6.计步器功能(语音唤醒) 7.报时功能(语音唤醒) 8.高度,速度计,指南针 9.应用程序可手动跟新,下载后存储于手机存储卡根目录fabuban_pandianruanjian.zip,可通过浏览器或者压缩文件管理器打开进行安装。 二盘点功能的使用方法: 1:软件界面

: 2:如何新增资产 第一次使用本软件,数据库内无数据,需要手工建立数据文件,方法: ①点击“扫码”按钮,识别完成后顶部单元格显示条码内容,光标自动转移到中间单元格,请在此单元格内②输入产品型号(例)联想笔记本电脑,PK1353型,人力资源部,张三,重庆市惠普科技有限公司万州观音岩173号,输入完毕,③点击“新增资产”按钮。 此时弹出对话框:确定新增资产吗?请点击确定按钮。

Java Socket实例说明文档

Socket说明文档 Socket连接过程 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。 服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。 客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。 Java开发一个Server-Client模型的程序 开发原理 服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。 Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket 了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

RTU使用说明书

威控科技VControl Technology 北京威控科技产品资料手册 2008.05.18 版 北京威控科技有限公司

RTU-1600 目录1序 (3) 2RTU-1600简介 (4) 2.1系统方框图 (5) 2.2RTU-1600外形图 (5) 3端子排布 (7) 4显示和控制单元 (9) 4.1显示单元 (9) 4.1.1无线网络状态灯 (9) 4.2控制单元 (9) 5系统描述 (10) 5.1RTU-1600的配置 (10) 5.1.1电源供电 (10) 5.1.1.1设置为低功耗模式 (11) 5.1.1.2低功耗模式下操作 (11) 5.1.1.3电源模式的恢复 (12) 5.1.2数字量输入与输出 (13) 3.1.2.1 数字量输入DI0..15 (13) 3.1.2.4 数字量输出DO0..07 (13) 5.1.3模拟量输入 (15) 3.1.3.1 模拟量输入AI0..07 (15) 5.1.4PWM输出 (17) 5.1.5继电器输出 (17) 5.1.6串行接口 (18) 3.1.4.1 RS-232接口 (18) 3.1.4.1 RS-485接口 (18) 5.1.7CDMA1x/GPRS扩展 (18) 5.1.8板载的Flash (18) 5.2RTU-1600的编程 (19) 5.3启动和复位特性 (19) 5.4固件的更新 (19) 6快速开始 (20) 6.1连接编程电缆 (20) 6.2启动RTU-1600 (20) 6.3模拟量的校准 (25) 6.3.1AD的校准 (25) 7技术参数 (26) 8I/O数据类型 (27) 9例程简介 (28) 9.1Modbus串口例程 (28) 9.2Modbus/TCP例程 (28) 9.3PID控制例程 (28) 9.4定时中断例程 (28)

CMOS摄像头循迹例程说明文档

概要 本篇说明文档介绍了基于RX23T单片机的CMOS摄像头图像采集处理程序的编写。主要介绍了如何使用代码生成工具配置本例程所需的UART、简易IIC、外部中断、Port等模块并生成相应的驱动代码,同时对生成的代码文件添加的摄像头驱动与数据存储函数进行了详细说明。后附CMOS摄像头图像采集处理程序源码实例,用户可以结合本例程对RX23T单片机进行摄像头循迹等的拓展应用。 对象MCU R5F523T5A

目录 1.系统功能概述 (3) 1.1 CMOS摄像头循迹原理 (3) 1.2 CMOS摄像头循迹例程功能 (3) 2.系统硬件说明 (4) 2.1 开发板介绍 (4) 2.2 摄像头模组 (4) 2.2.1 模组实物图 (4) 2.2.2接口定义 (5) 2.2.3模组介绍 (5) 2.2.4 OV7620时序分析 (6) 2.2.5图像数据自动存储 (7) 2.2.6 OV7620寄存器设置 (7) 2.2.7 模块连接 (8) 2.2.8图像读取方法 (9) 2.2.9软件滤波算法 (9) 2.2.10黑线中心提取方法 (10) 3.例程软件说明 (11) 3.1 集成开发环境 (11) 3.2 CMOS摄像头循迹例程编写 (11) 3.2.1 e2 studio界面配置 (12) 3.2.2 添加摄像头模块程序 (15) 4.例程测试结果 (26) 4.1 图像采集存储速度测试结果 (26) 4.2 二值化存储测试结果 (27) 4.3 分辨率测试结果 (27) 4.4 开窗测试结果 (29) 5.参考文献 (31) 结束语 (31)

1.系统功能概述 1.1 CMOS摄像头循迹原理 通过图像传感器对实时图像的采集,得到道路的信息,对当前采集到的图像信息做出判断,从而得到道路的情况,之后通过进一步控制实现循迹功能。 1.2CMOS摄像头循迹例程功能 本例程利用OV7620 CMOS摄像头模块成像1米外路径图像(白底一条黑线),将一帧数据转换成“0”“1”镜像到MCU RX23T的RAM中。如图1.1图像二值化存储示例。 图1.1 图像二值化示例

关系数据库多表联合查询例程说明文档_Access

关系数据库多表联合查询例程 说明文档 此文档由北京亚控公司提供,如有疑问请致亚控技术支持工程师。

一、概述 组态王中的KVADODBGrid控件可以用做大批量数据的查询工具使用。但是该控件只能从一个表中提取数据,不能从多个表中联合查询数据。不过数据库提供了一个视图功能,此视图可以从多个表中联合查询,因此我们可以通过视图间接的达到从多个表中联合查询数据的目的。下面以Access数据库为例进行说明。 注:在Access数据库中我们所说的“视图”就是Access对象里的“查询”,而在SQL数据库里就是“视图”了。 二、创建Access查询表 1.如下图示:Access中含有2个表,一个是“抄表数据”,一个是“用户信息”,两表中均含有“电表编码”字段,现在需要通过“电表编码”字段把“抄表数据”表和“用户信息”表部分字段合并成一个新表供查询,即实现跨表查询。

2. 创建Access查询表 1)打开Access数据库,选择【查询】菜单,选中【在设计视图中创建查询】,这时【设计】菜单变为有效,如下图所示: 2)单击【设计】菜单,打开如下图所示视图设计窗口,选中要添加的表,单击【添加】按钮,把表加到“选择查询”的窗口里。 3)对不同表中相同的字段,Access会自动生成关联,如下图所示:

中间的关联线可以右键删除,若要再次添加只需要把左边的“电表编码”鼠标左键点住拉到右边的“电表编码”上即可。 4)选择要联合查询的字段,如下图所示:

4)点【关闭】或【保存】,弹出保存查询对话框,保存建好的查询表。

三、组态王中用KVADODBGrid控件实现多表联合查询 1)建立数据源“info”关联到工程文件夹下的“info.mdb”数据库文件。 2)建立KVADODBgrid Class 控件,在关联数据库的时候,把“视图”选上,即可看到“抄表信息”表,如下图示:

组态王日报表例程说明文档

日报表 例程说明文档 北京亚控科技发展有限公司 2009年6月

目录 1. 功能概述 (1) 2. 工程实例 (1) 3. 操作步骤 (1) 3.1 定义设备 (1) 3.2 定义变量 (1) 3.3 制作画面 (2) 3.4 进入运行系统 (10) 4. 注意事项 (12)

1. 功能概述 常规需求:很多工业现场会用到报表功能,而日报是其中最基本的一种报表形式。 日报表一般为每天整点的数据,每一个变量有24个数据。 组态王中的实现方法: 利用组态王内置报表以及报表的函数来实现对日数据的查询生成日报表。 组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。 2. 工程实例 我们举一个例子来说明日报表的实现方法。在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,查询日报表数据时自动从历史数据中查询整点数据生成报表,并可以保存、打印报表。下面就以此为例来演示完成这一要求的具体步骤。 3. 操作步骤 3.1定义设备 根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC -亚控-仿真PLC-串口”驱动,定义设备名称为“PLC”。 3.2定义变量 在组态王中定义五个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO 实数类型)、电压(IO实数类型)、电流(IO实数类型)。 压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。 温度变量:最小值0,最大值50,最小原始值0,最大原始值100,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。

07软件设计说明书模板

份号:001 密级: 装备管理信息系统 软件设计说明书 XXXX-RSJ-R01.00 XXXXXXXX公司 XXXX年XX月XX日

辑要页

文档修改记录

目次 1 范围 (1) 1.1标识 (1) 1.2系统概述 (1) 1.3文档概述 (1) 2 引用文件 (1) 3 CSCI级设计决策 (1) 4 CSCI体系结构设计 (2) 4.1CSCI部件 (2) 4.2执行方案 (3) 4.3接口设计 (3) 4.3.1接口标识和接口图 (3) 4.3.X(接口的项目唯一的标识符) (3) 5 CSCI详细设计 (5) 5.X(软件单元的项目唯一的标识符,或者一组软件单元的标识符) (5) 6 需求可追踪性 (6) 7 注释 (6)

1 范围 1.1 标识 本条应描述本文档所使用的系统和软件的完整标识,适用时,包括其标识号、名称、缩略名、版本号和发布号。 1.2 系统概述 本条用概述本文档所适用的系统和软件用途。它还应描述系统和软件的一般特性:概述系统开发、运行和维护的历史;标识项目的需方、用户、开发方和保障机构等;标识当前和计划的运行现场;列出其他有关文档。 1.3 文档概述 本条应描述本文档的内容和用途,并描述与它的使用有关的保密性方面的要求。 2 引用文件 本章应列出引用文档的编号、标题、编写单位、修订版及日期。还应标识不能通过正常采购活动得到的文档的来源。 3 CSCI级设计决策 本章应根据需要分条给出CSCI级设计决策,即CSCI行为设计的决策(忽略其内部实现,从用户角度出发描述系统将怎样运转以满足需求)和其他影响组成该CSCI的软件单元的选择与设计的决策。如果在需求中所有这些决策是明确的,或者这些决策要推迟到CSCI的软件单元的设计时指出,则本章应如实陈述。针对关键性需求(例如对安全性或保密性关键的需求)作出的设计决策,应在专门的章条中加以叙述。如果设计决策依赖于系统状态或方式,则应指明这一依赖性。本条应给出或引用理解这些设计所需的设计约定。CSCI级设计决策的例子如下: a)关于CSCI 将接收的输入和将产生的输出的设计决策,包括与其他系统、 HWCI、CSCI 和用户的接口(本文档的 4.3.X条指出本说明要考虑的主题)。 如果这一信息的全部或部分已在接口设计说明中给出,则可以直拨引用。 b)有关响应每个输入或条件的CSCI行为的设计决策,包括CSCI 要执行的动 作、响应时间和其它性能特性,模型化的物理系统的说明,选定的方程式/算法/规则,以及对不允的输入或条件进行的处理。 c)有关数据库/数据文件如何呈现给用户的设计决策(本文档的4.3.X 条标识了

组态王报警例程文档

报警系统应用例程 说明文档

此文档由北京亚控公司提供,仅作为KingSCADA3.0报警系统应用的使用参考,其中涉及内容的详细说明请参考KingSCADA3.0的使用说明或咨询技术支持工程师。

目录 1. 概述 (1) 2. 例程 (1) 2.1 定义变量的报警属性 (1) 2.2 报警配置 (3) 2.3 报警显示 (7) 2.4 报警查询 (13) 2.5 报警窗的方法应用 (18) 3. 注意事项 (20)

1.概述 在工业控制系统中,当现场的数据超出正常范围时,系统应以报警的方式将其通知相关工作人员,工作人员接收到报警信息后会对报警做出相应的处理,所以报警系统在工业控制系统中是一个非常重要的组成部分。KingSCADA3.0提供了强大的报警操作功能:包括报警存储功能、报警打印功能、报警显示功能、报警转发功能等等,下面将具体介绍每种功能的操作过程。 2.例程 2.1定义变量的报警属性 在使用报警功能前,必须先要对变量的报警属性进行定义。 在开发系统“数据词典”中新建变量,本工程中我们以模拟量为例。 ●变量名:temperature ●变量类型:基本变量 ●数据类型:Mem Float ●变量描述:温度 ●初始值:0 ●灵敏度:0 ●最小值:0 ●最大值:100 变量temperature的报警属性如图1所示。

图1 变量temperatrue报警属性 ●变量名:pressure ●变量类型:基本变量 ●数据类型:Mem Float ●变量描述:压力 ●初始值:0 ●灵敏度:0 ●最小值:0 ●最大值:5 变量pressure的报警属性如图2所示。

组态王,历史趋势曲线控件例程说明文档

历史趋势曲线 1,功能概述 常规需求:很多工业现场都会要求显示采集量的趋势曲线,包括实时曲线、历史曲线。 组态王中的趋势曲线的实现方法: 1)利用组态王的“工具箱”中的“实时曲线”、“历史曲线”实现。 2)利用组态王的“插入通用控件”中的“历史趋势曲线”实现。 第一种实现方法的优点在于可以进行WEB的发布,实现通过IE浏览器进行浏览。缺点为支持的曲线笔比较少,许多功能的实现需要通过组态王的函数来实现,使用相对要麻烦。 第二种实现方法的优点在于支持同时绘制16条曲线,功能比较完善,可以在系统运行时动态增加、删除、隐藏曲线,还可以修改曲线属性,实现无级缩放,曲线打印等等。许多功能都不需要通过编写脚本的方法实现,使用比较方便。缺点在于无法进WEB 的发布。 工程实例 以一个简单的例程来说明“历史趋势曲线控件”的使用。 操作步骤 1.1创建新工程 打开组态王工程管理器,创建一个新工程。 1.2定义设备 进入工程浏览器,在设备处新建设备,我们在本例中定义一个仿真PLC的设备,设备列表为“PLC-亚控-仿真PLC-串口”,设备名称为“PLC1”。此仿真PLC可以做为虚拟设备与组态王进行通讯。仿真PLC主要有如下的寄存器:自动加1寄存器INCREA,自动减1寄存器DECREA,随机寄存器RADOM,常量寄存器STATIC,常量字符串寄存器STRING,CommErr寄存器。具体的寄存器的使用请参考组态王IO驱动帮助。 1.3定义变量 在数据词典中新建两个IO变量,变量名称分别为“压力”、“流量”,变量类型为IO实数,连接的设备为前面定义的仿真PLC设备“PLC1”,寄存器分别为INCREA100,

组态王报警存储与查询例程说明文档

例程说明文档 北京亚控科技发展有限公司 2016年4月

目录 1. 功能概述 (1) 2. 工程实例 (1) 3. 操作步骤 (1) 3.1 新建工程 (1) 3.2 报警配置 (7) 3.3 进入运行系统 (14) 3.4 历史报警查询 (15) 4. 注意事项 (25)

1. 功能概述 常规需求:很多工业现场要求将变量的报警信息进行存储,并且可以灵活的进行历史报警的查询、打印。 组态王中的实现方法:组态王支持通过ODBC接口将数据存储到关系数据库中,并且提供KVADODBGrid控件对存储的历史报警信息进行条件查询,并可以对查询结果进行打印。关系数据库可以为Access数据库或者SQLServer数据库。 2. 工程实例 我们通过一个简单的工程对报警信息的存储以及历史报警信息的查询进行讲解。历史报警的查询主要根据日期、报警组为条件进行查询。报警信息存储的数据库以Access 数据库为例进行。下面就以此为例来演示完成这一现场需求的设置步骤。 3. 操作步骤 3.1新建工程 3.1.1定义设备 新建一个工程,在设备处新建设备,我们在本例中定义一个仿真PLC的设备,设备列表为“PLC-亚控-仿真PLC-串口”,设备名称为“PLC1”。此仿真PLC可以做为虚拟设备与组态王进行通讯。仿真PLC主要有如下的寄存器:自动加1寄存器INCREA,自动减1寄存器DECREA,随机寄存器RADOM,常量寄存器STATIC,常量字符串寄存器STRING,CommErr寄存器。具体的寄存器的使用请参考组态王IO驱动帮助。 3.1.2定义变量 在数据词典中新建两个IO变量,变量名称分别为压力、流量,变量类型为IO实数,连接的设备为前面定义的仿真PLC设备“PLC1”,寄存器分别为INCREA100,DECREA100,数据类型为short,读写属性为“只读”。这样压力变量就会从0开始自动加1,其变化范围是0到100,流量变量从100开始自动减1,其变化范围是0到100。变量定义画面如下图一、图二所示:

历史趋势曲线控件例程说明文档

历史趋势曲线 例程说明文档

目录 1. 功能概述 (1) 2. 工程实例 (1) 3. 操作步骤 (1) 3.1 创建新工程 (1) 3.2 定义设备 (1) 3.3 定义变量 (1) 3.4 创建趋势曲线 (4) 3.5 添加曲线变量 (5) 3.6 切换到运行系统 (6) 4. 历史趋势曲线控件的特点 (7) 5. 控件的属性、方法 (8) 5.1 控件的属性与方法 (8) 5.2 属性方法的使用举例 (16) 6. 注意事项 (22)

1. 功能概述 常规需求:很多工业现场都会要求显示采集量的趋势曲线,包括实时曲线、历史曲线。 组态王中的趋势曲线的实现方法: 1)利用组态王的“工具箱”中的“实时曲线”、“历史曲线”实现。 2)利用组态王的“插入通用控件”中的“历史趋势曲线”实现。 第一种实现方法的优点在于可以进行WEB的发布,实现通过IE浏览器进行浏览。缺点为支持的曲线笔比较少,许多功能的实现需要通过组态王的函数来实现,使用相对要麻烦。 第二种实现方法的优点在于支持同时绘制16条曲线,功能比较完善,可以在系统运行时动态增加、删除、隐藏曲线,还可以修改曲线属性,实现无级缩放,曲线打印等等。许多功能都不需要通过编写脚本的方法实现,使用比较方便。缺点在于无法进行WEB 的发布。 2. 工程实例 以一个简单的例程来说明“历史趋势曲线控件”的使用。 3. 操作步骤 3.1创建新工程 打开组态王工程管理器,创建一个新工程。 3.2定义设备 进入工程浏览器,在设备处新建设备,我们在本例中定义一个仿真PLC的设备,设备列表为“PLC-亚控-仿真PLC-串口”,设备名称为“PLC1”。此仿真PLC可以做为虚拟设备与组态王进行通讯。仿真PLC主要有如下的寄存器:自动加1寄存器INCREA,自动减1寄存器DECREA,随机寄存器RADOM,常量寄存器STATIC,常量字符串寄存器STRING,CommErr寄存器。具体的寄存器的使用请参考组态王IO驱动帮助。 3.3定义变量 在数据词典中新建两个IO变量,变量名称分别为“压力”、“流量”,变量类型为IO实数,连接的设备为前面定义的仿真PLC设备“PLC1”,寄存器分别为INCREA100,DECREA100,数据类型为short,读写属性为“只读”。这样压力变量就会从0开始自

相关主题