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

📄 running.cpp

📁 该程序实现的是一个在织布厂用的提花机程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		m=m/2;
		m_ind_j++;
	}
	if(error>0)
	{
//		StopRun();
//		WriteLines(m_ind_i);
		OK=FALSE;
	}
	return OK;
}
*/
BOOL CRunning::ByteToMapCheck(BYTE data)// old version, not used now
{
	BOOL OK=TRUE;
	int bit;
	int m=0x80;
	int error=0;
	for(int i=0;i<8;i++)
	{
		bit=data&m;
		if(bit!=0)
			bit=1;
		BitToMap(bit);
//		int bit_i=GetBit(0);    //  check latch_register data
		int bit_i=GetBit(1);    //  check shift_register data
		if(bit_i!=bit)     // methord 1: solftware compare
		{
			error++;
			m_ErrorRecord=m_WritePointer.j._int;
		}
//		if(GetError()==0)   // methord 2: hardware compare
//			error++;
		m=m/2;
		m_ind_j++;
	}
	if(error>3)   //0
	{
//		StopRun();
//		WriteLines(m_ind_i);
		OK=FALSE;
	}
	return OK;
}
BOOL CRunning::ByteToMapCheck(BYTE data,int byte_index)
{
	int bit;
	int m=0x80;
	BYTE data_return=0;
	for(int i=0;i<8;i++)  // send data byte and get return data, bit by bit,
	{
		data_return<<1;
		bit=data&m;
		if(bit!=0)
			bit=1;
		BitToMap(bit);
		int bit_i=GetBit(0);    //  check latch_register data
//		int bit_i=GetBit(1);    //  check shift_register data
		data_return|=bit_i;
		m>>1;
	}

	if(data_return!=data)
	{
//		m_data_error[byte_index]=1;
		m_ErrorRecord=byte_index;
		return FALSE;
	}
	return TRUE;
}
BOOL CRunning::ByteToMapCheckLast(BYTE data,int byte_index)
{
	int bit;
	int m=0x80;
	BYTE data_return=0;
	for(int i=0;i<8;i++)  // send data byte and get return data, bit by bit,
	{
		data_return<<1;
		bit=data&m;
		if(bit!=0)
			bit=1;
		BitToMap(bit);
		int bit_i=GetBit(0);    //  check latch_register data
//		int bit_i=GetBit(1);    //  check shift_register data
		data_return|=bit_i;
		m>>1;
	}

	if(data_return!=m_data_last[byte_index])
	{
//		m_data_error[byte_index]=1;
		m_ErrorRecord=byte_index;
		m_data_last[byte_index]=data;
		return FALSE;
	}
	m_data_last[byte_index]=data;
	return TRUE;
}

void CRunning::BitToMap(int bit)
{
	if(bit!=0)
		bit=1;
	int p=MAP_O;
	MAPO map;
//	map._bit.sdata=1;
	map._bit.sclk=0;
	map._bit.latch=1;
	_outp(p,map._byte);   //sclk=0
	map._bit.sdata=bit;
	_outp(p,map._byte);  //sdata=bit
	Delay1u();
	map._bit.sclk=1;
	_outp(p,map._byte);   //sclk=1
	Delay1u();
	Delay1u();
	Delay1u();
//	Delay1u();

}

void CRunning::LatchToMap()
{
	int p=MAP_O;
	MAPO map;
	map._bit.sdata=1;
	map._bit.sclk=1;
	map._bit.latch=0;
	_outp(p,map._byte);
//	for(int i=0;i<40;i++)
//		Delay1u();
	Delay();  
	map._bit.latch=1;
	_outp(p,map._byte);
	_outp(p,map._byte);
}
void CRunning::Delay1u()     //0.5us
{
	for(int i=0;i<100;i++)
	{
	}
}



void CRunning::InitialMap()
{
	int p=MAP_O;
	MAPO map;
	map._bit.sdata=1;
	map._bit.sclk=1;
	map._bit.latch=1;
	_outp(p,map._byte);
	_outp(p,map._byte);
}

