手机版av在线_96精品国产aⅴ在线观看_中文字幕35页_国产亚洲成AV人片在线观黄桃_全黄性色大片_免费视频h

行業產品

  • 行業產品

昆山科爾源儀器儀表有限公司


當前位置:昆山科爾源儀器儀表有限公司>技術文章>流量計檢定裝置中流量變化的自動控制

經營模式:經銷商

商鋪產品:48條

所在地區:

聯系人:龔靜潔 (經理)

技術文章

流量計檢定裝置中流量變化的自動控制

閱讀:4發布時間:2025-7-2

/div>

    流量計生產廠家在生產儀表和校驗儀表的時候就需要對這些儀表的參數進行檢定,確定儀表的性質并提供給使用者相應的參數以便于使用。確定儀表參數有很多種方法,在實流檢定方法中檢測裝置必須提供相應儀表流量范圍內的幾個檢測點的流量。下面就闡述一下檢測裝置的幾個檢測點流量變化的實現。

    1 工程要求及實現方法

    工程中提供信號采集器、標準表、相應口徑管道、變頻器和風機等設備。為了實現對整個標定過程的全自動的控制, 我們利用VC++通信控件MSComm編制上位機軟件對變頻器進行控制,變頻器再對風機進行頻率控制,從而控制風機的輸出功率達到氣體流量的變化。

    2 系統設計與實現

    在本系統中硬件連接是從計算機的RS-232接口通過RS-232/485轉換器連接到變頻器。系統采用的是ABB公司的ACS400變頻器,在VC++編制通訊軟件的時候通訊協議嚴格按照ACS400變頻器的通訊協議進行編寫。系統硬件連接圖如下:

    實現流量自動控制的思路有兩種,一是給出流量的控制信號,經過變頻器動作之后,再由實際的流量傳感器獲得流量值傳給主控計算機,由主控計算機進行比較運算得出進一步的調整信號再發給變頻器,變頻器動作后流量進一步接近設定值;這樣特定算法反復幾次后便達到設定值(如圖1)。二是通過實際試驗得出的準確經驗值,設定到計算機里面,通過經驗值進行控制也會達到預期目的。在這里采用第二種方法,由于通過經驗值的方法,控制方式簡單,實現速度快,滿足工程要求的控制精度。

    2.1 MSComm控件[1]

    VC++編寫串口通訊的方法很多,其中利用MSComm(Microsoft Communications Contro1)控件編程非常簡單方便,它是微軟公司開發的專用通信控件,封裝了串口的所有功能,我們只用其中主要的通信功能就能完成工程需要。

    2.2 串口設置

    定義串口控件的對象為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.3 發送數據

    在發送命令的時候嚴格按照變頻器的協議進行編制;由于通常發送命令都是按照字符串的形式發送但是該控件的發送是VARIANT類型,所以應用關鍵是解決VARIANT與字符串之間的轉換問題,包括我們在串口響應得到的數據的關鍵也是如此,詳見2.4節。下面的函數會說明字符串到VARIANT的轉換過程。

    變頻器通訊數據包格式為:

