#include "card.h" #include "axis.h" #include "log.h" using std::pair; CardService* CardService:: m_pInstance = NULL; CardService* CardService::GetInstance() { if (!m_pInstance) m_pInstance = new CardService(); return m_pInstance; } void CardService::ReleaseInstance() { FREE_ANY(m_pInstance); } CardService::CardService(void) { for(ushort i = 0; i < MAXCARD; i++) { m_pCard[i] = new CCard(i); } } CardService::~CardService(void) { for(int i = 0; i < MAXCARD; i++) { FREE_ANY(m_pCard[i]); } } int CardService::OpenCard(ushort cardIndex) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_INPUT_PARAM); return m_pCard[cardIndex]->Open(); } int CardService::CloseCard(ushort cardIndex) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_INPUT_PARAM); return m_pCard[cardIndex]->Close(); } int CardService::GetStatus(ushort cardIndex) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, EDev_NOINIT); return m_pCard[cardIndex]->_bOpened ? EDev_IDLE : EDev_NOINIT; } int CardService::AxisReset(ushort cardIndex, ushort axisIndex) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->AxisReset(axisIndex); } int CardService::AxisZeroPos(ushort cardIndex, ushort axisIndex) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->AxisZeroPos(axisIndex); } int CardService::AxisIsMoving(ushort cardIndex, ushort axisIndex) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, 0); return m_pCard[cardIndex]->AxisIsMoving(axisIndex); } int CardService::AxisStop(ushort cardIndex, ushort axisIndex, int stopType) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->AxisStop(axisIndex, stopType); } int CardService::AxisSetSpeed(ushort cardIndex, ushort axisIndex, double vel) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->AxisSetSpeed(axisIndex, vel); } int CardService::AxisGetPos(ushort cardIndex, ushort axisIndex, EMPosType postype, double* pval) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->AxisGetPos(axisIndex, postype, pval); } int CardService::AxisSetPos(ushort cardIndex, ushort axisIndex, long pos) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->AxisSetPos(axisIndex, pos); } int CardService::AxisHome(ushort cardIndex, ushort axisIndex, ushort homeType, long pos, long offset, double vel) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->AxisHome(axisIndex, homeType, pos, offset, vel); } int CardService::AxisMoveJog(ushort cardIndex, ushort axisIndex, int dir, double vel, double acc, double dec) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->AxisMoveJog(axisIndex, dir, vel, acc, dec); } int CardService::AxisMovePos(ushort cardIndex, ushort axisIndex, long pos, double vel, double acc, double dec) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->AxisMovePos(axisIndex, pos, vel, acc, dec); } int CardService::AxisMoveOffset(ushort cardIndex, ushort axisIndex, long offset, double vel, double acc, double dec) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->AxisMoveOffset(axisIndex, offset, vel, acc, dec); } int CardService::ReadBit(ushort cardIndex, ushort in_index, short di_type) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, 0); return m_pCard[cardIndex]->ReadBit(in_index, (EIOType)di_type); } int CardService::ReadOutBit(ushort cardIndex, ushort out_index, short do_type) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, 0); return m_pCard[cardIndex]->ReadBit(out_index, (EIOType)do_type); } int CardService::WriteOutBit(ushort cardIndex, ushort out_index, ushort val, short do_type) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->WriteOutBit(out_index, val, (EIOType)do_type); } int CardService::ReadAdc(ushort cardIndex, ushort index, double* pval) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->ReadADC(index, pval); } int CardService::WriteAdc(ushort cardIndex, ushort index, double val) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->WriteADC(index, val); } int CardService::CreateCrd(ushort cardIndex, ushort *pAxisIndex, ushort axisCnt) { int ret = 0; int index = 0; RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); ret = m_pCard[cardIndex]->CreateCrd(pAxisIndex, axisCnt, index); RETURN_CHK_NOPRT(!ret, ret); return cardIndex * MAXCRD + index; //每张卡2个坐标系 } int CardService::AddLinePos(int crdID, double *ppos, ushort nsize, double vel, double acc, double endvel) { int index = 0; ushort cardIndex = 0; index = ConvertcrdIndex(cardIndex, crdID); RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_INPUT_PARAM); return m_pCard[cardIndex]->AddLinePos(index, ppos, vel, acc, endvel); } int CardService::AddArcPos(int crdID, double *ppos1, double *ppos2, double *ppos3, ushort nsize, double vel, double acc, double endvel) { int index = 0; ushort cardIndex = 0; index = ConvertcrdIndex(cardIndex, crdID); RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_INPUT_PARAM); return m_pCard[cardIndex]->AddArcPos(index, ppos1, ppos2, ppos3, vel, acc, endvel); } int CardService::CrdStartMove(int crdID) { int index = 0; ushort cardIndex = 0; index = ConvertcrdIndex(cardIndex, crdID); RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_INPUT_PARAM); return m_pCard[cardIndex]->CrdStartMove(index); } int CardService::CrdStatus(int crdID, int *progress) { int index = 0; ushort cardIndex = 0; index = ConvertcrdIndex(cardIndex, crdID); RETURN_CHK_NOPRT(cardIndex < MAXCARD, 0); return m_pCard[cardIndex]->CrdStatus(index, progress); } int CardService::CloseCrd(int crdID) { int index = 0; ushort cardIndex = 0; index = ConvertcrdIndex(cardIndex, crdID); RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_INPUT_PARAM); return m_pCard[cardIndex]->CloseCrd(index); } int CardService::SendCustomCommand(ushort cardIndex, const char* msg, char* res/* = 0*/) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->SendCustomCommand(msg, res); } int CardService::RecvCustomCommand(ushort cardIndex, const char* msg, char* res/* = 0*/, int timeout/* = 0*/) { RETURN_CHK_NOPRT(cardIndex < MAXCARD, ERR_NO_INIT); return m_pCard[cardIndex]->RecvCustomCommand(msg, res, timeout); } const char* _pszcmddesc = "固高控制卡插件所有自定义指令都是发送指令,不支持接收指令.\n" "*PS: 字段之间除了分隔符','以外不能有多余的空格.\n" "reset 重置状态\n" "pause 暂停\n" "continue 暂停恢复\n" "backlash axis,offset 设置负向间隙补偿,axis表示轴号从0开始;offset表示补偿量,为0时表示重置,单位:脉冲\n" "arrive axis,bon 设置某个轴是否检查到位信号.axis表示轴号从0开始;bon为1表示检查,否则不检查\n" "writeda index,val 设置某个通道的电压输出值. index表示通道从0开始;val表示电压值(小数)\n" ; int CardService::GetCommandDesc(char* pszcmddesc) { int len = (int)strlen(_pszcmddesc); if (!pszcmddesc) return len; comm_strcpy(pszcmddesc, _pszcmddesc); return len; }