void CRunning::SendControl(int CurrentBackward,int CurrentShutle)
{
	if(m_pWeaData==NULL)
		return;
	if(CurrentBackward==1)    //  快车、慢车
	{
		m_bFisrtBackward=1;
		SendControl(0);
		return;
	}
	else                      //  退纬
	{
		if(m_bFisrtBackward==1)    //  第1次退纬
		{
			m_bFisrtBackward=0;
			if(CurrentShutle==0)      // 第1次退纬,平中
			{
				SendControl(1);
				return;
			}
			else                       //  第1次退纬,不平中
			{
				SendControl(2);
				return;
			}
		}
		else                      //  第2、3、4...次退纬
		{
			SendControl(1);
			return;
		}
	}

}

void CRunning::SendControlBit(int i)
{
	int p=ABB_O;
	BYTE abb,k1,ls,control;
	abb=m_pWeaData->Abb[i][0]&0x0f;
	k1=m_pWeaData->ContInfo[i][2]&0x10;  //k1
//	ls=m_pWeaData->ContInfo[i][3]&0x10;  //ls     old ccjb format
//	ls=ls*2;
	ls=m_pWeaData->ContInfo[i][2]&0x08;  //ls    new ccjb format
	ls=ls*4;
	control=abb|k1|ls;
	_outp(p,control);
}
void CRunning::SendControl(int nWeft)
{
	int i;
	switch(nWeft)
	{
	case 0:
		i=m_WritePointer.i._int;
		SendControlBit(i);
		break;
	case 1:
		Forward1();
		i=m_WritePointer.i._int;
		SendControlBit(i);
		Backward1();
		break;
	case 2:
		Forward1();
		Forward1();
		i=m_WritePointer.i._int;
		SendControlBit(i);
		Backward1();
		Backward1();
	}
}

void CRunning::StopRun()
{
	m_weao._bit.ready=0;
	_outp(WEAVER_O,m_weao._byte);
//	SendControl();

}
void CRunning::StopRun(int num)
{
	m_weao._bit.ready=0;
	_outp(WEAVER_O,m_weao._byte);
	m_StopNum.Add(num);
}

void CRunning::StartRun()
{
	m_weao._bit.ready=1;
	_outp(WEAVER_O,m_weao._byte);
	_outp(PC_CLEAR_FPGALOCK_O,1);
	_outp(PC_CLEAR_FPGALOCK_O,1);
}

void CRunning::InitialWriterPointer()
{
	m_WritePointer.i._int=m_WritePointer.j._int=0;
	m_WritePointer.JobRepeat._int=m_WritePointer.WeaRepeat._int=0;
	m_WritePointer.WeaIndex._int=0;
}

void CRunning::DelayMs(int nMs)
{
	for(int i=0;i<2*nMs;i++)
		Delay();
}

void CRunning::DelayUs(int nUs)
{
	for(int i=0;i<2*nUs;i++)
		Delay1u();
}

int CRunning::GetBit(BOOL bInvert)
{
	int p=MAP_I;
	MAPI mapi;
	int bit;
	mapi._byte=_inp(p);
	bit=mapi._bit.sdata_i;
	if(bInvert!=0)
		bit=1-bit;
	return bit;
}

BOOL CRunning::GetError()
{
	int p=MAP_I;
	MAPI mapi;
	BOOL error;
	mapi._byte=_inp(p);
	error=mapi._bit.error;
	return error;
}

