西门子6ES7322-1FH00-0AA0参数详细
工业现场经常要采集多点数据,模拟信号或开关信号,一般用到RS485总线,使用一主带多从的通信方式,该种方式接线方便只需要两根屏蔽电缆线,通信距离远大可支持1500m,加中继器还可延长通信距离,采用差分信号方式抗电磁干扰好。但该方式通信速度不能太快,一般采用主从召唤的方式采集各子单元的数据,即主单元依次召唤各子单元(见图1),召唤到哪个单元哪个单元上传数据,总线的使用权完全由主单元分配,各子单元不能擅自占领总线。如果系统的单元多,主单元循环采集一周的时间就很长,子单元信息变化时不能及时发送给主单元,导致系统对突变事件的反应处理速度慢。本文通过总线状态检测、从机主动上发的方式解决。
图1 常规RS485总线主从方式接口图
硬件设计
整个系统由主单元和多个子单元组成(图2),主单元包括:ARM7微控制器、程序存储器、数据存储器、与子单元通信RS485、与主单元通信RS485、系统电源和通信隔离电源;子单元包括:MSP430单片机、与子单元通信RS485、系统电源和通信隔离电源。
图2 系统框图
主单元
ARM微控制器是主单元的核心,采用三星32位ARM7TDMI内核芯片S3C44B0,该芯片高处理速度可达76MHZ,总线开放,可外扩程序存储器FLASH和数据存储器SDRAM,该系统外扩了SST公司生产的39VF1601和现代生产的HY57V641620HG,2个UART串行接口,使用ADI的隔离RS485芯片ADM2483进行接口电平转换,总线状态检测使用74HC125三态门芯片。
子单元
子单元的微控制器使用TI的MSP430F133单片机,该单片机处理速度可达8MHz,8K字节片内FLASH存储,256K字节片内SRAM。
电源电路
电源电路采用开关电源供电,开关电源输入电压范围比较宽,输出直流电压5V,通过SP1117-3.3和SP1117-2.5芯片输出3.3V电源。RS485需要的隔离5V电源通过DC-DC模块得到。
总线检测电路
总线状态检测使用74HC125三态门芯片和单片机的两个I/O(图3),当系统都不使用总线时,每个单元的74HC125都输出高阻状态,此时总线为低电平,当有单元要使用总线时,他首先检测总线状态,如果总线为低电平,该单元迅速把74HC125改为输出状态,此时总线变为高电平,该单元占领总线,往总线上发送数据,发送数据完成再把74HC125改为高阻状态。如果检测到总线是高电平,等待检测,直到总线变低后再占领总线。
图3 总线检测电路
隔离485电路
使用ADI的ADM2483芯片进行接口电平转换(图4),该芯片属于隔离485,双电源供电输入输出隔离。
图4 隔离485电路
软件设计
主机程序部分需要实现各从机上传数据的接收、处理和上传。主机接收子单元信息通过一个RS485串口实现,数据格式为16进制,数据位8位,1 个起始位,1个结束位,无寄偶校验位,波特率9600bps。采用串行口中断的方式接收,主机程序初始化完成后等待各从机发送信息,当主机接收到个字节后,判断该字节是否为设备号,如果不是设备号,接收个数清零,如果是设备号继续接收第二个字节;判定第二个字节是否为正确的功能码,如果功能码错误,接收个数清零重新接收,功能码正确;接收第三个字节,该字节为从单元发送信息的字节个数x,计算从单元发送总字节个数为M=X+3+2,3个开头字节和2个 CRC校验码,主机接收到M个字节后,首先判断CRC校验码是否正确,错误舍弃所有信息,正确则把从单元的信息保存到数据区,该次接收结束,主机继续等待接收。
信息的上传通过一个RS232串口实现。当主机接收到从机信息后,进行数据的处理,发现从单元信息发生变化,主机准备把从机信息发送到上位机,首先重新初始化发送缓冲区,然后通过中断的方式依次发送信息到上位机,发送信息包括设备号、功能码、发送字节个数、信息字节和CRC校验码。
主机单元接收数据流程图示于图5。
图5 程序流程图
近年来,嵌入式系统以其体积小、成本低和功能专一等特点在工控领域得到越来越广泛的应用。本文实现了嵌入式远程测控终端与西门子S7-200 PLC的通信,并基于此完成了对PLC数据的采集。通过嵌入式系统的扩展网口将PLC与Internet相联,突破了串行通信速率的限制,节省了采用高端PLC 实现网络测控的经费投入。在从PLC采集数据功能的实现过程中,避开了以往使用PLC 自由端口通信需要改写PLC梯形图的问题,而直接利用PLC厂家制定的通信协议来实现数据交换,无需对PLC编程,方法简单可靠,为今后实现更多品牌PLC与上位机通信开辟了新的途径。同时,基于嵌入式操作系统μClinux及其多线程机制实现了一套中央空调远程测控终端系统。
1、系统总体设计
1.1 硬件构成
系统采用1片三星公司推出的基于ARM7TDMI精简指令系统的32位高速处理器S3C44B0X作为嵌入式微处理器,扩展了一个RS485串口、两个RS232串口和一个以太网口。如图1所示,嵌入式微处理器通过扩展的RS485串口与西门子S7-200 PLC进行通信,一个RS232口通过调制解调器连接到公众电话网,实现串行通信,扩展的以太网口则将整个嵌入式系统接入Internet,拓展了PLC的通信方式。考虑到与现存本地监控系统的兼容,在S7-200的串口上可同时并接西门子的文本显示器TD200,三者组成一个PPI令牌环网络。
图1 系统结构和连接示意图
1.2 软件总体设计
本系统采用μClinux嵌入式操作系统作为应用软件的运行平台。μClinux系统是近年迅速发展起来的一种专门用于微控制领域的嵌入式操作系统,内核要比原Linux 2.0内核小得多(内核小于512KB,内核加上工具小于900KB),但保留了Linux操作系统的主要优点:稳定性,优异的网络能力以及的文件系统支持,同时提供通用的Linux AP1支持完整的TCP/IP协议栈和大量其它的网络协议。
中央空调远程测控终端的功能主要是动态地采集中央空调的现场运行参数并将这些参数实时地发送给位于远程的监控中心,并且具备提供历史数据、故障报警和某些控制功能。为了提高系统的运行效率, 利用μClinux对多线程机制的支持,将远程终端的软件系统分为四个并发的线程实现。分别为:数据采集线程、数据存储线程、数据发送线程和故障报警线程。软件系统结构如图2所示。
图2 软件系统总体框架
为了实现各个线程之间的通信,设置一个数组作为共享区域。其中,数据采集线程主要是嵌入式测控终端与PLC的通信过程,所有的数据都从PLC的寄存器中读取,并存储在测控终端的内存共享区域中。在本系统中,根据所监控的中央空调的不同型号,由数据字典文件读入所需采集的参数地址,采用循环方式将各个参数的实时数值从PLC中采集,再一并存人数据共享区。数据存储线程在本地创建文件,并将数据共享区中的参数值每隔一定时间保存在FLASH中,使之作为分析一段时间内中央空调运行状况的历史数据,为实现专家诊断系统提供数据源。基于μClinux对TCP/IP协议栈的完整封装,实时数据发送和故障报警线程从共享存储区中读取数据后,利用socket通信机制,将实时数据和故障报警信息从本地发送到远程的主控中心,实现在不同地点对中央空调运行状况的实时监测。
由于西门子S7—200系列PLC通常配合西门子TD200文本显示器一同使用以构成本地监控,与本系统共用一条总线时冲突不可避免。本系统在数据采集的基础上根据PPI协议和PROFIBUS规定的令牌环协议,实现了主站之间的令牌传递功能,保证了令牌环网络的正常运转,使TD200与本系统组成的双主站网络通过对令牌的占有来实现各自的通信功能,互不干扰。
2、软件实现
2.1 通信方式和通信协议的选择
S7—200 CPU支持多种通信协议,为用户实现多种不同的网络配置提供了便利,包括:点对点(Point-to-Point)接口协议(PPI)、多点(Multi~Point)接El协议(MP1)和Profibus协议。这些协议是非同步的字符协议,有1位起始位、8位数据位、1位偶校验位和1位停止位。通信结构依赖于特定的起始字符和停止字符、源和目的站地址、报文长度和数据校验和。
目前通常采用自由口通信模式控制S7—200 CPU的通讯端El实现上下位机通信。用户可以在自由El模式下使用自定义的通信协议来实现PLC与多种类型智能设备的通信。但由于需要对PLC现有程序进行修改,对于不熟悉PLC编程语言并要在短时间内实现对西门子PLC 的监控功能的软件开发者来说,这种修改存在一定的风险。
本系统采用PPI协议作为嵌入式系统与S7—200 CPU之间的通信协议,由于C语言的高效性,采用C语言进行编程实现通信,无需对PLC本身的程序进行修改,保证了工业控制系统的安全和稳定。
2.2 PPI协议数据格式
PPI协议是一种主一从通信协议:通信的设备分为主站和从站。PLC默认为从站,嵌入式系统和TD200文本显示器作为主站。主站设备发送请求到从站设备,从站设备响应,从站不主动发起通信,只是等待主站的数据请求命令和对该命令作出响应。PPI协议并不限制与任意一个从站通信的主站数量,但是在一个网络中,主站的个数不能超过32。协议的数据格式如图3所示,图3(a)是PPI主站发送的命令帧和从站发送的数据帧格式,图3(b)是PPI主站发送给从站的确认帧格式。
图3 协议数据帧格式
以字节为单位,每个字节的含义如下:
SD2,SD1:(Start Delimiter)开始定界符(SD2=68H,SDI=10H)
LE.LER:(Frame Length)报文数据长度
DA:(Destination Address)目的地址
SA:(Source Address)源地址
FC:(Function Code)方式字(5C、6C、7C)
Data Unit:数据单元
FCS:(Frame Check Sequence)校验码
ED:(End Delimiter)结束分界符(16H)
在PPI网络中,S7—200 PLC的默认站地址是02H,而作为主站的嵌入式系统的站地址规定为00H。加上TD200后构成的多主站系统中,TD200做主站,站地址是01H。三个站之间的通信遵循令牌环网络规则,令牌在主站之间轮流传递,持有令牌的主站有总线的控制权,可以收发数据,从站不具有令牌持有权。
2.3 数据采集程序分析
数据采集线程的主要流程如图4所示。其中,测控终端与PLC的通信可以看作是主站与从站之间的两次发送请求和应答过程。
图4 通信程序流程图
以作为主站的嵌入式系统向作为从站的PLC发起一个读取数据值的通信过程为例,该数据是存储在v寄存器、起始地址为136的一个字。
首先,主站以目的地址02H、源地址00H生成一个数据请求帧,对于读取请求,方式字FC为7CH。生成的数据请求帧为(以十六进制表示): 68H 1BH 1BH 68H 2H 0H 6CH 32H 1H 0H 0H 6H 6H 0H EH 0H 0H 4H 1H 12H AH 10H 4H 0H 1H 0H 1H 84H 0H 4H 40H BAH 16H。主站发出这一请求并等待1秒钟之后读取串口,如果PLC正确响应,会发送一个确认字节E5H,主站读取到这个字节后,就在规定时间间隔内发送数据请求确认帧到串口。确认帧内容为:10H 02H 00H 5CH 5EH 16H。PLC收到这个确认帧后,就读取数据请求帧中所指定得寄存器值,并按照PPI协议规定得发送数据帧格式(图3(a))打包,将数据发送出去。嵌入式主站接收到这个含有所需请求参数值的数据帧,就根据协议的规定将数据解析出来,并存储在本地内存共享区域中,从而完成一次数据采集和存储过程。
数据采集线程的主要代码如下:
Int data_collect (struct acinfo temp)
{
delay.tv_sec=0;
delay.tv_nsec=sleep;
int ret;
unsigned char ack; //打开串口1,设置波特率9600波特
open_comport (19600) ; //向PLC发送数据读取指令帧
white_com (temp);
nanosleep (&delay, NULL); //读取PLC响应帧
ack=read_act();… //对PLC发送确认帧
poll_data();
nanosleep(&delay,NULL); //从串口读取来自PLC的数据
ret=read_com(); //恢复串口设置,关闭串口
com_reset();
com_close();
return();
}
PLC 的响应有一定延迟, 所以需要在程序中调用nanosleep(&delay,NULL)函数让线程暂停一段时间再读取串El。为了保证令牌环网络的正常运转,受令牌占有时间的限制,在波特率为9600时,PLC 与主站的一次数据通信时间不应该超过3s,根据所采集的参数规模计算得出小响应和传输时间间隔在0.1s左右。
3、结束语
本测控终端系统经过实际运行,验证了其有效性和实用性。采用嵌入式系统与西门子PLC利用PPI协议进行通信的方法,简化了原本复杂的通信功能实现过程,为对PLC的实时监控提供了一种性价比很高的实现方式。通过嵌入式系统扩展以太网1:3,为原本只有通过串口才能与外界通信的PLC提供了以太网的通信方式,提高了通信效率。基于此技术实现的嵌入式系统与PLC相结合的远程测控终端为分布式实时监控系统的实现提供了一种低价又便捷有效的方式。