教学设计:调用系统子程序

2024-08-25

教学设计:调用系统子程序(共6篇)

教学设计:调用系统子程序 篇1

小学信息技术六年级下册 第13课 调用系统子程序 教学设计

【教学目标】

1.学会调用系统子程序。2.能够修改调用的子程序。

【教学重点】

能够调用和修改子程序。

【教学课时】

1课时

【教学过程】

在VJC 系统中,保存着一些事先编好的常用子程序。这些子程序叫做系统子程序。利用系统子程序,可以指挥机器人完成奏乐、跳舞等有趣的操作任务。

这节课就来介绍如何调用系统子程序。

一、准备并调用系统子程序

在使用系统子程序之前,一般需要先把它们的按钮图标添加到“程序模块库”面板中。然后,用这些按钮图标在主程序中调用它们的程序模块。

下面将名称是“do re mi”“歌曲1”“歌曲2”的三个系统子程序的按钮图标添加到“程序模块库”面板中。

动手做:为主程序准备三个系统子程序

1.启动VJC,打开“程序模块库”面板,在打开“新建子程序”对话框。2.选定对话框列表里的“do re mi”选项,单击确定按钮。这时,工作区中会显示“do re mi”子程序流程图。

3.单击工具栏上的“主程序”按钮,窗口工作区中会显示“主程序”模块。操作后可以发现,打开的“程序模块库”面板中增加了名为“do re mi”的按钮。

4.参照以上操作,在“程序模块库”面板中再添加系统子程序“歌曲1”“歌曲2”的按钮。

准备好系统子程序后,就可以在主程序中调用它们了。下面就编一个主程序,来调用这三个系统子程序。

动手做:编主程序 1.按下图编辑流程图程序。

2.依次为三个“条件判断”模块设置判断条件。

3.以“机器人点歌台”保存文件。

4.下载并运行这个程序,依次按机器人的三个碰撞按钮,听一听机器人分别执行三个系统子程序时播放的不同乐曲。

二、修改调用的子程序

1.新建流程图程序。打开“程序模块库”面板,再打开“新建子程序”对话框。

2.参照前面的操作,在“程序模块库”面板中添加系统子程序“跟人走”的按钮。

3.编下图所示的主程序,然后下载运行,注意有人靠近时机器人的反应。

4.右击“跟人走”模块,打开“子程序调用模块”对话框。

5.单击“编辑”按钮,在工作区中就会显示“跟人走”子程序的流程图。6.把程序中的“前进”模块改为“后退”模块,如下图。

7.以“看人行事”为文件名保存文件。重新下载并运行程序,注意有人靠近时机器人的反应与前面有什么不同。

三、课堂练习

教学设计:调用系统子程序 篇2

数据库软件是目前应用较为广泛的软件之一, 由于信息数据技术的发展, 为数据提供了更为方便与快捷的存储以及调用方式。电子化设备普及让数据库使用平台更加广泛, 也让数据形式更加多样化。但是, 面临用户日益提高的需求, 计算机平台基础的数据库软件开发也遇到了一些问题。在对数据进行处理的过程中, 如何有效进行智能化管理, 在存储和调用过程中如何改变传统的手工录入方式, 让存储与调用都更加智能化, 是目前数据库软件遇到的主要问题。基于此, 将通过研究数据库软件的程序开发原理, 并结合现有技术理论, 探讨如何有效地完成数据存储与调用指令设计。

1 数据库软件的特点与技术分析

数据库软件是目前计算机数据处理中最为常用的软件之一, 利用其强大的数据处理功能, 可以很好地实现数据存储、数据调用以及数据分析等功能。对于目前的数据处理功能而言, 主要集中在存储和调用两个方面。那么, 基于计算机高级语言研发的数据库软件具有怎样的特点呢?

1.1 数据库软件的特点分析

数据库软件具有数据处理能力强、存储快捷、调用方便等诸多优点, 在目前的数据处理领域, 数据库软件是非常有价值的数据处理软件, 因为数据库软件的出现改变了对于数据处理的传统理解, 并且能够将处理效率最大限度地提高。此外, 由于数据库软件是基于计算机开发的, 针对计算机就可以对数据库进行进一步地开发, 例如加入声控或者数显扫描等功能, 从而让数据库软件的功能更加强大, 实现全面地智能化与人性化操作。

1.2 数据库软件的技术分析

数据库软件是基于计算机平台开发的数据处理功能软件, 其功能强大, 保证了数据处理的高效性和智能化。但是, 随着人们对于数据处理的要求逐步提升, 传统的数据库软件处理方式也出现了一定的改进和创新。在技术应用方面, 远程通信, 单片机的结合以及智能化方式都有了进一步的改善。总之, 对于数据库软件而言, 方便快捷地数据处理, 是未来的发展需求, 也是保证数据库软件能够持续应用的基本需求。

在智能化领域, 进行智能化存储, 以及智能化调用, 是未来进一步开发和设计的目标。通过目前的理论基础, 已经可以引入扫描以及声音录入的方式, 这两者均比较适合未来的数据库软件开发。在智能化的发展过程中, 数据库软件可利用声控和图像智能识别的方式, 来进行数据的存储和录入, 并进行声控的调用, 从而简化用户的操作, 实现智能化的数据库软件应用。

2 数据库程序开发的存储指令设计分析

计算机技术的发展, 为人们的生活和工作带来了巨大的变化, 传统的一些工作和生活方式因此不再适用于现代社会的发展。因此, 在现代社会中, 基于计算机技术的软件开发越来越普及, 数据库软件就是其中一款功能强大的软件。

对于数据库软件的存储指令设计而言, 需要进行怎样的技术研发呢?在未来的发展过程中, 又可以采用哪些智能化的方式, 使数据库软件的存储指令更加人性化呢?

2.1 分析数据库软件的存储指令设计原理

计算机技术的原理是将所有的内容数据化, 因此可以说计算机时代就是数据时代, 任何数据都可以进行相互的转换, 任何内容也都可以采用数据的形式呈现。那么, 数据库软件就有了技术原理的支持。

对于数据库软件中的存储指令设计而言, 一般的技术原理可以这样理解。

2.1.1 数据的存储原理

将内容以数据的方式进行录入, 占据虚拟的数据库软件空间, 就实现了初步录入和存储操作。可以针对数据的存储模式和存储需求, 对数据的保存时间进行设定。在一些大型的数据库软件中, 一般情况下数据都不是永久保存的, 尤其是一些网页类的数据库。在网页访问的过程中, 都会生成访问日志, 而访问日志的数据库就不会永久保存, 因为这样的数据没有长久保存的价值, 再者数据过多会造成数据库软件存储过载。因此, 存储既是为了数据的保存, 也是为了让数据更加有用。

2.1.2 数据的重叠与替代原理

如果相同的数据分别进行了存储, 数据库软件一般会分存储区进行存储;但是一个存储区内被相同的数据多次存储, 那么该存储区内将只保留最后一次录入的结果。因此, 在数据库软件进行数据存储的过程中, 一定要对指令进行相应的设定。对于数据的识别, 仅针对存储区域进行识别, 而不是对数据的等同性进行识别。这样的设计方式非常适合数据库的存储功能, 因为即使重复数据是相对普遍存在的, 其存储空间却是唯一的。

2.2 数据库软件的存储指令开发潜力探究

虽然目前的数据库软件存储功能已经非常强大, 对于内容的识别能力也具有一定智能性, 但是存在一个问题无法解决——如何将录入和存储直接连接, 从而保证录入的高效性。

由于传统的数据录入模式依然普遍采用手工方式, 非常消耗时间, 造成了工作效率低下等问题。因此, 数据库软件的操作过程依然具有非常巨大的潜力。例如, 可以实现智能化录入, 将人工录入方式转换成自动录入与存储方式, 从而减少了人工成本, 也提高了工作效率和准确性。

2.3 基于智能化理论的数据库存储指令开发分析

目前, 数据库软件的开发前景非常巨大。因为, 目前的存储过程更多是基于手工录入的方式, 存在较大的问题。第一是手工录入的工作量相对较大, 过程太复杂, 容易造成操作者的疲劳;第二是在使用过程中, 一旦操作者出现失误, 就会造成存储的数据出现错误, 影响整个数据库地正常使用。因此, 对于目前的数据库软件而言, 存储的效率和准确性需要提高。

基于智能化的技术理论, 以及目前计算机技术的发展水平, 完全可以引入扫描的方式进行存储。因为将数据数字化通常都是采用手工录入的模式实现存储。但是, 如果可以将数据库软件与扫描软件结合, 就可以利用扫描仪对传统数据进行扫描, 然后在数据库软件中设计相应的转换软件, 将扫描的结果直接录入, 从而降低存储操作的工作量, 并且可以实现智能化以及高效化相结合。

总之, 对于数据存储指令的设计, 首先要明确其研发的原理, 其次要通过良好的设计理念, 使其更加智能化和人性化, 才能保证存储指令更好地服务于使用者, 也让数据库软件更加智能化和高效化。

3 数据库程序开发的调用指令设计分析

对于数据库软件的调用指令, 应该如何进行合理设计, 才能保证调用的可行性并且提高工作效率呢?以下将进行详细分析。

3.1 数据库软件调用指令的原理分析

在数据库的设计过程中, 为了方便数据的查找, 在数据库软件中加入了调用语句。数据调用的方式非常高效和智能, 一般情况下是采用关键词或者关键词的方式进行调用。但是, 调用的前提是对数据进行存储。调用过程一般分为以下几个步骤。

3.1.1 输入关键词或者关键字

在定义关键词或者关键词的过程中, 一般都会进行数据提示或者设定。例如, 要查询一件衣服的价格, 就需要确定关键词, 一旦关键词确定就可以进行库内查找了。实际上, 查找的原理就是在库内进行文字匹配, 如果配对正确, 就可以通过调用语句, 将匹配正确的相关内容进行显示。这就是关键词或者关键词的调用方式。

3.1.2 数据调用匹配的原理分析

数据的匹配即是利用查找配对原理, 通过搜索功能, 将输入的关键词进行库内排重与查询, 一旦遇到匹配的内容就直接显示, 从而实现调用功能。

3.1.3 数据调用的显示原理

进行关键词或者关键词匹配之后, 利用调用语句, 将库内内容与关键词或者关键词进行匹配, 匹配后将与之关联的语句整体显示, 从而显示调用的语句。

3.2 数据库软件调用指令的智能化设计

目前数据库软件的调用功能非常强大, 但是操作的过程通常还是利用关键词或关键词进行查找, 而关键词或关键词通过操作者输入文字来获取。这方面还存在很大的发展空间, 比如, 如果可以使用声控的方式, 数据库软件的调用功能就会更加强大。因此, 加入声控的功能, 对于数据库软件的智能调用非常有价值。

4 结语

在使用数据库软件的过程中, 主要就是进行数据的存储以及调用, 两者在很大程度上决定了数据库软件的效率。虽然目前数据库软件的功能已经非常强大, 可以实现数据的任意存储以及调用, 但是依然存在很大的开发和设计空间。尤其是在智能化领域, 如何进行智能化存储, 以及智能化调用, 都需要进一步开发和设计。

教学设计:调用系统子程序 篇3

Leonardo Laos原创

1.本文以“搜狗拼音输入法”输入法设置成“中文(繁体)”为例。2.在繁体的Windows系统中正确安装“搜狗拼音输入法”,完成后将两分隔线之间的文字“一字不漏地”复制、黏贴到“记事本”程序中。

========================分隔线========================= Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard LayoutsE0210404] “Layout Text”="中文(繁体)搜狗拼音输入法”。8.完成。

其他所有的简体中文输入法,都可以按照此方法通过修改注册表应用繁体系统上。只需要根据下表将“修改注册表.reg”中的数据修改就行。

键值 E0220404 E0200404 E0230404 E00E0404 E0210404 E0040404 E0050404 E0010404 E0020404 E0100404

Layout Text 中文(繁体)谷歌拼音输入法

谷歌拼音输入法 2 中文(繁体)搜狗拼音输入法

中文(繁体)内码 中文(繁体)双拼 王码五笔型输入法86

Layout File KBDUS.DLL KBDUS.DLL KBDUS.DLL KBDUS.DLL KBDUS.DLL KBDUS.DLL KBDUS.DLL KBDUS.DLL KBDUS.DLL KBDUS.DLL

IME file

FREEIME.IME GOOGLEPINYIN.IME GOOGLEPINYIN2.IME PINTLGNT.IME SOGOUPY.IME WINABC.IME WINGB.IME WINPY.IME WINSP.IME WINWB86.IME

E0200404 E0030404 版

微软王码五笔86版 中文(繁体)仓颉 KBDUS.DLL Chinese E0090804(Traditional)大易 KBDUS.DLL E0010804 中文(简体)速成 KBDUS.DLL E01F0804 中文(简体)新注音 KBDUS.DLL E0070804 中文(简体)行列 KBDUS.DLL E0080804 中文(简体)-Big5 码

KBDUS.DLL

以仓颉输入法为例: 步骤1~5同上。

6.在“输入语言”处选“中文(中国)”

7.在“键盘布局/输入法”处选“中文(简体)-仓颉”。8.完成。

教学设计:调用系统子程序 篇4

--嵌入式系统语音采集与播放程序设计

班级: 学号: 姓名:

指导老师:

课程设计时间:2011.6.29---2011.7.8

江苏大学

目录

第一章 引言.........................................................1 1.1 设计目的......................................................1 1.2 设计任务与要求................................................1 第二章 课程设计平台构建与流程.......................................2 2.1 嵌入式系统平台构建............................................2 2.2 课程设计流程..................................................3 2.3 课程设计硬件结构与工作原理...................................3 第三章 BOOTLOADER移植与下载.......................................11 3.1 VIVI源代码安装...............................................11 3.2 VIVI源代码分析与移植.........................................11 3.3 VIVI编译与下载...............................................12 第四章 LINUX内核移植与下载........................................14 4.1 LINUX内核源代码安装..........................................14 4.2 LINUX内核源代码分析与移植....................................14 4.3 LINUX内核编译与下载..........................................15 第五章 课程设计功能模块程序设计与交叉编译..........................24 5.1 课程设计模块功能.............................................24 5.2 功能模块驱动程序设计.........................................24 5.3 功能模块交叉编译.............................................28 第六章 根文件系统建立与文件系统下载................................29 6.1 根文件系统分析...............................................29 6.2 文件系统映像文件生成.........................................30 6.3 文件系统下载.................................................31 6.4 功能模块运行与调试...........................................32 第七章 课程设计总结与体会..........................................34 7.1 得出的结论...................................................34 7.2课程设计过程中遇到的问题及解决方法...........................34 7.3 心得体会.....................................................34 参考文献...........................................................36

第一章 引言

1.1 设计目的

分析Linux操作系统下音频设备驱动的结构,编写应用测试程序,实现UDA1341芯片的实时录音及放音功能,进一步熟悉vivi、Linux内核和根文件系统的编译和烧写至开发板的开发流程。

1.2 设计任务与要求

在Samsung公司S3C2410处理器的edukit-Ⅲ开发板上,在嵌入式linux操作系统环境下,根据语音芯片UDA1341的驱动程序和语音数据的特点编写语音采集与播放的应用测试程序,实现语音数据的采集和实时播放功能。1.要求本系统实时的采集与播放

2.通过麦克风录制一段语音信息,对其进行播放 第二章 课程设计平台构建与流程

2.1 嵌入式系统平台构建

2.1.1软件部分

1)Linux或Windows 98/2000/NT/XP 2)cygwin cygwin是一个在windows平台上运行的unix/Linux模拟环境,是cygnus solutions公司开发 3)Embest IDE 英蓓特提供的一个嵌入式开发的集成环境。4)windows中的超级终端

5)Embest online Flash Programmer for ARM 烧写相关文件到NorFlash中的工具。

6)建立linux的交叉编译环境,各项源代码的安装等 2.1.2硬件部分

1)EduKit-II实验平台 2)S3C2410核心子板 3)PC机 2.2 课程设计流程

图2.1 设计流程

2.3 课程设计硬件结构与工作原理

2.3.1硬件模块(1)

SCLLRCIIS控制器SDOSDIMCL 图2.2 典型的IIS总线上的设备

(2)IIS总线结构

IIS总线只处理声音数据,其他控制信号等则需单独提供。IIS总线使用3根串行总线,分别是:提供分时复用功能的SD线(Serial data,串行数据),WS线(Word select,字段选择(声道选择))和SCK线(Continuous Serial clock,连续的时钟信号)。

