找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)30路繼電器雙串口工控板 modbus上位機(jī)與下位機(jī)例程源碼全套資料下載

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:280979 發(fā)表于 2018-2-24 12:20 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式




modbus上位機(jī):


標(biāo)注說明】
【輸出部分標(biāo)注說明】
上位機(jī)界面(提供源代碼)


modbus控制30路下位機(jī)程序
軟件協(xié)議
一、串口通信定義
l  串口波特率:1位起始位、8位數(shù)據(jù)位、1位停止位、偶校驗
l  默認(rèn)地址:0x01 (通過上位機(jī)軟件可以更改下位機(jī)地址)
l  通訊接口:標(biāo)準(zhǔn)RS232  以及標(biāo)準(zhǔn)485通訊
1、指令功能表
  
功能
  
  
從機(jī)地址
  
0x01~0xff
  
  
命令
  
  
寄存器地址
  
高字節(jié)、低字節(jié)
  
  
數(shù)據(jù)域
  
  
CRC校驗
  
高低字節(jié)
  
  
長度
  
  
1個字節(jié)
  
  
1個字節(jié)
  
  
2個字節(jié)
  
  
  
  
2個字節(jié)
  
  
讀取繼電器狀態(tài)
  
  
Addr
  
  
0x02
  
  
0x0001
  
  
高字節(jié):0x00
  
低字節(jié):0x0f16個繼電器狀態(tài))
  
  
CRCH
  
CRCL
  
  
控制多路繼電器
  
  
Addr
  
  
0x0F
  
  
  0x0000~0x001e
  
  
繼電器個數(shù)
  高:0x00
  低:0x01~0x1e
  
  
字節(jié)個數(shù)
  
1個字節(jié))
  
0x01~0x04
  
  
數(shù)據(jù)域
  
對應(yīng)位為1:開
  
對應(yīng)位為0:關(guān)
  
  
CRCH
  
CRCL
  
  
控制單個繼電器
  
  
Addr
  
  
0x05
  
  0x0000~0x000f
  
  高:0xff  低:0x00 吸合  
  高:0x00 低:0x00 斷開
  
  
CRCH
  
CRCL
  
  
設(shè)定模塊地址
  
  
Addr
  
  
0x06
  
  0x0010
  
  要修改的地址兩個字節(jié)
  
  
CRCH
  
CRCL
  








