You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
visioncontroller/src/IOController/IOController.cpp

230 lines
4.1 KiB
C++

#include "IOController.h"
IOController::IOController()
{
}
IOController::~IOController()
{
}
bool IOController::controllerInitialization(unsigned int serialNum)
{
return controlCom(serialNum, 1);
}
bool IOController::controlCom(unsigned int IONum, unsigned int state)
{
std::string comName;
switch (IONum)
{
case 1:
comName = "Com1";
break;
case 2:
comName = "Com2";
break;
case 3:
comName = "Com3";
break;
case 4:
comName = "Com4";
break;
case 5:
comName = "Com5";
break;
case 6:
comName = "Com6";
break;
case 7:
comName = "Com7";
break;
case 8:
comName = "Com8";
break;
default:
break;
}
m_comName = comName;
m_mpComsState[comName] = false;
void* handle;
int nRet = MV_IO_CreateHandle(&handle);
if (nRet != MV_OK)
{
//throw nRet;
return false;
}
else
{
m_mpComsHandle[comName] = handle;
}
if (state == 1)
{
if (!connectCom(m_mpComsHandle[comName], comName))
{
return false;
}
}
else if (state == 0)
{
if (!closeCom(m_mpComsHandle[comName], comName))
{
return false;
}
}
return true;
}
bool IOController::connectCom(void* handle, std::string comName)
{
MV_IO_SERIAL stSerial;
memset(&stSerial, 0, sizeof(MV_IO_SERIAL));
strcpy(stSerial.strComName, comName.c_str());
//m_mpStIOSerial[comName] = stSerial;
int nRet = MV_IO_Open(m_mpComsHandle[comName], &stSerial);
if (nRet != MV_OK)
{
//throw nRet;
return false;
}
m_mpComsState[comName] = true;
return true;
}
bool IOController::closeCom(void* handle, std::string comName)
{
return true;
}
bool IOController::controlPort(unsigned int portNum, unsigned int state)
{
MV_IO_PORT_NUMBER stPortNumber;
switch(portNum)
{
case 1:
stPortNumber = MV_IO_PORT_1;
break;
case2:
stPortNumber = MV_IO_PORT_2;
break;
case 3:
stPortNumber = MV_IO_PORT_3;
break;
case 4:
stPortNumber = MV_IO_PORT_4;
break;
case 5:
stPortNumber = MV_IO_PORT_5;
break;
case 6:
stPortNumber = MV_IO_PORT_6;
break;
case 7:
stPortNumber = MV_IO_PORT_7;
break;
case 8:
stPortNumber = MV_IO_PORT_8;
break;
default:
break;
}
if (state == 1)
{
if (!openPort(m_comName, stPortNumber))
{
return false;
}
}
else if (state == 0)
{
if (!closePort(m_comName, stPortNumber))
{
return false;
}
}
return true;
}
bool IOController::openPort(std::string comName, MV_IO_PORT_NUMBER portNum)
{
MV_IO_SET_OUTPUT stOutput;
memset(&stOutput, 0, sizeof(MV_IO_SET_OUTPUT));
stOutput.nPort = portNum;
stOutput.nType = MV_IO_PATTERN_SINGLE;
stOutput.nDurationTime = 0;
stOutput.nValidLevel = 1; //<2F>ߵ<EFBFBD>ƽ
if ((m_mpComsHandle.find(comName) == m_mpComsHandle.end())|| (!m_mpComsState[comName]))
{
return false;
}
int nRet = MV_IO_SetOutput(m_mpComsHandle[comName], &stOutput);
if (nRet != MV_OK)
{
//throw nRet;
return false;
}
return true;
}
bool IOController::closePort(std::string comName, MV_IO_PORT_NUMBER portNum)
{
MV_IO_SET_OUTPUT stOutput;
memset(&stOutput, 0, sizeof(MV_IO_SET_OUTPUT));
stOutput.nPort = portNum;
stOutput.nType = MV_IO_PATTERN_SINGLE;
// stOutput.nDurationTime = 3000;
stOutput.nValidLevel = 0; //<2F>͵<EFBFBD>ƽ
if ((m_mpComsHandle.find(comName) == m_mpComsHandle.end()) || (!m_mpComsState[comName]))
{
return false;
}
int nRet = MV_IO_SetOutput(m_mpComsHandle[comName], &stOutput);
if (nRet != MV_OK)
{
//throw nRet;
return false;
}
return true;
}
bool IOController::getPortState(unsigned int portNum, unsigned int& state)
{
MV_IO_PORT_NUMBER stPortNumber;
switch (portNum)
{
case 1:
stPortNumber = MV_IO_PORT_1;
break;
case2:
stPortNumber = MV_IO_PORT_2;
break;
case 3:
stPortNumber = MV_IO_PORT_3;
break;
case 4:
stPortNumber = MV_IO_PORT_4;
break;
case 5:
stPortNumber = MV_IO_PORT_5;
break;
case 6:
stPortNumber = MV_IO_PORT_6;
break;
case 7:
stPortNumber = MV_IO_PORT_7;
break;
case 8:
stPortNumber = MV_IO_PORT_8;
break;
default:
break;
}
if (m_mpComsHandle.find(m_comName) == m_mpComsHandle.end())
{
return false;
}
MV_IO_SET_OUTPUT stSetOutput;
int nRet = MV_IO_GetPortOutputParam(m_mpComsHandle[m_comName], &stSetOutput);
if (nRet != MV_OK)
{
//throw nRet;
return false;
}
state = stSetOutput.nValidLevel;
return true;
}