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

📄 test.c

📁 该程序实现的是一个在织布厂用的提花机程序
💻 C
字号:
#include "wea_dos.h"
void SendEnableLevel(int level)
{
	int p;
	int d=0;
	if(level==0)
		p=PC_ENABLE_L_O;
	else
		p=PC_ENABLE_H_O;
	outb(p,d);
}
void SendSclks(int nSclk,int data)
{                          	int p=MAP_O;
	MAPO mapo;
	int i;
	mapo._bit.sclk=1;
	mapo._bit.sdata=data;
	outb(p,mapo._byte);      //sclk=1
	if(nSclk==0)
		return;
	for(i=0;i<nSclk;i++)
	{
		mapo._bit.sclk=0;
		outb(p,mapo._byte);  //sclk=0
		DelayUs(1);
		mapo._bit.sclk=1;
		outb(p,mapo._byte);   //sclk=1
		DelayUs(2);    // delay 2.5uS
	}
}

BYTE GetByte(BOOL bInvert)
{
	int p=MAP_I;
	int i;
	MAPI mapi;
	BYTE data=0;
	for(i=0;i<8;i++)
	{
		data=data*2;
		SendSclks(1,1);
		mapi._byte=inb(p);
		if(bInvert!=0)
			mapi._bit.sdata_i=1-mapi._bit.sdata_i;
		data=data+mapi._bit.sdata_i;
	}
	return data;
}
void SendEnable(int TimeWidth)
{
	int t=TimeWidth*2;
	int p=PC_ENABLE_L_O;
	int d=0;
	outb(p,d);
	p=PC_ENABLE_H_O;
	outb(p,d);
	DelayMs(t);
	p=PC_ENABLE_L_O;
	outb(p,d);
}

BOOL InitialMap(int nMap)
{
	int i;
	int p=MAP_I;
	MAPI mapi;
	for(i=0;i<nMap*4;i++)
	{
		SendByte(0x00);
		DelayUs(5);
	}
	DelayMs(20);
	SendLatch();
	DelayUs(10);
	SendEnable(10);
	DelayMs(20);
	for(i=0;i<32;i++)  // for check
	{
		SendBit(1);  //  shift-register=1
		mapi._byte=inb(p);   // invert to 0 at outport 
		if(mapi._bit.sdata_i==1)  
			return FALSE;
	}
	return TRUE;

}

BYTE DataGen(DATA_TYPE type,int index)
{
	BYTE k,buff,j;
	switch(type)
	{
	case all_one:
		return 0xff;
	case all_zero:
		return 0;
	case d1010:
		return 0xaa;
	case d0101:
		return 0x55;
	case d123:
		return (index+1)%256;
	case width_var:
		k=(index)%7;
		buff=1;
		for(j=1;j<=k;j++)
			buff=buff | (1<<j);
		return buff;
	default:
		return 0;
	}
}

BOOL DataTrans(int nMap,DATA_TYPE type,char* info,int* m_errn)
{
	BOOL OK1=TRUE;
	char info1[50];
	BYTE data_i,data_o;
	BYTE m_do[1024];
	BYTE m_di1[1024];
	BYTE m_di2[1024];
	int i,j;
	BOOL OK=TRUE;

	for(i=0;i<nMap;i++)
		for(j=0;j<4;j++)
		{
			data_o=DataGen(type,4*i+j);
			SendByte(data_o);
			m_do[4*i+j]=data_o;
			DelayUs(30);
		}
	DelayMs(20);
	SendLatch();
	for(i=0;i<nMap;i++)
		for(j=0;j<4;j++)
		{
			data_i=GetByte(1);//1
			m_di1[4*i+j]=data_i;
			if(data_i!=m_do[4*i+j])
			{
				OK=FALSE;
			}
			DelayUs(30);
		}
		if(OK==FALSE)
			strcpy(info,"shift-register error\r\n");

	for(i=0;i<nMap;i++)
		for(j=0;j<4;j++)
		{
			SendByte(m_do[4*i+j]);
			DelayUs(30);
		}
	DelayMs(20);
	SendLatch();
	SendLatch();
	SendEnable(50);
	DelayMs(20);
	for(i=0;i<nMap;i++)
		for(j=0;j<4;j++)
		{
			data_i=GetByte(0); //0
			m_di2[4*i+j]=data_i;
			if(data_i!=m_do[4*i+j])
			{
				BYTE error=data_i^m_do[4*i+j];
//				if(OK1==TRUE)
				{
					sprintf(info1,"Flip-latch error: MAP %d ?\r\n",nMap-i);
				}
				OK1=FALSE;
				m_errn[0]=nMap-i;
			}
			DelayUs(30);
		}
		if(OK1==FALSE)
			strcat(info,info1);
		else
			strcpy(info," OK\n");

	return OK&OK1;
	
}
BOOL TestDataTrans(char* info,int nMap,int* m_errn)
{
	char info1[50];
	BOOL b=1;
	info1[0]='\0';
	InitialMap(nMap);
	DelayMs(10);

	if(CheckDataConnect(info)==FALSE)
		return 0;
	strcpy(info,"\rTest:12345678...: ");
	if(DataTrans(nMap,d123,info1,m_errn)==FALSE)
	{
		b=0;
		strcat(info,info1);
	}
	else
		strcat(info,"OK\r\n");
/*
	strcpy(info1,"");
	strcat(info,"Test:1111111...: ");
	if(DataTrans(nMap,all_one,info1)==FALSE)
		strcat(info,info1);
	else
		strcat(info,"OK\r\n");
*/
	strcpy(info1,"");
	strcat(info,"\rTest:00000000...: ");
	if(DataTrans(nMap,all_zero,info1,m_errn)==FALSE)
	{	b=0;
		strcat(info,info1);
	}
	else
		strcat(info,"OK\r\n");

	strcpy(info1,"");
	strcat(info,"Test:10101010...: ");
	if(DataTrans(nMap,d1010,info1,m_errn)==FALSE)
	{
		b=0;
		strcat(info,info1);
	}
	else
		strcat(info,"OK\r\n");

	strcpy(info1,"");
	strcat(info,"Test:01010101...: ");
	if(DataTrans(nMap,d0101,info1,m_errn)==FALSE)
	{
		b=0;
		strcat(info,info1);
	}
	else
		strcat(info,"OK\r\n");

	strcpy(info1,"");
	strcat(info,"Test:width change...: ");
	if(DataTrans(nMap,width_var,info1,m_errn)==FALSE)
	{
		b=0;
		strcat(info,info1);
	}
	else
		strcat(info,"OK\r\n");

	
	SendZero(nMap);
        return b;
}

BOOL TestPower(int nMapTotal,int* nMap,char* info)
{
	MAPI mapi;
	int i,j;
	mapi._byte=inb(MAP_I);
	if(mapi._bit.ps==0)
	{
		strcpy(info,"\rPower Error !");
		return FALSE;
	}

	for(i=0;i<nMapTotal;i++)
		SendByte(0);
	for(i=0;i<32;i++)
		SendBit(1);
	for(i=0;i<nMapTotal;i++)
	{
		DelayMs(5);
		SendLatch();
		DelayMs(5);
		SendEnableLevel(1);
		DelayMs(15);
		mapi._byte=inb(MAP_I);
		SendEnableLevel(0);
		DelayMs(5);
		if(mapi._bit.ps==0)
			break;
		for(j=0;j<32;j++)
			SendByte(0);
	}
	*nMap=i;
	if(i==nMapTotal)
	{
		strcpy(info,"\rPower OK");
		return TRUE;
	}
	else
	{
		sprintf(info,"\rPower ERROR, Check Map %d (overload)",i+1);
		return FALSE;
	}
}

void SetOnesOnMap(int nMap,int nMapTotal)
{
	int i;
	for(i=0;i<nMapTotal*4;i++)
		SendByte(0);
	for(i=0;i<32;i++)
		SendBit(1);
	for(i=0;i<nMap*32;i++)
		SendBit(0);
}	

void SetOneAt(int nMap,int nBit,int nMapTotal)
{
	int i;
	for(i=0;i<nMapTotal*4;i++)
		SendByte(0);
	SendBit(1);
	for(i=0;i<nMap*32+nBit;i++)
		SendBit(0);
}

int GetAt(int nMap,int nBit,int nMapTotal)
{
	int i;
	MAPI mapi;
	int p=MAP_I;
	for(i=nMap*32+nBit;i<nMapTotal*32;i++)
	{
		SendBit(0);
	}
//	DelayMs(10);
	mapi._byte=inb(p);
	return mapi._bit.sdata_i;
}

int TestOC_SC(int nMap,int Bit,int nMapTotal)
{
	MAPI mapi;
	int ret;
	SetOneAt(nMap,Bit,nMapTotal);
	DelayMs(5);
	SendLatch();
	DelayMs(5);
	SendEnableLevel(1);
	DelayMs(15);
	mapi._byte=inb(MAP_I);
	SendEnableLevel(0);
	DelayMs(5);
	if(mapi._bit.ps==0)
		return 1;           // SC
	DelayMs(5);
	ret=GetAt(nMap,Bit,nMapTotal);
	if(ret==0)
		return 2;          //  OC
	return 0;              //  OK
}

BOOL TestMapOC_SC(char* info,int nMap,int nMapTotal)
{
	MAPI mapi;
	BOOL ok,OCOK,SCOK;
	int i,j,nsc,err; 
	char octemp[50],sctemp[50],ocinfo[50],scinfo[50];
	char mapsc[50],mapoc[50];

	if(CheckDataConnect(info)==FALSE)
		return FALSE;
	for(i=0;i<nMapTotal*32;i++)
	{
		SendBit(0);
	}
	DelayMs(5);
	SendLatch();
	DelayMs(5);
	SendEnableLevel(1);
	DelayMs(15);
	mapi._byte=inb(MAP_I);
	SendEnableLevel(0);
	DelayMs(5);
	if(mapi._bit.ps==0)
	{
		strcpy(info,"Power Error");
		return FALSE;
	}

	ok=TRUE;
	sprintf(info,"Map %d: ",nMap+1);
	sprintf(ocinfo,"Magnet open-circuit: \n");
	sprintf(scinfo,"Magnet short-circuit: \n");

	OCOK=1;
	SCOK=1;
	sprintf(mapsc,"Map %d: ",nMap+1);
	sprintf(mapoc,"Map %d: ",nMap+1);
	nsc=0;
	for(j=0;j<32;j++)
	{
		err=TestOC_SC(nMap,j,nMapTotal);
		if(err==1)
		{
				ok=0;
				SCOK=0;
				sprintf(sctemp,"%d ",j+1);
				strcat(mapsc,sctemp);
				nsc++;
		}
		if(err==2)
		{
				ok=0;
				OCOK=0;
				sprintf(octemp,"%d ",j+1);
				strcat(mapoc,octemp);
		}
	}
	if(SCOK==0)
	{
		if(nsc>=30)
			sprintf(mapsc,"  MAP %d: Leak and 1a-32a short-circuit,\n\r  or power not connected",nMap+1);
		strcat(scinfo,mapsc);
		strcat(scinfo,"\n\r");
	}
	else
		strcat(scinfo,"  OK\n\n\r");
	if(OCOK==0)
	{
		sprintf(octemp,"Map: %d",i+1);
		strcat(ocinfo,mapoc);
		strcat(ocinfo,"\n\r");
	}
	else
		strcat(ocinfo,"OK\n\r");

	if(ok==FALSE)
	{
		strcat(info,scinfo);
		strcat(info,ocinfo);
	}
	else
	{
		sprintf(scinfo,"Magnet test OK.\n\rNo open-circuit and short-circuit found");
		strcat(info,scinfo);
	}
	return ok;

}

void SetLedForTest(int MapTest,int nMapTotal,BOOL bOn)
{
//	TEST_8TO1 data_o;  
//	BYTE data7f;
	InitialMap(nMapTotal);           //all LEDs off

	if(bOn)
		SetOneAt(MapTest,31,nMapTotal);
	return;
	
}

