新闻中心

EEPW首页 > 电源与新能源 > 设计应用 > 基于嵌入式的变电站蓄电池远程监测平台的设计与实现

基于嵌入式的变电站蓄电池远程监测平台的设计与实现

作者: 时间:2012-03-15 来源:网络 收藏
本文基于以上的硬件,对CM模块和PC机端进行软件设计,实现CM端与TM模块和PC的通信以及PC机端与CM模块的通信这两大功能,如图1虚线所框部分。

2CM模块端的通信软件设计与实现

软件的设计主要是模块之间数据的交换及处理,CM模块端即ARM上的软件设计包括两大部分。一是与TM模块的通信,采用传统系统中的现场总线RS485进行串口数据通信。接收单片机的检测、报警、等数据,并把接收到的PC机控制命令传送至TM模块。另一部分是与PC机的通信,通过Socket的UDP协议进行数据传输,两者之间形成C/S结构模式。应用以太网通信(基于TCP/IP)的通信方式进行数据传输共享,实现交互操作。系统通信流向如图3所示。

CM模块端与单片机和PC机两方数据通信采用多进程方式来实现,与单片机串口通信和PC机的套接口通信分别在CMTM和CMPC这两个进程中完成,两进程之间通过共享内存和信号量实现数据的共享及进程间的同步。

2.1串口通信(CMTM进程)

利用串口进行文件传输首先要打开和配置串口,按要求设置好速度和传送方式之类的参数;然后,选择一定的传送协议和方式,设置好传送双方的同步方式;接着就可以按照选择的传送协议和同步方式来传送数据或文件了。Linux平台下串口属性参数全部反映在一个structtermios结构体中,其结构如下:

structtermios{

tcflag_tc_iflag;//输入模式标志

tcflag_tc_oflag;//输出模式标志

tcflag_tc_cflag//控制模式标志

tcflag_tc_lflag;//线路选项

cc_tc_line;//行控制

cc_tc_cc[NCCS];//控制字符

};

其中含有大约50个标志位,这些标志位在头文件termios.h中定义。串口编程的关键是对串口的配置,为了编程方便,Linux系统还包含了一系列针对termios结构的设置函数,用来完成获取和设置串口属性[2]。Linux下串口设置很多,本设计主要的设置有如下几方面:

①c_cflag的基本参数设置,如波特率(Baudrate)、数据位(Bits)、停止位(Stops)及校验方式(Parity)等。配置过程如下:

struettermiosoptions;//termios的变量声明

optionsc_cflag|=B9600;//波特率为9600bps

optionsc_cflag|=CS8;//采用8个数据位

optionsc_cflag|=~CSTOPB;//使用1个停止位

optionsc_cflag=~PARENB;//取消校验位

②输入输出方式设定。根据是否对传输的数据进行预处理,可分为预处理方式(Canonical)和原始(Raw)方式。预处理方式常用于Modem通信。如果只是串口传输数据,而不需要串口来处理,则使用原始模式(RawMode)方式来通讯,本文采用原始输入方式:

options.c_lflag=~(ICANON|ECHO|ECH-OE|ISIG);//RawModeforlnput

options.c_oflag=~OPOST;//RawModeforOutput

③控制字选项

c_cc包含一些控制字的定义和读取等待定时器(ReadTimeoutTimer)配置选项。其中,VSTART和VSTOP参数设定软件流控制的起始和停止字符(默认是11H和13H)。VMIN和VTIME参数用来控制系统的读操作,VMIN设置每次读取的最少字节数,VTIME设置读取操作的等待时间(以0.1s为单位)。这2个参数的具体值影响了读操作的行为。本文无软件流的控制。所以设置如下:

Optionsc_cc[VTIME]=150;

Optionsc_cc[VMIN]=0;

除了上述的配置,传送协议和方式的设定也是很关键的一环。结合实际情况,基于modbus协议的RTU传输模式作了相应的小变动。由于数目较多,实现通信信息的识别,在发送包含自检信息的字节前,先发送4个字节用于接收端的判断,然后是帧长度(1byte)、目标地址(1byte)、源地址(1byte)、命令字(1byte)、标志数据(2byte)、数据(n*3byte),最后是帧数据的CRC校验值(2byte)。这里通讯数据采用不定长帧格式,便于后序功能的扩展。串口配置、通讯协议和方式规定完成后,便可用read()和write()等函数进行数据的接收和发送了。ARM与单片机串口数据交换实现在CMTM进程中完成,其主流程图如图4(a)所示。进程TMCM通过串口监听并接收单片机发送的检测信号以及发送PC机的操作命令,负责将TM模块发来的串口数据接收后存人相应的反馈数据共享内存SHM_TMCM中去,同时负责检查共享内存SHM_CMTM中是否有新的控制或操作命令到来,若有则将其转发到串口。试运行时编写相关的串口软件,手动和自动对CM模块发送和接收数据,此进程能准确实时地与软件进行数据交换,通信效果良好。



linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