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

📄 deviceclass.old

📁 高速公路收费系统车道软件. 功能: 1 检测公路过往车辆 2 收费过程控制和数据采集 3 车辆信息和图片上传服务器.
💻 OLD
📖 第 1 页 / 共 5 页
字号:
				}
				break;
			}
			if((status&MACHINE_RSW1)!=0){
				ReadRSW1();
			}
		}
		break;
	}
}

//	读取卡机状态字1,无限制条件
void CMachine::ReadRSW1()
{
	SendMachineData(READ_RSW1);
}

//	读取卡机状态字2,无限制条件
void CMachine::ReadRSW2()
{
	SendMachineData(READ_RSW2);
}

//	读取卡机状态字3,无限制条件
void CMachine::ReadRSW3()
{
	SendMachineData(READ_RSW3);
}

//	读取卡机状态字4,无限制条件
void CMachine::ReadRSW4()
{
	SendMachineData(READ_RSW4);
}

//	读取卡机的全部状态字,无限制条件
void CMachine::ReadRSW_All()
{
	SendMachineData(READ_RSW_ALL);
}

//	读取卡机控制程序版本号,无限制条件
void CMachine::ReadVersionNO()
{
	SendMachineData(READ_VERSION);
}

//	切换读写器天线,无限制条件,但不能在读、写卡指令执行期间切换
void CMachine::ConnectAntenna1()
{
	SendMachineData(CONNECT_ANTENNA1);
}

//	切换读写器天线,无限制条件,但不能在读、写卡指令执行期间切换
void CMachine::ConnectAntenna2()
{
	SendMachineData(CONNECT_ANTENNA2);
}

//	切换读写器天线,无限制条件,但不能在读、写卡指令执行期间切换
void CMachine::ConnectAntenna3()
{
	SendMachineData(CONNECT_ANTENNA3);
}

//	切换读写器天线,无限制条件,但不能在读、写卡指令执行期间切换
void CMachine::ConnectAntenna4()
{
	SendMachineData(CONNECT_ANTENNA4);
}

//	发卡命令,允许操作条件:卡机状态就绪 AND 卡机不忙 AND 无故障
//	假如天线没有连接到当前通道,将天线连接到当前通道后再发卡
//	特别地:卡机是否就绪应由操作员负责,若卡机未装卡筒时操作员发
//			卡,该发卡命令被丢弃,责任并不在车道软件
void CMachine::IssueCard()
{
//	将命令存储到chReadyData中并启动卡机定时器,假如卡到达天线区
//	前定时器超时,本函数将再次被执行
	chReadyData=ISSUE_CARD;

//	假如卡机故障,发“清除故障”命令
	if(bFaultFlag){
		ClearFault();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,300);
		return;
	}
//	假如卡机忙,弹出卡
	if(bBusyFlag){
		EjectCard();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,1200);
		return;
	}
	SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,300);
//	若天线状态正确,发“发卡”命令,否则先切换天线
	if(m_clsMachine.ChannelNO()==1){		//假如当前使用通道1
		if(m_clsMachine.AntennaNO()==1){	//假如接通通道1天线
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_CLOSE_TIMER,MACHINE_TIMER,0);
			SendMachineData(ISSUE_CARD);	//直接发送发卡命令
			chCountType=ISSUE_COUNT;		//准备对发卡计数
			chReadyData=NONE_COMMAND;		//不再有尚未执行的命令
		} else {
			ConnectAntenna1();				//接通天线1
		}
	}
	if(m_clsMachine.ChannelNO()==2){		//假如当前使用通道2
		if(m_clsMachine.AntennaNO()==2){	//假如接通通道2天线
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_CLOSE_TIMER,MACHINE_TIMER,0);
			SendMachineData(ISSUE_CARD);	//直接发送发卡命令
			chCountType=ISSUE_COUNT;		//准备对发卡计数
			chReadyData=NONE_COMMAND;		//不再有尚未执行的命令
		} else {
			ConnectAntenna2();				//接通天线2
		}
	}
}

//	弹出卡命令,允许操作条件:无
void CMachine::EjectCard()
{
	SendMachineData(EJECT_CARD);
}

//	吸卡命令,允许操作条件:卡机不忙 AND 卡机无故障。
//	假如天线没有连接到当前通道,将天线连接到当前通道后再吸卡
void CMachine::SuckCard()
{
//	将命令存储到chReadyData中并启动卡机定时器,假如卡到达天线区
//	前定时器超时,本函数将再次被执行
	chReadyData=SUCK_CARD;

//	假如卡机故障,发“清除故障”命令
	if(bFaultFlag){
		ClearFault();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,300);
		return;
	}
//	假如卡机忙,弹出卡
	if(bBusyFlag){
		EjectCard();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,1200);
		return;
	}
	SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,300);
//	若天线状态正确,发“吸卡”命令,否则先切换天线
	if(m_clsMachine.ChannelNO()==1){		//假如当前使用通道1
		if(m_clsMachine.AntennaNO()==1){	//假如接通通道1天线
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_CLOSE_TIMER,MACHINE_TIMER,0);
			SendMachineData(SUCK_CARD);		//直接发送吸卡命令
			chReadyData=NONE_COMMAND;		//不再有尚未执行的命令
		} else {
			ConnectAntenna1();				//接通天线1
		}
	}
	if(m_clsMachine.ChannelNO()==2){		//假如当前使用通道2
		if(m_clsMachine.AntennaNO()==2){	//假如接通通道2天线
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_CLOSE_TIMER,MACHINE_TIMER,0);
			SendMachineData(SUCK_CARD);		//直接发送吸卡命令
			chReadyData=NONE_COMMAND;		//不再有尚未执行的命令
		} else {
			ConnectAntenna2();				//接通天线2
		}
	}
}

//	收卡命令,允许条件:卡机就绪 AND 卡位于天线区 AND 卡机无故障
//	发收卡命令时卡肯定在天线区,因此不再判断卡是否位于天线区
//	特别地:卡机是否就绪应由操作员负责,若卡机未装卡筒时操作员收
//			卡,该收卡命令被丢弃,责任并不在车道软件
void CMachine::AcceptCard()
{
//	将命令存储到chReadyData中并启动卡机定时器,假如卡到达天线区
//	前定时器超时,本函数将再次被执行
	chReadyData=ACCEPT_CARD;

//	假如卡机故障,发“清除故障”命令
	if(bFaultFlag){
		ClearFault();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,300);
		return;
	}
	SendMachineData(ACCEPT_CARD);
	chCountType=ACCEPT_COUNT;		//准备进行收卡计数
}

//	清除故障命令
void CMachine::ClearFault()
{
//	清除故障前先将计数标志清空以免计数错误
	chCountType=NONE_COUNT;
//	卡机出现故障时必须通知卡机清除故障,否则卡机会一直等待而不再
//	执行其他命令
	SendMachineData(CLEAR_FAULT);
}

//	排除故障命令
//	清除故障命令和排除故障命令的区别是:排除故障命令不仅清除故障
//	标志,而且尝试帮助卡机排除故障
void CMachine::RemoveFault()
{
//	排除故障前先将计数标志清空以免计数错误
	chCountType=NONE_COUNT;
//	卡机出现故障时必须通知卡机清除故障,否则卡机会一直等待而不再
//	执行其他命令
	SendMachineData(REMOVE_FAULT);
}

//	开通道1上盖锁命令。允许操作条件:卡机不忙 OR 卡机有故障
void CMachine::OpenChannelLock1()
{
//	将命令存储到chReadyData中并启动卡机定时器,假如卡到达天线区
//	前定时器超时,本函数将再次被执行
	chReadyData=OPEN_CHANNEL_LOCK1;

//	假如卡机忙且卡机无故障,弹出通道中的卡			
	if((!bFaultFlag)&&(bBusyFlag)){
//	特别地:由于操作员任何时候都可能开通道上盖锁,这可能会导致
//			收卡机内应收入卡筒的通行卡被错误地弹出。
//	解决办法:	在非卡筒菜单下,只有卡机故障时才允许开通道锁;
//				在卡筒菜单下,无论卡机是否故障都允许开通道锁(该
//				功能由人机边界类及状态控制类完成)
		EjectCard();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,1200);
		return;
	}
	if(bFaultFlag){
//	假如卡机有故障,清除故障标志
		ClearFault();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,200);
		return;
	} else {
//	开启通道上盖锁
		SendMachineData(OPEN_CHANNEL_LOCK1);
		chReadyData=NONE_COMMAND;		//不再有尚未执行的命令
	}		
}

//	开通道2上盖锁命令。允许操作条件:卡机不忙 OR 卡机有故障
void CMachine::OpenChannelLock2()
{
//	将命令存储到chReadyData中并启动卡机定时器,假如卡到达天线区
//	前定时器超时,本函数将再次被执行
	chReadyData=OPEN_CHANNEL_LOCK2;

//	假如卡机忙且卡机无故障,弹出通道中的卡			
	if((!bFaultFlag)&&(bBusyFlag)){
//	特别地:由于操作员任何时候都可能开通道上盖锁,这可能会导致
//			收卡机内应收入卡筒的通行卡被错误地弹出。
//	解决办法:	在非卡筒菜单下,只有卡机故障时才允许开通道锁;
//				在卡筒菜单下,无论卡机是否故障都允许开通道锁(该
//				功能由人机边界类及状态控制类完成)
		EjectCard();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,1200);
		return;
	}
	if(bFaultFlag){
//	假如卡机有故障,清除故障标志
		ClearFault();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,200);
		return;
	} else {
//	开启通道上盖锁
		SendMachineData(OPEN_CHANNEL_LOCK2);
		chReadyData=NONE_COMMAND;		//不再有尚未执行的命令
	}		
}

//	开通道1卡筒上的卡片锁命令。允许操作条件:卡机不忙
//	特别地:卡机当前无此功能,以后增加时必须注意该命令只能在卡筒
//			菜单下使用,否则在出口车道可能会将要收入卡筒中的通行
//			卡错误地弹出
void CMachine::OpenBankLock1()
{
//	将命令存储到chReadyData中并启动卡机定时器,假如卡机未执行
//	开锁命令前定时器超时,本函数将重新被执行
	chReadyData=OPEN_BANK_LOCK1;

//	假如卡机忙,弹出卡
	if(bBusyFlag){
		EjectCard();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,1200);
	} else {
//	打开卡筒上的卡片锁
		SendMachineData(OPEN_BANK_LOCK1);
		chReadyData=NONE_COMMAND;		//不再有尚未执行的命令
	}
}

//	开通道2卡筒上的卡片锁命令。允许操作条件:卡机不忙
//	特别地:卡机当前无此功能,以后增加时必须注意该命令只能在卡筒
//			菜单下使用,否则在出口车道可能会将要收入卡筒中的通行
//			卡错误地弹出
void CMachine::OpenBankLock2()
{
//	将命令存储到chReadyData中并启动卡机定时器,假如卡机未执行
//	开锁命令前定时器超时,本函数将重新被执行
	chReadyData=OPEN_BANK_LOCK2;

//	假如卡机忙,弹出卡
	if(bBusyFlag){
		EjectCard();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,1200);
	} else {
//	打开卡筒上的卡片锁
		SendMachineData(OPEN_BANK_LOCK2);
		chReadyData=NONE_COMMAND;		//不再有尚未执行的命令
	}
}

//	切换到卡机的通道1,允许操作条件:卡机不忙 OR 卡机有故障
//	该命令只能在卡筒菜单下使用,否则在出口车道可能会将要收入卡筒
//	中的通行卡错误地弹出
void CMachine::SetChannel1()
{
//	切换通道时不检查通道是否有卡筒,原因如下:
//	1、卡机检测开关若不稳定,可能会出现误报
//	2、操作员切换通道时有责任检查卡筒是否存在,若明知卡筒不存在
//	   还切换卡筒,车道软件无法正常收、发卡,责任在操作员
//	3、切换卡筒时设备控制类会检查卡筒识别卡,若识别卡不存在,设
//	   备控制类会禁止通道切换

//	将命令存储到chReadyData中并启动卡机定时器,假如卡机未执行
//	切换通道命令前定时器超时,本函数将重新被执行
	chReadyData=SET_CHANNEL1;

//	假如卡机忙且卡机无故障,弹出通道中的卡			
	if((!bFaultFlag)&&(bBusyFlag)){
		EjectCard();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,1200);
		return;
	}
	if(bFaultFlag){
//	假如卡机有故障,清除故障标志
		ClearFault();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,200);
	} else {
//	切换通道
		SendMachineData(SET_CHANNEL1);
		chReadyData=NONE_COMMAND;		//不再有尚未执行的命令
	}
}

//	切换到卡机的通道2,允许操作条件:卡机不忙 OR 卡机有故障
//	该命令只能在卡筒菜单下使用,否则在出口车道可能会将要收入卡筒
//	中的通行卡错误地弹出
void CMachine::SetChannel2()
{
//	切换通道时不检查通道是否有卡筒,原因如下:
//	1、卡机检测开关若不稳定,可能会出现误报
//	2、操作员切换通道时有责任检查卡筒是否存在,若明知卡筒不存在
//	   还切换卡筒,车道软件无法正常收、发卡,责任在操作员
//	3、切换卡筒时设备控制类会检查卡筒识别卡,若识别卡不存在,设
//	   备控制类会禁止通道切换

//	将命令存储到chReadyData中并启动卡机定时器,假如卡机未执行
//	切换通道命令前定时器超时,本函数将重新被执行
	chReadyData=SET_CHANNEL2;

//	假如卡机忙且卡机无故障,弹出通道中的卡			
	if((!bFaultFlag)&&(bBusyFlag)){
		EjectCard();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,1200);
		return;
	}
	if(bFaultFlag){
//	假如卡机有故障,清除故障标志
		ClearFault();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,200);
	} else {
//	切换通道
		SendMachineData(SET_CHANNEL2);
		chReadyData=NONE_COMMAND;		//不再有尚未执行的命令
	}
}

//	切换卡机通道,允许操作条件:卡机不忙 OR 卡机有故障
//	该命令只能在测试菜单下使用,否则在出口车道可能会将要收入卡筒
//	中的通行卡错误地弹出
void CMachine::ChangeChannel()
{
//	切换通道时不检查通道是否有卡筒,原因如下:
//	1、卡机检测开关若不稳定,可能会出现误报
//	2、操作员切换通道时有责任检查卡筒是否存在,若明知卡筒不存在
//	   还切换卡筒,车道软件无法正常收、发卡,责任在操作员
//	3、切换卡筒时设备控制类会检查卡筒识别卡,若识别卡不存在,设
//	   备控制类会禁止通道切换

//	将命令存储到chReadyData中并启动卡机定时器,假如卡机未执行
//	切换通道命令前定时器超时,本函数将重新被执行
	chReadyData=CHANGE_CHANNEL;

//	假如卡机忙且卡机无故障,弹出通道中的卡			
	if((!bFaultFlag)&&(bBusyFlag)){
		EjectCard();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,1200);
		return;
	}
	if(bFaultFlag){
//	假如卡机有故障,清除故障标志
		ClearFault();
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_STARTUP_TIMER,MACHINE_TIMER,200);
	} else {

⌨️ 快捷键说明

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