|
原理图如下:
【简要说明】
一、 尺寸:长78mmX宽47mmX高24mm
二、 主要芯片:STC单片机 MAX485芯片
三、 工作电压:直流5~36V
四、特点:
可编程控制,提供原理图,例程及相关资料,提供程序源代码,提供相关资料!客户可以通过485端口对继电器进行开关控制,也可以通过编程自由控制!
1、具有信号指示灯,继电器吸合指示灯。
2、板子功耗小于1W
3、额定切换电流10A以内,切换电压250V以内
4、最大切换功率300W
5、继电器寿命1000000次以上。
6、电器绝缘电阻100M
7、触电耐压1000V
8、继电器最大吸合时间15mS 毫秒
9、继电器最大释放时间5mS 毫秒
10、工作温度-40度至 +70度
11、工作湿度 40% ~ 80%RH
适用场合:远程通信控制,可编程控制,输入输出控制,仪器仪表监控。
12、使用说明:
【标注说明】 【接线说明】 【应用举例下载线连接图同时可以TTL控制】 【应用举例485接线图】 【实用接线】
单路输入输出带485模块带输入发送协议与测试程序
485通讯控制板通讯协议
波特率 9600
通讯协议格式如下:发送十六进制
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00~FF
| 00~09
| 00~FF
| BB
| 解释
| 第一个数据
| 第二个数据
| 第三个数据
| 第四个数据
| 最后一个数据
| 功能1:改变板子地址
举例:更改地址:(发货默认地址00)注意:多个板子并联使用时需要不同地址
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00
| 01
| 01
| BB
| 解释
| 开始数据
| 向00地址发送
| 改变地址
| 将地址改成01
| 数据结束
| 功能2:打开继电器
举例:打开第一块板子的继电器
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00
| 02
| 01
| BB
| 解释
| 开始数据
| 向00地址发送
| 打开功能
| 打开继电器
| 数据结束
| 功能3:关闭继电器
举例:关闭第二路板子的继电器
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 01
| 03
| 01
| BB
| 解释
| 开始数据
| 向01地址发送
| 关闭功能
| 关闭继电器
| 数据结束
| 功能4:打开某块板子的所有继电器(单路继电器模块的这个功能码和功能2一样)
举例:打开第一块板子的全部继电器
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00
| 04
| FF
| BB
| 解释
| 开始数据
| 向00地址发送
| 打开所有功能
| 打开所有继电器
| 数据结束
| 功能5:关闭某块板子的所有继电器(单路继电器模块的这个功能码和功能3一样)
举例:关闭第三块板子的全部继电器
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 02
| 05
| 00
| BB
| 解释
| 开始数据
| 向02地址发送
| 关闭所有功能
| 关闭所有继电器
| 数据结束
| 功能6:查询继电器状态
举例:查询第一块板子继电器状态
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00
| 06
| 01
| BB
| 解释
| 开始数据
| 向00地址发送
| 查询功能
| 查询继电器
| 数据结束
| 查询返回信息分析 继电器关闭返回值(关闭返回00)
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00
| 07
| 00
| BB
| 解释
| 开始数据
| 00地址返回
| 返回功能
| 继电器状态关闭
| 数据结束
| 查询返回信息分析 继电器打开返回值(打开返回FF)
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00
| 07
| FF
| BB
| 解释
| 开始数据
| 00地址返回
| 返回功能
| 继电器状态打开
| 数据结束
|
功能7:查询输入状态
举例:查询第一块板子的输入状态
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00
| 08
| 01
| BB
| 解释
| 开始数据
| 向00地址发送
| 查询功能
| 查询输入
| 数据结束
| 查询返回信息分析 输入返回值(关闭返回00)
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00
| 09
| 00
| BB
| 解释
| 开始数据
| 00地址返回
| 返回功能
| 输入状态关闭
| 数据结束
| 查询返回信息分析 输入返回值(打开返回01)
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00
| 09
| FF
| BB
| 解释
| 开始数据
| 00地址返回
| 返回功能
| 输入状态打开
| 数据结束
|
| 板子地址清零控制(用于地址不清晰或者忘记,在485总线下禁止操作,只可对其单独清零)
| 协议
| 启始位
| 地址位
| 功能位
| 数据位
| 结束位
| 控制
| AA
| 00
| 00
| 00
| BB
| 解释
| 开始数据
| 00
| 地址清零
|
| 数据结束
|
IN1给开关信号发送 AA 00 10 FF BB 第二位是地址位
单片机源程序如下:
- #include "main.h"
- #include "init.h"
- #define ENABLE_IAP 0x83 //系统工作时钟<12MHz 时,对IAP_CONTR 寄存器设置此值
- #define CMD_IDLE 0
- #define CMD_READ 1
- #define CMD_PROGRAM 2
- #define CMD_ERASE 3
- #define ENABLE_IAP 0x83//SYSCLK<12MH
- #define IAP_ADDRESS 0x0000 //存储地址
- uint8 add; //掉电保持485的地址
- uint8 j=0;
- uint8 dat=0X00;
- bit flag_zx=0;
- uint8 sendPosi=0; //发送缓冲区指针
- uint8 receCount=0; //接收缓冲区指针
- uint8 sendCount=0; //需要发送数据个数
- uint8 receTimeOut=0; //通讯超时值
- uint8 byteCount=5; //发送个数
- uint8 sendBuf[10]; //发送缓冲区
- uint8 receBuf[10]; //接收缓冲区
- /********************************************************************
- 定义数据类型
- *********************************************************************/
- uint8 TBUF,RBUF;
- uint8 TDAT,RDAT;
- uint8 TCNT,RCNT;
- uint8 TBIT,RBIT;
- bit TING,RING;
- bit TEND,REND;
- bit bz1=0;
- uint8 t,r,ii; //定义数据类型
- uint8 but[16]; //数据存储数组
- /********************************************************************
- 定义 ISP/IAP/EEPROM 命令
- *********************************************************************/
- void IapIdle();//禁用 ISP/IAP/EEPROM functionmake 单片机 在 一 安全 状态
- uint8 IapReadByte(uint16 addr);//读数据
- void IapProgramByte(uint16 addr, uint8 dat);//写数据
- void IapEraseSector(uint16 addr);//擦除数据
- void delay()//延时程序
- {
- uint8 m,n,s;
- for(m=100;m>0;m--)
- for(n=200;n>0;n--)
- for(s=248;s>0;s--);
- }
- void delay1()//延时程序
- {
- uint8 m,n,s;
- for(m=10;m>0;m--)
- for(n=20;n>0;n--)
- for(s=148;s>0;s--);
- }
- /****************发送函数*********************/
- void send1()
- {
- sendBuf[0]=0xaa;
- sendBuf[1]=add;
- sendBuf[2]=0x10;
- sendBuf[3]=0xff;
- sendBuf[4]=0xbb;
- }
- /****************发送函数*********************/
- void senduart2()
- { RS485_DIR=1;
- for(ii=0;ii<5;ii++)
- {
- if(TEND) //允许发送
- {
- TEND=0;
- TBUF=sendBuf[t++&0x0F];
- TING=1;
- }
- while(!TEND);
- }
- t=0;
- RS485_DIR=0;
- }
- /*****************清空发送缓冲区*************************/
- void clear_receBuf()
- {
- uint8 i;
- for(i=0;i<5;i++)
- {
- receBuf[i]=0;
- }
- }
- void main()
- {
- delay();
- clear_receBuf();
- add= IapReadByte(0x01);//读取存储的值
- if(add==0xff)
- add=0x00;
- ConfigUART1();
- TR0=1;
- EA=1;
- // TEND=0;
- // REND=0;
- while(1)
- {
- if((IN1==0)&&(bz1==0)){delay1();if(IN1==0){bz1=1;send1();senduart2();clear_receBuf();OUT1=0;}}if((IN1==1)&&(bz1==1)){bz1=0;OUT1=1;}
- if(REND) //如果有接收
- {
- REND=0; //接收标志清零
- receBuf[r++&0x0F]=RBUF; //把接受的数据存储到BUT数组中
- if(receBuf[0]!=0xaa){r=0;}
- if(r>=5)
- { r=0;
- flag_zx=1;
- }
- }
- if(flag_zx==1)
- {
- flag_zx=0;
- //0 1 2 3 4
- //起始位 地址位 功能位 数据位 结束位
- if((receBuf[0]==0xaa)&&(receBuf[4]==0xbb)&&(receBuf[1]==add)) //如果开始位和结束位,还有地址都正确,进行下一步判断
- {
- if(receBuf[2]==0x01) //修改板子地址
- {
- add=receBuf[3];
- IapEraseSector(0); //擦除扇区
- IapProgramByte(0x01,add);//写入新的地址
- }
- else if(receBuf[2]==0x02) //打开单路继电器
- {
- switch(receBuf[3])
- {
- case 0x01: OUT1=0; break;
- }
- }
- else if(receBuf[2]==0x03) //关闭单路继电器
- {
- switch(receBuf[3])
- {
- case 0x01: OUT1=1; break;
- }
- }
- else if(receBuf[2]==0x04) //打开全部继电器
- {
- if(receBuf[3]==0xff)
- {
- OUT1=0;
- }
- }
- else if(receBuf[2]==0x05) //关闭全部继电器
- {
- if(receBuf[3]==0x00)
- {
- OUT1=1;
- }
- }
- else if(receBuf[2]==0x06) //查询继电器
- {
- sendBuf[0]=0xaa;
- sendBuf[1]=add;
- sendBuf[2]=0x07;
- //sendBuf[3]=0xfe;
- sendBuf[4]=0xbb;
- switch(receBuf[3])
- {
- case 0x01: if(OUT1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- default:break;
- }
- senduart2();
- }
- else if(receBuf[2]==0x08) //查询输入
- {
- sendBuf[0]=0xaa;
- sendBuf[1]=add;
- sendBuf[2]=0x09;
- //sendBuf[3]=0xfe;
- sendBuf[4]=0xbb;
-
- switch(receBuf[3])
- {
- case 0x01: if(IN1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- default:break;
- }
- senduart2();
- }
- }
- if((receBuf[0]==0xaa)&&(receBuf[1]==0x00)&&(receBuf[2]==0x00)&&(receBuf[3]==0x00)&&(receBuf[4]==0xbb))
- {
- add=0x00;
- IapEraseSector(0); //擦除扇区
- IapProgramByte(0x01,0x00);//写入新的地址
- sendBuf[0]=0xaa;
- sendBuf[1]=add;
- sendBuf[2]=0x00;
- sendBuf[3]=0x00;
- sendBuf[4]=0xbb;
- senduart2();
- }
- clear_receBuf();
- }
- }
- }
- // /**********************************************************
- //放在主函数,定时0溢出中断函数,
- //*********************/
- void tm0()interrupt 1 using 1
- {
- if(RING)
- {
- if(--RCNT==0)
- {
- RCNT=3;
- if(--RBIT==0)
- {
- RBUF=RDAT;
- RING=0;
- REND=1;
- }
- else
- {
- RDAT>>=1;
- if(RXB)RDAT|=0X80;
- }
- }
- }
- else if(!RXB)
- {
- RING=1;
- RCNT=4;
- RBIT=9;
- }
- if(--TCNT==0)
- {
- TCNT=3;
- if(TING)
- {
- if(TBIT==0)
- {
- TXB=0;
- TDAT=TBUF;
- TBIT=9;
- }
- else
- {
- TDAT>>=1;
- if(--TBIT==0)
- {
- TXB=1;
- TING=0;
- TEND=1;
- }
- else
- {
- TXB=CY;
- }
- }
- }
- }
- }
- void IapIdle(){//禁用 ISP/IAP/EEPROM functionmake 单片机 在 一 安全 状态
- IAP_CONTR = 0; //
- IAP_CMD = 0; //
- IAP_TRIG = 0; //
- IAP_ADDRH = 0x80; //
- IAP_ADDRL = 0; //
- }
- uint8 IapReadByte(uint16 addr){//读数据
- uint8 dat;
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_READ;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_TRIG = 0x5A;
- IAP_TRIG = 0xA5;
- _nop_();
- dat = IAP_DATA;
- IapIdle();
- return dat;
- }
- void IapProgramByte(uint16 addr, uint8 dat){//写数据
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_PROGRAM;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_DATA = dat;
- IAP_TRIG = 0x5A;
- IAP_TRIG = 0xA5;
- _nop_();
- IapIdle();
- }
- void IapEraseSector(uint16 addr){//擦除数据
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_ERASE;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_TRIG = 0x5A;
- IAP_TRIG = 0xA5;
- _nop_();
- IapIdle();
- }
复制代码 【通信协议(字符控制协议)】购后提供源代码
单片机与PC机采用485通讯,波特率默认为9600.
单片机接收PC机发送的ASC||数据码表如下:
01、开关继电器:PC发送'A';继电器吸合 发送'a' 继电器断开
02、输出状态查询:PC发送B;单片机返回输出状态‘C’表示继电器开 ‘c’表示继电器关;
03、输入状态查询:PC发送b;单片机有输入返回输入状态‘D’无输入返回 ‘d’表示关;
04、继电器状态取反:PC发送E 继电器状态取反
【通信协议(仿mod bus控制协议)】购后提供源代码
全部资料51hei下载地址:
|
-
-
GYJ-0071_单路输入输出可编程485控制模块产品使用手册.doc
3.24 MB, 下载次数: 80, 下载积分: 黑币 -5
-
-
GYJ-0071_单路输入输出可编程485控制模块原理图及PCB图.pdf
307.29 KB, 下载次数: 89, 下载积分: 黑币 -5
-
-
单路输入输出带485模块带输入发送测试程序.rar
59.31 KB, 下载次数: 95, 下载积分: 黑币 -5
-
-
单路输入输出带485模块带输入输入查询方式.rar
50.24 KB, 下载次数: 78, 下载积分: 黑币 -5
-
-
配套程序.rar
152.93 KB, 下载次数: 95, 下载积分: 黑币 -5
|