欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5737|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

串口轉(zhuǎn)繼電器通信協(xié)議 自帶CRC檢驗(yàn)程序 很經(jīng)典

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:228542 發(fā)表于 2017-11-19 22:22 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
串口轉(zhuǎn)繼電器通信協(xié)議 V1.0
協(xié)議:自帶CRC檢驗(yàn)程序   非常經(jīng)典

1 簡(jiǎn)介
RY51SD8P232/485 是一款串口控制繼電器模塊,針對(duì)工業(yè)及家庭應(yīng)用而設(shè)計(jì),可用于 工業(yè)自動(dòng)化及物聯(lián)網(wǎng)系統(tǒng)集成。RY51SD8P232/485 兼容任何主流操作系統(tǒng),提供兩種標(biāo)準(zhǔn) 工業(yè)串行通信接口 RS-232 和 RS-485,均可支持高達(dá) 115.2kbps 的通信速率。板載 8 路獨(dú)立 繼電器,兩種通信接口均支持高達(dá) 15 級(jí)級(jí)聯(lián),支持自定義及 Modbus RTU 通信協(xié)議。

2 關(guān)鍵特性

   供電接口
輸入直流電壓 9~30V,標(biāo)準(zhǔn) 5.5-2.1 插孔供電接口和工業(yè)接線端子,兩種供電方式。為主 從供電模式,當(dāng)插孔處電源接入時(shí),無(wú)論接線端子是否連接電源,均由插孔處供電。當(dāng)插孔處未插入電源時(shí),才可由接線端子供電。
   電源指示燈 當(dāng)有電源接入時(shí),電源指示燈點(diǎn)亮。
   8 位撥碼開關(guān) 用于設(shè)置通信波特率、設(shè)置通信方式、模塊地址設(shè)置,注意設(shè)置好后,模塊重新加電生效。
撥碼開關(guān)從左往右依次為 bit1 至 bit8,每一位的具體功能后續(xù)介紹。撥碼開關(guān)的某一位 往上撥表示邏輯“0”,往下?lián)鼙硎具壿嫛?”。

通信方式選擇跳線,如上圖所示,當(dāng)跳線帽連接至左邊時(shí)為 RS-232 通信,當(dāng)跳線帽連接
至右邊時(shí)為 RS-485 通信,默認(rèn)為 RS-232 通信。
      通信指示燈 發(fā)送或接收數(shù)據(jù)時(shí),通信燈閃爍。
     8 路繼電器狀態(tài)指示燈 繼電器某路打開時(shí),對(duì)應(yīng)的指示燈點(diǎn)亮。
     8 路繼電器接線端子
每路繼電器配備了一個(gè)三腳的接線端子,以繼電器 S1 為例,如上圖,中間和左邊管腳
為常閉合狀態(tài),中間與右邊管腳為常斷開狀態(tài)。繼電器打開時(shí),中間與左邊管腳斷開, 中間與右邊管腳連接,其它繼電器與此相同。負(fù)載與設(shè)備接線方法如上圖所示。
5 級(jí)聯(lián)方式
模塊可實(shí)現(xiàn)最多 15 級(jí)主從模式級(jí)聯(lián),RS-485、RS-232 級(jí)聯(lián)方式示意圖如下所示。

在通信過(guò)程中需保證所有模塊通信波特率相同,通信波特率由撥碼開關(guān) bit1->bit3 設(shè)定。
主機(jī)通過(guò)模塊地址來(lái)區(qū)分網(wǎng)絡(luò)中的模塊,因此,需保證每個(gè)模塊的地址均不相同。,模 塊地址由撥碼開關(guān) bit5->bit8 設(shè)定。
6 波特率設(shè)置
最高波特率可達(dá) 115200bps,由撥碼開關(guān) bit1->bit3 設(shè)定,設(shè)置如下圖所示,設(shè)置好后, 模塊重新上電生效。

7 模塊地址設(shè)置
模塊地址由撥碼開關(guān) bit5->bit8 設(shè)定,設(shè)置范圍為:0x00~0x0E 共 15 個(gè)地址,如下圖所 示。設(shè)置好后,模塊重新上電生效。
8 通信協(xié)議
支持 modbus RTU 以及自定義兩種通信協(xié)議。通信協(xié)議由撥碼開關(guān) bit4 來(lái)選擇,當(dāng) bit4 為邏輯 1 時(shí),如下圖右邊所示,設(shè)置為 modbus RTU  通信協(xié)議。當(dāng) bit4 為邏輯 0 時(shí),如下圖 左邊所示,設(shè)置為自定義通信協(xié)議。

