您当前的位置:
首页 <
新闻中心 < 流量计检测设备中的主要流量控制方面的核心问题及解决方法.
流量计检测设备中的主要流量控制方面的核心问题及解决方法.
发布时间:2017-2-28 8:41:16
流量计检测设备中的主要流量控制方面的核心问题及解决方法.
流量计生产厂家在生产仪表和校验仪表的时候就需要对这些仪表的参数进行检定,确定仪表的性质并提供给使用者相应的参数以便于使用.确定仪表参数有很多种方法,在实流检定方法中检测装置必须提供相应仪表流量范围内的几个检测点的流量.下面就阐述一下检测装置的几个检测点流量变化的实现.
1 系统设计与实现
在本系统中硬件连接是从计算机的RS-232接口通过RS-232/485转换器连接到变频器.系统采用的是ABB公司的ACS400变频器,在VC++编制通讯软件的时候通讯协议严格按照ACS400变频器的通讯协议进行编写.系统硬件连接图如下:
2 工程要求及实现方法
工程中提供信号采集器、标准表、相应口径管道、变频器和风机等设备.为了实现对整个标定过程的全自动的控制, 我们利用VC++通信控件MSComm编制上位机软件对变频器进行控制,变频器再对风机进行频率控制,从而控制风机的输出功率达到气体流量的变化.
实现流量自动控制的思路有两种,一是给出流量的控制信号,经过变频器动作之后,再由实际的流量传感器获得流量值传给主控计算机,由主控计算机进行比较运算得出进一步的调整信号再发给变频器,变频器动作后流量进一步接近设定值;这样特定算法反复几次后便达到设定值(如图1).二是通过实际试验得出的准确经验值,设定到计算机里面,通过经验值进行控制也会达到预期目的.在这里采用第二种方法,由于通过经验值的方法,控制方式简单,实现速度快,完全满足工程要求的控制精度.
2.1 串口设置
定义串口控件的对象为m_com.
设置变频器通信格式:
通信设置:2400,n,8,2
波特率:2400;无奇偶校验位; 8个数据位,2个停止位
帧的包装格式:起始位1+数据位8+停止位2=11位
串口初始化为:
if(m_com.GetPortOpen())//如果串口打开则关闭
m_com.SetPortOpen(FALSE);
m_com.SetCommPort(1);//选择COM1
m_com.SetInBufferSize(1024);
//设置输人缓冲区的大小1024Bytes
m_com.SetOutBufferSize(1024);
//设置输人缓冲区的大小1024Bytes
m_com.SetRThreshold(1);
//表示有一个字符引发一个事件
m_com.SetInputMode(1);
//表示为二进制输入
m_com.SetSettings("2400,n,8,2");
if(!m_com.GetPortOpen())
//打开串口
m_com.SetPortOpen(TRUE);
m_ReceiveData="";
//接收通信数据的缓冲变量清零
2.2 MSComm控件[1]
VC++编写串口通讯的方法很多,其中利用MSComm(Microsoft Communications Contro1)控件编程非常简单方便,它是微软公司开发的专用通信控件,封装了串口的所有功能,我们只用其中主要的通信功能就能完成工程需要.
2.3 发送数据
在发送命令的时候严格按照变频器的协议进行编制;由于通常发送命令都是按照字符串的形式发送但是该控件的发送是VARIANT类型,所以应用关键是解决VARIANT与字符串之间的转换问题,包括我们在串口响应得到的数据的关键也是如此,详见2.4节.下面的函数会说明字符串到VARIANT的转换过程.
变频器通讯数据包格式为:
开始 地址域 功能域 数据域 CRC校验 结束
8位 8位 n*8位 16位
×× ×× ××……×× ××××
功能域:0x03读操作,Ox06写操作,响应返回如果正常则值相同否则返回0x83且在数据域说明原因.
数据域:具体操作值.
CRC校验:CRC域位于信息的最后,低字节在前,高字节居后.在传送信息的时候最后发送低字节.开始:忽略.
结束:忽略.
地址域:0~247,0是广播式的传播,正常传递的时候返回值也会在地址域写上自己的站号.
把需要发送的命令以字符串的形式赋给m_SendData程序如下:
CByteArrav hexdata;//十六进制的数据
b_String2Hex(m_SendData,hexdata);
//把字符串转化成十六进制并添加上CRC校验位
m_com.SetOutput(COleVariant(hexdata));
//发送数据
int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();
BYTE a[200];
BYTE A,B;
WORD C,D;
A=0xFF;
B=0xFF;
CString yang;
CString shan;
senddata.SetSize(1en/2+8);//功能:把字符串转化成十六进制并添加上CRC校验位
int CQBView:: b_String2Hex(CString str,
CByteArray &senddata)
{
for(int i=0;i=len)
break;
lstr=str[i];
if((hexdata==16)||(1owhexdata==16))
break;
else
hexdata=hexdata*16+lowhexdata;
i++;
a[hexdatalen]=hexdata;
hexdatalen++:
}
//CRC_16校验的算法
for(i=0;i