远程测控模块中有限状态机的设计*
2018-01-15,
,
(成都职业技术学院 软件分院,成都 610041)
引 言
远程测控系统使人们可以通过计算机网络随时随地查看和控制现场设备的运行状态,也可以通过无线数据交换的形式把数据信息传输到其它工业测控仪器中。在整个控制系统中,上位机(也就是远程决策系统)通过指令与数据传输控制远端测控装置通信,测控模块的响应机制以及其控制系统工作状态的稳定性、安全性尤为重要,其控制过程可以基于软件或硬件实现,软件实现最大的缺点是可靠性不够高、响应速度较慢[1],因此对实时性可靠性要求较高的系统更多的是采用专用芯片、高速芯片或者可编程逻辑器CPLD/FPGA来设计实施和验证,并配合易于建立的、以描述控制特性为主的、应用比较广泛的有限状态机(Finite_State_Machine,FSM)的建模方法来实施。
有限状态机基于数字集成电路系统,大部分是时序电路, 时序电路可以用符号化的有限状态机来模拟[2],不难发现远程测控系统的各种控制状态变化和转移也可以描述系统的行为,而这些状态的变化和转移则形成了状态机[3]。因此,采用基于状态机的方法来定义和实现远程测控是一种稳定、可靠、简洁的实现方案。本文通过基于FPGA的远程测控模块,采用有限状态机为测控模型,利用Verilog HDL描述,实现了有限状态机在远程测控模块及系统稳定可靠地运行。
1 基于FPGA的远程测控系统的设计
FPGA结合了微电子技术、电路技术、EDA技术,使设计者可以集中精力进行所需逻辑功能的设计,缩短设计周期,提高了设计质量。FPGA己经在计算机硬件、工业控制、遥感遥测、雷达声纳、数据处理、智能仪器仪表、广播电视、医疗电子和现代通信等多种领域中得到广泛应用。FPGA开发技术己经成为数字系统的科研试验、样机调试和中小批量生产和验证的首选方案[4]。
对于工作点多、通信距离远、环境恶劣且实时性和可靠性要求比较高的场合,可以利用无线电波来实现主控站与各个子站之间的数据通信,采用这种远程测控方式有利于实现复杂连线,无需铺设电缆或光缆,降低了环境成本[5]。本项目设计中,通信距离为3 000 m,采集点较多,采用的无线模块可以有256个节点,现场FPGA模块设计有模拟和数字输入接口,可以接收大部分经过处理的现场传感数据,根据远程控制中心的要求实现现场情况的感知以及控制,模块的输出设计有数字驱动电路,可以直接控制继电器、电机等现场设备;远程计算机通过无线数字传输建立与现场模块的通信,采集的现场数据经过基于人工智能的决策系统发给远端模块执行控制功能。系统框图如图1所示。
图1 系统框图
图2 无线测控模块中的数据流关系
2 有限状态机模型的建立
2.1 无线测控模块的数据流设计模型
本文选择Verilog HDL来对该逻辑设计的硬件电路进行描述,主要包含以下电路模块:开关量的采样、异步通信接口、I2C总线接口、自主定义的模块与决策端通信状态机、串行ADC的时序接口、硬件电路信号输出,以及相关的数据和地址控制电路。实验阶段的芯片选用XILINX SPARTAN3S 250E,其基于SRAM工艺,优点是使用标准的CMOS工艺,不需要任何复杂工序[6]。最后通过ISE开发平台将整个控制电路集成到一个FPGA芯片中,减少了外界对系统的干扰,便于以后系统升级,对现场电路连接方式的控制较灵活。整个模块核心的时序电路可以用符号化的有限状态机来模拟,把一个时序逻辑抽象成一个同步有限状态机是设计Verilog HDL模块的关键[2]。状态机在本项目基于FPGA的无线测控模块设计中的数据流关系如图2所示。
2.2 无线测控模块的协议与指令
无线测控模块在测控系统的地位处于从机或执行现场的地位,模块的所有功能和动作围绕主机及决策系统的要求来完成。通常情况是在周期性的间歇状态中,接收主机的查询、采集转换现场数据、存储现场数据以及向主机回传;接收主机发送的决策控制数据,更新执行的输出状态以及保存当前控制状态,在其他的时间现场模块处于空闲状态。本项目中基于FPGA的远程测控模块的主要协议与指令如表1所列。
表1 FPGA 远程测控模块的主要协议与指令
2.3 基于Verilog HDL的有限状态机建模
在本系统中,基于FPGA的远端执行模块以及上位决策主机属于从主关系,主从状态机使用层次状态机的设计方法来设计决策系统,包含一个主状态机和多个从状态机。主状态机起到仲裁控制作用,决定当前有哪些从状态机可以运行[7]。可以通过设计不同的主状态机的状态转移关系达到不同的控制策略,如分时复用或基于优先级启动不同的从状态机等,在本系统主机中除控制可以并行执行外,其它信息的采集均可采用限时轮流询问的方式,主机的状态和行为描述在此不再赘述。
作为远端模块的从机,其状态变化来自于第2.2节所描述的协议指令,由于采用可编程逻辑器件这种灵活的硬件设计,因此用基于Verilog HDL的有限状态机建模,应该主要考虑以下几点[2]:编码方案、FSM的综合实现、状态机所有状态的完备以及边沿触发器的设计,满足速度和面积的设计要求。通过以上协议和指令分析可以基本确定在整个控制过程当中模块的工作状态,可以用图形化的方式描述状态机各个状态之间的转换关系,即该设计的状态转移图如图3所示(以远程查询指令为例)。
图3 状态转移图
3 Verilog程序的编写
根据状态转移图编写有限状态机程序,由于Verilog具有并行执行的特点[8],一个指令的判断模块输出指令下跳沿给状态机,即一个指令只执行一次。下面的程序以主机发送查询指令FF为例。
//------------判断FF指令下跳沿---------------
reg[2:0] com_ff_neg;
wire neg_ff_com; //采样判断FF指令下跳沿后的输出
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
com_ff_neg <= 3'b111;
else //com_ff来自于无线模块接收数据
com_ff_neg <={com_ff_neg[1:0],com_ff};
end
assign neg_ff_com = ~com_ff_neg[1] & com_ff_neg[2];
//-------------远程控制命令FF状态机-------------
//采样本地控制模块的转换数据,来自于4种传感器
//写入本地I2C存储区后(作为断电或开机后的本地采样数据)
//通过无线模块将该原始数据发送给主机
parameter/*WAIT_FF*/ S0 = 3'b000;
parameter/*SAMPLE0*/ S1 = 3'b001;
parameter/*SAMPLE1*/ S2 = 3'b010;
parameter/*SAMPLE2*/ S3 = 3'b011;
parameter/*TX_LOCAL*/ S4 = 3'b101;
parameter/*TX_END*/ S5= 3'b100;
reg[2:0] state_ff; //主机查询指令状态机-状态
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n) //复位状态
begin
write_data_loc <=8'b00000000; byte_addr_loc <=3'b000;
state_ff <= S0;
inquiry <= 1'b1;
tx_bytes <= 4'b0; //uart 发送数据字节控制
end
else
case(state_ff)
S0: begin
inquiry <=1;
if(neg_ff_com) //inquiry 低电平启动采样
begin
state_ff <= SAMPLE0;
inquiry <=0; //1次写入本地采样到I2C
write_data_loc <= local_data[3];
byte_addr_loc <= 3'b011; //LOCAL_ADDR0 +3;
end
else state_ff <=S0;
end
S1: if(cstate == STOP2) // 写入数据完成
begin
state_ff <= S2;
inquiry <=0; //
write_data_loc <= local_data[4];
byte_addr_loc <= 3'b100; //LOCAL_ADDR0 + 4 ;
end
else state_ff <= S1;
S2: if(cnt_20ms==20'hffff0) //写入数据完成
begin
state_ff <= S3;
inquiry <=0; //
write_data_loc <= local_data[5];
byte_addr_loc <= 3'b101; //LOCAL_ADDR0 + 5 ;
end
else state_ff <= S2;
S3: if(cnt_20ms==20'hffff0) //写入数据完成
begin
state_ff <= S4;
inquiry <=0; //
write_data_loc <= local_data[6];
byte_addr_loc <= 3'b110; //LOCAL_ADDR0 + 6 ;
end
else state_ff <= S3;
S4: if(cstate == STOP2)
begin tx_bytes <=BYTE_LENGTH; //发送长度载入
state_ff <=S5;
end
else state_ff <= S4;
S5 : begin
if (tx_num == 4'd11) tx_bytes <= tx_bytes - 1'b1;
if(tx_bytes == 0) state_ff <= S0;
end
default : state_ff <= S0;
endcase
end
4 实验结果
主从机的通信和控制模式核心为远程模块根据现场数据接收远端主机的决策控制信号。在本项目中采用的主机为台式计算机,从机或远端的执行机构采用本项目设计的基于FPGA的远程测控模块。实验对象为水产养殖环境的信息测量——温度、溶氧量,主要执行对象是对现
场水环境进行调节控制,控制对象为充氧机和进出水泵,由于模块本身的输出电压基本为3.3 V,因此需要在输出端加驱动及保护控制继电器。
增氧泵是系统的主要控制对象之一,它是否正常工作直接决定了能否为鱼塘充氧。增氧能力和动力效率是衡量增氧泵性能的重要指标,增氧能力是指每小时溶解到水中的氧气的重量,动力效率是指在一定的条件下(如温度)单位千瓦输出功率的增氧能力。为了达到良好的增氧效果,系统选用叶轮式增氧泵[9]。在模块的电路中设有两片高耐压、大电流复合晶体管IC——ULN2003,可以输出14路驱动控制信号,其输入端与FPGA-I/O口直接相连。
系统初始化后,主机通过采样指令开始接收传感器检测到的各项数据,依次获取溶氧量、温度等参数,将获取值与设定值比较,根据专家决策做出相应的动作从而实现自动控制。温度传感器采用 AD590,AD590为电流型温度传感器,它有非常好的线性输出性能。当环境温度为0 ℃时,其输出电流为273 μA ,流过AD590的电流与绝对温度成正比,温度每增加1 ℃其输出电流增加1 μA,即电流与温度的关系是:I=(273+T) μA[10]。本项目现场模块不对传感器数值做任何判定和描述,直接根据时序传递给后端主机,由主机根据数据库或专家决策系统做出相应的显示和控制。
应用测试中,将本地模块放于浮标桶内,采用干电池供电,在距离1000 m左右的室内对采集数据进行比较分析,时间跨度从早上9点到下午5点,间隔采样时间为1小时,可以看出,该模块对水养殖环境信息的检测与标准参考值的相对误差基本满足使用需求。测试结果如表2所列。
表2 无线测控模块对水产养殖信息的测试 测试时间:2017.08.04
结 语
[1] 唐健隆,梁自泽,蔡丽,等.基于状态机的巡线机器人控制系统设计[J].机器人技术,2008,24(1-2):247-249.
[2] 陈勇.有限状态机的建模与优化设计[J].重庆工学院学报:自然科学版,2007,21(5):55-58.
[3] 熊振云,阮俊波,金惠华.嵌入式软件中状态机的抽象与实现[J].计算机应用,2003,23(10):84-86.
[4] 孔利东.基于FPGA的数据采集与处理技术的研究[D].武汉:武汉理工大学,2007.
[5] 孙先逵,秦岚.远程测控技术的发展现状和趋势[J].仪器仪表学报,2004(8):562-564.
[6] Clive Max Maxfield.The Design Warrior’s Guide to FPGAs Devices,Tools and Flows[M].杜生海,等译.北京:人民邮电出版社,2007:221-225.
[7] 丰平,马晓川,陈模江.主从并行状态机用于复杂FPGA控制系统设计[J].微计算机应用,2009,30(6):1-5.
[8] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2003.
[9] 刘海陆.基于 GSM 的鱼塘增氧泵的远程控制研究[D].舟山:浙江海洋学院,2014.
[10] 刘冬香.基于CPLD/FPGA的温度测控系统的设计[J].机电工程技术,2009,38(12):20-21.
林永宏(高级工程师),主要研究方向为应用电子、嵌入式系统设计;邱绍峰(副教授),主要研究方向为图像处理、电子技术应用。