PCI总线技术在仪表检测控制系统中的应用
扫描二维码
随时随地手机看文章
引言
小型仪器仪表监控系统一般由控制器、数据采集模块、串口通讯模块以及工控机组成。但是,这种结构会存在设计结构复杂,系统灵活性较低的缺点。为了克服这些缺点,本文利用PCI总线技术,并结合研华公司所研制的两种PCI控制卡完成了这种小型系统的设计。其中PCI总线是先进的高性能局部总线,可同时支持多组外围设备,而不受制于处理器,为中央处理器及高速外围设备提供一座桥梁,更可作为显现之间的交通指挥员,提高数据吞吐量。PCI采用高度综合化的局部总线结构,可确保电脑部件、附加卡及系统之间的可靠运作,并能完全兼容现有的ISA/EISA/MicroChannel扩充总线。PCI总线与其他主流总线相比,具有速度更快、实时性更好和可控性更佳的优点,适用于高速实时的I/O控制卡。但由于PCI总线协议比较复杂,因此,其接口电路实现起来并不容易,而采用通用PCI接口芯片就能很好地解决这一问题虬
1控制系统设计方案
本设计采用PCI总线来构建硬件平台,通过PCI总线由PC机来控制系统的电磁阀,通过PCI1601通讯板卡将外置仪器仪表采集的设备温度、压力及流量等信息传送给PC机并进行相关数据处理。具体设计原理框图如图1所示。
图1 控制系统方案图
PCI1750
PCI1750是一款功能强大的PCI总线半长卡,能提供16路隔离数字量输入通道、16路隔离数字量输出通道以及一个带输入信号的隔离计数器/定时器。由于带有2500VDC隔离保护及支持干接点,PCI1750非常适合需要高电压保护的工业应用场所。PCI1750与PC机可以构成主从式控制结构,其中PC机负责人机交互界面的管理和控制系统的实时监控等方面的工作[2],PCI1750则完成对开关电磁阀或是逻辑控制类执行器的控制,依靠输出的数字脉冲信号来驱动相应回路的继电器,从而实现PC机通过PCI1750对开关电磁阀的逻辑控制。除了对开关电磁阀的简单逻辑控制外,用户可根据控制系统的要求调用PCI1750运动函数库中的指令函数,从而开发出满足要求而且成本低廉的逻辑控制系统。
本文利用PCI1750板卡实现了对开关电磁阀的控制,这种控制方法具有控制简单、点位利用率高等优点。
PCI1601
计算机通过PCI1601总线通讯接口卡与仪器仪表设备的传感器进行连接,进而控制电磁阀。PCI1601总线通讯接口卡可以支持RS-422、RS-485两种串行通讯接口标准,并采用Modbus规约RTU模式,可以方便地与多种组态软件相连接,其通讯驱动与ModiconModbus_RTU格式完全兼容。PCI1601板卡增加了“自动数据流控制”硬件,故可自动识别数据是“发送”还是“接收”,它不再支持“RTS握手信号”,这样就使RS-485通讯软件的开发与RS-232完全相同。板卡通过DIP拨码开关设置相应模式。RS-485的通信距离最远可达1200m,通信距离为15m时,波特率可达10Mb/s。在工业现场中,RS-485作为一种双线差分半双工的通信方法而广泛采用,具有很高的抗共模干扰能力,并可很好地适应现场的恶劣环境叫在数据传输过程中,其字节格式如图2所示。
图2 字节传输序列图
图2中,D0是字节的最低有效位,D7是字节的最高有效位。传输时,先传低位,后传高位。通讯时,数据以字(WORD一2字节)的形式回送,回送的每个字中,高字节在前,低字节在后。如果2个字连续回送(如浮点或长整形),则高字在前,低字在后。上位机发送的数据格式和仪表回送的数据包格式分别如表1和表2所歹n
2控制系统软件设计
本系统采用VB6.0作为上位机软件开发平台,其程序流程图如图3所示。编写上位机程序时,可利用ModBus规约来完成串口通讯部分的软件设计。
该通讯模块中的仪表地址可以在1〜247之间选择。仪器出厂时,一般的默认地址为1,而在实际使用中,则可以根据现场情况设定不同的通讯地址。
PCI1750与计算机的连接
通过下列函数可实现PCI-1750与PC机的连接,以使PC机能实现对输入输出的控制,并通过AdvDIOLWriteDoPorts(DOBuffer0,0,1)实现对DO的控制。其代码如下:
PrivateSubBtnSelectDevice_Click()
TimerLEnabled=False
AdvDIO1.SelectDevice
If(AdvDIO1.DeviceNumber>=0)ThentxtDeviceName.Text=AdvDIO1.DeviceNameEnableCommandControlsTrue
SetProperties
EnableButtonFrameOptDO.Value
Else
EnableCommandControlsFalse
EndIf
EndSub
2.2串口通讯的实现
实现串口通讯时,可在程序中插入MSComm控件,并配置串行端口参数;每当一组数据接收完毕后便激活1个OnComm()事件,在OnComm。消息处理函数中加入相应的数据处理算法,并做出相应的处理,如显示、控制等。其具体程序如下:
PrivateSubForm_Load()
Command1.Caption="打开串口"
MSComm2.Settings="9600,N,8,2"
MSComm2.InBufferSize=40
MSComm2.OutBufferSize=2
MSComm2.InputMode=comInputModeBinary
MSComm2.InBufferCount=0
MSComm2.OutBufferCount=0
MSComm2.RThreshold=1
EndSub
通过上列函数即可实现串口通讯的建立。通过下面的函数则可实现与现场实际仪表的通讯:
Dimdatal()AsByte'串口发送字节
ReDimdatal(7)
IfComm1=1Then
datal(0)=&H1
datal(1)=&H3
datal(2)=&HB
datal(3)=&HBA
datal(4)=&H0
datal(5)=&H10
datal(6)=&H67
datal(7)=&HC7
Comm1=2
GoTo1
EndIf
由于一个串口通常可以挂接好几个仪表,因此,程序中使用了GoTo函数。不同仪表可以编写不同的通讯命令,以便采集各仪表的数据。
2.3仪表采集数据的处理
由于上位机数据显示格式为十进制,而仪表传送到上位机的数据一般均为浮点数,因此,必须经过相应的计算将其转换为十进制数才能进行显示。图4所示是一种由双精度浮点数格式转换为十进制格式的方法,其转换公式为:
图4双精度浮点数格式的转换
其中,第63bit为符号位,该位为0表示正数,反之为负数,其读数值用S表示;第62~52bit共11幂数(2的幂数),其读数值可用E表示;第51~0bit共52位为系数,视为二进制纯小数,假定该小数的十进制值为尸;那么,转换后的十进制浮点数据则以FData表示。整个转换算法的具体代码如下:
IfLenB(StrConv(HDatal,vbFromUnicode))=74Then
IfComm1=1Then
Text1.Text=HDatal
sngTemp=0
lngTemp=CLng("&H"&Mid(HDatal,7,8))
CopyMemorysngTemp,lngTemp,4
Text2=Round((""&CStr(sngTemp))*3600,6)dblTemp=0
strHex=Mid(HDatal,63,8)&Mid(HDatal,55,8)
lngArray(1)=CLng("&H"&Right(strHex,8))
lngArray(0)=CLng("&H"&Left(strHex,Len(strHex)-8))CopyMemorydblTemp,lngArray(0),8
Text3=(CStr(dblTemp)*1000)
EndIf
EndIf
2.4人机界面总体效果
本系统的人机界面总体效果图如图5所示。从图5中可以看出,此界面能监视所有连接到上位机的仪表数据,并通过设定值与实际值的比较来实现阀1和阀2的自动控制。
图5 人机界面图
3结论
本文介绍了一种基于PCI总线技术的小型仪器仪表监控系统,该系统以PCI1601通讯接口卡作为通讯模块的核心设备。目前,该系统已经正式运行,应用效果良好,并具有可靠性好、集成度高、灵活性高等优点,可以大大缩短系统研制和开发周期,满足用户对小型仪器仪表监控系统的不同控制要求。
20210916_61435bf3f0bd9__PCI总线技术在仪表检测控制系统中的应用