?? scom說明.txt
字號(hào):
串行通信模塊說明->
系統(tǒng)與外界通信接口為串口;
采用基于RS-485的電流環(huán)方式傳輸數(shù)據(jù);
上層傳輸控制協(xié)議自定義為HouseTran 1.0;
HouseTran 1.0協(xié)議規(guī)定:
test frame: 9已經(jīng)包括了crc字節(jié)在內(nèi)
EB 90 EB 90 EB 90 ff 01 25 08 01 02 03 04 05 01 8F B7
EB 90 EB 90 EB 90 ff 01 26 0d 01 02 03 04 05 01 02 03 04 05 02 FA F9
EB 90 EB 90 EB 90 ff 01 27 0f 01 02 03 04 05 01 02 03 04 05 06 07 03 AF 36
EB 90 EB 90 EB 90 ff 01 28 08 01 02 03 04 05 01 D9 D3
//##########################智能數(shù)據(jù)采集系統(tǒng)串行通訊協(xié)議簡(jiǎn)要:############################//
//#數(shù)據(jù)幀幀頭:0xEB 0x90 0xEB 0x90 0xEB 0x90
//#有效數(shù)據(jù)塊:源主機(jī)地址 目標(biāo)地址 命令 數(shù)據(jù)長(zhǎng)度 Datas(數(shù)據(jù)) FrameNumHigh FrameNumLow CRCHigh CRCLow#
//#數(shù)據(jù)幀幀尾:0x7F /*SCOM空閑時(shí)保持Mark狀態(tài)即邏輯'1'*/
//#######################################################################################//
協(xié)議內(nèi)容:
/*------------------------------------------------------*/
a.所有傳輸操作都以幀的形式進(jìn)行;
/*------------------------------------------------------*/
b.幀結(jié)構(gòu):頭(6B) + 主機(jī)地址(1B)+本機(jī)地址(1B) +命令(1B) + 參數(shù)數(shù)據(jù)長(zhǎng)度 + 命令帶的參數(shù)
+ 幀序號(hào)(2B) + 校驗(yàn)常數(shù)(2B) + 尾(0x7E)
/*------------------------------------------------------*/
c.采用CRC和累加和校驗(yàn)方式,可以任意選擇使用;
校驗(yàn)數(shù)據(jù)從本機(jī)地址開始到幀序號(hào)結(jié)束;
/*------------------------------------------------------*/
d.數(shù)據(jù)有:
測(cè)量數(shù)據(jù): 溫度 濕度
時(shí)鐘數(shù)據(jù): 日期 時(shí)間
系統(tǒng)數(shù)據(jù): 啟動(dòng)參數(shù)(主機(jī)地址 本機(jī)地址)
/*------------------------------------------------------*/
e.命令幀的傳遞:
任何命令都蘊(yùn)藏在幀中,可以帶參數(shù)數(shù)據(jù)也可不帶;
地址分配原則:PC:0x80-0xff; MCU:0x00-0x7f
/*------------------------------------------------------*/
f.數(shù)據(jù)幀類型規(guī)定: //幀數(shù)據(jù)大小(B) 幀描述
TRecord= 1 // 10 完整的采樣記錄類型
TTemperature= 2 // 2 采樣溫度幀
THumidity= 3 // 2 采樣濕度幀
TDate= 4 // 3 采樣日期幀
TTime= 5 // 3 采樣時(shí)鐘幀
TSystemParameter=6 // 2 參數(shù)傳遞幀
具體結(jié)構(gòu):
(符號(hào)+整數(shù))(1bit+7bits)+小數(shù)(1B)
年+月+日 (3B)
時(shí)+分+秒 (3B)
存儲(chǔ)地址+參數(shù)值(2B)
/*------------------------------------------------------*/
g.具體的傳輸方式:
站點(diǎn)A(主) 站點(diǎn)B(從)
SiteA SiteB
發(fā)送一幀到 B
B的響應(yīng)過程為:
○接收頭
○接收地址
○接收有效命令和數(shù)據(jù)
○進(jìn)行出錯(cuò)校驗(yàn)
○進(jìn)行地址核對(duì)
○進(jìn)行幀處理
○恢復(fù)端口初始化狀態(tài)
/*------------------------------------------------------*/
h.協(xié)議常數(shù)規(guī)定:
標(biāo)志 具體數(shù)值 描述
TCommand=0 // 1B 實(shí)現(xiàn)一個(gè)特定的操作
TRecord= 1 // 10 完整的采樣記錄類型
TTemperature= 2 // 2 采樣溫度幀
THumidity= 3 // 2 采樣濕度幀
TDate= 4 // 3 采樣日期幀
TTime= 5 // 3 采樣時(shí)鐘幀
TSystemParameter=6 // 2 參數(shù)傳遞幀
//系統(tǒng)用戶
#define _ADMINI 0xff //系統(tǒng)默認(rèn)管理員
#define _PC_T_ID 0xfe //系統(tǒng)測(cè)試默認(rèn)操作員剛出產(chǎn)的MCU都是這個(gè)ID
#define _MCU_T_ID 0x00 //下位機(jī)測(cè)試初始化用地址剛出產(chǎn)的MCU都是這個(gè)ID
//定義通訊相關(guān)命令字常數(shù)0x00-0x7f
#define _CMD_END 0x7f //幀尾常數(shù)
#define _CMD_LOG_IN 0x7e //上線
#define _CMD_LOG_OUT 0x7d //下線
#define _CMD_ACK 0x7c //確認(rèn)信號(hào)命令
#define _CMD_ERROR 0x7b //數(shù)據(jù)出錯(cuò)信號(hào)命令
#define _CMD_SITE_INIT 0x7a //站點(diǎn)初始化
#define _CMD_REAL_GET 0x79 //定時(shí)采樣
//定義讀數(shù)據(jù)采樣相關(guān)命令字常數(shù)0x80-0xaf
#define _CMD_RD_TEMP 0x80 //采樣溫度不帶參數(shù)
#define _CMD_RD_HUMI 0x81 //采樣濕度不帶參數(shù)
#define _CMD_RD_TIME 0x82 //采樣時(shí)鐘不帶參數(shù)
#define _CMD_RD_ALARM 0x83 //采樣鬧鐘不帶參數(shù)
#define _CMD_RD_DATE 0x84 //采樣日期不帶參數(shù)
#define _CMD_RD_WEEK 0x85 //采樣周幾不帶參數(shù)
#define _CMD_RD_RECORD 0x86 //采樣歷史記錄不帶參數(shù)
#define _CMD_RD_RECNUM 0x87 //采樣歷史記錄數(shù)量
#define _CMD_RD_MCUID 0xaf //采樣MCU認(rèn)證號(hào)不帶參數(shù)
#define _CMD_RD_PCID 0xae //采樣MCU上存儲(chǔ)的當(dāng)前PC地址
#define _CMD_RD_PCUSER 0xad //采樣MCU上存儲(chǔ)的當(dāng)前PC用戶
//所有_CMD_RD_XX命令都以_CMD_WR_XX帶參數(shù)響應(yīng)返回0Xb0-0Xff
#define _CMD_WR_TEMP 0xB0 //寫入或送出溫度帶參數(shù)
#define _CMD_WR_HUMI 0xB1 //寫入或送出濕度帶參數(shù)
#define _CMD_WR_TIME 0xB2 //寫入或送出時(shí)鐘帶參數(shù)
#define _CMD_WR_ALARM 0xB3 //寫入或送出鬧鐘帶參數(shù)
#define _CMD_WR_DATE 0xB4 //寫入或送出日期帶參數(shù)
#define _CMD_WR_WEEK 0xB5 //寫入或送出周幾帶參數(shù)
#define _CMD_WR_RECORD 0xB6 //寫入或送出歷史記錄帶參數(shù)
#define _CMD_RD_RECNUM 0xB7 //寫入或送出歷史記錄數(shù)量
#define _CMD_WR_ID 0xff //寫入或送出MCU認(rèn)證號(hào)帶參數(shù)
#define _CMD_WR_PCID 0xfe //寫入或送出MCU上存儲(chǔ)的當(dāng)前PC地址
#define _CMD_WR_PCUSER 0xfd //寫入或送出MCU上存儲(chǔ)的當(dāng)前PC用戶
/*------------------------------------------------------*/
全局變量:
uchar CurrentMaster; //當(dāng)前PC用戶ID
uchar SelfAddr; //當(dāng)前采集站的ID
uchar code CmdsBuf[]; //命令字存放空間
uchar data UartRecBuf[_MAX_LENG]; //通訊用緩沖
推薦:
波特率:19200;
CRC循環(huán)冗余校驗(yàn)CRCVerify(*Ptr,Len);
注意:
下位機(jī)在開機(jī)時(shí)對(duì)發(fā)送登陸幀到上位機(jī),上位機(jī)檢測(cè)其地址如果為測(cè)試地址則對(duì)其進(jìn)行初始化;
上位機(jī)每次切換用戶時(shí)必須及時(shí)通知所有采集站修改其CurrentMaster單元內(nèi)容;
/*------------------------------------------------------*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -