找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7803|回复: 16
打印 上一主题 下一主题
收起左侧

单片机30路继电器双串口工控板 modbus上位机与下位机例程源码全套资料下载

  [复制链接]
跳转到指定楼层
楼主




modbus上位机:


标注说明】
【输出部分标注说明】
上位机界面(提供源代码)


modbus控制30路下位机程序
软件协议
一、串口通信定义
l  串口波特率:1位起始位、8位数据位1位停止位、偶校验
l  默认地址:0x01 (通过上位机软件可以更改下位机地址)
l  通讯接口:标准RS232  以及标准485通讯
1、指令功能表
  
功能
  
  
从机地址
  
0x01~0xff
  
  
命令
  
  
寄存器地址
  
高字节、低字节
  
  
数据域
  
  
CRC校验
  
高低字节
  
  
长度
  
  
1个字节
  
  
1个字节
  
  
2个字节
  
  
  
  
2个字节
  
  
读取继电器状态
  
  
Addr
  
  
0x02
  
  
0x0001
  
  
高字节:0x00
  
低字节:0x0f16个继电器状态)
  
  
CRCH
  
CRCL
  
  
控制多路继电器
  
  
Addr
  
  
0x0F
  
  
  0x0000~0x001e
  
  
继电器个数
  高:0x00
  低:0x01~0x1e
  
  
字节个数
  
1个字节)
  
0x01~0x04
  
  
数据域
  
对应位为1:开
  
对应位为0:关
  
  
CRCH
  
CRCL
  
  
控制单个继电器
  
  
Addr
  
  
0x05
  
  0x0000~0x000f
  
  高:0xff  低:0x00 吸合  
  高:0x00 低:0x00 断开
  
  
CRCH
  
CRCL
  
  
设定模块地址
  
  
Addr
  
  
0x06
  
  0x0010
  
  要修改的地址两个字节
  
  
CRCH
  
CRCL
  








2、指令示例及详解
1.       读取30路继电器状态(地址0x01
  
地址
  
  
功能
  
  
继电器起始地址
  
  
读取个数
  
  
CRC校验
  
  0x01
  
  0x02
  
  :0x00
  
  :0x01
  
  :0x00
  
  :0x1e
  
  0xA9
  
  0xC2
  








从机回应
  
地址
  
  
功能
  
  
字节数
  
  
返回继电器状态
  
  
CRC校验
  
  0x01
  
  0x02
  
  0x02
  
  :0x00
  
  :0x00
  
  0x59
  
  0xB8
  







注:返回的十六路状态0为断开,1为吸合
2.       控制多路继电器
a.控制所有继电器全开主机发送:
  
地址
  
  
功能
  
  
继电器起始地址
  
  
控制继电器个数
  
  
字节个数
  
  
数据域
  
  
CRC校验
  
  0x01
  
  0x0F
  
  :0x00
  
  :0x00
  
  :0x00
  
  :0x1e
  
  0x04
  
  0xff 0xff
  0xff 0xff
  
  0xc1
  
  0xc2
  










从机回应:
  地址
  
  功能
  
  继电器起始地址
  
  控制继电器个数
  
  CRC校验
  
  0x01
  
  0x0F
  
  :0x00
  
  :0x00
  
  :0x00
  
  :0x1e
  
  0xd5
  
  0xC3
  








注:控制多路时数据域中二进制数对应位为1是打开某一路继电器,为0关闭某一路继电器
b控制所有继电器全关主机发送:
  
地址
  
  
功能
  
  
继电器起始地址
  
  
控制继电器个数
  
  
字节个数
  
  
数据域
  
  
CRC校验
  
  0x01
  
  0x0F
  
  :0x00
  
  :0x00
  
  :0x00
  
  :0x0F
  
  0x04
  
  0x00 0x00
  0x00 0x00
  
  0xc3
  
  0x17
  










从机回应:
  地址
  
  功能
  
  继电器起始地址
  
  控制继电器个数
  
  CRC校验
  
  0x01
  
  0x0F
  
  :0x00
  
  :0x00
  
  :0x00
  
  :0x1e
  
  0xd5
  
  0xC3
  








注:控制多路时数据域中二进制数对应位为1是打开某一路继电器,为0关闭某一路继电器
3.       控制单个继电器状态
控制第一路继电器开主机发送:
  
地址
  
  
功能
  
  
继电器地址
  
  
打开继电器
  
  
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
  








3、上位机测试软件
上位机简介
1.上位机编译环境:vs2008.net
2.使用语言是vb.net
3.使用该软件需要安装framwork3.5软件(一般win7系统都已安装)
4.打开该软件前请先把数据线和控制板连接好,控制板供电
file:///Z:\TEMP\msohtmlclip1\01\clip_image002.jpg
上位机软件可控制七个30路继电器输出控制板,如要需要控制更多从机设备,需要更改上位机软件.
一、把默认的0x01地址改为其他地址如下:
  地址
  
  功能
  
  继电器起始地址
  
  更改地址
  
  CRC校验
  
  备注
  
  01
  
  06
  
  00
  
  10
  
  00
  
  01
  
  49
  
  CF
  
  设备1
  
  01
  
  06
  
  00
  
  10
  
  00
  
  02
  
  09
  
  CE
  
  设备2
  
  01
  
  06
  
  00
  
  10
  
  00
  
  03
  
  C8
  
  0E
  
  设备3
  
  01
  
  06
  
  00
  
  10
  
  00
  
  04
  
  89
  
  CC
  
  设备4
  
  01
  
  06
  
  00
  
  10
  
  00
  
  05
  
  48
  
  0C
  
  设备5
  
  01
  
  06
  
  00
  
  10
  
  00
  
  06
  
  08
  
  0D
  
  设备6
  
  01
  
  06
  
  00
  
  10
  
  00
  
  07
  
  C9
  
  CD
  
  设备7
  


单片机源程序如下:
  1. #include "hader\\main.h"
  2. //#include"hader\\STC12C5A60S2.H"
  3. /******************************
  4. modbus RTU 的C51程序
  5. 单片机STC12C5A60S2  晶振:11.0592
  6. 通信波特率 9600 8位数据 1位停止位 偶校验 485通位接口
  7. 单片机控制板地址 localAddr(变量)
  8. 通信可设置数据的地址:
  9. 字地址 0 - 255 (只取16位的低8位)
  10. 位地址 0 - 255 (只取16位的低8位)
  11. 注:用一般51单片机有几路输出将不能使用
  12. *******************************/

  13. uint32        dwTickCount,dwIntTick;        //时钟
  14. uint8        idata sendBuf[16],receBuf[16]; //发送接收缓冲区
  15. uint8        idata checkoutError;        // ==2 偶校验错  
  16. uint8        idata receTimeOut;                //接收超时
  17. uint8        idata c10ms;                        //10ms 计时
  18. bit                b1ms,bt1ms,b10ms,bt10ms,b100ms,bt100ms;        //定时标志位

  19. // 串行中断程序
  20. void commIntProc() interrupt 4
  21. {
  22.         if(TI)
  23.         {
  24.                 TI = 0;
  25.                 if(sendPosi < sendCount) //如果发送位置小于发送计数,那么继续发送
  26.                 {
  27.                         sendPosi++;
  28.                         ACC = sendBuf[sendPosi];
  29.                         TB8 = P;        //加上校验位
  30.                         SBUF = sendBuf[sendPosi];
  31.                 }
  32.                 else //否则发送完毕,置接收状态
  33.                 {
  34. //                        b485Send = 0;    //发送完后将485置于接收状态
  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个字节
  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置为接收状态
  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标志位是否1
  99.     {
  100.         bt10ms = 0;     //清中断10ms标志位
  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位数据,波特率可变
  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黑下载附件…………
复制代码
简要说明:
一、 尺寸:长233.7mmX宽182.7mmX高25mm
二、 主要芯片:STC12C60S2支持双串口(支持51系列DIP40封装单片机)
三、 工作电压:直流12伏供电(另有24V供电)
四、 串口1(COM1)下载程序,(串口1和串口2均可与上位机通讯)
五、输出供电采用延时通电电路(1至10秒可调)
功能:当输出接有被控制设备,避免单片机初次上电(或下载程序)时,输出设备误动作。此功能在实际应用中起到很大作用
五、 特点:
             1、具有电源指示。
             2、三十路带光电隔离输出控制继电器。
              3、标准的11.0592M晶振。(便于设置串口波特率)
             4、具有上电复位和手动复位。
             5、支持51系列DIP40封装单片机。  
       5、输出三十路继电器的供电采用延时供电 (避免被控制设备误动作)        
             6、输出三十路具有LED指示。
              7、三十路12V继电器控制,控制设备。
             8、可控制交流220V/10A一下设备。(最大控制设备2000W)
              9、具有双串口通信功能(可以同时和上位机通信)。
             10、单片机无加密,可插拔更换,可随意更改程序。



所有资料51hei提供下载:

例程.rar

2.22 MB, 下载次数: 335, 下载积分: 黑币 -5

产品使用手册.doc

3.56 MB, 下载次数: 243, 下载积分: 黑币 -5

modbus上位机.rar

3.35 MB, 下载次数: 336, 下载积分: 黑币 -5

modbus控制30路下位机程序.rar

164.21 KB, 下载次数: 371, 下载积分: 黑币 -5

GYJ-0062_30路继电器双串口单片机控制板原理图及PCB图.pdf

2.11 MB, 下载次数: 301, 下载积分: 黑币 -5

GYJ-0062_30路继电器双串口单片机控制板产品使用手册.doc

3.56 MB, 下载次数: 257, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏37 分享淘帖 顶5 踩
回复

使用道具 举报

沙发
ID:66287 发表于 2018-3-2 10:10 | 只看该作者
学习了,谢谢分享!
回复

使用道具 举报

板凳
ID:239953 发表于 2018-4-15 18:51 | 只看该作者
学习学习,感谢大神分享。
回复

使用道具 举报

地板
ID:309683 发表于 2018-4-16 22:23 | 只看该作者

学习学习,感谢分享
回复

使用道具 举报

5#
ID:576536 发表于 2019-7-2 16:38 | 只看该作者
学习学习,感谢分享
回复

使用道具 举报

6#
ID:106121 发表于 2019-8-29 13:39 | 只看该作者
学习一下 感谢分享
回复

使用道具 举报

7#
ID:510170 发表于 2019-10-25 16:13 | 只看该作者
感谢楼主无私奉献
回复

使用道具 举报

8#
ID:832201 发表于 2020-10-21 16:29 | 只看该作者
谢谢提供思路
回复

使用道具 举报

9#
ID:97678 发表于 2020-10-22 12:03 | 只看该作者
这是什么产品需要这么多的继电器!!!牛!!!
回复

使用道具 举报

10#
ID:67722 发表于 2020-10-30 13:45 | 只看该作者
谢谢提供思路
回复

使用道具 举报

11#
ID:67722 发表于 2020-10-30 13:46 | 只看该作者
谢谢提供思路
回复

使用道具 举报

12#
ID:1063214 发表于 2023-2-16 14:55 | 只看该作者
谢谢提供思路
回复

使用道具 举报

13#
ID:462629 发表于 2023-3-2 12:45 | 只看该作者
这是完整版本的吗?
回复

使用道具 举报

14#
ID:1063034 发表于 2023-3-8 22:02 | 只看该作者
谢谢大神,学习了。这是完整版吗?
回复

使用道具 举报

15#
ID:563507 发表于 2023-4-15 21:23 | 只看该作者
学习了,好资料感谢分享!
回复

使用道具 举报

16#
ID:1083996 发表于 2023-8-22 08:09 | 只看该作者
好帅气的板子,这个有余料吗
回复

使用道具 举报

17#
ID:126422 发表于 2023-8-22 09:18 | 只看该作者
看着有点像PLC的意思。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表