音频编解码4 ADDRTxFIFODATASFTRBRFCRxFIFOSDCNTLCHHCSCLKIPSR_APCLKIPSR_BSCLKGLRCKCDCLK

图2.3 IIS总线接口内部结构

S3C2410A IIS总线接口各模块的功能描述如下:

● BRFC 表示总线接口、寄存器区和状态机。总线接口逻辑和FIFO访问由状态机控制。

● IPSR 表示两个5位的前置分频器ISPR_A和ISPR_B,一个前置分频器作为IIS总线接口的主时钟发生器,另一个前置分频器作为外部音频编解码器CODEC的时钟发生器。

● TxFIFO和RxFIFO 表示两个64字节的FIFO。在发送数据时,数据写到TxFIFO,在接收数据时,数据从RxFIFO读取。

● SCLKG 表示主IISCLK发生器。在主设模式时,由主时钟产生串行位时钟。● CHNC 表示通道发生器和状态机。通道状态机用于产生和控制IISCLK和IISLRCK。

● SFTR 表示16位移位寄存器。在发送模式时,并行数据移入SFTR并转换成串行数据输出;在接收模式时,串行数据移入SFTR并转换成并行数据输出。具体的相关寄存器的位功能描述请参观相关资料。2.3.2 工作原理

常用的数字音频处理集成电路包括A/D、D/A、DSP、数字滤波器和数字音频I/O接口及设备(麦克风、话筒)等。麦克风输入的模拟音频信号经A/D转换、音频编码器实现模拟音频信号到数字音频信号转换,编码后的数字音频信号通过控制器送入DSP或微处理器相应的处理。音频输出时,数字音频信号(音频数据)经控制器给音频解码器,经D/A转换后由扬声器输出。

数字音频涉及概念很多,重要的是理解:采样和量化。采样就是每隔一定时间读一次声音信号的幅度,而量化则是将采样得到的声音信号幅度转换为数字值。从本质上讲,采样是时间上的数字化,而量化则是幅度上的数字化。

根据奈奎斯特(Nyquist)采样理论采样频率应高于输入信号的最高频率两倍。为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,要达到DVD的音质需要采用更高的采样频率。

量化是对模拟音频信号的幅度数字化,量化位数决定模拟信号数字化以后的动态范围,常用的有8位、12位和16位。量化位越高,信号的动态范围越大,数字化后的音频信号就越接近原始信号,但所需要的存储空间也越大。

声道有单声道、双声道和多声道。双声道又称立体声,在硬件中有两条线路,音质和音色都优于单声道,但数字化后占据的存储空间的大小要比单声道多一倍。多声道能提供更好的听觉感受,不过占用的存储空间也更大。

数字音频数据有PCM、MP3、WMA、WAV、Ogg Vorbis、RA、AAC、ATRAC 3等多种不同的文件格式。

1)IIS总线

IIS总线(IIS,Inter-IC Sound Bus,数字音频集成电路通信总线)是Philip公司提出的音频总线协议,它是一种串行的数字音频总线协议,是音频数据编码或解码常用的串行音频数字接口。

(1)IIS总线的传输模式

数据的发送方和接收方需要采用相同的时钟信号来控制数据传输,数据传输方(主设)必须产生字段选择信号、时钟信号和需要传输的数据信号。在一个复杂的数字音频系统中,可能会有多个发送方和接收方,通常采用系统主控制模式,主控制模块控制数字音频数据在不同集成电路(设备)间的传输,数据发送方就需要在主控制模块的协调下发送数据。IIS总线的三种传输模式如图2、3、4所示,这些模式的配置一般需通过软件来实现。

clock SCKTRANSMITTERword select WSdata SDRECEIVERTRANSMITTER=MASTER

图2.4发送器为主设时的传输模式

clock SCKTRANSMITTERword select WSdata SDRECEIVERRECEIVER=MASTER

图2.5 接收器为主设时的传输模式

CONTROLLERclock SCKTRANSMITTERword select WSdata SDRECEIVERCONTROLLER=MASTER

图2.6 控制器为主设时的传输模式(2)IIS总线时序 1串行数据(SD)○串行数据的传输由时钟信号同步控制,且串行数据线每次传输1字节的数据。当音频数据被数字化成二进制流后,传输时先将数据分成字节(如8位、16位等),每个字节的数据传输从左边的二进制位MSB(Most Significant Bit)开始。当接收方和发送方的数据字段宽度不一样时,发送方不考虑接收方的数据字段宽度。如果发送方发送的数据字段宽度小于系统字段宽度,就在低位补0;如果发送方的数据字段宽度大于接收方的宽度,则超过LSB(Least Significant Bit)的部分被截断。

2字段选择(WS)○音频系统一般包含有左右两个声道,字段选择(WS)用来选择左声道或者右声道,WS=0表示选择左声道;WS=0表示选择左声道。如果不在外部加以控制,WS会在MSB传输前的一个时钟周期发生变化,使数据接收方和发送方保持同步。此外,WS能让接收设备存储前1字节,并且准备接收后1字节。

3时钟信号(SCK)○在IIS总线中,任何一个能够产生时钟信号的电路都可以称为主设备,从设备从外部时钟输入得到时钟信号。IIS的规范中制定了一系列关于时钟信号频率和延时的限制。

图2.7 IIS总线时序

(3)IIS总线接口的工作方式

IIS总线接口是用来连接外部的标准编解码器(CODEC)的接口。S3C2410A提供一个IIS总线接口,能用来连接一个外部8/16位立体声音频CODEC,支持IIS 总线数据格式和MSB-justified数据格式。该接口对FIFO的访问提供DMA传输模式,而不是采用中断模式。它可以同时发送数据和接收数据,也可以只发送或只接收数据。在只发送和只接收模式,S3C2410A的IIS总线接口有以下三种工作方式。

1正常传输方式 ○在正常传输方式,对于发送和接收FIFO,IIS控制寄存器有一个FIFO就绪标志位。当FIFO准备发送数据时,如果发送FIFO不空,则FIFO就绪标志位为“1”;如果发送FIFO为空,该标志为“0”。在接收数据时,当接收FIFO是不满时,FIFO就绪标志位为“1”,指示可以接收数据;若接收FIFO满,则该标志为“0”。通过FIFO就绪标志位,可以确定CPU读/写FIFO的时间。

2DMA传输方式 ○在DMA传输方式,利用DMA控制器来控制发送和接收FIFO的数据存取,由FIFO就绪标志来自动请求DMA的服务。

3发送和接收方式 ○在发送和接收方式,IIS总线接口可以同时发送和接收数据。(4)S3C2410A IIS总线接口的音频串行接口格式

S3C2410A的IIS总线接口支持IIS总线数据格式和MSB-justified数据格式。IIS总线格式 ○IIS总线有IISDI(串行数据输入)、IISDO(串行数据输出)、IISLRCK(左/右通道选择)和IISCLK(串行位时钟)4条线,产生IISLRCK和IISCLK信号的为主设备。串行数据以2的补码发送,首先发送是MSB位。首先发送MSB位可以使发送方和接收方具有不同的字长度,发送方不必知道接收方能处理的位数,同样接收方也不必知道发送方正发来多少位的数据。

当系统字长度大于发送器的字长度时,数据发送时,字被切断(最低数据位设置为0)发送。接收器接收数据时,如果接收到的数据字长比接收器的字长更长时,则多的数据位被忽略。另一方面,如果接收器收到的数据位数比它的字长短时,则缺少的位设置为0。因此,MSB有固定的位置,而LSB的位置与字长度 有关。在IISLRCK发生改变的一个时钟周期,发送器发送下一个字的MSB位。

发送器发送的串行数据可以在时钟信号的上升沿或下降沿同步。然而,串行数据必须在串行时钟信号的上升沿锁存到接收器,所以发送数据使用上升沿进行同步时会一些限制。

左右通道选择线指示当前正发送的通道。IISLRCK可以在串行时钟的上升沿或者下降沿改变,不需要同步。在从模式,这个信号在串行时钟的上升沿被锁存。IISLRCK在MSB位发送的前一个时钟周期内发生改变,这样可以使从发送器同步发送串行数据。另外,允许接收器存储前一个字,并清除输入以接收下一个字。

2MSB-justified数据格式 ○MSB-justified总线格式在体系结构上与IIS总线格式相同。与IIS总线格式唯一不同的是,只要IISLRCK有变化,MSB-justified格式要求发送器总是发送下一个字的最高位。