開始地址域功能域數據域CRC校驗結束
 8位8位n*8位16位 
 ××××××……××××××  

    開始:忽略。
    結束:忽略。
    地址域:0~247,0是廣播式的傳播,正常傳遞的時候返回值也會在地址域寫上自己的站號。
    功能域:0x03讀操作,Ox06寫操作,響應返回如果正常則值相同否則返回0x83且在數據域說明原因。
    數據域:具體操作值。
    CRC校驗:CRC域位于信息的最后,低字節在前,高字節居后。在傳送信息的時候最后發送低字節。

    把需要發送的命令以字符串的形式賦給m_SendData程序如下:

    CByteArrav hexdata;//十六進制的數據
    b_String2Hex(m_SendData,hexdata);
    //把字符串轉化成十六進制并添加上CRC校驗位
    m_com.SetOutput(COleVariant(hexdata));
    //發送數據
    //功能:把字符串轉化成十六進制并添加上CRC校驗位
    int CQBView:: b_String2Hex(CString str,
    CByteArray &senddata)
    {
        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);
    for(int i=0;i    {
        char lstr,hstr=str[i];
        if(hstr=='')
    {
        i++;continue;
    }
    i++;
    if(i>=len)
        break;
        lstr=str[i];
        hexdata=ConvertHexChar(hstr);
        //該函數是把字符轉成十六進制
        lowhexdata=ConvertHexChar(1str);
    if((hexdata==16)||(1owhexdata==16))
    break;
    else
        hexdata=hexdata*16+lowhexdata;
        i++;
        a[hexdatalen]=hexdata;
        hexdatalen++:
    }
    //CRC_16校驗的算法
    for(i=0;i    {
        B=B^a[i];
        C=A*256+B;
        for(int j=0;j<8;j++)
    }
        D=C&Ox0001;
        C=C≥1;
        if(D)C=C^0xA001;
    }
        A=C/256:
        B=C%256;
    }
    a[i]=B;
    a[i+1]=A;
    hexdatalen=hexdatalen+2;
    for(i=0;i    {
        senddata[i]=(char)a[i];/* */
        shan.Format("%.2x",a[i]);
        yang+=shan;
    }
        yang.MakeUpper();
        senddata.SetSize(hexdatalen);
        return hexdatalen;
    }

    2.4 接收數據處理

    接收數據要用到串口響應的函數OnOnCommMscomm1(),該函數時刻響應串口的動作,真正從緩沖區中得到正確數據,有兩個難點:一是解決VARIANT轉換為字符串類型,二是解決過濾掉不正確的信息。個問題的解決方式比較固定,如下例程,過程是VARIANT轉換為ColeSafeArray型變量再轉換為BYTE型數組再到CString型變量;而第二個問題的解決方式比較麻煩,因為每個字符都會引起OnOnCommMscomm1()的響應,所以一串完整的信息,往往要執行很多次OnOnCommMscomml()事件,如果在該函數中進行處理數據,那么不固定很難操控并且處理完的數據緩沖變量必須清空。所以為了解決這一問題筆者設了一個定時器,當信息串的個字符引起響應的時候設置定時器并用一個標志封住防止重復設置定時器,這樣設置一個很短的一個時間后在數據緩沖變量中累計的就是一個完整的信息串。為了驗證該信息串的正確性可以驗證該CRC校驗位,但是在這里為了方便理解,在定時函數中判斷該長度就夠了,判斷正確后再按照通信協議進行提取并處理信息。同時在定時器的函數里銷毀定時器并且解除對設置定時器的封存,為接收下一信息串作準備。

    例程如下:

    void CQBView:: OnOnCommMscomml()//串口響應函數
    {
        // TODO: Add your control notification handler code here
        //功能:把接收來的數據轉換成字符串的形式
        VARIANT m_input1; ColeSafeArray m_input2;LONG length, i;
        BYTE data [1024];CString str;
        if(m_com.GetCommEvent()== 2)
        //響應事件為2
        {
        m_input1=m_com.GetInput();
        //讀取緩沖區內的數據
        m_input2=m_input1;
        //將VARIANT型變量轉換為ColeSafeArrav型變量
        length=m_input2.GetOneDimSize();
        //確定數據長度
        for(i=0;i        //將數據轉換為BYTE型數組
        m_input2.GetElement(&i,data+i);
        for(i=0;i        //將數組轉換為CString型變量
        {
            char a=* (char*)(data+i);
            str.Format("%02x",a);
            str=str.Right(2);//取最后三位
            m_ReceiveData+=str;
        }
        m_ReceiveData.MakeUpper();//變大寫
    {
        if(b_yangweishan)
    {
            SetTimer(1,100,NULL);//延時讀取
            b_yangweishan=FALSE;
            //保證一串信息響應一次
        }
    }
    void CQBView::OnTimer(UINT nlDEvent)
        //定時函數
    {
        // TODO: Add your message handler code here and/or call default
        KillTimer(1);//銷毀定時器
        b_yangweishan=TRUE;//解除
        if(m_ReceiveData.GetLength()==12)
        //簡單驗證
        {
    //工作區開始
            Operationl(m_ReceiveData);
            //提取數據
            Operation2();//計算操作1
            Operation3();//計算操作2
            Show();//數據顯示
    //工作區結束
            m_ReceiveData.Empty();//數據緩沖
    變量清空
    }
    else//不正確的信息
        {
            m_ReceiveData.Empty();
        }
    }

    3 應用總結

    根據不同的通信形式和通信協議通過串口進行數據通信,形式大都很類似,上面與變頻器的通信的方法可以衍生到PC機與單片機、PLC、Modem等智能設備的通信。對于MSComm控件的屬性還很多,在這里只提到幾項主要的設置,對串口的操作MSComm可以勝任,而且屏蔽掉了底層函數的編寫為程序員省了很多時間,且該控件并不局限于CFormView和CDialog類里面應用,它可以在一般的框架里面應用,只是把綁定方式復雜些。筆者利用MSComm控件開發的全自動式標準表法氣體流量標定系統運行穩定可靠,并且整體的性價比比較好,在標定過程當中相對時間短、運行成本低,對生產效率和效益起到很大的積極作用。

    參考文獻

    [1]李現勇.Visual C++串口通信技術與工程實踐[M .北京:人民郵電出版社,2002


儀表網 設計制作,未經允許翻錄必究 .? ? ? Copyright(C)?2021 http://m.gd5688.cn,All rights reserved.

以上信息由企業自行提供,信息內容的真實性、準確性和合法性由相關企業負責,儀表網對此不承擔任何保證責任。 溫馨提示:為規避購買風險,建議您在購買產品前務必確認供應商資質及產品質量。

會員登錄

×

請輸入賬號

請輸入密碼

=

請輸驗證碼

收藏該商鋪

登錄 后再收藏

提示

您的留言已提交成功!我們將在第一時間回復您~
主站蜘蛛池模板: 黄色一级在线视频 | a级一级毛片| 国产偷窥熟妇高潮呻吟 | 久久一线 | 色妞AV永久一区二区国产AV | 国产亚洲精品AA片在线不卡 | 二区三区偷拍浴室洗澡视频 | 国产真实乱子伦视频播放 | 欧美性猛交久久久乱大交小说 | 欧美日韩在线播放 | 天码AV无码一区二区三区四区 | 亚洲视频区 | 亚洲精品国产精品乱码不99热 | 欧美精品二区中文乱码字幕高清 | 欧美一区自拍 | 欧美性猛交xxxx乱大交免费看 | 99R在线精品视频在线播放 | aaa免费视频 | 精品一区二区三区日本 | 免费看国产一级特黄aaaa大片 | 日韩精品一区二区三区蜜臀 | wwwwwww黄 | 丰满放荡岳乱妇31www | 亚洲综合色婷婷六月丁香宅男大增 | 777欧美奇米网 | 亚洲成人生活片 | 久久亚洲中文字幕伊人久久大 | 99热操| 国产CHINESEHDXXXX| 国产AV永久无码精品网站 | 国产精品人妻无码一区二区三区 | 91视频免费在观看 | 女人18毛片a级毛片免费视频 | 黄色日本大片 | 最新日韩在线观看视频 | 國產精品倫一區二區三級視頻 | 精品日本一区二区三区免费 | 97国产情侣爱久久免费观看 | 久久久久久久人妻无码中文字幕爆 | 亚洲高清视频一区二区 | 欧美片网站免费 |