浔之漫智控技术-西门子PLC代理商
西门子PLC模块 , 变频器 , 触摸屏 , 交换机

6ES7231-0HF22-0XA0详解说明


6ES7231-0HF22-0XA0详解说明

在基于实时操作系统(RTOS,RealTime Operating System)的单片机应用软件设计中,“任务”是一个很重要的概念。有专家指出[1],把一个应用系统分为多少个任务且定义每一个任务各负责什么事情,这是一门艺术。对于任务的划分,并没有一个人人都要遵守的规则,不同的人来设计一个同样规格要求的系统,会有不同的方案。然而,到目前为止,很难看到有关论文对任务划分的方法有比较详细而系统的介绍。本文将深入研究划分任务的方法,并在此基础上,从实用的角度给出编写基于RTX51 Tiny实时操作系统的应用软件的指导方针。

    1、任务的概念和应用软件开发过程

    在嵌入式实时多任务系统开发中,用C语言代码表示的任务是一个无限的循环程序。任务不能有返回,不能有退出出口,但是任务可以被杀死,包括被别的任务杀死或自杀[2]。任务的概念与操作系统中的进程概念相同,一个任务是独立的执行进程,可以与其他的并发任务竞争CPU时间。

    基于RTOS的单片机应用软件开发过程:首先是根据系统设计方案明确应用软件的功能,然后结合RTOS的并发特性(或准并发特性),对应用软件要实现的功能进行大小适当的划分,也就是把应用软件的功能按照一定的原则划分为若干个任务模块,并对各个任务间的通信和时延进行仔细的确认。

    2、任务划分的原则

    任务划分有3个原则,分别介绍如下。

    2.1 原则1

    原则1是将同一个外设的访问放在一个任务中。

    对每个独立的硬件(例如串行通信端口)进行操作的驱动程序段放在一个任务中。也就是说,要想对某个设备资源进行操作,只有依靠执行相应的任务来实现。这样无论何时切换任务,都不会对任何独立的“外设”造成影响。

    这样做能够避免嵌入式操作系统的特殊问题——资源冲突和重入问题,而且利于系统维护与升级。各个任务之间要实现通信,可以调用os_send_signal函数及全局变量来实现。

    所谓“资源冲突”,就是任务A在访问某个资源时,恰好发生了任务切换——由任务A切换到任务B,任务B也访问这个资源且改变了它的状态,这样当再次执行任务A时,就可能发生冲突或带来不确定性。而所谓“重入”,是指假设任务A在运行某个函数,发生任务切换后,任务B也运行这个函数,这样就会破坏任务A执行这个函数时的现场,从而可能导致任务A执行函数时结果不正确。这种问题尤其容易出现在串行接口器件的操作中,例如串口,串行的AD、DA器件等。

    2.2 原则2

    原则2是要通过任务分割提高系统的实时性。

    在嵌入式多任务实时系统中,任务是指一个程序分段。这个程序分段被操作系统当作一个基本单元来调度。典型地,每个任务都是一个无限的循环。

    RTOS本质上就是嵌入的实时内核,它负责管理各个任务,或者说是为每个任务分配CPU时间,并且负责任务之间的通信。实时内核可分为可剥夺型和不可剥夺型两类。因此,按照所使用内核的不同,嵌入式实时系统也可分为两类:使用不可剥夺型内核的嵌入式实时系统和使用可剥夺型内核的嵌入式实时系统。

    2.2.1 长任务的定义

    在RTOS中,长任务就是指整个任务的执行时间较长,超出了RTOS中其他某一个或某几个任务的实时要求容限,而对整个RTOS的实时性构成威胁的那些任务。需要注意的是,长任务与复杂任务不能混淆,复杂任务的执行时间不一定长,简单任务也可能会构成长任务。

    2.2.2 长任务对RTOS的影响

    当使用可剥夺型实时内核时,长任务由于执行的时间较长,因而更容易被高优先级的任务打断;一旦高优先级的任务进入了就绪状态,当前任务的CPU使用权就被剥夺了,或者说任务被挂起了,那个高优先级的任务立刻得到了CPU的控制权。这样会出现两个问题:一是长任务可能在一次执行的过程中被频繁打断,长时间得不到一次完整的执行;二是长任务被打断时,可能要保存大量的现场信息,其目的是为了保证在高优先级任务执行完返回后,长任务能得以继续执行。然而,这样做要占用一定的系统资源,同时保存现场本身也是要占用CPU时间的,因此,实时性也会下降。

    当使用不可剥夺型实时内核时,长任务对RTOS的影响更为明显,因为在这种内核中,任务的响应时间取决于长的任务执行时间。也就是说,由于长任务的存在,任务的响应时间要变长。其结果是CPU长时间停留在长任务中,其他任务得不到实时的响应,甚至根本得不到执行,系统的实时性势必要下降。

    无论是使用可剥夺型内核,还是使用不可剥夺型内核,长任务都会对RTOS构成严重的威胁。

    2.2.3 长任务问题的解决方法

    解决长任务问题有效的途径是进行任务分割。所谓“任务分割”是指将影响系统实时性的长任务分割成若干个小任务。这样单个任务的执行时间变短,系统的任务响应时间变短,实时性得以提高。

    (1)对任务的分析与计算

    当然,长任务的分割必须结合系统中所使用的内核,以及各任务对实时性的要求等情况,进行必要的分析与计算,才能保证分割的合理性和有效性,具体的步骤如下。

    ① 分析系统共有多少个任务,这些任务对实时性的要求有多高,求出各个任务所要求的低执行频率(f1,f2,…,fn)。

    ② 计算目前各任务的实际执行时间(t1,t2,…,tn)

    ③ 确定系统中的长任务。如果max(t1,t2,…,tn)≤min(1f1,1f2,…,1fn),则此系统中不存在长任务。如果max(t1,t2,…,tn)>min(1f1,1f2,…,1fn),则存在长任务,而且执行时间为max(t1,t2,…,tn)的那个任务就是要找的长任务。

    ④ 分析此长任务是否需要分割,分析一下是什么原因导致执行的时间过长,这个时间是否能够通过程序的优化来缩短?如果能,则不需要进行任务分割;否则,要对这个长任务进行分割。

    (2)实施长任务分割

    常用的任务分割的方法有以下两种:

    ① 将长任务按功能分为若干个小模块,每一个模块构成一个小任务,每个小任务实现一种相对独立的功能,且要保证执行时间tmin(1f1,1f2,…,1fn)。各个小任务被内核顺序调用,合起来实现长任务功能。

② 有的长任务比较特殊,例如键盘任务和动态LED数码管显示任务,很难按照上面的方法把它分成若干个功能相对独立的小模块。这时,一般是按照方便保存现场信息的原则,将其强制分割成若干个小任务,每个小任务在min(1f1,1f2,…,1fn)时间内主动保存现场信息、放弃CPU的控制权,等到再次被内核调度时继续执行。这种分割方法相对而言较复杂,各任务之间界限不是很明显,看似未经分割,但实际上它却是由多次任务中断来完成的。

    2.3 原则3

    原则3是要将软件工程中的“解耦原则”用于任务划分。

    可以采用软件工程中的解耦原则对应用程序进行任务的划分。任务之间的耦合是影响软件复杂程度的一个重要因素,应该采取下述设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。具体方法可参见软件工程方面的书籍,例如文献[3]。

    3、基于RTX51 Tiny的应用软件设计指导

    RTX51是一个德国Keil Software公司开发的用于8051系列单片机的多任务实时操作系统[4]。RTX51有2个不同的版本。

    (1)完全版RTX51 Full

    完全版RTX51 Full允许4个优先级的任务时间片轮转调度和抢先式的任务切换,可以并行地利用中断功能。信号和信息可以通过邮箱系统在任务之间互相传递,可以从一个存储池中分配和释放内存,可以强迫一个任务等待中断、超时以及从另一个任务或中断发出的信号或信息。

    (2)小型版RTX51 Tiny

    小型版RTX51 Tiny是RTX51的一个子集,它可以很容易地在没有任何外部存储器的单片8051系统上运行。RTX51 Tiny仅支持时间片轮转任务切换和使用信号进行任务切换,不支持抢先式的任务切换,可以并行地利用中断功能,可以强迫一个任务等待中断、超时以及从另一个任务或中断发出的信号,不能进行信息处理,也不支持存储器分配或释放。RTX51 Tiny是一种不可剥夺型实时操作系统内核。

    基于RTX51 Tiny实时操作系统的单片机应用软件设计,首先应该根据RTX51 Tiny操作系统的准并发特性,对应用软件要实现的功能进行大小适当的划分——按照上述3个原则划分为若干个任务模块,并对各个任务间的通信和时延进行仔细的确认。

    编写基于RTX51 Tiny的应用软件的指导方针如下:

    ① 包含头文件rtx51tny.h在应用程序中。

    ② 不要写C语言主函数main()。RTX51 Tiny操作系统内核中已经有它自己的主函数main()。

    ③ 应用程序应该至少包括1个任务函数(task function)。

    ④ RTX51 Tiny应用程序必须中断使能(EA=1),因为RTX51 Tiny操作系统使用了定时器T0中断。

    ⑤ 应用程序至少调用1个RTX51 Tiny系统函数(如os_wait);否则,链接器将不会把RTX51 Tiny的系统库包含到应用程序中。

    ⑥ 任务task0是应用程序中个执行的函数。在任务task 0中,必须调用os_create_task函数来运行其他任务。

    ⑦ 任务task函数不必退出或返回。任务task必须使用一个while(1)结构或其他类似的结构。任务task函数不带参数,也没有返回值。使用系统函数os_delete_task挂起(halt)一个运行的任务。

    ⑧ 中断服务程序的编写方式,与不使用RTX51 Tiny操作系统下的编写方式相同。

    ⑨ 编译和链接应用程序有2种途径,一种是使用集成开发环境μVision 2 IDE,另一种是使用命令行工具CommandLine Tools。一般采用德国Keil Software公司提供的集成开发环境 μVision 2 IDE。

    利用Keil Software公司提供的集成开发环境 μVision 2 IDE,创建RTX51 Tiny应用程序的开始的步骤如下:

    ① 运行Keil Software公司的集成开发环境 μVision 2 IDE。

    ② 运行菜单命令Project→Options for Target‘Target 1’,打开Target对话框,并在对话框中选择Target选项卡。

    ③ 从Operating system下拉列表框中选择RTX51 Tiny,如图1所示。


图1 选择RTX51 Tiny实时操作系统

    4、结论

    本文给出了划分任务的3个原则,分别是“对同一个外设的访问放在一个任务中”、“通过任务分割提高系统的实时性”和“软件工程中的‘解耦原则’用于任务的划分”。实践证明,这些任务划分的原则是行之有效的。另外,从实用的角度给出了编写基于RTX51 Tiny实时操作系统应用软件的指导方针。实际上,RTX51 Tiny实时操作系统对目标系统的硬件需求是很低的,随着半导体技术的发展,能够运行嵌入式实时操作系统的单片机芯片是很容易采购得到的。

    人们越来越清楚地认识到,在嵌入式系统设计中引入实时操作系统的必要性[5]。在许多嵌入式系统中,不但要求系统能够及时响应随机发生的外部事件,并对其作出快速处理,通常还需要同时执行多个任务,并对每个任务作出实时响应。实践证明,对于这样的应用,采用嵌入式实时操作系统作为应用软件的设计平台和运行平台是一个良好的选择。

所用模块:
P+F电源模块KFD2.EB2.B
KSD2.GW.PRO 网关
KSD2.CI-s-Ex
P+F网关连PC用串口电缆

KSD2.GW.PRO 设置: 
d=ADR EXT(地址设为4),显示为:04d,G=BAUD PAR,设为19.2(显示为19G)
A=NORM,b=ADD INT,C=CHK INT,E=ADR PAR,F=BAUD INT为默认值
运行KSK1
Project-->new

选中右边的模块,点append添加




return-->close and return to main menu-->F5设置KSD2.GW.PRO Profibus dp bbbbbeter, 地址设为4,与KSD2.GW.PRO中地址设置一致


选中KSD2.CI-s-Ex模块,设置其输入信号和输出信号范围 此处设置为bbbbb:4-20mA,output,单位为mm,对应量程为0-450



project-->download 后,connection-->establish connection 在线监视如下:



设置完成后,在step7中组态如下:

比如用rs指令,自己看指令说明的,发送的数据要跟手册上的指令字符一样,还有通讯参数要对上,比如通讯速率,停止位等参数,变频器用参数设置,这边用d8120,还需要一个485bd,这就差不多了,好不要一直发送,像abb变频器用m8000一直发送的话会出错,本例子是主机上装rs-485bd通讯适配器与变频器的485pu口相连接,通过三菱plc和三菱变频器之间的rs485半双工串行通讯来实现的变频调速。

三菱plc和三菱变频器之间进行通讯,通讯规格必须在变频器的初始化中设定,如果没有进行设定或有一个错误的设定,数据将不能进行通讯。且每次参数设定后,需复位变频器。确保参数的设定生效,设定好参数后按如下协议进行数据通讯。

该过程分5个阶段:

1、计算机发出通讯请求;

2、变频器处理等待;

3、变频器作出应答;

4、计算机处理等待;

5、计算机作出应答。

根据不同的通讯要求完成相应的过程,如写变频器启、停控制命令时则只需完成1-3三个过程;监视变频器运行频率时则需完成1-5五个过程。不论是写数据还是读数据,均有plc发出请求,变频器只是被动接受请求并作出应答。每个阶段的数据格式均有差别。现只列出较为常用的三种格式:

要实现三菱plc对三菱变频器的通讯控制,必须对三菱plc进行编程;通过程序实现plc对变频器的各种运行控制和数据的采集。三菱plc程序首先应完成fx2n-485bd通讯适配器的初始化、控制命令字的组合、代码转换和变频器应答数据的处理工作。plc通过rs-485通讯控制变频器可以完成一台乃至多台变频器的启动、停止、频率设定。硬件连接如图5所示。由于每台变频器的通讯编程方法基本相似,唯一的不同之处就是变频器的站号设置不同。

就以plc通过rs-485通讯控制#0变频器运行程序为例:

变频器参数设定:

pr.79=1(操作模式), pr.1=50(上限频率),pr.3=50(基底频率),pr.19=380(基底电压),pr.77=2(参数写入禁止;表示即使运行时也可写入参数),pr.117=0(变频器站号),pr.118=192(通讯速度),pr.119=0(停止位一位),pr.120=2(偶校验)pr.121=9999(通讯重试次数),pr.122=9999(通讯检查时间间隔),pr.123=9999(等待时间设置),pr.124=0(无cr,无lf),

以上程序运行时plc通过rs-485通讯程序正转启动并且变频运行。其中x0为电动机正转以额定速度(频率)运行控制按钮,x1为电动机变频调速控制按钮,实现电动机的频率调节。

若要对#1站的电动机进行调速控制,只要将h30和h31分别传送给d11,d12,并将变频器参数pr.117设置为1即可.依此类推。对于不同站号的电动机的变频调速编程方法基本相同。

控制指令如下表所示。

注意所有指令代码和数据均以ascii码(十六进制)发送和接收。十六进制数转换成asci码时,h0-h9转换成asci码时加h30,例h3转换成asci码即h3+h30=h33,而a-f转换成asci码时加h31。例ha转换成asci码即ha+h31=h41.依次类推。

使用rs-485通讯控制,仅通过一条通讯电缆连接,就可以完成多台变频器的启动、停止、频率设定;并且很容易实现多电机之间的同步运行。该系统优点:硬件简单、可控制32台变频器。可以实现无级变速,速度变换平滑,速度控制jingque,适应能力好。该系统成本低、信号传输距离远、抗干扰性强。但是也存在一定的不足之处:比如编程工作量较大,响应有延时。且必须在掌握通讯协议及相关的参数的基础上才能顺利完成编程。对于技校初学者来讲该方法掌握比较困难


展开全文
优质商家推荐 拨打电话