資源描述:
《HART協(xié)議通用命令用法實例(C#)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在應用文檔-天天文庫。
1、usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;//***************HART協(xié)議說明***********************************//////HART命令查詢幀格式:0xFF+0xFF+定界符+地址+數(shù)據(jù)字節(jié)數(shù)+數(shù)據(jù)+校驗和/
2、/1、前導符:2-20字節(jié),用于與接收器之間的同步//首次開始通信或數(shù)據(jù)幀重發(fā)時,使用20字節(jié)前導碼,前導碼都是0xFF。//2、定界符:1字節(jié),短幀:01,02,06對應成組、主從、從主三種模式,長幀時將短幀最高位置1即可//3、長幀和短幀區(qū)別在于地址的字節(jié)數(shù)不同,短幀地址為1字節(jié),用于初始化時命令0查詢設備標志、ID等信息//長幀地址:5字節(jié)(40位),建立在設備唯一標識符的基礎上//唯一標識符分為三個部分://第一字節(jié)最高位,1表示基本主設備,0表示副主設備//第一字節(jié)第六位(次高位),1表示處于成組模式,0表示沒有成組模式//長地址的其它部分是設備的唯一
3、標識符,共38位,均為0表示廣播地址//二.二短幀地址:1字節(jié)//最高位1表示主設備,0表示副主設備//第6位1表示處于成組模式,0表示沒有處于成組模式//第4、5位必須置0//最低四位表示巡檢地址,對應設備巡檢地址0-15//4、命令字節(jié):1字節(jié),表明該幀所封裝的HART命令,命令字節(jié)值在從設備響應中原值返回//5、字節(jié)奇數(shù):1字節(jié),表明此字節(jié)與最后幀校驗字節(jié)之間的數(shù)據(jù)字節(jié)個數(shù),用于識別幀的結束,范圍0-27//6、數(shù)據(jù)域:由整數(shù)字節(jié)的用戶數(shù)據(jù)組成,長度為0-25字節(jié)//在主-從幀中,數(shù)據(jù)域存放用戶對設備的請求數(shù)據(jù)//在從-主幀中,數(shù)據(jù)用于存放設備對用戶的響應
4、數(shù)據(jù)//7、校驗字節(jié):1字節(jié),對不包括前導符和該字節(jié)的幀中所有字節(jié)進行水平校驗(異或)的結果//垂直校驗時通信過程中硬件自動對每個字節(jié)所有位進行奇偶校驗后產(chǎn)生的結果//水平校驗時所有字節(jié)依次按位進行異或運算后的結果//8、響應碼:只在從幀中出現(xiàn)//響應碼第一字節(jié)指明通信狀態(tài),第二字節(jié)表示現(xiàn)場設備工作狀態(tài)//該幀數(shù)據(jù)只有在響應碼第一字節(jié)最高位為0時有效,1表示通信錯誤namespaceHart{publicpartialclassfrom1:Form{//HART對應串口初始化PrivateSerialPortserial_hart=newSerialPort()
5、;PrivatevoidportInit(){serial_hart.PortName=hart[0]["port"].ToString();serial_hart.BaudRate=Convert.ToInt32(hart[0]["baudrate"]);serial_hart.ReceivedBytesThreshold=1;serial_hart.Parity=Parity.Odd;try{serial_hart.Open();intn=serial_hart.BytesToRead;//串口緩存區(qū)待讀取數(shù)據(jù)個數(shù)byte[]buffirstclear=ne
6、wbyte[n];serial_hart.Read(buffirstclear,0,n);//將串口緩存區(qū)之前的數(shù)據(jù)清理掉,防止過量非預期數(shù)據(jù)進入解析環(huán)節(jié)buffirstclear=newbyte[1];//釋放變量空間}catch(Exceptionex){if(ex.ToString()!=ex1){ex1=ex.ToString();MessageBox.Show(ex.Message);}}}#region設備信息privateintmanufacID=18;//制造商IDprivateintdevType=8;//制造商設備類型privateintsf
7、Version=1;//軟件版本號privateinthwVersion=0;//硬件版本號privateint[]devID=newint[3];//設備IDprivateintcmdVersion=5;//通用命令文檔版本號privateintdevIDResult=0;//設備ID計算結果#endregion#region主變量(PV)privateintPVUnitCd=0;//主變量代碼privatefloatPVValue=0;//主變量privatefloatPVCurrent=0;//主變量電流privatefloatPVPercentRange
8、=0;//主變量量程百分