📄 pm5400.cpp
字号:
//函数返回值:
// 0 表成功
// -1 表示调用出错,应该进一步调用GetDll_LastErrNO函数查找出错原因
//检查参数
nAddr = CheckAddr(nAddr);//使地址在0x100--0x3F0之间
nGroup = nGroup - m_nCountFrom;
if( nGroup > pm5400.MaxIOGroup ) m_errorLevel = ERR_PARAMETER2;
IOModeCheck = ( IOModeCheck != 0 ) ? 1 : 0;
if( IOModeCheck != 0 )
{
//读当前工作方式字
unsigned short currIOMode;
currIOMode = ReadW( nAddr, pm5400.ROff_IOMode );
//如果某组设为输入状态,但调用此函数(输出),说明执行了错误的操作
if( GetULongXBit( currIOMode, nGroup ) == 0 )
m_errorLevel = ERR_FUNC_OPERATE;
}
//若用户参数错,不继续执行
if(m_errorLevel != ZT_SUCCESS) return -1;
unsigned short getVal;
getVal = ReadW( nAddr, pm5400.ROff_DOGroup[nGroup] );
//设置开关量输出状态
if( (nGroup % 2) != 0 )
{
getVal = getVal & 0x00FF; //把高8位设为0
getVal = getVal + (unsigned char)nStateAll * 0x100; //把高8位设为用户设定值
}
else
{
getVal = getVal & 0xFF00; //把低8位设为0
getVal = getVal + (unsigned char)nStateAll; //把低8位设为用户设定值
}
WriteW( nAddr, pm5400.ROff_DOGroup[nGroup], getVal );
return ZT_SUCCESS;
}
//函数结束</5400>
//函数开始<DZS>
long _stdcall ZT_DZS05_SetIOMode(unsigned long nAddr,\
unsigned long nGroup,\
unsigned long nIOMode)
{
//函数功能:设置某一组开关量的输入输出模式
//入口参数:nAddr 板卡基地址
// nGroup 组号(1-12)共12组
// nIOMode 设置IO方式,0 = 输入方式,1 = 输出方式
//函数返回值:
// 0 表示成功
// -1 表示调用出错,应该进一步调用GetDll_LastErrNO函数查找出错原因
//检查参数
nAddr = CheckAddr(nAddr);//使地址在0x100--0x3F0之间
nGroup = nGroup - m_nCountFrom;
if( nGroup > pm5400.DSZ_MaxIOGroup ) m_errorLevel = ERR_PARAMETER2;
nIOMode = ( nIOMode != 0 ) ? 1 : 0;
//若用户参数错,不继续执行
if(m_errorLevel != ZT_SUCCESS) return -1;
if(nGroup<4||nGroup>9){
unsigned short currIOMode;
currIOMode = ReadW( nAddr, pm5400.DZS_ROff_IOMode1 );
currIOMode = (unsigned short)SetULongXBit( currIOMode, nGroup, nIOMode );
//写工作方式字
WriteW( nAddr, pm5400.ROff_IOMode, currIOMode);
}
else{
unsigned short currIOMode;
currIOMode = ReadW( nAddr, pm5400.DZS_ROff_IOMode2 );
currIOMode = (unsigned short)SetULongXBit( currIOMode, nGroup, nIOMode );
//写工作方式字
WriteW( nAddr, pm5400.ROff_IOMode, currIOMode);
}
return ZT_SUCCESS;
}
//函数结束</DZS>
//函数开始<DZS>
long _stdcall ZT_DZS05_DIAll(unsigned long nAddr,\
unsigned long nGroup,\
unsigned long IOModeCheck)
{
//函数功能:得到某组中所有通道的开关量输入状态,注意每8个通道为一组
//入口参数:nAddr 板卡基地址
// nGroup 组号(1-12)每8个通道为一组,共12组
// IOModeCheck 设置是否检查IO工作方式与当前的操作相抵触
// 0 = 不检查,1 = 检查
//函数返回值:
// 0 表示这组的8个通道输入全为低电平
// 0xFF 表示这组的8个通道输入全为高电平
// -1 表示调用出错,应该进一步调用GetDll_LastErrNO函数查找出错原因
//检查参数
nAddr = CheckAddr(nAddr);//使地址在0x100--0x3F0之间
nGroup = nGroup - m_nCountFrom;
if( nGroup > pm5400.DSZ_MaxIOGroup ) m_errorLevel = ERR_PARAMETER2;
IOModeCheck = ( IOModeCheck != 0 ) ? 1 : 0;
if( IOModeCheck != 0 )
{
//读当前工作方式字
unsigned short currIOMode;
if(nGroup<4||nGroup>9){
currIOMode = ReadW( nAddr, pm5400.DZS_ROff_IOMode1 );
//如果某组设为输出状态,但调用此函数(输入),说明执行了错误的操作
if( GetULongXBit( currIOMode, nGroup ) != 0 )
m_errorLevel = ERR_FUNC_OPERATE;
}
else{
currIOMode = ReadW( nAddr, pm5400.DZS_ROff_IOMode2 );
//如果某组设为输出状态,但调用此函数(输入),说明执行了错误的操作
if( GetULongXBit( currIOMode, nGroup ) != 0 )
m_errorLevel = ERR_FUNC_OPERATE;
}
}
//若用户参数错,不继续执行
if(m_errorLevel != ZT_SUCCESS) return -1;
unsigned short getVal;
getVal = ReadW( nAddr, pm5400.DZS_ROff_DIOGroup[nGroup] );
return ( getVal ) & 0xFF;
//>> ((nGroup % 2) * 8) ) & 0xFF;
}
//函数结束</DZS>
//函数开始<DZS>
long _stdcall ZT_DZS05_DOAll(unsigned long nAddr,\
unsigned long nGroup,\
unsigned long nStateAll,\
unsigned long IOModeCheck)
{
//函数功能:设定某组的所有通道的开关量输出状态,每8个通道为一组
//入口参数:nAddr 板卡基地址
// nGroup 组号(1-12)每8个通道为一组,共6组
// nStateAll 指定某组中的所有通道的开关量输出状态
// 例如:0 = 所有8个通道输出低电平,
// 0xFF = 所有8个通道输出高电平
// IOModeCheck 设置是否检查IO工作方式与当前的操作相抵触
// 0 = 不检查,1 = 检查
//函数返回值:
// 0 表成功
// -1 表示调用出错,应该进一步调用GetDll_LastErrNO函数查找出错原因
//检查参数
nAddr = CheckAddr(nAddr);//使地址在0x100--0x3F0之间
nGroup = nGroup - m_nCountFrom;
if( nGroup > pm5400.DSZ_MaxIOGroup ) m_errorLevel = ERR_PARAMETER2;
IOModeCheck = ( IOModeCheck != 0 ) ? 1 : 0;
if( IOModeCheck != 0 )
{
//读当前工作方式字
unsigned short currIOMode;
if(nGroup<4||nGroup>9){
currIOMode = ReadW( nAddr, pm5400.DZS_ROff_IOMode1 );
//如果某组设为输入状态,但调用此函数(输出),说明执行了错误的操作
if( GetULongXBit( currIOMode, nGroup ) == 0 )
m_errorLevel = ERR_FUNC_OPERATE;
}
else{
currIOMode = ReadW( nAddr, pm5400.DZS_ROff_IOMode2 );
//如果某组设为输入状态,但调用此函数(输出),说明执行了错误的操作
if( GetULongXBit( currIOMode, nGroup ) == 0 )
m_errorLevel = ERR_FUNC_OPERATE;
}
}
//若用户参数错,不继续执行
if(m_errorLevel != ZT_SUCCESS) return -1;
unsigned short getVal;
getVal = ReadW( nAddr, pm5400.DZS_ROff_DIOGroup[nGroup] );
//设置开关量输出状态
if( (nGroup % 2) != 0 )
{
// getVal = getVal & 0x00FF; //把高8位设为0
// getVal = getVal + (unsigned char)nStateAll * 0x100; //把高8位设为用户设定值
getVal = getVal & 0xFF00; //把低8位设为0
getVal = getVal + (unsigned char)nStateAll; //把低8位设为用户设定值
}
else
{
getVal = getVal & 0xFF00; //把低8位设为0
getVal = getVal + (unsigned char)nStateAll; //把低8位设为用户设定值
// getVal = getVal & 0x00FF; //把高8位设为0
// getVal = getVal + (unsigned char)nStateAll * 0x100; //把高8位设为用户设定值
}
WriteW( nAddr, pm5400.DZS_ROff_DIOGroup[nGroup], getVal );
return ZT_SUCCESS;
}
//函数结束</DZS>
//函数开始<DZS>
long _stdcall ZT_DZS05_DOBit(unsigned long nAddr,\
unsigned long nGroup,\
unsigned long nBit,\
unsigned long nState,\
unsigned long IOModeCheck)
{
//函数功能:设定某组中某个通道的开关量输出状态,每8个通道为一组
//入口参数:nAddr 板卡基地址
// nGroup 组号(1-12)每8个通道为一组,共12组
// nBit 指定某组中的第几个通道(1-8),每组8个通道
// nState 指定通道的开关量输出状态
// 0 = 低电平,1 = 高电平
// IOModeCheck 设置是否检查IO工作方式与当前的操作相抵触
// 0 = 不检查,1 = 检查
//函数返回值:
// 0 表成功
// -1 表示调用出错,应该进一步调用GetDll_LastErrNO函数查找出错原因
//检查参数
nAddr = CheckAddr(nAddr);//使地址在0x100--0x3F0之间
nGroup = nGroup - m_nCountFrom;
if( nGroup > pm5400.DSZ_MaxIOGroup ) m_errorLevel = ERR_PARAMETER2;
nBit = nBit - m_nCountFrom;
if( nBit > pm5400.DZS_MaxIOChannel ) m_errorLevel = ERR_PARAMETER_CH;
nState = ( nState != 0 ) ? 1 : 0;
IOModeCheck = ( IOModeCheck != 0 ) ? 1 : 0;
if( IOModeCheck != 0 )
{
//读当前工作方式字
unsigned short currIOMode;
if(nGroup<4||nGroup>9){
currIOMode = ReadW( nAddr, pm5400.DZS_ROff_IOMode1 );
//如果某组设为输入状态,但调用此函数(输出),说明执行了错误的操作
if( GetULongXBit( currIOMode, nGroup ) == 0 )
m_errorLevel = ERR_FUNC_OPERATE;
}
else{
currIOMode = ReadW( nAddr, pm5400.DZS_ROff_IOMode2 );
//如果某组设为输入状态,但调用此函数(输出),说明执行了错误的操作
if( GetULongXBit( currIOMode, nGroup ) == 0 )
m_errorLevel = ERR_FUNC_OPERATE;
}
}
//若用户参数错,不继续执行
if(m_errorLevel != ZT_SUCCESS) return -1;
//读出当前开关量输出状态
unsigned short getVal;
getVal = ReadW( nAddr, pm5400.DZS_ROff_DIOGroup[nGroup] );
getVal = (unsigned short)SetULongXBit( getVal, nBit, nState);
//(nGroup % 2) * 8 + nBit, nState );
//设置开关量输出状态
WriteW( nAddr, pm5400.DZS_ROff_DIOGroup[nGroup], getVal);
return ZT_SUCCESS;
}
//函数结束</DZS>
//函数开始<DZS>
long _stdcall ZT_DZS05_DIBit(unsigned long nAddr,\
unsigned long nGroup,\
unsigned long nBit,\
unsigned long IOModeCheck)
{
//函数功能:得到某组中某个通道的开关量输入状态,每8个通道为一组
//入口参数:nAddr 板卡基地址
// nGroup 组号(1-12)每8个通道为一组,共12组
// nBit 指定某组中的第几个通道(1-8),每组8个通道
// IOModeCheck 设置是否检查IO工作方式与当前的操作相抵触
// 0 = 不检查,1 = 检查
//函数返回值:
// 0 表示低电平
// 1 表示高电平
// -1 表示调用出错,应该进一步调用GetDll_LastErrNO函数查找出错原因
//检查参数
nAddr = CheckAddr(nAddr);//使地址在0x100--0x3F0之间
nGroup = nGroup - m_nCountFrom;
if( nGroup > pm5400.DSZ_MaxIOGroup ) m_errorLevel = ERR_PARAMETER2;
nBit = nBit - m_nCountFrom;
if( nBit > pm5400.DZS_MaxIOChannel ) m_errorLevel = ERR_PARAMETER_CH;
IOModeCheck = ( IOModeCheck != 0 ) ? 1 : 0;
if( IOModeCheck != 0 )
{
//读当前工作方式字
unsigned short currIOMode;
if(nGroup<4||nGroup>9){
currIOMode = ReadW( nAddr, pm5400.DZS_ROff_IOMode1 );
//如果某组设为输出状态,但调用此函数(输入),说明执行了错误的操作
if( GetULongXBit( currIOMode, nGroup ) != 0 )
m_errorLevel = ERR_FUNC_OPERATE;
}
else{
currIOMode = ReadW( nAddr, pm5400.DZS_ROff_IOMode2 );
//如果某组设为输出状态,但调用此函数(输入),说明执行了错误的操作
if( GetULongXBit( currIOMode, nGroup ) != 0 )
m_errorLevel = ERR_FUNC_OPERATE;
}
}
//若用户参数错,不继续执行
if(m_errorLevel != ZT_SUCCESS) return -1;
unsigned short getVal;
getVal = ReadW( nAddr, pm5400.DZS_ROff_DIOGroup[nGroup] );
return GetULongXBit( getVal, nBit);
//(nGroup % 2) * 8 + nBit );
}
//函数结束</DZS>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -