⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prerun.cpp

📁 Vxworks 下重矿设备应用开发
💻 CPP
字号:

#include "system.h" 
#include "softplc.h"   
#include "stdio.h" 
#include "graph.h"
#include "stdlib.h"

int Flag_Chgil=0; 
int CPI_FLAG=1;
int Temp[8]={0,0,0,0,0,0,0,0};
bool CPI[8]={0,0,0,0,0,0,0,0};
bool CPO[8]={0,0,0,0,0,0,0,0};
int  CPO2[8]={0,0,0,0,0,0,0,0};

extern char Segment[4096];
extern void read_il(void);
extern void DispChg(void);
extern bool In[8];
extern bool Out[8];

extern int Flag_SPLC;
extern int Flag_SPLC_NET;
extern int Flag_SPLC_NET_NO;

extern Fl_Light_Button *lb_ConnectBW;
extern char ConnectState;

extern void cb_DCpoweron(void);
extern void cb_DCpoweroff(void);
extern void cb_DCstart(void);
extern void cb_DCstop(void);
extern void cb_DCreset(void);
extern void cb_DCemcstop(void);
extern void cb_BWstart(void);
extern void cb_BWstop(void);


/************** 
 * 函数名:DI2Panel
 * 功  能: 将DI数据导入到Panel,调用cb函数。
 *************/
void DI2Panel(void)
{	
	int n;
	int i;
//	int k;
	
	i=3;
	while (i>0)
	{
		n=sysInByte(774);
		i--;
	}
/*	for (i=7;i>-1;i--)
	{
	k=n%2;
	n=n/2;
//	In[i]=!k;
	Temp[i]=!k;
	//	if (CPI[i]!=Temp[i]) In[i]=Temp[i]
	}
*/	

	switch (n)	{
	case 0xFE:
		cb_DCpoweron();break;
	case 0xFD:
		cb_DCpoweroff();break;
	case 0xFB:
		cb_DCstart();break;
	case 0xF7:
		cb_DCstop();break;
	case 0xEF:
		cb_DCreset();break;
	case 0xDF:
		cb_DCemcstop();break;
	case 0xBF:
		cb_BWstart();break;
	case 0x7F:
		cb_BWstop();break;
	default: break;	
			}
}

/************** 
 * 函数名:Cpi_In
 * 功  能: 将控制面板的数据CPI【8】导入到In【8】
 * 
 *************/
void Cpi_In(void)
{	int i;
	for(i=0;i<8;i++)
	{
	In[i]=(bool)CPI[i];
	}
}

/************** 
 * 函数名:ImageOut
 * 功  能: 将Out【8】数据导出到DO【8】
 * 
 *************/
void ImageOut(void)
{	int n;
	n=Out[0]*128+Out[1]*64+Out[2]*32+Out[3]*16+Out[4]*8+Out[5]*4+Out[6]*2+Out[7];
	sysOutByte(772,n);
}

/************** 
 * 函数名:Cpi_Out
 * 功  能: 将Out【8】数据导出到控制面板的数据CPO【8】
 * 
 *************/
void Cpi_Out(void)
{	int i;
	for(i=0;i<8;i++)
	{
	  CPO[i]=Out[i];
	  CPO2[i]=(int)CPO[i];
	}
}

/************** 
 * 函数名:NegativeLogic
 * 功  能: 将Out【8】数据负(反)逻辑输出到DO
 * 
 *************/
void NegativeLogic(void)
{	int n;
	n=(!Out[0])*128+(!Out[1])*64+(!Out[2])*32+(!Out[3])*16+(!Out[4])*8+(!Out[5])*4+(!Out[6])*2+(!Out[7]);
	sysOutByte(772,n);
}

/************** 
 * 函数名:PreRun
 * 功  能: SoftPLC主函数
 * 
 *************/
void PreRun(void)   
{	
	int j;
	
 while(1)
 {	

   lb_ConnectBW->value(ConnectState); 

   DI2Panel();	//外部控制

  //上位机控制
  if (Flag_SPLC_NET == 1)
  {
	  switch(Flag_SPLC_NET_NO)
	  	{
	  		case 0: 
	  			cb_DCpoweron(); break;
			case 1:
				cb_DCpoweroff(); break;
			case 2: 
				cb_DCstart(); break;
			case 3: 
				cb_DCstop(); break;
			case 4: 
				cb_DCreset(); break;
			case 5: 
				cb_DCemcstop(); break;
			case 6: 
				cb_BWstart(); break;
			case 7: 
				cb_BWstop(); break;
			default: 
				break;
	  	}
	  	
	  Flag_SPLC_NET_NO = -1;  

	do
		Flag_SPLC_NET = 0;	
	while (	Flag_SPLC_NET != 0);	
		  	
  }

  if (Flag_SPLC == 1)
  {
	taskLock();
	
	j = 2;	//软PLC执行两次
	while (j > 0)
	{
		if (Flag_Chgil==1)
		{
			read_il();
			Flag_Chgil=0;
		}
		

	 {
		Cpi_In();
		RunIL(Segment, In, Out);
		Cpi_Out();
		
		DispChg();
		NegativeLogic();

		for(int i=0;i<8;i++)  //CPI[8] clear 
			{
		 		CPI[i]=0;
			}
	 }
		
		j--;
	}

	Flag_SPLC = 0;

	taskUnlock();	

  }	
  
  OSTaskDelay(200);  //300~350 比较合适
 }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -