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); }
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(); } }
// 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(); } }
// 串口设置 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); } }