AMF電磁流量計通信協議
2023年02月03日 09:35:12
來源:云南昌暉儀表制造有限公司 >> 進入該公司展臺
閱讀量:22
本電磁流量計通信協議針對AMF智能電磁流量計工業應用設計,通信協議版本:AMF CP V1.1。通信協議主要用于電磁流量計實時數據采集、流量測量及流量累計控制。
一、主機系統通訊部件要求國際標準RS-485通訊接口部件,不小于10Bytes的通信緩沖區(FIFO),支持600、1200、2400、4800、9600、14400通訊波特率,支持半雙工通訊模式。通訊程序應允許FIFO,從機要求主機FIFO不小于10Bytes。二、協議結構AMF CP V1.1協議遵從基本開放系統互連(OSI)參考模型,基本開放系統互連參照模型提供通訊系統基本結構和要素,但昌暉AMF CP V1.1協議使用簡化的OSI參照模型,僅采用1、2和7層。基本開放系統互連參考模型三、AMF電磁流量計通信協議物理結構AMF電磁流量計的網絡通訊接口在物理結構上采用電氣隔離方式,隔離電壓1500伏。通訊數據傳輸接口為半雙工方式,標準通訊速率大于250khz,通訊方向轉換時間3.5uS。通訊接口電氣標準遵從RS-485國際標準。昌暉AMF CP V1.1協議可用于星型式網絡結構和總線式網絡結構。標準通訊連接介質為屏蔽雙絞線。
四、AMF CP V1.1主機信息結構AMF CP V1.1協議為主從掃描式通訊協議,每次通訊過程均由主機發起,然后從機進行響應,回傳規定的信息,完成一次通訊過程。主機至從機信息結構
主機發送至從機的信息由兩字節組成,字節為從機地址,其編碼:0-127(二進制位另有定義),字節為數據分類命令(下表定義)。從機通訊緩沖區(FIFO)為兩字節,因此,主機發送至從機的兩字節可連續發送,不必留時間間隔。從機工作在多機通訊方式,因此,主機應使用11位串行數據格式,并且不使用奇偶校驗,將奇偶校驗位作多機通訊尋址標志使用。主機發送個字節時,奇偶校驗位強制為1,發送第二個字節時,奇偶校驗位強制為0。(見附錄一)數據分類命令
數據分類命令指示從機回送的數據類型,數據分類命令編碼:0---127,昌暉AMF CP V1.1 僅使用0—9號編碼,其他編碼暫時保留。五、AMF CP V1.1從機信息結構從機接受到主機命令信息后,按命令要求回傳測量數據。從機響應信息數據結構
從機響應主機命令,回送10個字節數據,分為命令段、數據段、校驗和、結束標志四部分。1、命令段命令段由兩字節組成:從機地址和數據分類命令,該段是將主機發來的信息直接返回,用于主機校驗從機對主機傳送信息中地址和命令響應的正確性。 2、數據段由于流量計各測量數據長度、單位、符號等信息各不相同,因此,從機回傳的數據段按各命令具體定義。(1)流量信息定義數據段的D4、D3、D2、D1、D0五個字節組成十位流量測量數據,每字節表示兩位十進制數,每字節表示的十進制數值范圍:0-99。
主機恢復流量測量值十進制數據的算法:a)流動方向將D4D3D2D1D0 恢復成十六進制數據DATA_HEX;若DATA_HEX=H則智能電磁流量計流體流動方向為負;
b)原數據將DATA_HEX中的位(符號位)消掉,得到無符號原數據;即原數據=DATA_HEX與7FFFFFFFH;流量測量數據值為99999D5字節以段位方式定義流量單位、小數點位置:5位定義
流量單位定義:0----L/S(升/秒) 1----L/M(升/分) 2----L/H(升/時) 3----M3/S(立方米/秒) 4----M3/M(立方米/分) 5----M3/H(立方米/時)小數點位置: 4 -------±.00000 5 -------±0.0000 6 -------±00.000 7 -------±000.00 8 -------±0000.0 9 -------±00000; 10 ------±00000×10 . . . 13-------±00000×10000(2)流速信息定義數據段的D4、D3、D2、D1、D0五個字節組成十位流速測量數據,每字節表示兩位十進制數,每字節表示的十進制數值范圍:0-99。
主機恢復流速十進制數據的算法:a)流動方向將D4D3D2D1D0恢復成十六進制數據DATA_HEX;若DATA_HEX=H則流動方向為負。 b)原數據將DATA_HEX中的位(符號位)消掉,得到無符號原數據;即原數據=DATA_HEX與7FFFFFFFH;流量測速數據值為19.999。D5無定義:流速單位固定:m/S(米/秒)。數點位置固定:±00.000。(3)流量百分比信息定義數據段的D4、D3、D2、D1、D0五個字節組成十位流量百分比測量數據,每字節表示兩位十進制數,每字節表示的十進制數值范圍:0-99。
主機恢復流量百分比十進制數據的算法:a)流動方向將D4D3D2D1D0 恢復成十六進制數據DATA_HEX;若DATA_HEX=H則流動方向為負。b)原數據將DATA_HEX中的位(符號位)消掉,得到無符號原數據;即原數據=DATA_HEX與7FFFFFFFH;流量測量百分比數據值為999.99。D5無定義:向定義: 0-----流體正向流動 1-----流體反向流動流量百分比單位固定:%數點位置固定:±0000.0%(4)流體電導比信息定義數據段的D4、D3、D2、D1、D0五個字節組成十位電導比測量數據,每字節表示兩位十進制數。
主機恢復流體電導比十進制數據的算法:原數據=10000×D2+100×D1+D0;流體電導比測量數據值為999.9。D5無定義。流體電導比單位固定:%小數點位置固定:000.0%(5)正向流量累積信息定義數據段的D4、D3、D2、D1、D0五個字節組成十位正向流量測量數據,每字節表示兩位十進制數。
主機恢復流量十進制數據的算法:原數據=100000000×D4+1000000×D3+10000×D2+100×D1+D0;流量累積數據值為4294967296(十六進制0FFFFFFFFH)。D5字節以段位方式定義流量單位、小數點位置:D5字節位定義
小數點位置及單位:0 ------- 1L 1 ------- 0.1L 2 ------- 0.01L 3 ------- 0.001L 4 ------- 1m3 5 ------- 0.1 m3 6 ------- 0.01 m3 7 ------- 0.001 m3(6)反向流量累積信息定義反向流量累積信息定義同正向流量累積信息定義。(7)報警狀態信息定義數據段的D1、D0兩個字節組成二進制報警狀態。
主機恢復報警狀態二進制數據的算法:原數據(二進制)=D0報警狀態定義
(8)流量計管徑信息定義數據段的D0字節指示流量計管徑
(9)禁止流量累積信息定義從機接到該命令后,立即停止流量累積,并回送命令認可信息。停止流量累積延續時間為20秒,20秒后從機自動恢復流量累積計算。因此,若想連續禁止流量累積計算,必須以小于20秒的間隔,向從機發送該命令。該功能可用于斷續過程計量。回送的命令認可信息由數據段的D4、D3、D2、D1、D0五個字節組成。
主機恢復命令認可信息碼的算法:命令認可信息碼=100000000×D4+1000000×D3+10000×D2+100×D1+D0;正確的命令認可信息碼=2A3A4A5AH(十六進制)。(10)啟動流量累積信息定義從機接到該命令后,立即啟動流量累積計算,并回送命令認可信息。該功能可用于斷續過程計量。命令認可信息由數據段的D4、D3、D2、D1、D0五個字節組成。
主機恢復命令認可信息碼的算法:命令認可信息碼=100000000×D4+1000000×D3+10000×D2+100×D1+D0;正確的命令認可信息碼=5A4A3A2AH(十六進制)。3.校驗和從機回傳的數據校驗和為前八個字節的異或和。異或和(byte8) = byte0 ⊕ byte1 ⊕ byte2 …………byte6 ⊕ byte7;4.信息塊結束標志從機以結束標志表示本次回傳信息塊完畢。結束標志編碼為:0AAH(通訊結束命令,十六進制格式)。六、昌暉AMF CP V1.1通訊過程時序通訊過程時序指編制通訊軟件時應遵從的時間間隔、延時、等待時間等。1、主機發送時序主機發送的兩個信息字節間的時間間隔最小為0,時間間隔為20毫秒,大于20毫秒,從機認為發送超時。2、從機回傳時序從機最小回傳響應時間為0,為10毫秒+11位傳送時間;從機每個回傳字節時間間隔為10毫秒+11位傳送時間。(11位傳送時間根據選用波特率計算出)3、從機允許的通訊頻度從機允許的通訊頻度為20次/每秒,大于該值,可能影響從機其他功能。七、AMF電磁流量計通信協議波特率昌暉AMF CP V1.1支持的通訊波特率為:600、1200、2400、4800、9600、14400。八、AMF CP V1.1通訊數據塊偵錯信息1、從機地址和數據分類命令回傳,主機可用于校對從機是否正確響應。2、從機回傳字節異或和校驗,主機可用于校對是否有數據位錯誤。3、從機回傳字節中B7 = 0為數據字節,B7 = 1為命令字節。4、從機回傳字節中的數據字節值不大于99。5、從機回傳字節數長度固定,共十字節長度,主機可做長度檢驗。6、從機回傳結束標志,主機可用于長度檢驗和數據字節定位。九、AMF電磁流量計標準通訊網絡連接圖 附錄一 通訊實驗程序 (MSDOS TURBO C)#incLude#incLude/* MODE setting */#define BIT_5 0x00 /* Word Length define */#define BIT_6 0x01#define BIT_7 0x02#define BIT_8 0x03#define STOP_1 0x00 /* Stop bits define */#define STOP_2 0x04#define P_EVEN 0x18 /* Parity define */#define P_ODD 0x08#define P_SPC 0x38 /* Set tb = 0 */#define P_MARK 0x28 /* Set tb = 1 */#define P_NONE 0x00#define I_RDA 0x01 /* EnabLe recieve-data-avaiLabLe interrupt */#define I_TRE 0x02 /* EnabLe transmitter-hoLding-register-empty interrupt */#define I_RLS 0x04 /* EnabLe recieve-Line-status interrupt */#define I_MS 0x08 /* EnabLe modem-status interrupt */#define I_NON 0x00 /* DisabLe interrupt */#define B600 0xc0#define B1200 0x60#define B2400 0x30#define B4800 0x18#define B9600 0x0C#define B14400 0x08#define COM1_ADDR 0x3e8unsigned char COMM_Buf[100];unsigned char baud_rate;unsigned int error_cnt;void SioInit_1(void){ outportb(COM1_ADDR + 2, 0xcf); /* EnabLe FIFO and cLear FIFO */ outportb(COM1_ADDR + 3, 0x80); /* Set DLAB = 1 */ /* Set bps */ outportb(COM1_ADDR, baud_rate % 256); outportb(COM1_ADDR + 1, baud_rate / 256); outportb(COM1_ADDR + 3, BIT_8 | STOP_1 | P_MARK); /* 11 bits mode & P = 1 */ outportb(COM1_ADDR + 1, I_NON); /* disabLe interrupt */}void SioInit_0(void){ outportb(COM1_ADDR + 2, 0xcf); /* EnabLe FIFO and cLear FIFO */ outportb(COM1_ADDR + 3, 0x80); /* Set DLAB = 1 */ /* Set bps */ outportb(COM1_ADDR, baud_rate % 256); outportb(COM1_ADDR + 1, baud_rate / 256); outportb(COM1_ADDR + 3, BIT_8 | STOP_1 | P_SPC); /* 11 bits mode & P = 0 */ outportb(COM1_ADDR + 1, I_NON); /* disabLe interrupt */}int SioRecieve(){ unsigned k; for (k=0;k<10000;k++) {if((inportb(COM1_ADDR + 5) & 1) == 1) { return inportb(COM1_ADDR); } deLay(1); } return 0;}void SioSend(unsigned char data){ outportb(COM1_ADDR,data); /* Send data */ whiLe((inportb(COM1_ADDR + 5) & 0x40) == 0){}}main(){ int i; unsigned char ch_n; unsigned char ch; int cnnt; baud_rate = B14400; cnnt=0; error_cnt = 0; ch_n = 0; for(;;) { SioInit_1(); cnnt++; cprintf("%03d ",cnnt); cprintf("Send Data "); ch = 0x03; SioSend(ch); outportb(COM1_ADDR + 3, BIT_8 | STOP_1 | P_SPC); SioSend(ch_n); ch_n = (ch_n + 1) & 7; for (i=0;i<10;i++) { COMM_Buf[i] = SioRecieve(); } deLay(20); for (i=0;i<10;i++) { cprintf("%03d ",COMM_Buf[i]); } if ((COMM_Buf[9] != 0xaa) && (COMM_Buf[9] != 0)) { error_cnt++; } cprintf("%05d/n/r",error_cnt); deLay(20); }}
版權與免責聲明:
1.凡本網注明"來源:歐亞貿易網"的所有作品,版權均屬于歐亞貿易網,轉載請必須注明歐亞貿易網。違反者本網將追究相關法律責任。
2.企業發布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規遭投訴的,一律由發布企業自行承擔責任,本網有權刪除內容并追溯責任。
3.本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
4.如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系。