void CRunning::GetRecord()
{
	int p=PC_MEM_START_O;
	m_WritePointer.WeaIndex._byte._l=_inp(p);
//	m_WritePointer.WeaIndex._byte._l=0;         //==============
	p++;
	m_WritePointer.WeaIndex._byte._h=_inp(p);
//	m_WritePointer.WeaIndex._byte._h=0;         //==============
	p++;
	m_WritePointer.i._byte._l=_inp(p);
//	m_WritePointer.i._byte._l=0;                //===============
	p++;
	m_WritePointer.i._byte._h=_inp(p);
//	m_WritePointer.i._byte._h=0;               //================
	p++;
	m_WritePointer.WeaRepeat._byte._l=_inp(p);
	p++;
	m_WritePointer.WeaRepeat._byte._h=_inp(p);
	p++;
	m_WritePointer.JobRepeat._byte._l=_inp(p);
	p++;
	m_WritePointer.JobRepeat._byte._h=_inp(p);
}
void CRunning::WriteError()
{
	return;
/*	CString fn;
	DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
	LPCTSTR lpszFilter = ".txt Files(*..txt)|*.txt|All files(*.*)|*.*||";
	CFileDialog dlg(FALSE,NULL,NULL,dwFlags,lpszFilter,NULL);
	if(dlg.DoModal() == IDOK)
	{
		fn=dlg.GetPathName();
	}
	else
		return;
	CStdioFile file;
	CFileException fe;
	if (!file.Open(fn, CFile::modeCreate| CFile::modeWrite , &fe))
	{
		AfxMessageBox("File create error");
		return;
	}
	CString buff_o,buff_i,temp1,temp2;
	int k=0;
	for(int i=0;i<2688/32;i++)
	{
		buff_o.Format("output, MaP %d:",i+1);
		buff_i.Format("return, MaP %d:",i+1);
		int errorline=0;
		for(int j=0;j<32;j++)
		{
			temp1.Format("%d",m_data_o[k]);
			int error=1-(m_data_i[k]^m_data_o[k]);
			temp2.Format("%d",error);
			if(error==1)
				errorline=1;
			buff_o=buff_o+temp1;
			buff_i=buff_i+temp2;
			k++;
		}
		if(errorline==1)
			buff_i=buff_i+CString(" error");
		buff_o=buff_o+CString("\n");
		buff_i=buff_i+CString("\n");
		file.WriteString(buff_o);
		file.WriteString(buff_i);
	}
	file.Close();
*/}
void CRunning::Record()
{
	int p=PC_MEM_START_O;
	BYTE d=m_WritePointer.WeaIndex._byte._l;
	_outp(p,d);
	p++;
	d=m_WritePointer.WeaIndex._byte._h;
	_outp(p,d);
	p++;
	d=m_WritePointer.i._byte._l;
	_outp(p,d);
	p++;
	d=m_WritePointer.i._byte._h;
	_outp(p,d);
	p++;
	d=m_WritePointer.WeaRepeat._byte._l;
	_outp(p,d);
	p++;
	d=m_WritePointer.WeaRepeat._byte._h;
	_outp(p,d);
	p++;
	d=m_WritePointer.JobRepeat._byte._l;
	_outp(p,d);
	p++;
	d=m_WritePointer.JobRepeat._byte._h;
	_outp(p,d);

}


void POINTER::ClearPointer()
{
	i._int=0;
	j._int=0;
	WeaIndex._int=0;
	WeaRepeat._int=0;
	JobRepeat._int=0;
}

POINTER& POINTER::operator=(const POINTER& pointer)
{
	this->i._int=pointer.i._int;
	this->j._int=pointer.j._int;
	this->WeaIndex._int=pointer.WeaIndex._int;
	this->WeaRepeat._int=pointer.WeaRepeat._int;
	this->JobRepeat._int=pointer.JobRepeat._int;
	return *this;
}
void CRunning::WriteLines()
{
	if(m_data_o==NULL)
		return;
	if(m_data_i==NULL)
		return;
	CString fn;
	DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
	LPCTSTR lpszFilter = ".txt Files(*..txt)|*.txt|All files(*.*)|*.*||";
	CFileDialog dlg(FALSE,NULL,NULL,dwFlags,lpszFilter,NULL);
	if(dlg.DoModal() == IDOK)
	{
		fn=dlg.GetPathName();
	}
	else
		return;
	CStdioFile file;
	CFileException fe;
	if (!file.Open(fn, CFile::modeCreate| CFile::modeWrite , &fe))
	{
		AfxMessageBox(IDS_OPEN_ERROR+g_language);
		return;
	}
	CString buff_o,buff_i,temp1,temp2;
	for(int line=0;line<SAVED_LINES;line++)
	{
	int k=0;
		for(int i=0;i<2688/32;i++)
		{
		buff_i.Format("%d ",line);
		buff_o.Format("%d ",line);

		temp1.Format("output, MaP %d:",84-i);
		temp2.Format("return, MaP %d:",84-i);
		buff_o+=temp1;
		buff_i+=temp2;
			int errorline=0;
			for(int j=0;j<32;j++)
			{
				BYTE bit_o=m_data_o[line][k];
				if(bit_o>1)
					bit_o=1;
	//				AfxMessageBox("bit_o>1!");
				temp1.Format("%d",bit_o);
				BYTE bit_i=m_data_i[line][k];
				if(bit_i>1)
					bit_i=1;
//			AfxMessageBox("bit_i>1!");
				int error=(bit_i^bit_o);
				temp2.Format("%d",bit_i);
				if(error==1)
					errorline=1;
				buff_o=buff_o+temp1;
				buff_i=buff_i+temp2;
				k++;
			}
			if(errorline==1)
				buff_i=buff_i+CString(" error");
			buff_o=buff_o+CString("\n");
			buff_i=buff_i+CString("\n");
			file.WriteString(buff_o);
			file.WriteString(buff_i);
		}
	}
	file.Close();
	m_ind_i=0;
	for(int i=0;i<SAVED_LINES;i++)
		for(int j=0;j<2688;j++)
		{
			m_data_i[i][j]=0;
			m_data_o[i][j]=0;
		}
}

void CRunning::WriteLines(int nLine)
{
	CString fn;
	DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
	LPCTSTR lpszFilter = ".txt Files(*..txt)|*.txt|All files(*.*)|*.*||";
	CFileDialog dlg(FALSE,NULL,NULL,dwFlags,lpszFilter,NULL);
	if(dlg.DoModal() == IDOK)
	{
		fn=dlg.GetPathName();
	}
	else
		return;
	CStdioFile file;
	CFileException fe;
	if (!file.Open(fn, CFile::modeCreate| CFile::modeWrite , &fe))
	{
		AfxMessageBox(IDS_OPEN_ERROR+g_language);
		return;
	}
	CString buff_o,buff_i,temp1,temp2;
	int line=nLine;
	{
	int k=0;
		for(int i=0;i<2688/32;i++)
		{
		buff_i.Format("%d ",line);
		buff_o.Format("%d ",line);

		temp1.Format("output, MaP %d:",84-i);
		temp2.Format("return, MaP %d:",84-i);
		buff_o+=temp1;
		buff_i+=temp2;
			int errorline=0;
			for(int j=0;j<32;j++)
			{
				BYTE bit_o=m_data_o[line][k];
				if(bit_o>1)
					bit_o=1;
				temp1.Format("%d",bit_o);
				BYTE bit_i=m_data_i[line][k];
				if(bit_i>1)
					bit_i=1;
//			AfxMessageBox("bit_i>1!");
				int error=(bit_i^bit_o);
				temp2.Format("%d",bit_i);
				if(error==1)
					errorline=1;
				buff_o=buff_o+temp1;
				buff_i=buff_i+temp2;
				k++;
			}
			if(errorline==1)
				buff_i=buff_i+CString(" error");
			buff_o=buff_o+CString("\n");
			buff_i=buff_i+CString("\n");
			file.WriteString(buff_o);
			file.WriteString(buff_i);
		}
	}
	file.Close();
/*	m_ind_i=0;
	for(int i=0;i<SAVED_LINES;i++)
		for(int j=0;j<2688;j++)
		{
			m_data_i[i][j]=0;
			m_data_o[i][j]=0;
		}
*/}

/*int CRunning::GetErrorMap(int ErrorLine)// old version, not used now
{
	int* rec;
	int nErrMap=0;
	rec=new int[84];
	int line=ErrorLine;
	int k=0;
	for(int i=0;i<84;i++)
	{
		int errorline=0;
		for(int j=0;j<32;j++)
		{
			BYTE bit_o=m_data_o[line][k];
			if(bit_o>1)
				bit_o=1;
			BYTE bit_i=m_data_i[line][k];
			if(bit_i>1)
				bit_i=1;
			int error=(bit_i^bit_o);
			if(error==1)
				errorline=1;
			k++;
		}
		if(errorline==1)   //save result in inverse order
			rec[84-i-1]=1;  //  Map Error
		else
			rec[84-i-1]=0;  //  Map OK
	}
	for(i=0;i<84;i++)
	{
		if(rec[i]==1)
		{
			nErrMap=i+1;
			break;
		}
	}
	delete rec;

	return nErrMap;

}
*/
int CRunning::GetErrorMap()
{
	
	int nErrMap=(m_nLineByte-m_ErrorRecord-1)/4+1;
	m_ErrorRecord=m_nLineByte;
	return nErrMap;
/*
	int nErrMap=0;
	for(int i=m_nLineByte;i>0;i--)
	{
		if(m_data_error[i-1]!=0)
		{
			nErrMap=(m_nLineByte-i)/4+1;
			for(int j=i;j>0;j--)
			{
				m_data_error[i-1]=0;
			}

			return nErrMap;
			break;
		}
	}

	return 0;
*/
}

⌨️ 快捷键说明

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