📄 deviceclass.old
字号:
}
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 + -