int Csp32Bridge::cspInit(int nComPort)
{
    // El usuario trata de abrir un puerto valido?
    if (nComPort >= COM1)
    {
        // Cierra cualquier otro puerto abierto previamente
        if (nCspActivePort >= COM1)
            cspRestore();

        // Ahora tratamos de inicializar el puerto escogido
        if (SioReset(nComPort, RX_QUE_SIZE, TX_QUE_SIZE) < 0)
        {
            // Esto ocurrira si ningun puerto esta activo
            return(nCspActivePort = COMMUNICATIONS_ERROR);
        }
        else
        {
            // En caso contrario, el nuevo puerto activo sera el escogido...
            nCspActivePort = nComPort;
        }

        // Establece los parametros del puerto para asegurar la compatibilidad con el lector
        SioParms(nCspActivePort, OddParity, OneStopBit, WordLength8);
        SioBaud(nCspActivePort, Baud2400);
        SioDTR(nCspActivePort, SET_LINE);
        SioRTS(nCspActivePort, SET_LINE);
        return (STATUS_OK);
    }

    return (BAD_PARAM);
}
Ejemplo n.º 2
0
Revolver::Revolver()
{
	m_Addr = 0;
	m_currentFilter = -1;
	char	str[80];

	// Inicializamos
	m_RPF_parameters.nfw		= 1;
	m_RPF_parameters.nfilt		= MAX_FILTROS_DTA;
	// filter steps
	m_RPF_parameters.step		= 800 / m_RPF_parameters.nfilt;

	m_RPF_parameters.com		= COM5;
	m_RPF_parameters.baud		= Baud19200;
	m_RPF_parameters.hold		= 1;
	m_RPF_parameters.torque		= 15984;
	m_RPF_parameters.offset		= 0;
	m_RPF_parameters.calspd		= 20000;
	m_RPF_parameters.slope		= 255;
	m_RPF_parameters.stspd		= 65535;
	m_RPF_parameters.enspd		= 6144;
	m_RPF_parameters.feed		= 1;
	m_RPF_parameters.dly		= 125;

	//Cargamos
	LoadCFG(m_RPF_parameters);

	int er = SioReset(m_RPF_parameters.com, 64, 64);
	if (er != 0)
	{
		if (er == IE_BADID)
			error_fatal("Init Revolver", "Imposible abrir COM: Puerto inexistente", 0);
		if (er == IE_OPEN)
			error_fatal("Init Revolver", "Imposible abrir COM: Puerto ya abierto", 0);
		if (er == IE_MEMORY)
			error_fatal("Init Revolver", "Imposible abrir COM: No hay memoria suficiente", 0);
		else
			error_fatal("Init Revolver", "Imposible abrir COM", 0);
		return;
	}
	er = SioBaud(m_RPF_parameters.com, m_RPF_parameters.baud);
	if (er == IE_BAUDRATE )
	{
		error_fatal("Init Revolver", "Unsupported boud rate", 0);
		return;
	}
 	for(int n = 0; n < m_RPF_parameters.nfw; n++)
	{	
		m_Addr = n;
		// Hold
		sprintf(str, "9%d", m_RPF_parameters.hold);
		if (Cmd(str) == false)
        {
			AfxMessageBox("***  Init Revolver: No hay respuesta por el puerto COM, asegurese que el dispositivo esta conectado");
            exit(-1);
        }

		// Torque value
		sprintf(str, "3%04X", m_RPF_parameters.torque);
		Cmd(str);
		// Offset value
		sprintf(str, "4%02X", m_RPF_parameters.offset + 127);
		Cmd(str);
		// Num. of filters
		sprintf(str, "5%02X", m_RPF_parameters.nfilt);
		Cmd(str);
		// Num. of filters
		sprintf(str, "6%03X", m_RPF_parameters.step);
		Cmd(str);
		// Calibration speed
		sprintf(str, "8%04X", m_RPF_parameters.calspd);
		Cmd(str);
		// Slope
		sprintf(str, "A%02X", m_RPF_parameters.slope);
		Cmd(str);
		// Start speed
		sprintf(str, "B%04X", m_RPF_parameters.stspd);
		Cmd(str);
		// End speed
		sprintf(str, "C%04X", m_RPF_parameters.enspd);
		Cmd(str);
		// Enable feedback
		sprintf(str, "L%d", m_RPF_parameters.feed);
		Cmd(str);
		// Delay after pos.
		sprintf(str, "K%04X", m_RPF_parameters.dly);
		Cmd(str);
		// Calibrate
		Calibrate();
	}
}
Ejemplo n.º 3
0
// Optional change of configuration (if different from default)
Revolver::Revolver(rpf_parameters& parameters)
{
	m_Addr = 0;
	m_currentFilter = -1;
	char	str[80];

	m_RPF_parameters.nfw		= parameters.nfw	;
	m_RPF_parameters.nfilt		= parameters.nfilt	;
	// filter steps
	m_RPF_parameters.step		= parameters.step	;

	m_RPF_parameters.com		= parameters.com	;
	m_RPF_parameters.baud		= parameters.baud	;
	m_RPF_parameters.hold		= parameters.hold	;
	m_RPF_parameters.torque		= parameters.torque	;
	m_RPF_parameters.offset		= parameters.offset	;
	m_RPF_parameters.calspd		= parameters.calspd	;
	m_RPF_parameters.slope		= parameters.slope	;
	m_RPF_parameters.stspd		= parameters.stspd	;
	m_RPF_parameters.enspd		= parameters.enspd	;
	m_RPF_parameters.feed		= parameters.feed	;
	m_RPF_parameters.dly		= parameters.dly	;

	int er = SioReset(m_RPF_parameters.com, 64, 64);
	if (er != 0)
	{
		if (er == IE_BADID)
			error_fatal("Init Revolver", "Imposible abrir COM: Puerto inexistente", 0);
		if (er == IE_OPEN)
			error_fatal("Init Revolver", "Imposible abrir COM: Puerto ya abierto", 0);
		if (er == IE_MEMORY)
			error_fatal("Init Revolver", "Imposible abrir COM: No hay memoria suficiente", 0);
		else
			error_fatal("Init Revolver", "Imposible abrir COM", 0);
		return;
	}
	er = SioBaud(m_RPF_parameters.com, m_RPF_parameters.baud);
	if (er == IE_BAUDRATE )
	{
		error_fatal("Init Revolver", "Unsupported boud rate", 0);
		return;
	}
	for(int n = 0; n < m_RPF_parameters.nfw; n++)
	{	
		m_Addr = n;
		// Hold
		sprintf(str, "9%d", m_RPF_parameters.hold);
		Cmd(str);
		// Torque value
		sprintf(str, "3%04X", m_RPF_parameters.torque);
		Cmd(str);
		// Offset value
		sprintf(str, "4%02X", m_RPF_parameters.offset + 127);
		Cmd(str);
		// Num. of filters
		sprintf(str, "5%02X", m_RPF_parameters.nfilt);
		Cmd(str);
		// Num. of filters
		sprintf(str, "6%03X", m_RPF_parameters.step);
		Cmd(str);
		// Calibration speed
		sprintf(str, "8%04X", m_RPF_parameters.calspd);
		Cmd(str);
		// Slope
		sprintf(str, "A%02X", m_RPF_parameters.slope);
		Cmd(str);
		// Start speed
		sprintf(str, "B%04X", m_RPF_parameters.stspd);
		Cmd(str);
		// End speed
		sprintf(str, "C%04X", m_RPF_parameters.enspd);
		Cmd(str);
		// Enable feedback
		sprintf(str, "L%d", m_RPF_parameters.feed);
		Cmd(str);
		// Delay after pos.
		sprintf(str, "K%04X", m_RPF_parameters.dly);
		Cmd(str);
		// Calibrate
		Calibrate();
	}
}
Ejemplo n.º 4
0
// 串口设置
void CAis_NetDlg::PortSet(void)
{

    HKEY hKey;

    comflag = 0;
    if( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm", NULL, KEY_READ, &hKey) == ERROR_SUCCESS) // 打开串口注册表
    {
        int i=0;
        char portName[256];
        CString my_com;
        DWORD dwLong,dwSize;

        while(1)  //WIN7 code
        {
            dwLong = dwSize = sizeof(portName);
            if( ::RegEnumValue( hKey, i, portName, &dwLong, NULL, NULL, (PUCHAR)commName, &dwSize ) == ERROR_NO_MORE_ITEMS ) // 枚举串口
            {
                if (siostate == 1)
                {
                    MessageBox("网位仪设备未连接!","提示");
                }
                siostate = 0;
                break;
            }

            if( strncmp("\\Device\\Silabser",portName,16)==0)   //Device\\ProlificSerial0
            {
                comflag = 1;

                if( commName[4] == 0)   //串口个数为个位数
                {
                    comflagnum = 0;
                    i = 0;
                }
                else                    //串口个数为双数
                {
                    comflagnum = 1;
                    i = 0;
                }

                if(comflagnum == 0)	  commport = commName[3]-0x30-1;
                else if(comflagnum == 1)   commport = (commName[3]-0x30)*10 + commName[4]-0x30-1;

                SioReset(commport,100,100);
                SioBaud(commport,WSC_Baud9600);//设置波特率
                SioParms(commport, WSC_NoParity ,WSC_OneStopBit, WSC_WordLength8);//配置参数

                break;
            }
            i++;
        }

        if(comflag == 0)
        {
            GetDlgItem(IDC_Com)->ShowWindow(SW_HIDE);
        }
        else if(comflag == 1)
        {
            GetDlgItem(IDC_Com)->ShowWindow(SW_SHOW);
            GetDlgItem(IDC_Com)->SetWindowText(commName);
        }

        RegCloseKey(hKey);
    }
}