基于ARM9的RTU设计

时间:2012-05-02来源:网络

2.4 系统初始任务Task0
从站RTU经过系统基本初始化之后,还需要进一步的配置才能正常工作,而这部分的工作就在系统初始任务Task0中实现。Task0主要完成的工作有:读取E2PROM中的数据,获取各种配置信息;根据配置信息初始化各种硬件驱动(如Modbus传输波特率、RS232/RS485通信选择、外部中断功能引脚选择、SPI和IIC总线初始化等等);根据配置需求有选择地创建模拟量输入量任务Task2(AD采集任务)、数字量输入任务Task3、数字量输出任务Task4、读保持寄存器配置任务Task5和测温任务Task6:最后让一个LED指示灯定时闪烁表示RTU工作正常;接着进行任务调度,切换到已创建的、优先级高的其它就绪任务中运行并且实时响应外部中断(数字量输入)。系统初始任务Task0程序流程图如图7所示。

g.JPG


系统中的Task2主要完成AD采集任务Task2,本系统采用TI公司的ADS7952。ADS7952的AD采样率是根据其SPI传输波特率来换算的,改变MCU(S3C2440A)的SPI底层驱动程序中的SPI分频值就能实现不同AD采样率的选择。ADS7952可以根据E2PROM中的配置信息(采样率、通道数、采样点数)工作,也可以根据Task5中读取保持寄存器对应表中的数据位来实时更新配置。
Task3执行数字量输入任务,数字量输入包括开关量输入和脉冲信号量输入,可以把这两种功能的端口分开,也可以把这两种功能复用合并。功能复用合并实现方法:数字量输入口对应的MCU管脚先作为普通GPIO引脚,读取其GPIO状态寄存器获取高低电平状态(即开关状态),把开关状态写入Modbus离散输入寄存器中,接着把管脚功能从GPIO引脚切换到外部中断引脚,用于随时获取脉冲信号的输入,在外部中断函数中可以实现计数并且把计数值写入Modbus输入寄存器中。该任务执行时间必须短,代码必须简练,不能在其中加入延时之类的函数,任务挂起的时间也不能太长,不然会导致脉冲信号输入数据出现误码。
Task4主要完成数字量输出任务。主站RTU可以通过写线圈寄存器来控制从站RTU固态继电器的输出,也可以根据要求让从站RTU定时中断控制继电器输出PWM信号。同时主站RTU可以通过读线圈寄存器来获取从站RTU当前继电器的电平输出状态。
Task5可执行读保持寄存器配置任务。当Modbus保持寄存器中的数据发生变化时,根据保持寄存器对应表(与主站协商定义的一个从站配置表)对从站RTU进行相应配置,包括从站基本信息、AD采样率、AD通道数、AD采样点数、有线无线传输选择、UART波特率等等,同时把新的配置信息写入E2PROM中。配置代码应该放在μC/OS-II临界区中,临界区中不响应中断,这样才能保证新配置的程序能正常地运行。
Task6执行测温任务。当RTU工作环境温度过高时,可能会影响RTU的正常工作,测温任务可以实时或定时把从站RTU工作温度值写入Mod bus输入寄存器中,供主站RTU读取。

3 结语
本文主要介绍了一种基于ARM9的RTU设计实现方法,对RTU硬件系统中的各个模块设计过程进行了详细的介绍,包括数字量输入模块、数字量输出模块、模拟量输入模块、RS232通信模块、RS485通信模块、以太网通信模块、存储器模块、E2PROM和测温模块等等,同时提出了基于此硬件系统的RTU从站软件设计方法。RTU从站采用μC/OS-II实时操作系统,数据传输采用Modbus/RTU通信协议。该RTU可以应用于市政、能源、交通设施、环境、气象、地质、农业等有远程终端测控站点需求的行业。

1 2 3 4

关键词: 设计 RTU ARM9 基于

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版