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++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;
}