2)音频编解码芯片UDAl341TS UDA1431TS可把通过麦克风音频输入通道输入的立体声模拟信号转化为IIS格式的数字信号,传送给S3C2410的IIS控制器,然后CPU使用DMA控制器把得到的数字信号存放的一块内存空间上;同样DMA控制器也能把已存的数字信号通过IIS格式发送给UDAl341TS芯片,由该芯片转换成模拟信号,通过耳机音频输出通道输出。利用UDA1341TS内部的PGA(可编程增益放大器)、AGC(自动增益控制)功能对模拟信号进行处理。对于数字信号,UDA1341TS提供DSP(数字音频处理)功能。

S3C2410A的IIS接口线分别与UDA1431TS的BCK、WS、DATAI、SYSCLK相连。当UDA1431TS芯片工作在微控制器输入模式时,使用UDA1431TS的L3总线(L3DATA、L3MODE和L3CLOCK)。L3DATA、L3MODE和L3CLOCK分别表示与微处理器接口的数据线(L3DATA)、模式控制线(L3MODE)和时钟线(L3CLOCK)。微控制器通过对UDA1431TS中的数字音频处理参数进行配置。S3C2410A没有与L3总线配套的专用接口,可以利用通用I/O口进行控制。第三章 Bootloader移植与下载

3.1 Vivi源代码安装

进入cygwin,Vivi源代码的安装:

$> source /tmp/edukit-2410/set_env_linux.sh// Linux编译环境变量设置,第一次打开Cygwin必须设置。

$> cd $WORKDIR $> tar-xvjf /tmp/edukit-2410/source/vivi/vivi-20030929.tar.bz2 $> ls

„ vivi „ „为$WORKDIR目录下其他内容

正确解压后,可以看到多了一个vivi目录,即vivi源代码的安装目录,后面的vivi配置及编译都得进入vivi目录进行。再为EduKit2410实验系统打入vivi源代码的补丁文件:

$> cd vivi $> patch-p1

vivi的代码包括arch,init,lib,drivers和include等几个目录,共200多条文件。

Vivi主要包括下面几个目录:

arch:此目录包括了所有vivi支持的目标板的子目录,例如s3c2410目录。drivers:其中包括了引导内核需要的设备的驱动程序(MTD和串口)。MTD目录下分map、nand和nor三个目录。

init:这个目录只有main.c和version.c两个文件。和普通的C程序一样,vivi将从main函数开始执行。lib:一些平台公共的接口代码,比如time.c里的udelay()和mdelay()。include:头文件的公共目录,其中的s3c2410.h定义了这块处理器的一些寄存器。Platform/smdk2410.h定义了与开发板相关的资源配置参数,我们往往只需要修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。

3.3 Vivi编译与下载

1)Vivi源代码的编译

然后执行以下命令进行编译:

$> source /tmp/edukit-2410/set_env_linux.sh Linux编译环境变量设置

$> cd $WORKDIR/vivi $> make clean

图3.1 vivi编译

$> make menuconfig输入配置smdk2410-amd:Nor Flash boot

smdk2410:Nand boot

图3.2 图形界面下配置内核文件

其中,运行make menuconfig后,选择Load an Alternate Configuration file,配置文件名称如下:

smdk2410:编译 vivi 在 Nand Flash(K9S5608)中运行; smdk2410-amd:编译 vivi 在 Nor Flash(AM29LV160DB)中运行。这两个配置文件在usrlocalsrcedukit-2410viviarchdef-configs中,须复制

到usrlocalsrcedukit-2410vivi中;或者可以在 menuconfig 中输入全部路径。配置好后,输入:$> make

图3.3 vivi映像文件生成

如果编过程中没有出现错误,则编译后的执行文件存放于 vivi 目录下。2)下载:

在下载模式下,vivi为用户提供一个命令行人机接口,通过人机接口可使用vivi提供的一些命令。如嵌入式系统没有键盘和显示,可以利用vivi中的串口,将其和宿主机连接起来,利用宿主机中的串口软件(如Windows中的超级终端或Linux中的minicom)来控制。第四章 Linux内核移植与下载

4.1 Linux内核源代码安装

linux源代码安装

运行cygwin,执行以下命令完成cygwin 环境下的Linux源代码的安装: $> source /tmp/edukit-2410/set_env_linux.sh Linux编译环境变量设置

$> cd $WORKDIR $> tar –xvjf /tmp/edukit-2410/linux-2.4.18-rmk7-pxa1-mz5-i2c.tar.bz2 $> ls „ kernel „ „为$WORKDIR 目录下其他内容

图4.1 linux内核安装

正确解压后,相比之前可以看到多了一个kernel目录,即kernel源代码的安装目录,后面的Linux配置及编译都得在kernel目录进行。

实验中提供的linux内核已经包含了Linux源代码的补丁文件、I2C和网络驱动模块

4.2 Linux内核源代码分析与移植

4.2.1 Linux源代码分析

Linux内核由5个主要的子系统组成。这5个子系统分别是进程调度(SCHED)、内存管理(MM)、虚拟文件系统(Virtual File System,VFS)、网络接口(NET)和进程间通信(IPC)。

进程调度控制着进程对CPU的访问。当需要选择下一个进程运行时,由调度 程序选择最值得运行的进程。可运行进程实际是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。

内存管理允许多个进程安全地共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换程序块。内存管理从逻辑上可以分为硬件无关的部分和硬件相关的部分。硬件无关的部分提供了进程的映射和虚拟内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。

虚拟文件系统隐藏了各种不同硬件的具体细节,为所有设备提供了统一的接口,虚拟文件系统还支持多达数十种不同的文件系统,这也是Linux较有特色的部分。虚拟文件系统可分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2、fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

网络接口提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序两部分。网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备进行通信,每一种可能的硬件设备都有相应的设备驱动程序

4.2.2 Linux内核及硬件模块驱动移植

内核和文件系统、图形用户系统(GUI窗口系统)可以分开,它们的开发、移植、下载甚至运行都是可以分开的。内核移植是一个比较复杂的任务,也是嵌入式系统开发中非常重要的一个过程。内核移植一般包括内核配置、内核编译和内核下载3大步骤。

4.3 Linux内核编译与下载

4.3.1 Linux内核源代码安装

运行cygwin,执行以下命令完成cygwin环境下的Linux内核源代码的安装: $> source /tmp/edukit-2410/set_env_linux.sh //Linux 编译环境变量设置 $> cd $WORKDIR $> tar –xvjf /tmp/edukit-2410/linux-2.4.18-rmk7-pxa1-mz5-i2c.tar.bz2 $> ls „ kernel „ //„为$WORKDIR 目录下其他内容

正确解压后,可以看到多了一个kernel目录,即kernel内核源代码的安装目录,后面的Linux内核配置及编译都得进入kernel目录进行。实验中提供的linux内核已经包含了Linux源代码的补丁文件、IIC和网络驱动模块。4.3.2 Linux内核的编译 $> cd kernel

图4.2 $> make mrproper 清除所有的旧的配置和旧的编译目标文件等 $> make xconfig 在图形界面下对内核进行配置(配置方法之一)执行make xconfig 后,弹出如图4.3的内核定制界面:

图4.3 内核定制界面

选择按钮”Load Configuration from File”,如图4.4输入smdk2410:

图4.4 内核配置文件

选择配置sound ,设置Sound support为y:

设置BT878 audio dma为y: 设置SMDK-2410 audio support为y:

设置OSS sound modules为y:

根据提示加载配置文件后,点击按钮”Store Configuration to File”,如图4.5输入audio1:

图4.5 存储配置文件

保存,Save and Exit。如图4.6

图4.6 $> make dep //搜索Linux编译输出与源代码之间的依赖关系并生成依赖文件。

图4.7

$> make clean //清除构造内核时生成的目标文件、模块文件和临时文件。$> make zImage //生成压缩的内核映像文件。

图4.8 编译通过后,在/usr/local/src/edukit-2410/kernel/arch/arm/boot/目录下生成内核的压缩映像文件为“zImage”,此文件是最后要烧写到开发板的内核映像文件。

4.3.1 Linux内核下载

内核下载:

1)启动超级终端(波特率为115200),连好串口线,在开机瞬间快速按空格键,进入vivi控制台命令行下;打开S3C2410&NandFlash_vivi.cfg,在Flash Programmer的Progarm页中选择:vivi.bon&load.bin文件进行烧写。如图4.9