Modbus RTU 通信協(xié)議一幀完整的數(shù)據(jù)包括“地址+命令+數(shù)據(jù)+校驗(yàn)”內(nèi)容。數(shù)據(jù)發(fā)送順
序?yàn)榈刂吩谇埃詈鬄樾r?yàn)。字節(jié)發(fā)送為低位至高位的順序。校驗(yàn)數(shù)值為“地址+命令+數(shù)據(jù)” 計(jì)算結(jié)果。如下圖所示,一幀數(shù)據(jù)包括 8bit 地址,16bit 命令,N 個(gè)字節(jié)數(shù)據(jù),2 字節(jié)的 CRC16校驗(yàn)。

地址:8bit 地址值為模塊的地址;
命令:命令的字節(jié) 1 表示“寫”繼電器或 “讀”繼電器,0x01 表示“寫”,即控制模塊繼 電器開或關(guān),0x02 表示 “讀”,即讀取模塊繼電器狀態(tài)。
命令的字節(jié) 2  表示控制的繼電器開關(guān)的方式,0x11:同時(shí)控制 8 個(gè)繼電器中任意開 或關(guān)。0x22:打開某幾個(gè)或全部,其他保持不變。0x33:關(guān)閉某幾個(gè)或全部,其他保 持不變。具體哪些繼電器由數(shù)據(jù) 1 決定。0x44:與字節(jié) 1 的 0x02 配合使用。

數(shù)據(jù):數(shù)據(jù) 1 為一個(gè)字節(jié)即 8bit,每一 bit 對(duì)應(yīng)的一個(gè)繼電器,最高位對(duì)應(yīng)的繼電器 S8,依
順序排列,最低位對(duì)應(yīng)繼電器 S1。對(duì)應(yīng)位為“1”表示打開繼電器,“0”表示關(guān)閉繼 電器。數(shù)據(jù) 2~N 為可選數(shù)據(jù)。
CRC16 校驗(yàn):為前面所以數(shù)據(jù)的校驗(yàn)值,共包括 2 個(gè)字節(jié),高字節(jié)在前,低字節(jié)在后。 注:地址 0x0F 為廣播地址,只有“寫”繼電器時(shí)起作用,對(duì)所有級(jí)聯(lián)模塊同時(shí)寫數(shù)據(jù),與
模塊實(shí)際地址無(wú)關(guān)。 應(yīng)用實(shí)例:
0x00    0x01    0x11    0x01    0x9C    0x74
使地址為 0x00 的模塊,打開繼電器 1 其它關(guān)閉。其中,0x9C 0x74 分別為前面數(shù)據(jù)的
CRC16 校驗(yàn)高、低字節(jié)。
0x00    0x01    0x22    0x02    0xC8    0x85
使地址為 0x00 的模塊,打開繼電器 2 其它不變。其中,0xC8    0x85 分別為前面數(shù)據(jù)的
CRC16 校驗(yàn)高、低字節(jié)。
0x0E    0x01    0x33    0x7F    0x06    0x1C
使地址為 15 的模塊,關(guān)閉繼電器 8 其它不變。其中,0x06    0x1C 分別為前面數(shù)據(jù)的
CRC16 校驗(yàn)高、低字節(jié)。
0x01    0x02    0x44    0x21    0x53
讀取地址為 0x01 模塊 8 各繼電器狀態(tài),模塊返回?cái)?shù)據(jù)如下:
0x01    0x02    0x01    0xFF    0xE1    0xC8
讀模塊時(shí),返回?cái)?shù)據(jù)格式如下所示:
返回的地址為被讀模塊的地址,命令字節(jié) 1、2 為固定值 0x02、0x01,數(shù)據(jù) 1 為 8 路繼
電器的狀態(tài)值,某一位為 1 表示該路繼電器為打開,為 0 表示關(guān)閉狀態(tài)。最后兩個(gè)字節(jié)為前 面 4 字節(jié)的 CRC16 校驗(yàn)值。
自定義通信:自定義通信方式與 modbus RTU 的唯一區(qū)別為,不帶 CRC16 校驗(yàn),即發(fā)送和接 收的數(shù)據(jù)沒(méi)有最后兩個(gè)字節(jié)。
注:該模塊只是實(shí)現(xiàn)了 modbus RTU 的部分功能,在實(shí)際應(yīng)用中以上述講解的通信方式為準(zhǔn)。 部分控制數(shù)據(jù)如下圖所示:

9 測(cè)試軟件
模塊配置了測(cè)試軟件,界面如下圖所示,可運(yùn)行于 XP/win7/win10 等操作系統(tǒng)。軟件包
括控制繼電器,讀取繼電器,顯示繼電器狀態(tài)以及計(jì)算 CRC16 功能。
使用軟件時(shí),首先設(shè)置好與模塊對(duì)應(yīng)的“端口”、“波特率”、“地址碼”,然后點(diǎn)擊“打 開串口”按鈕,若串口成功打開,左邊紅色指示燈點(diǎn)亮。
若需要控制打開某個(gè)繼電器則勾選相應(yīng)的繼電器,如果通信方式為 modbus RTU 則勾選 “校驗(yàn)”選項(xiàng)(自定義模式不勾選),點(diǎn)擊“控制”按鈕,將相應(yīng)的數(shù)據(jù)發(fā)送出去,發(fā)送的 數(shù)據(jù)將以 16 進(jìn)制的格式顯示在“已發(fā)送”編輯框中。
點(diǎn)擊“讀狀態(tài)”按鈕,接收到的數(shù)據(jù)將顯示在“已接收”編輯框中,繼電器的狀態(tài)將顯 示在右上部分 8 個(gè)顯示小燈處。
另外,軟件還集成了 CRC16 校驗(yàn)計(jì)算功能,16 進(jìn)制數(shù)據(jù)輸入格式如下圖所示,點(diǎn)擊“計(jì) 算”按鈕,計(jì)算結(jié)果顯示到編輯框中,高字節(jié)在前,低字節(jié)在后,如下圖所示“DC”高字 節(jié),“BC”為低字節(jié)。

注:輸入數(shù)據(jù)時(shí)中間以空格隔開,注意最后一個(gè)數(shù)后面請(qǐng)勿添加空格。

10    CRC16 函數(shù)
單片機(jī)源程序如下:
  1. /* CRC16  計(jì)算函數(shù), ptr-數(shù)據(jù)指針, len-數(shù)據(jù)長(zhǎng)度,返回值-計(jì)算出的 CRC16  數(shù)值 */
  2. unsigned int GetCRC16(unsigned char *ptr, unsigned char len)
  3. {
  4. unsigned int index;
  5. unsigned char crch = 0xFF; //高 CRC  字節(jié)
  6. unsigned char crcl = 0xFF; //低 CRC  字節(jié)
  7. unsigned char code TabH[] = { //CRC  高位字節(jié)值表
  8. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
  9. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
  10. 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
  11. 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
  12. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
  13. 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
  14. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
  15. 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,


  16. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
  17. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
  18. 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
  19. 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
  20. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
  21. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
  22. 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
  23. 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
  24. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
  25. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
  26. 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
  27. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
  28. 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
  29. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
  30. 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
  31. 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
  32. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
  33. 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40} ;
  34. unsigned char code TabL[] = { //CRC  低位字節(jié)值表
  35. 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
  36. 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
  37. 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
  38. 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
  39. 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
  40. 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
  41. 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
  42. 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
  43. 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
  44. 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
  45. 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
  46. 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
  47. 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
  48. 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
  49. 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
  50. 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
  51. 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
  52. 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
  53. 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
  54. 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
  55. 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
  56. 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
  57. 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
  58. 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
  59. 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
  60. 0x43, 0x83, 0x41, 0x81, 0x80, 0x40} ;
  61. while (len--) //計(jì)算指定長(zhǎng)度的 CRC
  62. {        index = crch ^ *ptr++; crch = crcl ^ TabH[index]; crcl = TabL[index];
  63. }
  64. return ((crch<<8) | crcl);
  65. }

  66. ……………………

  67. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
串口轉(zhuǎn)繼電器通信協(xié)議 V1.0.pdf (1006.28 KB, 下載次數(shù): 44)


評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
七九六 + 5 贊一個(gè)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

5#
ID:29579 發(fā)表于 2018-10-14 14:18 | 只看該作者
感謝分享,其它程序呢
回復(fù)

使用道具 舉報(bào)

地板
ID:29579 發(fā)表于 2018-10-14 14:17 | 只看該作者

感謝分享!其它程序呢?
回復(fù)

使用道具 舉報(bào)

板凳
ID:344633 發(fā)表于 2018-7-18 15:53 | 只看該作者
樓主真厲害         
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:247166 發(fā)表于 2017-11-20 13:27 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表