2、指令示例及詳解
1.       讀取30路繼電器狀態(tài)(地址0x01
  
地址
  
  
功能
  
  
繼電器起始地址
  
  
讀取個數(shù)
  
  
CRC校驗
  
  0x01
  
  0x02
  
  :0x00
  
  :0x01
  
  :0x00
  
  :0x1e
  
  0xA9
  
  0xC2
  








從機(jī)回應(yīng)
  
地址
  
  
功能
  
  
字節(jié)數(shù)
  
  
返回繼電器狀態(tài)
  
  
CRC校驗
  
  0x01
  
  0x02
  
  0x02
  
  :0x00
  
  :0x00
  
  0x59
  
  0xB8
  







注:返回的十六路狀態(tài)0為斷開,1為吸合
2.       控制多路繼電器
a.控制所有繼電器全開主機(jī)發(fā)送:
  
地址
  
  
功能
  
  
繼電器起始地址
  
  
控制繼電器個數(shù)
  
  
字節(jié)個數(shù)
  
  
數(shù)據(jù)域
  
  
CRC校驗
  
  0x01
  
  0x0F
  
  :0x00
  
  :0x00
  
  :0x00
  
  :0x1e
  
  0x04
  
  0xff 0xff
  0xff 0xff
  
  0xc1
  
  0xc2
  










從機(jī)回應(yīng):
  地址
  
  功能
  
  繼電器起始地址
  
  控制繼電器個數(shù)
  
  CRC校驗
  
  0x01
  
  0x0F
  
  :0x00
  
  :0x00
  
  :0x00
  
  :0x1e
  
  0xd5
  
  0xC3
  








注:控制多路時數(shù)據(jù)域中二進(jìn)制數(shù)對應(yīng)位為1是打開某一路繼電器,為0關(guān)閉某一路繼電器
b控制所有繼電器全關(guān)主機(jī)發(fā)送:
  
地址
  
  
功能
  
  
繼電器起始地址
  
  
控制繼電器個數(shù)
  
  
字節(jié)個數(shù)
  
  
數(shù)據(jù)域
  
  
CRC校驗
  
  0x01
  
  0x0F
  
  :0x00
  
  :0x00
  
  :0x00
  
  :0x0F
  
  0x04
  
  0x00 0x00
  0x00 0x00
  
  0xc3
  
  0x17
  










從機(jī)回應(yīng):
  地址
  
  功能
  
  繼電器起始地址
  
  控制繼電器個數(shù)
  
  CRC校驗
  
  0x01
  
  0x0F
  
  :0x00
  
  :0x00
  
  :0x00
  
  :0x1e
  
  0xd5
  
  0xC3
  








注:控制多路時數(shù)據(jù)域中二進(jìn)制數(shù)對應(yīng)位為1是打開某一路繼電器,為0關(guān)閉某一路繼電器
3.       控制單個繼電器狀態(tài)
控制第一路繼電器開主機(jī)發(fā)送:
  
地址
  
  
功能
  
  
繼電器地址
  
  
打開繼電器
  
  
CRC校驗
  
  0x01
  
  0x05
  
  :0x00
  
  :0x00
  
  :0xFF
  
  :0x00
  
  0x8C
  
  0x3A
  








從機(jī)回應(yīng):
  
地址
  
  
功能
  
  
繼電器地址
  
  
打開繼電器
  
  
CRC校驗
  
  0x01
  
  0x05
  
  :0x00
  
  :0x00
  
  :0xFF
  
  :0x00
  
  0x8C
  
  0x3A
  









控制第一路繼電器關(guān)主機(jī)發(fā)送:
  
地址
  
  
功能
  
  
繼電器地址
  
  
打開繼電器
  
  
CRC校驗
  
  0x01
  
  0x05
  
  :0x00
  
  :0x00
  
  :0x00
  
  :0x00
  
  0xCD
  
  0xCA
  








從機(jī)回應(yīng):
  
地址
  
  
功能
  
  
繼電器地址
  
  
打開繼電器
  
  
CRC校驗
  
  0x01
  
  0x05
  
  :0x00
  
  :0x00
  
  :0x00
  
  :0x00
  
  0xCD
  
  0xCA
  








3、上位機(jī)測試軟件
上位機(jī)簡介
1.上位機(jī)編譯環(huán)境:vs2008.net
2.使用語言是vb.net
3.使用該軟件需要安裝framwork3.5軟件(一般win7系統(tǒng)都已安裝)
4.打開該軟件前請先把數(shù)據(jù)線和控制板連接好,控制板供電
file:///Z:\TEMP\msohtmlclip1\01\clip_image002.jpg
上位機(jī)軟件可控制七個30路繼電器輸出控制板,如要需要控制更多從機(jī)設(shè)備,需要更改上位機(jī)軟件.
一、把默認(rèn)的0x01地址改為其他地址如下:
  地址
  
  功能
  
  繼電器起始地址
  
  更改地址
  
  CRC校驗
  
  備注
  
  01
  
  06
  
  00
  
  10
  
  00
  
  01
  
  49
  
  CF
  
  設(shè)備1
  
  01
  
  06
  
  00
  
  10
  
  00
  
  02
  
  09
  
  CE
  
  設(shè)備2
  
  01
  
  06
  
  00
  
  10
  
  00
  
  03
  
  C8
  
  0E
  
  設(shè)備3
  
  01
  
  06
  
  00
  
  10
  
  00
  
  04
  
  89
  
  CC
  
  設(shè)備4
  
  01
  
  06
  
  00
  
  10
  
  00
  
  05
  
  48
  
  0C
  
  設(shè)備5
  
  01
  
  06
  
  00
  
  10
  
  00
  
  06
  
  08
  
  0D
  
  設(shè)備6
  
  01
  
  06
  
  00
  
  10
  
  00
  
  07
  
  C9
  
  CD
  
  設(shè)備7
  


單片機(jī)源程序如下:
  1. #include "hader\\main.h"
  2. //#include"hader\\STC12C5A60S2.H"
  3. /******************************
  4. modbus RTU 的C51程序
  5. 單片機(jī)STC12C5A60S2  晶振:11.0592
  6. 通信波特率 9600 8位數(shù)據(jù) 1位停止位 偶校驗 485通位接口
  7. 單片機(jī)控制板地址 localAddr(變量)
  8. 通信可設(shè)置數(shù)據(jù)的地址:
  9. 字地址 0 - 255 (只取16位的低8位)
  10. 位地址 0 - 255 (只取16位的低8位)
  11. 注:用一般51單片機(jī)有幾路輸出將不能使用
  12. *******************************/

  13. uint32        dwTickCount,dwIntTick;        //時鐘
  14. uint8        idata sendBuf[16],receBuf[16]; //發(fā)送接收緩沖區(qū)
  15. uint8        idata checkoutError;        // ==2 偶校驗錯  
  16. uint8        idata receTimeOut;                //接收超時
  17. uint8        idata c10ms;                        //10ms 計時
  18. bit                b1ms,bt1ms,b10ms,bt10ms,b100ms,bt100ms;        //定時標(biāo)志位

  19. // 串行中斷程序
  20. void commIntProc() interrupt 4
  21. {
  22.         if(TI)
  23.         {
  24.                 TI = 0;
  25.                 if(sendPosi < sendCount) //如果發(fā)送位置小于發(fā)送計數(shù),那么繼續(xù)發(fā)送
  26.                 {
  27.                         sendPosi++;
  28.                         ACC = sendBuf[sendPosi];
  29.                         TB8 = P;        //加上校驗位
  30.                         SBUF = sendBuf[sendPosi];
  31.                 }
  32.                 else //否則發(fā)送完畢,置接收狀態(tài)
  33.                 {
  34. //                        b485Send = 0;    //發(fā)送完后將485置于接收狀態(tài)
  35.                         receCount = 0;   //清接收地址偏移寄存器
  36.                         checkoutError = 0;
  37.                 }
  38.         }
  39.         else if(RI)
  40.         {
  41.                 RI = 0;
  42.                 receTimeOut = 10;    //通訊超時值
  43.                 receBuf[receCount] = SBUF;
  44.                 ACC = receBuf[receCount];
  45.                 if(P != RB8)
  46.                         checkoutError = 2;        //偶校驗出錯
  47.                 receCount++;          //接收地址偏移寄存器加1
  48.                 receCount &= 0x0f;    //最多一次只能接收16個字節(jié)
  49.         }

  50. }   // void CommIntProc()

  51. //定時器0 1ms 中斷
  52. void timer0IntProc() interrupt 1
  53. {
  54.         TL0 = TIMER_LOW;
  55.     TH0 = TIMER_HIGHT;
  56.     dwIntTick++;
  57.         bt1ms = 1;
  58.     c10ms++;
  59.     if(c10ms >= 10)
  60.     {
  61.         c10ms = 0;      //10ms計時器清零
  62.         bt10ms = 1;
  63.     }
  64. }   // void Timer0IntProc()

  65. //定時處理
  66. void timeProc(void)
  67. {
  68.         static uint8 c200ms;

  69.   //  bWatchDog = ~ bWatchDog;    //看門狗取反
  70.         b1ms = 0;
  71.         b10ms = 0;
  72.         b100ms = 0;
  73.         
  74.         ET0 = 0;        //禁用定時器0
  75. //        dwTickCount = dwIntTick;        //
  76.         ET0 = 1;

  77.         if(bt1ms)        //如果1ms到
  78.         {
  79.                 bt1ms = 0;
  80.                 b1ms = 1;

  81.         if(receTimeOut>0)        //如果接收超時值>0
  82.         {
  83.             receTimeOut--;        //接收超時-1(1ms減1次)
  84.             if(receTimeOut==0 && receCount>0)   //判斷通訊接收是否超時
  85.             {
  86. //                b485Send = 0;       //將485置為接收狀態(tài)
  87.                 receCount = 0;      //將接收地址偏移寄存器清零
  88.                                 checkoutError = 0;
  89.             }
  90.         }
  91.         }
  92.         
  93.         if(bt100ms)
  94.         {
  95.                 bt100ms = 0;
  96.                 b100ms = 1;
  97.         }
  98.     if(bt10ms)      //判斷中斷10ms標(biāo)志位是否1
  99.     {
  100.         bt10ms = 0;     //清中斷10ms標(biāo)志位
  101.                 b10ms = 1;

  102.         c200ms++;                   //200ms計時器加1
  103.         if(c200ms >= 20)            //判斷是否計時到200ms
  104.         {
  105.             c200ms = 0;             //清200ms計時器
  106.       //      bRunLED = ~bRunLED;     //取反運行指示燈         
  107.         }
  108.     }
  109. }   // void TimerProc(void)

  110. //初始化串口
  111. void initUart(void)
  112. {
  113.   //串口2波特率
  114.         SCON = 0x50;                                 //方式1,8位數(shù)據(jù),波特率可變
  115.         TH1=  0xfd;        
  116.         TL1 = 0xfd;                             //波特率 9600
  117.     TR1=1;               
  118.         SCON = 0xd0;
  119.     PCON = 0;
  120.     ES = 1;
  121. }//void initUart(void)

  122. //初始化中斷
  123. void initInt(void)
  124. {

  125.         TMOD = 0x21;
  126.         TH0 = TIMER_HIGHT;
  127.         TL0 = TIMER_LOW;
  128.         TR0 = 1;        
  129.     ET0 = 1;
  130.         initUart();        //串口初始化
  131.         EA = 1;               
  132. }
  133. //初始化
  134. void initProg(void)
  135. {        
  136. ……………………

  137. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
簡要說明:
一、 尺寸:長233.7mmX寬182.7mmX高25mm
二、 主要芯片:STC12C60S2支持雙串口(支持51系列DIP40封裝單片機(jī))
三、 工作電壓:直流12伏供電(另有24V供電)
四、 串口1(COM1)下載程序,(串口1和串口2均可與上位機(jī)通訊)
五、輸出供電采用延時通電電路(1至10秒可調(diào))
功能:當(dāng)輸出接有被控制設(shè)備,避免單片機(jī)初次上電(或下載程序)時,輸出設(shè)備誤動作。此功能在實際應(yīng)用中起到很大作用
五、 特點:
             1、具有電源指示。
             2、三十路帶光電隔離輸出控制繼電器。
              3、標(biāo)準(zhǔn)的11.0592M晶振。(便于設(shè)置串口波特率)
             4、具有上電復(fù)位和手動復(fù)位。
             5、支持51系列DIP40封裝單片機(jī)。  
       5、輸出三十路繼電器的供電采用延時供電 (避免被控制設(shè)備誤動作)        
             6、輸出三十路具有LED指示。
              7、三十路12V繼電器控制,控制設(shè)備。
             8、可控制交流220V/10A一下設(shè)備。(最大控制設(shè)備2000W)
              9、具有雙串口通信功能(可以同時和上位機(jī)通信)。
             10、單片機(jī)無加密,可插拔更換,可隨意更改程序。



所有資料51hei提供下載:

例程.rar

2.22 MB, 下載次數(shù): 379, 下載積分: 黑幣 -5

產(chǎn)品使用手冊.doc

3.56 MB, 下載次數(shù): 274, 下載積分: 黑幣 -5

modbus上位機(jī).rar

3.35 MB, 下載次數(shù): 380, 下載積分: 黑幣 -5

modbus控制30路下位機(jī)程序.rar

164.21 KB, 下載次數(shù): 419, 下載積分: 黑幣 -5

GYJ-0062_30路繼電器雙串口單片機(jī)控制板原理圖及PCB圖.pdf

2.11 MB, 下載次數(shù): 337, 下載積分: 黑幣 -5

GYJ-0062_30路繼電器雙串口單片機(jī)控制板產(chǎn)品使用手冊.doc

3.56 MB, 下載次數(shù): 293, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發(fā)
ID:66287 發(fā)表于 2018-3-2 10:10 | 只看該作者
學(xué)習(xí)了,謝謝分享!
回復(fù)

使用道具 舉報

板凳
ID:239953 發(fā)表于 2018-4-15 18:51 | 只看該作者
學(xué)習(xí)學(xué)習(xí),感謝大神分享。
回復(fù)

使用道具 舉報

地板
ID:309683 發(fā)表于 2018-4-16 22:23 | 只看該作者

學(xué)習(xí)學(xué)習(xí),感謝分享
回復(fù)

使用道具 舉報

5#
ID:576536 發(fā)表于 2019-7-2 16:38 | 只看該作者
學(xué)習(xí)學(xué)習(xí),感謝分享
回復(fù)

使用道具 舉報

6#
ID:106121 發(fā)表于 2019-8-29 13:39 | 只看該作者
學(xué)習(xí)一下 感謝分享
回復(fù)

使用道具 舉報

7#
ID:510170 發(fā)表于 2019-10-25 16:13 | 只看該作者
感謝樓主無私奉獻(xiàn)
回復(fù)

使用道具 舉報

8#
ID:832201 發(fā)表于 2020-10-21 16:29 | 只看該作者
謝謝提供思路
回復(fù)

使用道具 舉報

9#
ID:97678 發(fā)表于 2020-10-22 12:03 | 只看該作者
這是什么產(chǎn)品需要這么多的繼電器。!牛。!
回復(fù)

使用道具 舉報

10#
ID:67722 發(fā)表于 2020-10-30 13:45 | 只看該作者
謝謝提供思路
回復(fù)

使用道具 舉報

11#
ID:67722 發(fā)表于 2020-10-30 13:46 | 只看該作者
謝謝提供思路
回復(fù)

使用道具 舉報

12#
ID:1063214 發(fā)表于 2023-2-16 14:55 | 只看該作者
謝謝提供思路
回復(fù)

使用道具 舉報

13#
ID:462629 發(fā)表于 2023-3-2 12:45 | 只看該作者
這是完整版本的嗎?
回復(fù)

使用道具 舉報

14#
ID:1063034 發(fā)表于 2023-3-8 22:02 | 只看該作者
謝謝大神,學(xué)習(xí)了。這是完整版嗎?
回復(fù)

使用道具 舉報

15#
ID:563507 發(fā)表于 2023-4-15 21:23 | 只看該作者
學(xué)習(xí)了,好資料感謝分享!
回復(fù)

使用道具 舉報

16#
ID:1083996 發(fā)表于 2023-8-22 08:09 | 只看該作者
好帥氣的板子,這個有余料嗎
回復(fù)

使用道具 舉報

17#
ID:126422 發(fā)表于 2023-8-22 09:18 | 只看該作者
看著有點像PLC的意思。
回復(fù)

使用道具 舉報

18#
ID:249808 發(fā)表于 2024-6-8 15:41 | 只看該作者
下載回來研究研究……
回復(fù)

使用道具 舉報

19#
ID:432653 發(fā)表于 2024-6-17 04:31 | 只看該作者
上位機(jī)測試軟件打不開
回復(fù)

使用道具 舉報

20#
ID:432653 發(fā)表于 2024-6-17 04:32 | 只看該作者
上位機(jī)測試軟件打不開
回復(fù)

使用道具 舉報

21#
ID:1046170 發(fā)表于 2024-7-30 23:17 | 只看該作者
學(xué)習(xí)了,謝謝分享!
回復(fù)

使用道具 舉報

22#
ID:60122 發(fā)表于 2024-8-11 10:50 來自手機(jī) | 只看該作者
我有8入8出和15入15出的板子,
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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