图4.9 烧写界面

点击按钮Progarm开始烧写,直到烧写成功;连接串口到PC机COM1,运行成功;连接串口线到 PC 机 COM1,运行光盘中提供的 Windows 超级终端 Hyper Terminal.ht;开发板重新加电,程序运行后,在超级终端上可以看到串口输出类似以下信息:

图4.10 超级终端界面

看到以上信息后,表示正在等待用户从超级终端下载文件。这时,请点击超 级终端菜单“传送”选择 Xmodem 方式下载 vivi.nand 文件,点击 OK 后等待下载烧写结束即可。

图4.11 添加传送文件

图4.12 下载vivi nada 2)在vivi启动等待中,敲入空格键进入vivi界面环境,并输入以下命令: vivi> load flash kernel x <回车> 烧写更新内核约4分钟即可烧写完毕,如图4.13

图4.13 等待下载

3)立即选择要发送的文件,比如zImage文件,这里Linux环境下源代码arch/arm/boot目录下的zImage内核映像文件已转移到 windows某目录下。要选择合适的xmodem协议。以上操作完成 后,单击“发送,几分钟后即可发送完毕。

图4.14 发送zImage

图4.15 下载成功 第五章 课程设计功能模块程序设计与交叉编译

5.1 课程设计模块功能

5.1.1 三个模块:

I2S音频总线接口电路 ;音频编解码器芯片udal41; DMA控制器; 5.1.2工作过程:

麦克风输入的模拟音频信号在音频编解码器中经过A/D转换和编码将模拟信号转换成数字信号,将这些数字信号先传给I2S音频总线接口电路中的FIFO,再由DMA控制器送入DSP中做相应的处理,这是录音的过程;DMA控制器将DSP中存储的信号传送给I2S音频总线接口电路中的FIFO,再发送给音频编解码芯片进行D/A转换,通过耳机输出模拟信号。

5.2 功能模块驱动程序设计

5.2.1 关于驱动结构体

由于目前许多硬件厂商在出售各种产品时,一般都不带Linux下的设备驱动程序,而且编写驱动程序的工作量占整个系统工作量的很大的一部分,这使得Linux下设备驱动程序的开发变得越来越重要。

本课程设计不要求自己编写驱动程序,但要求分析UDAl341TS驱动程序,以便编写出语音采集与播放的应用测试程序,同时为以后编写驱动程序打好基础。嵌入式Linux系统下的IIS音频驱动程序是在/usr/local/src/edukit-2410/drivers/sound 中,3c2410-uda1341.c 文件即是。

关于结构体:

在音频驱动程序中有2个比较重要的结构体: typedef struct { int size;/* buffer size */ char *start;/* point to actual buffer */(内存虚拟地址起始地址)dma_addr_t dma_addr;/* physical buffer address */(内存物理地址起始地址)

struct semaphore sem;/* down before touching the buffer */ int master;/* owner for buffer allocation, contain size when true */(内存大小)

} audio_buf_t;typedef struct { audio_buf_t *buffers;/* pointer to audio buffer structures */ audio_buf_t *buf;/* current buffer used by read/write */ u_int buf_idx;/* index for the pointer above */ u_int fragsize;/* fragment i.e.buffer size */(音频缓冲区片大小)

u_int nbfrags;/* nbr of fragments */(音频缓冲区片数量)dmach_t dma_ch;/* DMA channel(channel2 for audio)*/ } audio_stream_t;audio_stream_t是一个管理多缓冲区的结构体,为音频流数据组成了一个环形缓冲区。audio_buf_t管理一段内存,audio_stream_t管理N个audio_buf_t。

音频驱动的两个file_operations结构定义如下: static struct file_operations smdk2410_audio_fops = { llseek: smdk2410_audio_llseek, write: smdk2410_audio_write, read: smdk2410_audio_read, poll: smdk2410_audio_poll, ioctl: smdk2410_audio_ioctl, open: smdk2410_audio_open, release: smdk2410_audio_release };static struct file_operations smdk2410_mixer_fops = { ioctl: smdk2410_mixer_ioctl, open: smdk2410_mixer_open, release: smdk2410_mixer_release };这里定义了两种类型设备的file_operations结构,前者是DSP设备,后者是混频器设备。Linux 内核内部通过file结构识别设备,通过file_operations数据结构体提供文件系统的入口点函数,也就是访问设备驱动程序里的函数。file_operations结构体原型是在 中定义的函数指针表。5.2.2关于函数:

read()、write()、open()和ioctl()是struct file_operations结构体中的接口函数。

1)read()函数:由已打开的文件读取数据,即播放。

(1)函数定义:ssize_t read(struct file *file, char *buffer, size_t count, loff_t * ppos);(2)函数说明:把参数file所指的文件传送count个字节到buffer指针所指的内存中;若参数count为0,则read()不会有作用并返回0;(3)返回值:返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。如果正确会返回实际读到的字节数,最好能将返回值与参数count作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期;2)write()函数:将数据写入已打开的文件内,即录音。

(1)函数定义:ssize_t write(struct file *file, const char *buffer, size_t count, loff_t * ppos);(2)函数说明:把参数buffer所指的内存写入count个字节到参数file所指的文件内。当然,文件读写位置也会随之移动;(3)返回值:若正确会返回实际写入的字节数;当有错误发生时则返回-1,错误代码存入errno中。

3)open()函数:打开音频设备。

(1)函数定义:int(*open)(struct inode *inode, struct file *file);(2)函数说明:参数inode为设备特殊文件的incode(索引结点)结构的指针,参数file是指向这一设备的文件结构的指针。open()的主要任务是确定硬件是否处在就绪状态,验证次设备号的合法性,控制使用设备的进程数;

(3)返回值:如果打开文件成功,open会返回一个文件描述符,以后对文件的所有操作就可以对这个文件描述符进行操作。比如程序中open()函数的返回值赋给了应用程序中的devfd,后面则可以对其进行操作;若打开失败返回负数。

4)ioctl()函数:用于设置编码比特、采样频率和选择声道。(1)函数定义:int ioctl(struct inode *inode, struct file *file,unsigned int cmd, unsigned long arg);(2)函数说明:设备驱动程序中对设备的I/O通道进行管理的特殊控制函数,可以通过它向设备传递控制信息或从设备取得状态信息,实现用户程序命令和驱动命令的相互联系;

(3)返回值:执行成功返回正数,失败返回-1。

5)s3c2410_uda1341_init()函数:动态加载驱动模块时的初始化函数。(1)函数定义:int __init s3c2410_uda1341_init(void);

(2)函数说明:该函数首先会初始化I/O和UDA1341 芯片,然后申请2个DMA 通道用于音频传输。将输出音频缓冲区的DMA通道设为通道2,输入音频缓冲区的DMA 通道设为通道1。最后调用register_sound_dsp()和register_sound_mixer()两个函数来分别注册驱动设备;

(3)返回值:初始化成功,返回0;DMA 通道初始化设置失败,返回负数。6)void __exit s3c2410_uda1341_exit()函数:动态卸载驱动模块时调用的函数。

(1)函数定义:void __exit s3c2410_uda1341_exit(void);

(2)函数说明:注销音频设备,分两次调用audio_clear_dma()函数来分 别释放已申请的音频输入和音频输出的DMA 通道;

(3)返回值:无。

5.3 功能模块交叉编译

用命令Makefile来编译:

图5.1 编译测试文件

将test文件拷贝到D:cygwinusrlocalsrcedukit-2410rootbin中 执行以下命令生成新的文件系统映象:

$>cd $WORKDIR/ $>$SOURCEDIR/mkcramfs root root.cramfs.new

图5.2 生成系统映像文件

生成文件系统映象文件root.cramfs.new。第六章 根文件系统建立与文件系统下载

6.1 根文件系统分析

6.1.1 cramfs 目录结构

一个完整的根文件系统通常包含以下几个目录: /bin 应用程序存放目录。

/sbin 系统管理员服务程序,其中最重要的就是供内核初始化之后执行的/sbin/init 进程。

/lib 存放程序运行所需要的动态库。/proc 系统状态文件目录。/dev 驱动程序存放目录。

/etc 系统配置文件及用户数据存放目录。

/mnt 用于设备安装的目录,通常包含etc 子目录和为块设备安装保留目录。/usr 用于存放用户程序和配置文件的目录,可以根据需要进行设置。一般情况下都要把已经规划好的目录结构转换成一个映象文件,即使用命令工具mkcramfs(cygwin下为mkcramfs.exe),把相应的cramfs 目录树压缩为单一的映象文件。其命令格式为:

