|
大家可以用MODBUS協(xié)議通過人機界面來調(diào)試程序或?qū)W習(xí)通信協(xié)議。
1.使用前,需要安裝GUIBuild觸摸屏組態(tài)軟件,軟件在"\單片機開發(fā)工具\GUIBuild觸摸屏組態(tài)軟件"
2.使用GUIBuild和OPS6觸摸軟件前,先雙擊學(xué)習(xí)光盤中的“KeiLib.exe”
3.軟件安裝好后,雙擊Test.op6 即可運行程序。
4.使用GUIBuild觸摸屏軟件時,先編譯,再選擇在線模擬,再選擇正確的COM口后點擊連接。
單片機源程序如下:
- /******************************************************************************************************************
- 標題: 綜合程序 *
- * 此程序包含了板中大部分的功能,配合上位機一起使用 編譯前請雙擊Keillib.exe *
- * *
- *******************************************************************************************************************/
- #include <system.h>
- #define NOP() _nop_() /* 定義空指令 */
- #define TRUE 0xff
- #define FALSE 0
- //6T/12T工作模式
- #define Model_6T 0
- unsigned char bdata X0,X1,Y0,Key;
- unsigned int Tick_10ms=0; //時間片計數(shù)器
- sbit K0=Key^0;
- sbit K1=Key^1;
- sbit K2=Key^2;
- sbit K3=Key^3;
- sbit K4=Key^4;
- sbit K5=Key^5;
- sbit K6=Key^6;
- sbit K7=Key^7;
- bit K0J,K1J,K2J,K3J,K4J,K5J;
- #define M_Sum 32
- #define D_Sum 185
- unsigned char idata M[M_Sum];
- unsigned short xdata D[D_Sum];
- unsigned int TestDelay1, TestDelay2, TestDelay3;
- unsigned int T[6];
- //*********************************************************************
- #define UCHAR unsigned char
- void delay(unsigned int i)
- {
- UCHAR j;
- for(i; i > 0; i--)
- for(j = 200; j > 0; j--);
- }
- /*************************************************************************
- * 函數(shù)名稱: ConversionStr(void)
- * 功能描述: 字符串轉(zhuǎn)換函數(shù)
- * 輸 入: *Register, *str
- ***************************************************************************/
- void ConversionStr(unsigned short *Register,unsigned char code *str)
- {
- unsigned char sL,sH;
- while(1)
- {
- if(*str == '\0') break;
- sL=(*str++);
- sH=(*str++);
- *Register++=sH<<8|sL;
- }
- }
- /*************************************************************
- * (T0) 10 ms 時鐘沖斷
- ;************************************************************/
- void T0zd(void) interrupt 1
- {
- //TH0=0xC4; //18.432M
- //TL0=0x00;
- #if Model_6T
- TH0=0xB8; //22.1184M
- TL0=0x00;
- #else
- TH0=0xDC; //11.0592M
- TL0=0x00;
- #endif
- Tick_10ms++;
- }
- /***********************************************************
- purpose: 系統(tǒng)初始化
- /**********************************************************/
- void system_Ini()
- {
- TMOD|= 0x11;
- //TH0=0xC4; //18.432M
- //TL0=0x00;
- #if Model_6T
- TH0=0xB8; //22.1184M
- TL0=0x00;
- #else
- TH0=0xDC; //11.0592M
- TL0=0x00;
- #endif
- IE = 0x8A;
- TR0 = 1;
- //PWM
- //TH1 = 0xfe; //11.0592
- //TL1 = 0x33;
- //TR1 = 1;
- }
- //***********************************************************
- main()
- { unsigned char Input;
- unsigned char i,j;
- unsigned char code str1[] = "PLC動作版本 V1.05 ";
- unsigned char code str2[] = "51板程序版本 V3.28 ";
- system_Ini();
- InitMotor();
- Input=ReHC74165();
- X0=Input;
- #if Model_6T // 晶振 波特率 站號
- Modbus_Init(221184, 57600, 1, &M[0], &D[0]);
- #else
- //Modbus_Init(110592, 19200, 1, &M[0], &D[0]);
- Modbus_Init(120000, 19200, 1, &M[0], &D[0]);
- #endif
- //Modbus_Init(184320, 57600, X1, &M[0], &D[0]);
- for(i=0; i<M_Sum; i++) M[i]=0;
- for(i=0; i<D_Sum; i++) D[i]=i;
- Y0=0;
- D[12]=1;
- D[24]=0;
- D[28]=100;
- D[30]=50;
- D[100]=0; //PLC-K0~K3控制畫面切換OFF
- D[180]=0; //AD采樣控制
- D[181]=0; //曲線黑色背景
- ConversionStr(&D[50],str1);
- ////////////////////////////////////////////////////////////////////////
- while(1)
- {
- Input=ReHC74165();
- X0=Input;
- Key=X0;
- if(K0&K0J) //單次圖片切換 D27
- {
- M[0]=~M[0];
- if(++D[27]>5) D[27]=0;
- if(D[100]) D[24]=10; //控制觸摸屏(顯示畫面號=10)
- }
- K0J=~K0;
-
- //由K1~K5微分控制, 交替切換M1~M5
- if(K1&K1J)
- {
- M[1]=~M[1];
- if(D[100]) D[24]=17; //控制觸摸屏(顯示畫面號=17)
- }
- K1J=~K1;
-
- if(K2&K2J)
- {
- M[2]=~M[2];
- if(D[100])D[24]=29; //控制觸摸屏(顯示畫面號=29)
- }
- K2J=~K2;
-
- if(K3&K3J)
- {
- M[3]=~M[3];
- if(D[100])D[24]=30; //控制觸摸屏(顯示畫面號=30)
- }
- K3J=~K3;
- if(K4&K4J)M[4]=~M[4]; K4J=~K4;
- if(K5&K5J)M[5]=~M[5]; K5J=~K5;
- if(M[1]) //自動圖片切換 D[27] 間隔10ms*D[28] 加加一次
- {
- if(TickOut(&T[0],D[28])) if(++D[27]>5) D[27]=0; //10ms*D[28]
- }
- //顯示下位機程序版本
- if(K0) ConversionStr(&D[50],str1);
- if(K1) ConversionStr(&D[50],str2);
- //動態(tài)文本畫面數(shù)據(jù)測試
- if(TickOut(&T[1],D[30])) //D[30]位人機設(shè)定的動作速度
- {
- //報警信息
- if((K0)&&(D[21]<58)) ++D[21];
- if((K1)&&(D[21]>0)) --D[21];
- //動作信息
- if((K2)&&(D[22]<9)) ++D[22];
- if((K3)&&(D[22]>0)) --D[22];
- //溫度狀態(tài)反色顯示
- D[90]++;
- //周期時間
- D[93]++;
-
- //按下S5(單ON/雙OFF),控制報警自動變化
- if(M[4])
- {
- if(++D[21]>57) D[21]=0;
- }
- //按下S6(單ON/雙OFF),控制動作自動變化
- if(M[5])
- {
- if(!M[6]) //動作++
- {
- if(++D[22]>8)
- {
- D[22]=8;
- M[6]=TRUE;
- }
- }
- else //動作--
- {
- if(--D[22]==0) M[6]=FALSE;
- }
- }
- }
復(fù)制代碼
//撥碼開關(guān)控制[運行狀態(tài)顯示]
D[99]=0;
if(X1&0x10) D[99]=1; //撥碼開關(guān)1
if(X1&0x20) D[99]=2; //撥碼開關(guān)2
if(X1&0x40) D[99]=3; //撥碼開關(guān)3
if(X1&0x80) D[99]=4; //撥碼開關(guān)4
以上代碼下載:
27 組態(tài)例程.rar
(2.02 MB, 下載次數(shù): 25)
2021-4-17 11:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|