GYJ-0095_四路輸入輸出繼電器工控板產品使用說明書 【簡要說明】 一、尺寸:長145mmX寬90mmX高20mm
二、主要芯片:單片機STC89C52RC 繼電器 光耦
三、工作電壓:有直流12V及24V可選。
四、特點: 電路結構簡單,穩定可靠,采用最新款STC單片機,運行速度快,單片機預留擴展接口。 1、具有四路輸入信號指示燈,四路繼電器吸合指示燈,電源指示燈。
2、板子功耗小于8W
3、額定切換電流10A以內,切換電壓250V以內
4、單路最大切換功率500W 額定功率300W
5、繼電器壽命1000000次以上。
6、電器絕緣電阻100M
7、觸電耐壓1000V
8、繼電器最大吸合時間15mS毫秒
9、繼電器最大釋放時間5mS毫秒
10、工作溫度-40度至+70度
11、工作濕度40%~80%RH
12、四路光電隔離輸入,8路光電隔離輸出
13、四輸入低電平有效(即:NPN輸入)
14、四路輸出開關量輸出(即:干接點輸出)
15、具有MAX232通訊。
16、單片機所有IO口都引出,客戶可以自己編程擴展功能
17、可以選擇使用外部EEPROM 作為存儲單元
18、電路具有,防反接保護、過流保護、續流保護、壓敏保護等
19、單片機可以自行更換,可以選擇替換型的STC系列單片機
20、我們提供電路相關的,原理圖、例程、開發環境、下載軟件等相關資料
適用場合:工業控制、產品開發、項目設計,自動化改造等
【標注說明】
010133h5u22dccdwl2wldc.jpg (194.55 KB, 下載次數: 13)
下載附件
2018-3-18 18:15 上傳
【接線說明】 【輸入控制設備】 【輸出控制設備】
【輸出舉例說明】 【輸出舉例說明】(開關量輸出、干接點輸出) 【專業下載線接線說明】 【串口通信說明】也可以通過串口下載
【原理圖】(提供PDF格式的原理圖及PCB圖)更清晰 免費提供與此工控板有關的:資料、例程、原理圖 芯片資料、軟件。 【圖片展示】
【默認發貨程序】
【仿modbus通信控制程序】 485通訊控制板通訊協議(技術QQ115451619)
波特率 9600 | | | | | | | | | | | | | | | | | | | 功能1:改變板子地址 舉例:更改地址:(發貨默認地址00)注意:多個板子并聯使用時需要不同地址 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 功能4:打開某塊板子的所有繼電器(單路繼電器模塊的這個功能碼和功能2一樣) 舉例:打開第一塊板子的全部繼電器 | | | | | | | | | | | | | | | | | | | 功能5:關閉某塊板子的所有繼電器(單路繼電器模塊的這個功能碼和功能3一樣) 舉例:關閉第三塊板子的全部繼電器 | | | | | | | | | | | | | | | | | | | 功能6:查詢繼電器狀態 舉例:查詢第一塊板子繼電器狀態 | | | | | | | | | | | | | | | | | | | 查詢返回信息分析 繼電器關閉返回值(關閉返回00) | | | | | | | | | | | | | | | | | | | 查詢返回信息分析 繼電器打開返回值(打開返回FF) | | | | | | | | | | | | | | | | | | |
功能7:查詢輸入狀態 舉例:查詢第一塊板子的輸入狀態 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 功能8:輸入發送數據 當輸入端有信號時,給上位機發送數據 舉例:第一路有信號輸入時的數據為:AA 00 08 01 BB | | | | | | | | | | | | | | | | | | | | | | | | | 功能9:板子地址清零控制(用于地址不清晰或者忘記,在485總線下禁止操作,只可對其單獨清零) | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- #include<reg52.h> //庫文件
- #include <intrins.H>
- #include<EEPROM.h>
- #define uchar unsigned char//宏定義無符號字符型
- //sfr WDT_CONTR=0Xe1;
- sbit K1=P2^0;
- sbit K2=P2^1;
- sbit K3=P2^2;
- sbit K4=P2^3;
- sbit K5=P2^4;
- sbit K6=P2^5;
- sbit K7=P2^6;
- sbit K8=P2^7;
-
- /*定義八位入為單片機P1口*/
- sbit IN0=P1^0;
- sbit IN1=P1^1;
- sbit IN2=P1^2;
- sbit IN3=P1^3;
- sbit IN4=P1^4;
- sbit IN5=P1^5;
- sbit IN6=P1^6;
- sbit IN7=P1^7;
- uchar dat;
- uchar t,r,ii;
- uchar k=100;
- uchar add; //掉電保持485的地址
- uchar j=0;
- bit flag_zx=0;
- uchar sendBuf[10]; //發送緩沖區
- uchar receBuf[10]; //接收緩沖區
- uchar s1,s2,s3,s4,s5,s6,s7,s8;
- uchar s11,s22,s33,s44,s55,s66,s77,s88;
- bit busy;
- bit bz1=0;
- bit bz2=0;
- bit bz3=0;
- bit bz4=0;
- bit bz5=0;
- bit bz6=0;
- bit bz7=0;
- bit bz8=0;
-
- bit sj1=0;
- bit sj2=0;
- bit sj3=0;
- bit sj4=0;
- bit sj5=0;
- bit sj6=0;
- bit sj7=0;
- bit sj8=0;
- /********************************************************************
- 初始定義
- *********************************************************************/
- uint sec; //定義計數值,每過1/10 秒,sec 加一
- uint tcnt; //鍵值判斷
- /********************************************************************
- 延時函數
- *********************************************************************/
- void delay(uchar t)
- {
- uchar i,j;
- for(i=0;i<t;i++)
- {
- for(j=13;j>0;j--);
- { ;
- }
- }
- }
-
- /********************************************************************
- 功能:串口初始化,波特率9600,方式1
- *********************************************************************/
- void Init_Com(void)
- {
- TMOD|=0x20;
- SCON=0x50;
- TH1=0xfd;
- TL1=0xfd;
- TR1=1;
- ES=1;
- }
-
- /****************發送函數*********************/
- void senduart2()
- {
- //RS485_DIR=1;
- SBUF=sendBuf[0];while(!TI);TI=0;
- SBUF=sendBuf[1];while(!TI);TI=0;
- SBUF=sendBuf[2];while(!TI);TI=0;
- SBUF=sendBuf[3];while(!TI);TI=0;
- SBUF=sendBuf[4];while(!TI);TI=0;
- }
-
- /****************發送函數*********************/
- void send1()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X01;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************發送函數*********************/
- void send2()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X02;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************發送函數*********************/
- void send3()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X03;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************發送函數*********************/
- void send4()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X04;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************發送函數*********************/
- void send5()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X05;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************發送函數*********************/
- void send6()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X06;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }/****************發送函數*********************/
- void send7()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X07;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************發送函數*********************/
- void send8()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
-
- /*****************清空發送緩沖區*************************/
- void clear_receBuf()
- {
- uchar i;
- for(i=0;i<5;i++)
- {
- receBuf[i]=0;
- }
- }
- /********************************************************************
- 功能:串口初始化,波特率9600,方式1
- *********************************************************************/
- void initTimer(void)
- {
- TMOD=0x2;
- TH0=0x1b;
- TL0=0x1b;
- }
- /********************************************************************
- 串口中斷服務函數
- *********************************************************************/
- void uart(void) interrupt 4
- {
- /********************************************************************
- 接收數據判斷函數
- *********************************************************************/
- if(RI) //如果有接收
- {
- RI=0; //接收標志清零
- receBuf[r++&0x0F]=SBUF; //把接受的數據存儲到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];
- EEPROMSectorErase(0);//擦除扇區
- EEPROMWriteByte(0,add);//寫入新的地址
- }
- else if(receBuf[2]==0x02) //打開單路繼電器
- {
- switch(receBuf[3])
- {
- case 0x01: K1=0;sj1=0; break;
- case 0x02: K2=0;sj2=0; break;
- case 0x03: K3=0;sj3=0; break;
- case 0x04: K4=0;sj4=0; break;
- case 0x05: K5=0;sj5=0;break;
- case 0x06: K6=0;sj6=0;break;
- case 0x07: K7=0;sj7=0;break;
- case 0x08: K8=0;sj8=0;break;
- default:break;
- }
- }
- else if(receBuf[2]==0x03) //關閉單路繼電器
- {
- switch(receBuf[3])
- {
- case 0x01: K1=1;sj1=0; break;
- case 0x02: K2=1;sj2=0; break;
- case 0x03: K3=1;sj3=0; break;
- case 0x04: K4=1;sj4=0; break;
- case 0x05: K5=1;sj5=0; break;
- case 0x06: K6=1;sj6=0; break;
- case 0x07: K7=1;sj7=0; break;
- case 0x08: K8=1;sj8=0; break;
- default:break;
- }
- }
- else if(receBuf[2]==0x04) //打開全部繼電器
- {
- if(receBuf[3]==0xff)
- {
- P2=0X00; sj1=0;sj2=0;sj3=0;sj4=0;sj5=0;sj6=0;sj7=0;sj8=0;
- }
- }
- else if(receBuf[2]==0x05) //關閉全部繼電器
- {
- if(receBuf[3]==0x00)
- {
- P2=0XFF; sj1=0;sj2=0;sj3=0;sj4=0;sj5=0;sj6=0;sj7=0;sj8=0;
- }
- }
- 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(K1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x02: if(K2==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x03: if(K3==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x04: if(K4==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x05: if(K5==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x06: if(K6==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x07: if(K7==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x08: if(K8==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(IN0==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x02: if(IN1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x03: if(IN2==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x04: if(IN3==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x05: if(IN4==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x06: if(IN5==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x07: if(IN6==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x08: if(IN7==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- default:break;
- }
- senduart2();
- }
-
- else if(receBuf[2]==0x11) //第1路延時控制
- {
- sj1=1; s11=0;
- s1=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x12) //第2路延時控制
- {
- sj2=1;s22=0;
- s2=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x13) //第3路延時控制
- {
- sj3=1;s33=0;
- s3=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x14) //第4路延時控制
- {
- sj4=1;s44=0;
- s4=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x15) //第5路延時控制
- {
- sj5=1; s55=0;
- s5=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x16) //第6路延時控制
- {
- sj6=1;s66=0;
- s2=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x17) //第7路延時控制
- {
- sj7=1;s77=0;
- s77=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x18) //第8路延時控制
- {
- sj8=1;s88=0;
- s8=receBuf[3];clear_receBuf();
- }
-
- }
- if((receBuf[0]==0xaa)&&(receBuf[1]==0x00)&&(receBuf[2]==0x00)&&(receBuf[3]==0x00)&&(receBuf[4]==0xbb))
- {
- add=0x00;
- EEPROMSectorErase(0);//擦除扇區
- EEPROMWriteByte(0,0);//寫入新的地址
- }
- clear_receBuf();
- }
-
- }
- /********************************************************************
- 主函數
- *********************************************************************/
- void main()
- {
- //WDT_CONTR=0x35; //啟動看門狗
- initTimer();
- Init_Com();//串口初始化
- add = EEPROMReadByte(0);
- //add = 0X00;
- TR0=1;
- ET0=1;
- EA=1;
-
- while(1)
- {
-
-
-
- if((IN0==0)&&(bz1==0)){delay(k);if(IN0==0){delay(k);send1();clear_receBuf();bz1=1;}}if((bz1==1)&&(IN0==1)){delay(k);bz1=0;}
- if((IN1==0)&&(bz2==0)){delay(k);if(IN1==0){delay(k);send2();clear_receBuf();bz2=1;}}if((bz2==1)&&(IN1==1)){delay(k);bz2=0;}
- if((IN2==0)&&(bz3==0)){delay(k);if(IN2==0){delay(k);send3();clear_receBuf();bz3=1;}}if((bz3==1)&&(IN2==1)){delay(k);bz3=0;}
- if((IN3==0)&&(bz4==0)){delay(k);if(IN3==0){delay(k);send4();clear_receBuf();bz4=1;}}if((bz4==1)&&(IN3==1)){delay(k);bz4=0;}
-
- if((IN4==0)&&(bz5==0)){delay(k);if(IN4==0){delay(k);send5();clear_receBuf();bz5=1;}}if((bz5==1)&&(IN4==1)){delay(k);bz5=0;}
- if((IN5==0)&&(bz6==0)){delay(k);if(IN5==0){delay(k);send6();clear_receBuf();bz6=1;}}if((bz6==1)&&(IN5==1)){delay(k);bz6=0;}
- if((IN6==0)&&(bz7==0)){delay(k);if(IN6==0){delay(k);send7();clear_receBuf();bz7=1;}}if((bz7==1)&&(IN6==1)){delay(k);bz7=0;}
- if((IN7==0)&&(bz8==0)){delay(k);if(IN7==0){delay(k);send8();clear_receBuf();bz8=1;}}if((bz8==1)&&(IN7==1)){delay(k);bz8=0;}
- /*if(write==1)
- {
- write=0;
- KK1 = P0;
- KK2 = P1;
- KK3 = P2;
- KK4 = P3;
- EEPROMSectorErase(0);
- EEPROMWriteByte(0,KK1);
- EEPROMWriteByte(1,KK2);
- EEPROMWriteByte(2,KK3);
- EEPROMWriteByte(3,KK4);
- }*/
- }
- }
- /********************************************************************
- 定時中斷服務函數
- *********************************************************************/
- void t0(void) interrupt 1 using 0 //定時中斷服務函數
- {
- tcnt++; //每過250ust tcnt 加一
- if(tcnt==3900) //計滿400 次(1秒)時
- {
- tcnt=0; //重新再計
- // K1=!K1;
- // WDT_CONTR=0x35; //7.2s喂狗一次
- if(sj1==1){K1=0;s11++;if(s11>=s1){K1=1;s11=0;sj1=0;}}
- if(sj2==1){K2=0;s22++;if(s22>=s2){K2=1;s22=0;sj2=0;}}
- if(sj3==1){K3=0;s33++;if(s33>=s3){K3=1;s33=0;sj3=0;}}
- if(sj4==1){K4=0;s44++;if(s44>=s4){K4=1;s44=0;sj4=0;}}
- }
- }
- /********************************************************************
- 結束
- *********************************************************************/
復制代碼
0.png (56.32 KB, 下載次數: 11)
下載附件
2018-3-18 18:14 上傳
0.png (8.41 KB, 下載次數: 19)
下載附件
2018-3-18 18:15 上傳
全部資料51hei下載地址:
|