久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11472|回復: 15
打印 上一主題 下一主題
收起左側

rs485 16路繼電器控制板 仿modbus通信協議控制有上下位機程序

  [復制鏈接]
跳轉到指定樓層
樓主

Modbus十六路繼電器輸出控制板

一、應用場合

  • 工業控制需要擴展輸出口的場合
  • PLC輸出接口擴展
  • 組態觸摸屏控制
  • 簡要說明
  • 尺寸:152mmX163mmX25mm
  • 通訊協議:MODBUS_RTU模式
  • 工作電壓:直流12(另有24V)
  • 掉電后保存繼電器狀態
  • 有看門狗復位功能
特點
  • RS485標準接口
  • 16路輸出光隔離控制繼電器
  • 標準11.0592M晶振9600波特率、八位數據位、一位停止位、一位校驗位(偶校驗)
  • 上電復位和手動復位。
  • MODBUS_RTU標準協議控制
  • 輸出16繼電器LED指示。
  • 通過軟件指令設定地址等參數
  • 可控制交流220V/10A下設備
  • 有程序下載口,可隨意更改程序。
  • 可按客戶要求定制協議

注:顧客可以根據需要選擇相應的產品,我們公司有兩路開關量2路輸入輸出、4路開關量輸入輸出、8路開關量輸入輸出、8路模擬量輸入4路開關量輸出、15路開關量輸入輸出、30路輸入輸出等繼電器控制板,有需要請聯系我們,選擇您滿意的產品!

四、工作環境

  • 工作環境溫度:-20℃~65℃
  • 相對濕度:95%(無凝結)

五、引腳描述

名稱

描述

名稱

描述

VCC

12V電源正極

OUT7

第七路繼電器公共端和常開端

GND

電源負極

OUT8

第八路繼電器公共端和常開端

A+

RS485數據A+

OUT9

第九路繼電器公共端和常開端

B-

RS485數據B-

OUT10

第十路繼電器公共端和常開端

OUT1

第一路繼電器公共端和常開端

OUT11

第十一路繼電器公共端和常開端

OUT2

第二路繼電器公共端和常開端

OUT12

第十二路繼電器公共端和常開端

OUT3

第三路繼電器公共端和常開端

OUT13

第十三路繼電器公共端和常開端

OUT4

第四路繼電器公共端和常開端

OUT14

第十四路繼電器公共端和常開端

OUT5

第五路繼電器公共端和常開端

OUT15

第十五路繼電器公共端和常開端

OUT6

第六路繼電器公共端和常開端

OUT16

第十六路繼電器公共端和常開端

五、硬件連接

  • 電源的連接

  • RS485的連接

注:RS485建議采用雙絞線連接,采用帶屏蔽的雙絞線連接,并將屏蔽層接地,總線上掛多個模塊時,采用手拉手不的連接方式

  • 繼電器輸出的連接

六、軟件協議

6.1串口通信定義

  • 串口波特率:1位起始位、8位數據位 、1位停止位 、偶校驗
  • 默認地址:0x01
  • 通訊接口:RS485

6.1指令功能表

功能

從機地址

0x01~0xff

命令

寄存器地址

高字節、低字節

數據域

CRC校驗

高低字節

長度

1個字節

1個字節

2個字節

2個字節

讀取繼電器狀態

Addr

0x02

0x0001

高字節:0x00

低字節:0x0f(16個繼電器狀態)

CRCH

CRCL

控制多路繼電器

Addr

0x0F

0x0000~0x000f

繼電器個數

高:0x00

低:0x01~0x0f

字節個數

(1個字節)

0x01~0x02

數據域

對應位為1:開

對應位為0:關

CRCH

CRCL

控制單個繼電器

Addr

0x05

0x0000~0x000f

高:0xff  低:0x00 吸合

高:0x00 低:0x00 斷開

CRCH

CRCL

設定模塊地址

Addr

0x06

0x0010

要修改的地址兩個字節

CRCH

CRCL

6.2指令示例及詳解

  • 讀取16路繼電器狀態(地址0x01

地址

功能

繼電器起始地址

讀取個數

CRC校驗

0x01

0x02

高:0x00

低:0x01

高:0x00

低:0x0F

0x69

0xCE

從機回應

地址

功能

字節數

返回繼電器狀態

CRC校驗

0x01

0x02

0x02

高:0x00

低:0x00

0xB9

0xB8

注:返回的十六路狀態0為斷開,1為吸合

  • 控制多路繼電器

a.控制所有繼電器全開主機發送:

地址

功能

繼電器起始地址

控制繼電器個數

字節個數

數據域

CRC校驗

0x01

0x0F

高:0x00

低:0x00

高:0x00

低:0x0F

0x02

0xff 0xff

0xE4

0x44

從機回應:

地址

功能

繼電器起始地址

控制繼電器個數

CRC校驗

0x01

0x0F

高:0x00

低:0x00

高:0x00

低:0x0F

0x15

0xCF

注:控制多路時數據域中二進制數對應位為1是打開某一路繼電器,為0關閉某一路繼電器

b控制所有繼電器全關主機發送:

地址

功能

繼電器起始地址

控制繼電器個數

字節個數

數據域

CRC校驗

0x01

0x0F

高:0x00

低:0x00

高:0x00

低:0x0F

0x02

0x00 x00

0xE5

0xF4

從機回應:

地址

功能

繼電器起始地址

控制繼電器個數

CRC校驗

0x01

0x0F

高:0x00

低:0x00

高:0x00

低:0x0F

0x15

0xCF

注:控制多路時數據域中二進制數對應位為1是打開某一路繼電器,為0關閉某一路繼電器

  • 控制單個繼電器狀態

控制第一路繼電器開主機發送:

地址

功能

繼電器地址

打開繼電器

CRC校驗

0x01

0x05

高:0x00

低:0x00

高:0xFF

低:0x00

0x8C

0x3A

從機回應:

地址

功能

繼電器地址

打開繼電器

CRC校驗

0x01

0x05

高:0x00

低:0x00

高:0xFF

低:0x00

0x8C

0x3A


控制第一路繼電器關主機發送:

地址

功能

繼電器地址

打開繼電器

CRC校驗

0x01

0x05

高:0x00

低:0x00

高:0x00

低:0x00

0xCD

0xCA

從機回應:

地址

功能

繼電器地址

打開繼電器

CRC校驗

0x01

0x05

高:0x00

低:0x00

高:0x00

低:0x00

0xCD

0xCA

6.3上位機測試軟件

上位機簡介

  • 上位機編譯環境:vs2008.net
  • 使用語言是vb.net
  • 使用該軟件需要安裝framwork3.5軟件(一般win7系統都已安裝)
  • 打開該軟件前請先把數據線和控制板連接好,控制板供電

上位機軟件可控制七個十六路繼電器輸出控制板,如要需要控制更多從機設備,需要更改上位機軟件,

產品展示

附錄:


單片機源程序如下:
  1. /********************************************************************
  2.                             匯誠科技
  3. 實現功能:串口控制繼電器程序
  4. 使用芯片:AT89S52
  5. 晶振:11.0592MHZ
  6. 波特率:9600
  7. 編譯環境:Keil
  8. 【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!
  9. *********************************************************************/
  10. #include<reg52.h>                 //庫文件
  11. #include <intrins.H>
  12. #include<EEPROM.h>
  13. #define uchar unsigned char//宏定義無符號字符型
  14. sbit K1=P2^0;
  15. sbit K2=P2^1;
  16. sbit K3=P2^2;
  17. sbit K4=P2^3;
  18. sbit K5=P2^4;
  19. sbit K6=P2^5;
  20. sbit K7=P2^6;
  21. sbit K8=P2^7;
  22. sbit K9=P1^0;
  23. sbit K10=P1^1;
  24. sbit K11=P1^2;
  25. sbit K12=P1^3;
  26. sbit K13=P1^4;
  27. sbit K14=P1^5;
  28. sbit K15=P1^6;
  29. sbit K16=P1^7;

  30. sbit RS485_DIR=P3^7;
  31. uchar dat;
  32. uchar t,r,ii;
  33. uchar add;    //掉電保持485的地址
  34. uchar j=0;
  35. bit flag_zx=0;
  36. uchar sendBuf[10];          //發送緩沖區
  37. uchar receBuf[10];    //接收緩沖區
  38. bit busy;
  39. bit bz1=0;
  40. bit bz2=0;
  41. bit bz3=0;
  42. bit bz4=0;
  43. bit bz5=0;
  44. bit bz6=0;
  45. bit bz7=0;
  46. bit bz8=0;
  47. /********************************************************************
  48.                             延時函數
  49. *********************************************************************/
  50. void delay(uchar t)
  51. {
  52.   uchar i,j;
  53.    for(i=0;i<t;i++)
  54.    {
  55.             for(j=13;j>0;j--);
  56.          { ;
  57.          }
  58.    }
  59. }

  60. /********************************************************************
  61.               功能:串口初始化,波特率9600,方式1
  62. *********************************************************************/
  63. void Init_Com(void)
  64. {
  65. TMOD = 0x20;
  66. PCON = 0x00;
  67. SCON = 0x50;
  68. TH1 = 0xFd;
  69. TL1 = 0xFd;
  70. TR1 = 1;
  71. ES=1;
  72. EA=1;
  73. }

  74. /****************發送函數*********************/
  75. void senduart2()
  76. {          
  77. RS485_DIR=1;
  78. SBUF=sendBuf[0];while(!TI);TI=0;
  79. SBUF=sendBuf[1];while(!TI);TI=0;
  80. SBUF=sendBuf[2];while(!TI);TI=0;
  81. SBUF=sendBuf[3];while(!TI);TI=0;
  82. SBUF=sendBuf[4];while(!TI);TI=0;
  83. RS485_DIR=0;
  84. }
  85. /*****************清空發送緩沖區*************************/
  86. void clear_receBuf()
  87. {
  88.     uchar i;
  89.         for(i=0;i<5;i++)
  90.         {
  91.             receBuf[i]=0;
  92.         }
  93. }
  94. /********************************************************************
  95.                             主函數
  96. *********************************************************************/
  97. void main()
  98. {
  99. Init_Com();//串口初始化
  100. add = EEPROMReadByte(0);
  101. //add = 0X00;
  102.     P2=0XFF;
  103.         P1=0XFF;
  104.         RS485_DIR=0;
  105. while(1)
  106. {

  107. /********************************************************************
  108.                             接收數據判斷函數
  109. *********************************************************************/
  110. if(RI)  //如果有接收
  111.            {
  112.              RI=0; //接收標志清零
  113.              receBuf[r++&0x0F]=SBUF;     //把接受的數據存儲到BUT數組中
  114.                  if(receBuf[0]!=0xaa){r=0;}
  115.                  if(r>=5)
  116.                  {        r=0;

  117.                     flag_zx=1;
  118.                  }
  119.            }
  120.            if(flag_zx==1)
  121.            {                     

  122.                 flag_zx=0;
  123.                     //0         1       2       3        4               
  124.                         //起始位   地址位  功能位   數據位  結束位
  125.                         if((receBuf[0]==0xaa)&&(receBuf[4]==0xbb)&&(receBuf[1]==add))          //如果開始位和結束位,還有地址都正確,進行下一步判斷
  126.                         {
  127.                            if(receBuf[2]==0x01)  //修改板子地址
  128.                            {
  129.                                 add=receBuf[3];
  130.                                         EEPROMSectorErase(0);//擦除扇區
  131.                                 EEPROMWriteByte(0,add);//寫入新的地址
  132.                            }
  133.                            else if(receBuf[2]==0x02)  //打開單路繼電器
  134.                            {
  135.                                        switch(receBuf[3])
  136.                                         {
  137.                                             case 0x01: K1=0; break;
  138.                                                 case 0x02: K2=0; break;
  139.                                             case 0x03: K3=0; break;
  140.                                                 case 0x04: K4=0; break;
  141.                                             case 0x05: K5=0; break;
  142.                                                 case 0x06: K6=0; break;
  143.                                             case 0x07: K7=0; break;
  144.                                                 case 0x08: K8=0; break;
  145.                                                 case 0x09: K9=0; break;
  146.                                                 case 0x0A: K10=0; break;
  147.                                             case 0x0B: K11=0; break;
  148.                                                 case 0x0C: K12=0; break;
  149.                                             case 0x0D: K13=0; break;
  150.                                                 case 0x0E: K14=0; break;
  151.                                             case 0x0F: K15=0; break;
  152.                                                 case 0x10: K16=0; break;
  153.                                                 default:break;
  154.                                         }
  155.                            }
  156.                            else if(receBuf[2]==0x03)  //關閉單路繼電器
  157.                            {
  158.                                        switch(receBuf[3])
  159.                                         {
  160.                                             case 0x01: K1=1; break;
  161.                                                 case 0x02: K2=1; break;
  162.                                             case 0x03: K3=1; break;
  163.                                                 case 0x04: K4=1; break;
  164.                                             case 0x05: K5=1; break;
  165.                                                 case 0x06: K6=1; break;
  166.                                             case 0x07: K7=1; break;
  167.                                                 case 0x08: K8=1; break;
  168.                                               case 0x09: K9=1; break;
  169.                                                 case 0x0A: K10=1; break;
  170.                                             case 0x0B: K11=1; break;
  171.                                                 case 0x0C: K12=1; break;
  172.                                             case 0x0D: K13=1; break;
  173.                                                 case 0x0E: K14=1; break;
  174.                                             case 0x0F: K15=1; break;
  175.                                                 case 0x10: K16=1; break;
  176.                                                 default:break;
  177.                                         }                       
  178.                            }
  179.                            else if(receBuf[2]==0x04)  //打開全部繼電器
  180.                            {
  181.                                 if(receBuf[3]==0xff)
  182.                                 {
  183.                                             P2=0X00;
  184.                                             P1=0X00;
  185.                                         }  
  186.                            }
  187.                            else if(receBuf[2]==0x05)  //關閉全部繼電器
  188.                            {
  189.                                 if(receBuf[3]==0x00)
  190.                                 {
  191.                                             P2=0XFF;
  192.                                                 P1=0XFF;
  193.                                         }                       
  194.                            }
  195.                            else if(receBuf[2]==0x06)  //查詢繼電器
  196.                            {
  197.                                         sendBuf[0]=0xaa;
  198.                                         sendBuf[1]=add;
  199.                                         sendBuf[2]=0x07;
  200.                                         //sendBuf[3]=0xfe;
  201.                                         sendBuf[4]=0xbb;       
  202.                                switch(receBuf[3])
  203.                                    {
  204.                                        case 0x01: if(K1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  205.                                            case 0x02: if(K2==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  206.                                        case 0x03: if(K3==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  207.                                            case 0x04: if(K4==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  208.                                        case 0x05: if(K5==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  209.                                            case 0x06: if(K6==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  210.                                        case 0x07: if(K7==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  211.                                            case 0x08: if(K8==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  212.                                        case 0x09: if(K9==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  213.                                            case 0x0A: if(K10==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  214.                                        case 0x0B: if(K11==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  215.                                            case 0x0C: if(K12==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  216.                                        case 0x0D: if(K13==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  217.                                            case 0x0E: if(K14==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  218.                                        case 0x0F: if(K15==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  219.                                            case 0x10: if(K16==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
  220.                                            default:break;
  221.                                    }  
  222.                                    senduart2();
  223.                            }
  224.                            else if(receBuf[2]==0x08)  //查詢輸入
  225.                            {
  226.                                         sendBuf[0]=0xaa;
  227.                                         sendBuf[1]=add;
  228.                                         sendBuf[2]=0x09;
  229.                                         //sendBuf[3]=0xfe;
  230.                                         sendBuf[4]=0xbb;
  231.                                
  232.                                switch(receBuf[3])
  233.                                    {
  234.                                        case 0x01: sendBuf[3]=0xFF;break;

  235.                                            default:break;
  236.                                    }  
  237.                                         senduart2();
  238.                            }                          
  239.                         }
  240. ……………………

  241. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


所有資料51hei提供下載:
該板配套參考程序.rar (141.45 KB, 下載次數: 263)
仿modbus通信協議控制.rar (47.45 KB, 下載次數: 233)
modbus上下位機程序.rar (857.01 KB, 下載次數: 261)
使用手冊.docx (2.25 MB, 下載次數: 193)


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

使用道具 舉報

沙發
ID:47652 發表于 2018-4-9 10:44 | 只看該作者
不錯,收藏,謝謝LZ
回復

使用道具 舉報

板凳
ID:322178 發表于 2018-5-8 17:10 | 只看該作者
學習學習
回復

使用道具 舉報

地板
ID:147570 發表于 2018-7-28 22:57 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

5#
ID:607314 發表于 2019-9-4 18:58 | 只看該作者
有labview程序嗎
回復

使用道具 舉報

6#
ID:503472 發表于 2019-9-6 10:36 | 只看該作者
信息量很大
回復

使用道具 舉報

7#
ID:57896 發表于 2019-9-7 10:03 | 只看該作者
非常好的modbus資料,收藏了
回復

使用道具 舉報

8#
ID:428400 發表于 2019-9-17 19:39 | 只看該作者
這個連不了觸摸屏的
回復

使用道具 舉報

9#
ID:821299 發表于 2020-9-20 23:22 | 只看該作者
非常實用的資料。
回復

使用道具 舉報

10#
ID:795427 發表于 2020-9-21 10:00 來自手機 | 只看該作者
沒有物料清單
回復

使用道具 舉報

11#
ID:97678 發表于 2020-9-21 15:04 | 只看該作者
好東西! 能不能提供原理圖 和PCB文件啊?
回復

使用道具 舉報

12#
ID:315554 發表于 2020-9-26 11:20 | 只看該作者
謝謝分享,很好的資料,modbus慢慢學了,
回復

使用道具 舉報

13#
ID:361341 發表于 2020-11-6 10:37 | 只看該作者
好東西謝謝分享
回復

使用道具 舉報

14#
ID:811405 發表于 2020-11-17 15:33 | 只看該作者
收藏,學習學習
回復

使用道具 舉報

15#
ID:1108581 發表于 2024-1-20 20:15 | 只看該作者
感謝大佬分享資源,剛好想學習下這個,就是不知道文件里面有沒有提供原理圖和PCB文件之類的
回復

使用道具 舉報

16#
ID:228452 發表于 2024-1-21 06:23 | 只看該作者
schematics and PCB files are not included ...
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩免费av | 91一区二区三区在线观看 | 一区二区三区四区视频 | 亚洲精品国产成人 | 中文字幕第一页在线 | 日韩色在线 | 91小视频在线 | 久久久精品国产 | 91色视频在线观看 | 一区二区三区久久 | 日韩精品999 | 亚洲一区二区三区免费在线 | 亚洲精品视频一区二区三区 | 亚洲狠狠丁香婷婷综合久久久 | 亚洲欧美日韩在线 | 国产精品久久久久久久粉嫩 | 黄色中文字幕 | 免费在线色| www四虎影视 | 久久国产精品久久 | 成人免费黄视频 | 三级免费av | 日韩一区在线播放 | 午夜影院在线观看 | 欧美一区视频在线 | 91啪亚洲精品 | 婷婷丁香激情 | 欧美日韩在线免费观看 | 精品久久香蕉国产线看观看亚洲 | 日韩欧美一区二区三区免费看 | 久久久久久国产精品免费免费狐狸 | 91在线视频播放 | 超碰伊人久久 | 日韩av免费看 | 91久久久久久久久 | 天堂一区二区三区四区 | 一区二区三区欧美 | 日韩在线免费播放 | 久操伊人 | 欧美不卡一区二区三区 | 欧美一级www片免费观看 |