BOOL LedTestSingle(char*info,int MapTest,int nMapTotal)
{
	MAPI mapi;
	int p;
	p=MAP_I;
	SetLedForTest(MapTest,nMapTotal,0);
	DelayMs(10);
	mapi._byte=inb(p);
	if(mapi._bit.test!=1)
	{
		sprintf(info,"LED error on MAP %d when set 0",MapTest+1);
		return FALSE;
	}
	SetLedForTest(MapTest,nMapTotal,1);
	DelayMs(10);
	mapi._byte=inb(p);
	if(mapi._bit.test!=0)
	{
		sprintf(info,"LED error on MAP %d when set 1",MapTest+1);
		return FALSE;
	}
	sprintf(info,"MAP %d : LED OK\r\n",MapTest+1);
	return TRUE;
}
void LedTestAll(char*info,int nMapTotal)
{
	int i,n;
	char tmp[50];
	strcpy(info,"LED Error on MAP: ");
	n=strlen(info);
	for(i=0;i<nMapTotal;i++)
	{
		if(LedTestSingle(tmp,i,nMapTotal)==FALSE)
		{
			sprintf(tmp,"%d ",i+1);
			strcat(info,tmp);
		}
	}
	if(strlen(info)==n)
		sprintf(info,"LED 1-%d OK\r\n",nMapTotal);

}
void LedTest(char* info,int MapTest,int nMapTotal)
{
/*	if(MapTest>0)
	{
		LedTestSingle(info,MapTest-1,nMapTotal);
//		sprintf(info,"Test single LED...");
		DisplayTest(info);

	}
	else
	{
		LedTestAll(info,nMapTotal);
//		sprintf(info,"Test All LED...");
		DisplayTest(info);
	}
*/
	char info1[100];
	if(MapTest>0)
		sprintf(info1,"LED on MAP %d flashing...",MapTest);
	else
		sprintf(info1,"LED on all MAP flashing...");
	DisplayInfo(info1);
	LedFlash(MapTest,nMapTotal);
//		sprintf(info,"Exit LED test");
//		DisplayTest(info);
//	DisplayTest(info);
}

void LedFlash(int MapFlash,int nMapTotal)
{
	char info[50];
	BOOL bFlash;
	int i;
	BYTE data;
	BYTE key;
	bFlash=1;
	do
	{
		if(MapFlash>0)
		{
			SetLed(MapFlash-1,nMapTotal,1); //LED on
			DelayMs(200);
			SetLed(MapFlash-1,nMapTotal,0); //LED off
			DelayMs(500);
		}
		else
		{
			for(i=0;i<nMapTotal;i++) // all LED on
			{
				data=0x80;
				SendByte(data);
				data=0;
				SendByte(data);
				SendByte(data);
				SendByte(data);
			}
			SendLatch();
			DelayMs(200);
			data=0;
			for(i=0;i<nMapTotal*4;i++) // all LED off
			{
				SendByte(data);
			}
			SendLatch();
			DelayMs(200);
		}

		key=inb(0x60)&0x7f;
//		window(1,10,80,11);
//		clrscr();
//		gotoxy(1,1);
//		sprintf(info,"key=%0x ",key);
//		cprintf(info);
		DelayMs(50);
		switch(key)
		{
	//	case 0x20: //'D' data trans.
	//	case 0x19: //'P' Power
	//	case 0x12: //'E' exit
	//	case 0x1e: //'A' All
	//	case 0x1f: //'S' single
	//	case 0x18: //'O'
	//	case 0x32: //'M' Magnet
	//	default:
                case 0x2e:  // 'C'
		        bFlash=0;
		    	getch();
		}
	}while(bFlash);

}


void SetLed(int nMap,int nMapTotal,BOOL bOn)
{
	BYTE data;
	int i;
	SendZero(nMapTotal);// all LED off
	if(bOn==1)
		data=0x80;
	else
		data=0;
	SendByte(data);
	data=0;
	SendByte(data);
	SendByte(data);
	SendByte(data);
	
	for(i=0;i<nMap;i++)
	{
		SendByte(data);
		SendByte(data);
		SendByte(data);
		SendByte(data);
	}
	SendLatch();          // the LED on or off
}

