📄 hpi.c
字号:
void ZHomeGridRead()
{
if(!bDSPStart)
return;
HPIWordWrite(HPIAAdr,ZHomeGrindAddress);
HPIWordRead(HPIDAdr, &ParameterValue.unZHomeGrid);
}
/*************************************************************************
* 函数名称: RadiasRead()
* 输入参数: *
* 无 *
* 输出参数: *
* 无 *
* *
**************************************************************************/
void RadiasRead()
{
if(!bDSPStart)
return;
HPIBlockRead(RadiasFeedBackAddress, (uchar *)&lRadiasFeedback, 4);
}
/*************************************************************************
* 函数名称: ZeroOffsetRead() *
* *
* 输入参数: *
* 无 *
* 输出参数: *
* 无 *
* *
**************************************************************************/
void ZeroOffsetRead()
{
if(!bDSPStart)
return;
if((ParameterValue.ucBitParameter3&0x01)!=0)
{
HPIWordWrite(HPIAAdr,YZeroOffsetAddress);
HPIWordRead(HPIDAdr, &ParameterValue.unYZeroOffset);
if((ParameterValue.unYZeroOffset<PARAMETERTABLE[26].lMin)||(ParameterValue.unYZeroOffset>PARAMETERTABLE[26].lMax))
ParameterValue.unYZeroOffset=2048;
}
if((ParameterValue.ucBitParameter3&0x02)!=0)
{
HPIWordWrite(HPIAAdr,ZZeroOffsetAddress);
HPIWordRead(HPIDAdr, &ParameterValue.unZZeroOffset);
if((ParameterValue.unZZeroOffset<PARAMETERTABLE[27].lMin)||(ParameterValue.unZZeroOffset>PARAMETERTABLE[27].lMax))
ParameterValue.unZZeroOffset=2048;
}
}
/*************************************************************************
* 函数名称: PitchOffsetWrite() *
* *
* 输入参数: *
* 无 *
* 输出参数: *
* 无 *
* *
**************************************************************************/
void PitchOffsetWrite()
{
if(!bDSPStart)
return;
HPIBlockWrite(YPitchOffsetAddress, (uchar *)&nYPitchOffset,512);
HPIBlockWrite(ZPitchOffsetAddress, (uchar *)&nZPitchOffset,512);
}
/*************************************************************************
* 函数名称: PLCDiagnoseSignelRead() *
* *
* 输入参数: *
* 无 *
* 输出参数: *
* 无 *
* *
**************************************************************************/
void PLCDiagnoseSignelRead()
{
if(!bDSPStart)
return;
HPIBlockRead(PLCDiagnoseSignelAddress, (uchar *)&PLCDiagnoseSignel, 114);
}
/*************************************************************************
* 函数名称: PLCProgramWrite() *
* *
* 输入参数: *
* 无 *
* 输出参数: *
* 送传结果 *
* *
**************************************************************************/
uchar PLCProgramWrite()
{
uint idata unLength;
uint idata unIndex;
uint idata unCounter;
uchar idata ucError;
uchar idata ucByteLow;
if((eAlarm<ParameterError)||((!bDSPStart)))
return(1);
unLength=unPLCProgramCodeUsed*3;
ucError=HPIWordWrite(HPIAAdr, (PLCProgramAddress-1)); //写入数据块的目标开始地址
if(ucError==1) //出错处理
return(1);
EA = 0; //关中断
for(unIndex=0;unIndex<unLength;unIndex++) //连续写数据,不用再写入地址
{
ucByteLow=*((uchar *)PLC_Code+ unIndex); //先取数,避免在HPI操作过程中读写外部数据
//高位恒为0x00
bHPI_HCS= 0;
unCounter=0;
bHPI_RDY=1;
while((!bHPI_RDY)&&(unCounter<1000))
unCounter++;
if(!bHPI_RDY)
return(1);
HPIOutputb(HPIIAdr1W)=0x00; //HPI的自增寄存器
unCounter=0;
bHPI_RDY=1;
while((!bHPI_RDY)&&(unCounter<1000))
unCounter++;
if(!bHPI_RDY)
return(1);
HPIOutputb(HPIIAdr2W)=ucByteLow;
bHPI_HCS= 1;
}
EA = 1; //开中断
return(0);
}
/*************************************************************************
* 函数名称: HandShakeRead() *
* *
* 输入参数: *
* 无 *
* 输出参数: *
* 读取的状态字 *
* *
**************************************************************************/
uchar HandShakeRead()
{
uchar idata ucByteTemp[8];
uchar idata ucCounter;
HPIBlockRead(HandShakeAddress, ucByteTemp, 8);
ucCounter=0;
while((ucCounter<8)&&(ucByteTemp[ucCounter++]==0x55));
if(ucCounter==8)
return(0x55);
ucCounter=0;
while((ucCounter<8)&&(ucByteTemp[ucCounter++]==0xAA));
if(ucCounter==8)
return(0xAA);
else
return(0);
}
/*************************************************************************
* 函数名称: HandShakewrite() *
* 函数用途: 送握手信号 *
* 输入参数: *
* ucByteHigh: 状态字高字节 *
* ucByteLow : 状态字低字节 *
* 输出参数: *
* 无 *
* *
**************************************************************************/
void HandShakeWrite(uchar ucByteHigh,uchar ucByteLow)
{
uchar idata ucByteTemp[8];
uchar idata ucCounter;
ucCounter=0;
while(ucCounter<8)
{
ucByteTemp[ucCounter++]=ucByteHigh;
ucByteTemp[ucCounter++]=ucByteLow;
}
HPIBlockWrite(HandShakeAddress, ucByteTemp, 8);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -