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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

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

2 關(guān)鍵特性

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

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

在通信過程中需保證所有模塊通信波特率相同,通信波特率由撥碼開關(guān) bit1->bit3 設(shè)定。
主機通過模塊地址來區(qū)分網(wǎng)絡(luò)中的模塊,因此,需保證每個模塊的地址均不相同。,模 塊地址由撥碼開關(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 個地址,如下圖所 示。設(shè)置好后,模塊重新上電生效。
8 通信協(xié)議
支持 modbus RTU 以及自定義兩種通信協(xié)議。通信協(xié)議由撥碼開關(guān) bit4 來選擇,當(dāng) bit4 為邏輯 1 時,如下圖右邊所示,設(shè)置為 modbus RTU  通信協(xié)議。當(dāng) bit4 為邏輯 0 時,如下圖 左邊所示,設(shè)置為自定義通信協(xié)議。

Modbus RTU 通信協(xié)議一幀完整的數(shù)據(jù)包括“地址+命令+數(shù)據(jù)+校驗”內(nèi)容。數(shù)據(jù)發(fā)送順
序為地址在前,最后為校驗。字節(jié)發(fā)送為低位至高位的順序。校驗數(shù)值為“地址+命令+數(shù)據(jù)” 計算結(jié)果。如下圖所示,一幀數(shù)據(jù)包括 8bit 地址,16bit 命令,N 個字節(jié)數(shù)據(jù),2 字節(jié)的 CRC16校驗。

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

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

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

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

10    CRC16 函數(shù)
單片機源程序如下:
  1. /* CRC16  計算函數(shù), ptr-數(shù)據(jù)指針, len-數(shù)據(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--) //計算指定長度的 CRC
  62. {        index = crch ^ *ptr++; crch = crcl ^ TabH[index]; crcl = TabL[index];
  63. }
  64. return ((crch<<8) | crcl);
  65. }

  66. ……………………

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

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


評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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