品牌:A-B | 規格:全新 | 材質:原裝 |
產地:其它 |
RELIANCE DSA-MTR-600
MSComm控件是Microsoft提供的擴展控件,用於支持 VB程序對串口的訪問,該控制“隱藏”了大部分串口通訊的底層運行過程和許多煩瑣的3處理過程,同時支持查詢方法和事件驅動通訊的機制,事件驅動通訊是交互方式處理串口事務的一種非常有效的方法,特別適合 Windows程序的編寫。在串口通訊過程中,當發送數據、收到數據或產生傳輸錯誤時,觸發MSComm控件的OnComm事件,然後可以通過判斷 CommEvent屬性值獲得事件類型,再根據事件類型進行相應數據處理。因此用其實現微機串口的數據通訊相當簡單,以很少的程序代碼就可以輕松實現串口的訪問和數據通訊。
3.實時數據採集示例程序
下面給出的應用實例,通過對一臺工業八通道實時檢測儀表數據通訊協議進行分析,利用VB6.0開發微機通過串口對多通道工業儀表進行實時數據採集的編程技術。給出的程序代碼具有通用性,並有詳示,可以直接或稍加改動後用於其它數據採集或實時控制程序中。
3.1 儀表及其數據通訊協議
這臺工業用八通道實時檢測儀表,多可同時接八路位移傳感器,用於測量多點微小形變或微量位移,儀表測量精度為0.01毫米,測量範圍大值為50毫米。該儀表帶有一個9針的RS-232C串口,能與微機進行串口數據通訊,實時傳送檢測數據,通過微機軟件處理可實現工業實時監控。
該儀表的串口數據通訊協議是:數據傳輸速率為9600bps,1位開始位,8位數據位,1位停止位,無奇偶校驗位。儀表每秒通過串口發送200個字節數據,由於接入的位移傳感器數量在 1-8路可調,所以發送的每幀數據長度不定長,隨傳感器數量多少而變化。儀表數據傳輸首先發送每幀數據的開始標志字節,該字節定義為二進制常數0FAH;然後發送1個字節的通道狀態字節,該字節按位順序每位代表相應的一路通道狀態,某位是1則代表該通道接有位移傳感器,某位是0則代表該通道未接位移傳感器;從第三個字節開始按位移傳感器接通的通道順序發送採集數據字節,每道數據有三個字節,前2個數據字節採用壓縮的BCD碼編碼方式,第1個數據字節是高位,第2個數據字節是低位,即一個字節表示兩位十進制數,則兩個字節表示四位十進制數,小數點採用固定形式,定義在兩字節中間;第3個數據字節為符號字節,該字節第八位為1,即1xxxxxxx則為負數,第八位為0,即0xxxxxxx則為正數。
例如發送的字節數據為:0FAH 0B1H 26H 87H 8H 34H 62H 00H 37H 76H 0H 42H 53H 80H
0FAH為幀開始標志字節,第一道,第五道,第六道,第八道接有位移傳感器,表示 -26.87 34.62 37.76 -42.53。
3.2 部分參數的技術分析
3.2.1 儀表通訊傳輸速率為9600bps,則快速度為1.0417ms發送一個字節;儀表每秒發送200個字節,平均5.0ms發送一個字節,在查詢方式或連續讀取串口數據時要在程序中添加循環等待程序,等待接收緩衝區收到足夠的字節才能進行數據處理。
3.2.2 儀表發送每幀數據長度不定長,為了實現實時監測功能,接收數據的讀取要盡可能的快速,則在程序開始運行時設置MSComm1的屬性
RThreshold = 26 接收緩衝區收到26個字節產生OnComm事件
InputLen = 1 Input每次讀取一個字節
等到程序接收到一幀完整數據後,計算出當前幀數據長度,再將Rthreshold屬性修改為幀長度,則接收緩衝區在收到一幀數據後,MSComm控件才會觸發一個OnComm事件,這樣就會有更多的時間進行數據的計算和處理。
3.2.3 儀表每秒發送200個字節數據,微機收到一完整幀數據至少需要t(ms)時間(只接一道傳感器t=25ms;接八道傳感器t=130ms),然後再進行數據處理。如果微機在下一幀數據接收前即t ms內能將數據計算處理完畢,則接收緩衝區內只會保存有一幀數據,不會存有兩幀以上數據,接收緩衝區的大小不會影響實時監測效果(接收緩衝區>=一完整幀長度),這時完全可以實現實時監測或實時控制;如果微機在t ms內不能將數據計算處理完畢,接收緩衝區設置的又很大,在數據計算處理完畢前,接收緩衝區內就會保存有兩幀以上數據,而且一次工作時間越長,緩衝區內滯留數據幀就越多,數據採集和數據處理之間產生逐漸增大的額外時間差,當接收緩衝區充滿後,時間差不再增大,固定在某一值,部分數據因不能及時採集到接收緩衝區中,數據產生丟失現象,真實工作情況就會和微機處理結果產生較大的時間差,對實時監測和實時控制很不利,這種情況下接收緩衝區的大小就會影響實時監測效果,所以接收緩衝區設置不能過大,讓部分數據丟失,以保證數據處理的實時性。
3.2.4 設置MSComm控件的接收數據模式採用二進制方式,即 InputMode=comInputModeBinary,但用Input屬性讀取數據時,不能直接賦值給 Byte 類型變量,只能通過先賦值給一個 Variant 類型變量,返回一個二進制數據的數組,再轉換保存到Byte類型數變量中。
3.2.5 VB中有 Byte類型變量,但沒有字節的位處理語句。通道狀態字節的位處理要通過對該字節的值運算進行判斷,符號字節的位處理則要判斷符號字節的值是否大於127,大於127則為負數;壓縮的BCD碼存入Byte類型變量,VB係統只按十進制數處理,這要通過一個簡單算法換算,解壓BCD碼才能還原成十進制表示數值。假如a是Byte類型變量,W是Single類型變量,將一個壓縮的BCD碼存入 a中,則算法是:
W=(a\16)*10 + a-(a\16)*16
則W=a-(a\16)*6
NEW KOLLMORGEN SERVOSTAR SERVO STAR CD DRIVE CEO3560
KOLLMORGEN SEIDEL 6SM37M-6.000-G MOTOR
Kollmorgen ServoStar Drive SE06200-Y066 SE06200Y066
Kollmorgen B-204-A-22 GOLDLINE BRUSHLESS SERVO MOTOR
Inland-Kollmorgen Servo Motor TT-2950-1210-C Used
KOLLMORGEN IND BDS4A-106J-0001-204B2 USPP BDS4A106J0001
KOLLMORGEN SEIDEL 56WK-P240/80-B USPP 56WKP24080B
KOLLMORGEN IND HPAR-15840-601-4501B14 USPP HPAR15840601
KOLLMORGEN IND B-206-A-31 USPP B206A31
KOLLMORGEN IND ME9-205-B-A4-206 NSFP ME9205BA4206
KOLLMORGEN EB-404-D-91-B3-001 BRUSHLESS MOTOR NEW
KOLLMORGEN IND BCL-02820-A00 USPP BCL02820A00
KOLLMORGEN IND TPAR 3340-34 USPP TPAR334034
KOLLMORGEN IND MT1506B1-R1D2 USPP MT1506B1R1D2
KOLLMORGEN IND M-405-A-B1 USPP M405AB1
KOLLMORGEN IND BCL-02806-A01 NSPP BCL02806A01
KOLLMORGEN IND PSR4/5A-112 USPP PSR45A112
KOLLMORGEN IND PA0800 NSFP PA0800
Kollmorgen Industrial Drives BDS4-203H-9105-204A7
Kollmorgen MT302A1-M2C1
Kollmorgen MT502A1-F1B1 SERVO MOTOR GOLDLINE XT
KOLLMORGEN IND SR03000-2G102A USPP SR030002G102A
KOLLMORGEN IND SR03000-000000 USPP SR03000000000
KOLLMORGEN SEIDEL 6SM-27M-4.000-G USPP 6SM27M4000G