mkcramfs [-h] [-e edition] [-i file] [-n name] dirname outfile 使用mkcramfs.exe 在cygwin 下编译生成文件系统映象文件root.cramfs,再固化到开发系统FLASH 上运行。6.1.2 构建cramfs 文件系统

按照本节实验原理中自行构建一个cramfs 文件系统。运行cygwin,执行以下命令解压安装:

$> source /tmp/edukit-2410/set_env_linux.sh //Linux 编译环境变量设置

$> cd $WORKDIR/

图6.1 构建文件系统

$> tar-xvjf /tmp/edukit-2410/root.cramfs.tar.bz2 $> ls „ root „ root 文件夹中就是我们想要的cramfs 文件系统

6.2 文件系统映像文件生成

6.2.1 编译一个应用测试程序test.c 按设计原理要求编写一个应用程序test.c,存放在/home/app/audio目录下,进入该目录后执行以下命令编译链接测试程序:

$> cd /home/app/audio $> make(也可以编写Makefile 来编译)

图6.2 编译test文件

6.2.2 拷贝测试程序到文件系统中,并编译生成文件系统映象

把刚才编译输出的test文件拷贝到文件系统所在的工作目录 root/usr/audio 目录下,执行以下命令生成新的文件系统映象:

$> cd $WORKDIR/ $> $SOURCEDIR/mkcramfs root root.cramfs.new

图6.3 生成映象

刚刚编译生成的文件系统映象root.cramfs.new 中已经包含测试程序。

6.3 文件系统下载

(1)首先SW104 设为短接(从Nand Flash 启动),确定已经成功烧写vivi 和linux kernel,加电运行可以看到vivi 启动信息,输入空格进入命令状态;

(2)双击运行Download.pjf 工程文件(将启动Embest IDE 环境),点击连接Remote connect,程序应该正在运行(此时命令按钮STOP 为红色);在超级终端输入help 看看有没有反应,如果没反应,点击IDE 按钮:Reset->Start(F5);再输入help 测试,直到有反应为止;

(3)如果超级终端可以输出一些信息,再点击IDE 中的Stop,配置Debug 的Download 地址为0x30000000,并点击IDE 菜单Project 选择Settings 项,在Download 页下拉Category 到Download 项,在Download File 选择root.cramfs.new 文件,路径为d:Cygwinusrlocalsrcedukit-2410点击确定后:

图6.4 选择加载的文件

首先点击IDE 菜单DEBUG 选择Download 下载文件系统映象 约1-2 分钟

图6.5 下载成功

其次下载完毕后,点击Start(F5)然后在超级终端里输入:load flash root j(烧写更新文件系统)

图6.6 烧写

注意:只能在“vivi的烧写”和linux内核操作完成后,才可以按以上方法正确烧写root映象到NandFlash。重起实验板,观测超级终端窗口提示信息,引导整个系统启动到linux行命令输入状态。在超级终端输入一些linux命令查看执行结果是否正确。

6.4 功能模块运行与调试

重新加电,在超级终端根据提示启动Linux,按提示输入cd bin、./test指令。

图6.7 输入指令

图6.8 在控制台下运行测试程序

程序执行完后。如图6.9。

图6.9 程序运行时超级终端的输出

第七章 课程设计总结与体会

7.1 得出的结论

通过按上述步骤执行相关应用程序,可以实现对语音的实时采集和播放。需改进的地方:通过录制一段语音信息,录制完成后再播放

7.2课程设计过程中遇到的问题及解决方法

1.在给vivi打补丁时,$> patch-p1

2.在图形界面下进行内核配置时按实验指导书配置导致少了sound这一步导致出错。

3.重新在图形界面下配置后,发现无法生成压缩映像文件。请教研究生后解决了。原来之前配置错误生成了boot文件夹,要把之前boot删掉后重新编译。4.在调试时输入cd bin,./test指令后超级终端无反应。查找后发现,原来在根文件系统编译时没把生成的test文件复制到文件系统所在的工作目录root/bin目录下。重新编译后把生成的test文件复制后在调试后可以进行录放测试。

7.3 心得体会

课程设计刚开始的时候,思绪全无,我真的感到 “书到用时方恨少”,所以又重新把书和实验指导看了几遍,对知识系统而全面进行了梳理,对许多不理解的地方通过上网搜索翻阅图书弄懂,终于熟练掌握了基本理论知识,而且领悟诸多平时学习没有注意到的细节步骤,学会了如何思考的思维方式,找到了设计的灵感。

虽然每天要顶着30多度的高温在宿舍跟实验室之间往返,流了不少汗水,感觉确实不舒服,可最后看到自己的成果后心里很充实很高兴。

在课程设计过程中遇到了这样那样的困难。有时候是电脑出问题了,有时候

是实验箱出毛病,有时候是自己在操作过程中操作错误无法继续,可在研究生学长和其他同学的帮忙下都一一解决。使我深深感觉到团队力量的强大。

最后再次感谢陈老师这学期兢兢业业地给我们传授知识,感谢三位研究生牺牲自己的时间在炎热的夏天帮助我们解决遇到的问题!

参考文献

[1]徐英慧,等.ARM9嵌入式系统设计——基于S3C2410与Linux[M].北京:北京航空航天大学出版社,2007.[2]于明,等.ARM9嵌入式系统设计与开发教程[M].北京:电子工业出版社,2006.[3]田泽.ARM9嵌入式开发实验与实践[M].北京:北京航空航天大学出版社,2006.[4]孙天泽,等.嵌入式设计及Linux驱动开发指南——基于ARM9处理器[M].2版.北京:电子工业出版社,2007.[5]周立功,等.ARM9&WinCE实验与实践——基于S3C2410[M].北京:北京航空航天大学出版社,2007.[6]Samsung Electronics.S3C2410A-200MHz

&

266MHz

32-Bit

教学设计:调用系统子程序 篇5

摘 要:采用三菱PLC对双面铣床进行技术改造,针对双面铣床的控制要求,给出两种程序设计方案,并简单分析了各自的优缺点,PLC的应用不但大大提高了系统运行的可靠性和抗干扰能力,降低了设计运行的故障率,同时给设计维护带来极大的便利,对同类设备的技术改造有较大的参考价值。

关键词:PLC;铣床;工作方式;IST

DOI:10.16640/j.cnki.37-1222/t.2016.09.012

PLC的全称是Programmable Logic Controller(可编程控制器),刚引入国内时,曾简称为PC。后来,IBM-PC获得广泛应用,PC成了个人电脑的代名词,才改为PLC。PLC是一种智能产品,是在电器控制技术和计算机技术的基础上开发出来的,并逐渐发展成为以微处理器为核心,把自动化技术、计算机技术、通信技术融为一体的新型工业控制装置。目的是用来取代继电器、执行逻辑、记时、计数等顺序控制功能,建立柔性的程控系统。国际电工委员会(IEC)于1987年颁布了可编程控制器标准草案第三稿,明确强调了PLC直接应用于工业环境,具有通用性强、使用方便、适应面广、可靠性高、搞干扰能力强,编程简单等特点。在工业领域中,PLC控制技术的应用已成为世界潮流。

在传统的机床控制系统中,都是采用继电器――接触器等元器件组成的硬件逻辑控制电路,在PLC出现之前,一直占主导地位,应用广泛。但是电气控制系统存在体积大、可靠性低、查找和排除故障困难等缺点,特别是其接线复杂,工艺难度高,不易更改,对生产工艺变化的适应性也差,所以用PLC控制取代传统机床电气控制系统是机床控制发展的主要趋势。它可以完美的解决传统机床电气控制系统的可靠性、柔性、开发周期、故障自诊断等问题。

铣床作为机械加工的通用设备,在汽车等配件生产加工中起着不可替代的作用。而双面铣床由于两面可同时加工,加工效率高,应用更为广泛,本文主要进行双面铣床的PLC控制程序设计。双面铣床控制系统控制要求

工作台来回往返运动由液压驱动,工作台速度和方向由限位开关SQ1―SQ3控制。工作台与主轴循环工作过程为:工作台启动――向右快进(左动力头)――减速工进,同时主轴启动,加工结束――停止工进,主轴延时10S停转――工作台向左快退回原位――进入下一循环工作状态。右动力头的运行方向与左动力头相反。