/*

BOOL CTest::TestLed(int BoardNumber,CString& info)
{
	int p=MAP_I;
	MAPI mapi;
	int test;

	g_bFlashLED=0;
	while(m_bFlashing)
	{}

	SetLedForTest(BoardNumber,0);
	g_running.DelayMs(10);
	mapi._byte=_inp(p);
	test=mapi._bit.test;
	if(test!=1)
	{
		info.Format(IDS_LED_ERROR+g_language,BoardNumber+1,0);
		return FALSE;
	}
	SetLedForTest(BoardNumber,1);
	g_running.DelayMs(10);
	mapi._byte=_inp(p);
	test=mapi._bit.test;
	if(test!=0)
	{
		info.Format(IDS_LED_ERROR+g_language,BoardNumber+1,1);
		return FALSE;
	}
	CString s;
	info.Format(IDS_MAP+g_language,BoardNumber+1);
	s.Format("LED OK\n");
	info=info+s;

//	SendLatch();
	return TRUE;
}
BOOL CTest::TestLed(CString& info)
{
	g_bFlashLED=0;
	while(m_bFlashing)
	{}
	CUIntArray Error;
	Error.RemoveAll();
	info.Empty();
	if(m_nMap<=0)
	{
		info.Format(IDS_ERROR_MAP_NUMBER+g_language);
		return FALSE;
	}
	CString temp;
	for(int i=0;i<m_nMap;i++)
	{
		if(TestLed(i,temp)==FALSE)
		{
			Error.Add(i);
			info=info+temp;
		}
	}

	g_bFlashLED=0;
	while(m_bFlashing)
	{}

	if(info.IsEmpty()==TRUE)
	{
		info.Format("LED 1-%d OK\n",m_nMap);
		return TRUE;
	}
	SetLed(Error);
	return FALSE;
}
union TEST_8TO1
{
	struct
	{
		unsigned 	ItemSelect:3;
		unsigned 	d3:1;
		unsigned 	BoardSelect:1; // effective low '0'
		unsigned 	d5:1;
		unsigned 	d6:1;
		unsigned 	d7:1;
	}	bit;
	BYTE byte;
	TEST_8TO1()
	{	byte=0xff;
		bit.BoardSelect=0;
	}
} ;
void CTest::SetLedForTest(int BoardNumber,BOOL bOn)
{
	TEST_8TO1 data_o;  
	InitialMap();           //all LEDs off

	if(bOn)
		SetOneAt(BoardNumber,31);
	return;
	
	
	SendLatch();            //all LEDs on
	g_running.DelayMs(1);
	SendEnable(30);         //all LEDs off
	g_running.DelayMs(1);
	SendSclks(1,bOn);      // D31=bOn,
	SendSclks(23);
	data_o.bit.ItemSelect=D31;
	SendByte(data_o.byte);
	g_running.DelayMs(1);
	BYTE data7f=0x7f;
	if(BoardNumber>0)
	{
		for(int i=0;i<BoardNumber;i++)
		{
			SendByte(data7f);
			SendByte(data7f);
			SendByte(data7f);
			SendByte(data7f);
		}
	}
	SendLatch();          // the LED on or off
}
UINT FlashLED(LPVOID pParam)
{
	g_test.m_bFlashing=1;
	int errn=g_test.m_errn;
	g_bFlashLED=1;
	while(g_bFlashLED)
	{
		if(errn!=0)
		{
			g_test.SetLed(errn-1,1);
			if(g_bFlashLED==0)
				break;
			g_running.DelayMs(200);
			if(g_bFlashLED==0)
				break;
			g_test.SetLed(errn-1,0);
			if(g_bFlashLED==0)
				break;
			g_running.DelayMs(500);
		}
		else
		{
			for(int i=0;i<g_test.m_nMap;i++) // all LED on
			{
				BYTE data=0x80;
				g_test.SendByte(data);
				data=0;
				g_test.SendByte(data);
				g_test.SendByte(data);
				g_test.SendByte(data);
			}
			g_test.SendLatch();
			if(g_bFlashLED==0)
				break;
			g_running.DelayMs(200);
			BYTE data=0;
			for(i=0;i<g_test.m_nMap*4;i++) // all LED off
			{
				g_test.SendByte(data);
			}
			g_test.SendLatch();
			if(g_bFlashLED==0)
				break;
			g_running.DelayMs(200);
		}
	}


	g_test.m_bFlashing=0;
	return 0;
}
*/

⌨️ 快捷键说明

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