控制要求:PLC设计时,工作方式设为自动循环、点动、单周循环和步进4种;主轴只在自动循环和单周循环时启动;要有必要的电气保护和联锁装置;自动循环时按下图的顺序动作。PLC设计设计

2.1 采用IST指令实现程序设计

根据控制系统要求,该程序主要需包括四种工作方式,分别为自动循环、点动、单周循环和步进,最为简便的编程方法是使用功能指令的初始化指令IST(FNC60)。

梯形图源操作数S表明的是首地址,它有共8个位连号软元件元件组成,由开关量输入继电器X20~X27组成,其功能分别是:

X20:手动工作方式的输入控制信号;X21:返回原点工作方式的输入控制信号;X22:单步工作方式的输入信号;X23:单周期工作方式的输入控制信号;X24:全自动工作方式的输入控制信号;X25:返回原点的启动信号;X26:进入自动工作方式的启动信号;X27:停止。在开关量输入X20~X24中,不允许有两个或两个以上的输入端同时闭合,因此,必须选用满足该条件的转换开关,且该开关至少有五挡位置,当开关扳到某挡位置时,只有该位置的触点闭合,其他各位置的触点断开。在梯形图中,目的操作数D1和D2只能选用状态器S,其范围是S20~S899,其中D1表示自动工作方式所使用的最低位状态器,D2表示自动工作方式时所使用的最高位状态器。S0~S9是实际发始状态器地址编号。S0是各操作的初始状态,S1是原点回归的初始状态。

同时,与IST指令有关的特殊辅助继电器有8个。它们是M8040~M8047,其中M8040:转移禁止;M8040:转移开始;M8042:起动脉冲;M8043:返回原点完成,当M8043为1时,允许进入自动工作方式,当M8043为0时,表示返回原点未完成,不允许进入自动工作方式;M8047:STL监控有效。

因此,如果采用IST指令设计该双面铣床控制程序时,可将程序设计成四部分,第一部分IST指令;第二部分为手动程序,设计在状态点S0下;第三部分为返回原点程序,设计在状态点S1下,且在该部分程序最后,到达原点时对M8043置1,表示返回原点完成;第四部分为自动和单周程序,设计在状态点S2下。若X20为ON时,状态器S0为1,表示工作在手动工作状态;若X21为ON时,状态S1为1,处于返回工作原点状态,当返回工作原点完成时,M8043置1,此时如果X22为ON,则工作于单步工作状态即步进状态,每按一次启动按钮,就进行一次状态转移,如果输入端X23为ON,则处于单周期工作状态,每按一次启动按钮,扫行完一个周期后,停止在起始状态S2;如果输入端X24为1时,则处于自动工作方式,循环执行用户程序。由此可见,该程序完全满足该双面铣床控制系统的四种工作方式。但是我们同时也可以发现,一旦采用IST指令,其输入端一次性占用X20~X27共8个输入点,对于三菱FX2N-32MR的PLC来说,有可能输入点是不够用的,并且它必须采用至少有五档的转换开关,那我们可不可以不采用IST指令同样也可以实现控制要求呢?

2.2 采用基本指令实现程序设计

2.2.1 程序的总体结构

图3为双面铣床的PLC梯形图程序的总体结构,将程序分为公用程序、手动程序和自动程序三个部分,其中自动程序包括单步、单周期、自动循环和自动回原点四部分。这是因为它们的工作都是按照同样的顺序进行,所以将它们合在一起编程更加简单。回原点程序放在自动程序的初始状态点S0中,因为自动循环等工作方式起点就要求动工作台处于原点位置,梯形图中使用跳转指令使得自动程序和手动程序不会同时执行。

2.2.2 各部分程序的设计

(1)公用程序。公用程序如图4所示,用于自动程序和手动程序相互切换的处理。当选择自动X7、单周X10、步进X11这三种工作方式时,程序跳转至P0执行自动程序,反之若选择的是手动X12,则执行手动程序。当执行手动程序时,首先将状态点S0~S13复位,同时将输出Y0~Y4复位,再进行手动工作方式,必免同时有两个活动步的异常情况,同时为避免手动工作时的越程故障,可在左动力头和右动力头输出上分别加上SQ3和SQ1的常闭触点,进行位置限制。

自动程序初始状态点S0的激活,由自动X7、单周X10、步进X11三个输入的并联进行触发,并采用边沿触发,如果采用普通触发,当以上三个输入开关闭合时,会出现初始状态点S0一直处于激活状态,当自动程序开始执行时,会同时出现两个活动步的异常情况,而采用上升沿触发,只有当开关合上一瞬间,初始状态点S0才会被激活,当下一个状态点满足条件激活时,S0状态点关闭。

步进工作状态依靠特殊辅助继电器M8040来实现,由启动按钮X0的常闭触点和步进工作状态选择开关S11的常开状态驱动特殊辅助继电器M8040。当步进选择开关S11闭合,没有按下启动按钮X0时,M8040为1,禁止状态转移,按下启动按钮X0时,常闭触点断开,M8040为0,允许状态转移,即跳转至下一个状态点,执行下一步动作,由此,每按一次,自动程序执行一步,即实现了步进控制。

(2)自动程序。自动程序功能图如图5所示,其中包含单周、自动循环以及自动回原点程序。其中单同和自动循环通过状态点S13下的跳转实现,当选择单周或步进时,程序跳转至状态点S0,当选择自动或步进时,程序跳转至状态点S10。自动回原点程序设计在初始状态点S0下。当返回原点后,即到达行程开关SQ1位置,给出原点信号Y5,作为下一个状态S10激活的条件之一。同时需注意的是,因为步进工作方式与自动程序是合在一起编程的,当程序工作在单周或自动时,满足下一个状态点激活条件时,则跳转至下一个状态点执行,而工作在步进工作状态时,尽管满足了下一个状态点激活条件,但没有按下启动按钮,程序不会执行下一个状态点的动作,即当前状态点一直处于激活状态,当前状态点也一直有输出,为了避免这种情况的出现,在每个状态点的输出元件上,加上条件限制,当满足跳转条件时,尽管没有跳转,当前状态点也无输出。如在状态点S10的输出元件前串上SQ2的常闭触点。

(3)程序调试。程序调试时,可各部分程序分别调试,然后再进行全部程序的调试,也可直接进行全部程序的调试。总结

本文介绍的在双面铣床控制系统中应用PLC替代继电器―接触器电气控制线路的技术改造,经过实际运行,系统运行稳定可靠,能很好的保证其加工精度和定位精度,两个编程方法各有优缺点,采用IST指令,编程方法简单,程序结构清晰,但在工作方式的选择开关上一定要采用五档转换开关来实现,采用普通指令,编程较为复杂,但开关无特殊要求。总之,PLC的应用不但大大提高了系统运行的可靠性和抗干扰能力,降低了设计运行的故障率,同时给设计维护带来极大的便利,对同类设备的技术改造有较大的参考价值。

参考文献:

教学设计:调用系统子程序 篇6

关键词:C语言,Fortran语言,混合语言编程,Windows,Linux

随着微型计算机的高速发展和普及,数值模拟或者数值仿真在科研与工程中的应用范围越来越广。物理问题的数值模拟过程必须通过由高级计算机语言(如C,Fortran,C++等等)所编写的计算机程序来实现。Fortran语言因其在数值计算方面具有其特有的优势以及流程简洁,易懂的特点,从而倍受从事数值计算的科研人员的喜爱。在www.netlib.org网站上可以下载到大量成熟的、开放的、以Fortran语言编写的数值计算的源程序。这些程序是从事数值计算的科研人员和工程师的知识宝库。它们可以很容易地向零件装配一样移植到我们自己的程序之中,从而可以节约大量宝贵的时间,避免了不必要的重复劳动。随着计算机技术的不断发展,C、C++等高级计算机语言越来越受到人们的喜爱。尤其当程序中要处理大量的字符串时,这些语言比Fortran语言具有明显的优势。因此,为了兼顾Fortran语言和C语言等的优势,所以现在混合编程得到了越来越多的应用。

Windows操作系统下的混合编程在Compaq Visual Fortran 6.6的帮助文件[1]中有较为详细的介绍。对于初学者来说,仅靠参考该帮助文件而来很好地实现Fortran与C或C++的混合编程还是比较困难的。为此,国内有些学者已经发表了在这方面的研究和体会。肖晓玲等[2]、周振红等[3]以及简建勇等[4]研究了VC与Fortran的混合语言编程。他们详细地描述了VC与Fortran之间的调用约定,命名约定以及参数传递方式。两文中均没有完整的混合语言编程源程序以供参考。黄芝平等[5]研究了VC++6.0与Fortran PowerStation4.0之间的混合语言编程。文中将Fortran语言源程序制作成动态链接库的例子非常具有参考价值,初学者参考后易于实现。在此期间,张向强,陈志英[6]也研究了VC++6.0与Fortran PowerStation 4.0之间的混合语言编程。2006年,章大勇,郑海[7]研究了VC++可执行程序调用Fortran语言编写的可执行程序的混合语言编程方法。该方法并不涉及这两种语言之间的混合程序编写问题。最近,亓雪冬等[8]研究了Linux操作系统下Fortran与C语言的混合编程方法。文中介绍了若干种Fortran与C混合编程的方法。与前面列举的大部分参考文献一样,文中没有给出完整的可直接执行的源程序。

Fortran与VC++或C语言的混合编程应用越来越广泛。随着Linux操作系统被越来越多的人接受以及大规模数值计算的需求,Fortran与VC++或C语言混合编程在Linux操作系统下的应用也越来越多。因为Fortran与VC++和C语言混合编程差别不大,所以这里下面我们仅讨论Fortran与C语言的混合编程问题且仅限于C语言程序调用Fortran语言程序。由于目前有关这类混合语言编程的可以直接运行并且能够清晰地说明混合编程的过程的可参考的源程序比较缺少,因此本文结合所研究的C语言程序在不同操作系统下调用Fortran语言程序的方法的基础上给出了完整的可直接执行的混合语言编程源程序。

1 C与Fortran的混合编程语法

1.1 Windows操作系统下的混合语言编程语法

本文所用的Windows操作系统下的软件环境是在计算机上同时安装了Microsoft Visual C++6.0和Compaq Visual Fortran 6.0(或升级至6.6)。

命名规则:需要注意的是Fortran语言不区分字母的大小写,而C语言中是严格区分字母的大小写的。Fortran语言中的subroutine或function的名字在C语言中声明或调用时是以该名称的全部小写方式实现的。例如,Fortran编写的subroutine Gauss_Integration在C语言中声明时应为extern void gauss_integration();。该例子表明Fortran语言中的subroutine对应C语言中的void函数。Fortran中的函数对应C语言中同类型的函数。不同的是C语言中没有自带复数类型。因此对于Fortran中的复数类型的函数或变量,在C语言中必须自己建立复数结构如下来与Fortran语言中的复数类型匹配。

参数传递:在Fortran语言中所有参数都是以传址的方式传递的。而C语言中默认只有数组是以传址的方式传递的,其它参数都以传值的方式传递。因为C语言对指针操作非常方便,所以我们推荐在C语言调用Fortran语言的subroutine或function时所有的参数都采用传址的方式。这样做的好处是可以减少传递错误的发生。参数传递中特别需要注意的是数组的传递。首先是Fortran中的数组下标默认是从1开始的,而C语言中是从0开始的。其次,Fortran与C语言中的数组在内存中的存储方式是不同的。Fortran中数组是以列为主排列的,而C语言中的数组是以行为主排列的。例如一个二维数组在Fortran语言中该数组在内存中的存储方式为,(11,21,12,22),而在C语言中的存储方式为,(11,21,12,22)。关于这方面的详细描述可以参考文献[3,9]。Fortran中的全局变量传递到C语言中有两种方式。一种方法是利用Fortran语言的common语句,它对应C语言中同名的结构。例如common/examp3/number,对应C语言中的结构extern struct examp3;。另一种方式就是用module的方式。例如,module examp/real rnumber1/end module examp(这里/表示回车换行)对应C语言中的全局变量extern float EXAMP_mp_NUMBER1;。该例子说明两点,一是module方式的全局变量在C语言中除字母mp小写外,其它部分必须大写。二是Fortran中的real类型与C语言中的float相对等,而real*8(或double precision)与C语言中的double类型相对应。

此外,需要补充的是文献[1]中举例说明Fortran中的type类型与C语言中的结构对应。但是遗憾的是作者多次试验都没有成功。至今也没有在文献中或网络上发现有这方面成功的案例。

1.2 Linux操作系统下混合语言编程语法

在Windows操作系统下的Visual Fortran 6.0和VC++6.0编译器中所编写的C语言程序调用Fortran语言程序的混合语言编程程序不能直接在Linux操作系统下运行。针对不同的Linux操作系统混合编程语法也会略有不同。这里以Openuse 10.2,Fedora release 9和Centos release 4.5为例来简要介绍Linux操作系统下C语言程序调用Fortran语言程序的混合语言编程语法。重点是实用性。

首先是Windows操作系统下C语言程序中常用的以下头文件在Linux操作系统下一般是不需要的。

#include;#include;#include

而头文件math.h在两个系统中当用到特定的数学函数时都是需要的

其次,在采用编译器默认选项的情况下Windows操作系统中C语言程序调用的Fortran语言所编写的函数名在Linux操作系统中必须在该函数名后加一下划线。例如,Window操作系统中C语言程序调用的Fortran语言所编写的函数名为gauss_integration,那么该函数在Linux操作系统下的函数名应为gauss_integration_。当C语言程序调用Fortran语言程序时如果所有参数都采用传址方式传递的话,在Linux操作系统下对应函数的参数传递部分与在Windows操作系统下的情形完全相同,不需要做任何修改。

最后,必须注意的是在Linux操作系统下连接C语言程序的目标文件和Fortran语言程序的目标文件时最好使用编译器gfortran。否则的话,将发生Fortran程序中write,read等命令无法识别的错误。

2 C与Fortran混合语言编程实例

Windows操作系统下的源程序

在Windows操作系统下安装编译器Microsoft Visual C++6.0和Compaq Visual Fortran 6.0。然后建立一个win32 console application类型的project,把以上两个源程序文件加入到该project中即可编译运行。运行结果如下:

3 Linux操作系统下的源程序

C语言程序调用的Fortran语言程序c_call_for.f90与上面Windows系统下的文件完全相同,不需要做任何变动。

在Linux操作系统下,作者还没有成功地实现Windows操作系统下已经实现的全局变量传递,例如Windows系统下的number和number1。全局变量在C语言程序和Fortran语言程序间的传递可以间接地通过函数参数传递来实现。即全局变量传递成功与否对C和Fortran语言混合语言编程影响不大。

上面的程序在Openuse 10.2,Fedora release 9和Centos release 4.5三个Linux版本下都成功地运行过。在每个版本下都必须同时安装cc和gfortran编译器。对于本例的编译过程如下,

4 结束语

通过多次数值试验深入探索和研究了Windows操作系统和Linux操作系统下C语言程序调用Fortran语言程序的混合语言编程过程和技巧。文中以完整实例说明了在这两个不同操作系统下实现C与Fortran语言混合语言编程的区别与联系。所编写的完整实例有助于理解和实现混合语言编程,从而提高学习和应用C与Fortran语言混合语言编程的工作效率。该实例具有很好的通用性,只要稍加修改即可被参考者所利用。

参考文献

[1]Programming with Mixed Languages[R].Compaq Visual Fortran Version 6.6 online documentation,2001.

[2]肖晓玲,卢正鼎,张翔.VC与Fortran混合语言编程[J].江汉石油学院学报,2000,22(2):71-74.

[3]周振红,颜国红,吴虹娟.Fortran与VisualC++混合编程研究[J].武汉大学学报,2001,34(2):84-87.

[4]简建勇,曹志宇,燕乔.混合语言编程在有限元法中的应用[J].岩土力学,2003,24(增1):140-142.

[5]黄芝平,戴路,杨波.VC++6.0与PowerStation 4.0混合语言编程[J].微计算机信息2001,17-1:67-68.

[6]张向强,陈志英.Visual C++与Fortran的混编[J].计算机工程,2001,27(1):160-161.

[7]章大勇,郑海.VC++与Fortran混合编程方法研究[J].计算机工程与设计,2006,27(12):2246-2247.

[8]亓雪冬,仝兆岐,何潮观.Linux环境中Fortran与C混合编程研究[J].计算机工程与设计,2008,29(9):2378-2380.

上一篇:居家养老工作总结下一篇:小班音乐活动教案小猫钓鱼