public void VWaitAxisGohome(ushort CardNo, ushort nodeid) { ushort MC_done = 0; uint MC_status = 0; short rc; uint status1 = 0, status2 = 0, status3 = 0, status4 = 0; CPCI_DMC.CS_DMC_01_motion_done(CardNo, nodeid, 0, ref MC_done); rc = CPCI_DMC.CS_DMC_01_motion_status(CardNo, nodeid, 0, ref MC_status); status1 = ((MC_status >> 1) & 0X0001); status2 = ((MC_status >> 2) & 0X0001); status3 = ((MC_status >> 10) & 0X0001); status4 = ((MC_status >> 12) & 0X0001); while ((status1 != 1) || (status2 != 1) || (status3 != 1) || (status4 != 1) || (MC_done != 0)) { Application.DoEvents(); Thread.Sleep(10); CPCI_DMC.CS_DMC_01_motion_status(CardNo, nodeid, 0, ref MC_status); status1 = ((MC_status >> 1) & 0X0001); status2 = ((MC_status >> 2) & 0X0001); status3 = ((MC_status >> 10) & 0X0001); status4 = ((MC_status >> 12) & 0X0001); CPCI_DMC.CS_DMC_01_motion_done(CardNo, nodeid, 0, ref MC_done); } }
public uint VGetAxisAlm(ushort CardNo, ushort NodeID) { uint alm_code = 0; CPCI_DMC.CS_DMC_01_get_alm_code(CardNo, NodeID, 0, ref alm_code); return(alm_code); }
public int Init() { short rc; short existcard = 0; try { rc = CPCI_DMC.CS_DMC_01_open(ref existcard); if (existcard <= 0) { MessageBox.Show("No DMC-NET card can be found!"); return((int)DM_ErrorList.NoCardFound); } else { CardNo.Clear(); ushort i, card_no = 0, DeviceInfo = 0;; uint[] SlaveTable = new uint[4]; for (i = 0; i < existcard; i++) { rc = CPCI_DMC.CS_DMC_01_get_CardNo_seq(i, ref card_no); CardNo.Add(card_no); rc = CPCI_DMC.CS_DMC_01_pci_initial(card_no); if (rc != 0) { return((int)DM_ErrorList.BootFail); } rc = CPCI_DMC.CS_DMC_01_initial_bus(card_no); if (rc != 0) { return((int)DM_ErrorList.CardInitFail); } for (i = 0; i < 4; i++) { SlaveTable[i] = 0; } rc = CPCI_DMC.CS_DMC_01_start_ring(card_no, 0); rc = CPCI_DMC.CS_DMC_01_get_device_table(card_no, ref DeviceInfo); rc = CPCI_DMC.CS_DMC_01_get_node_table(card_no, ref SlaveTable[0]); if (SlaveTable[0] == 0) { return((int)DM_ErrorList.SlaveIsEmpty); } } } } catch (Exception e) { return((int)DM_ErrorList.CardInitFail); } return((int)DM_ErrorList.NoError); }
public void resetRM32NT() { // if (CardNo.Count == 0) { return; } ushort IOStatus = 0; CPCI_DMC.CS_DMC_01_get_rm_output_value(CardNo[0], 12, 0, 0, ref IOStatus); BitArray myVal = new BitArray(new int[] { (int)IOStatus }); for (int i = 0; i < 16; i++) { myVal[i] = false; } Byte[] myB = new Byte[4]; myVal.CopyTo(myB, 0); ushort IOOutStatus = BitConverter.ToUInt16(myB, 0); CPCI_DMC.CS_DMC_01_set_rm_output_value(CardNo[0], 12, 0, 0, IOOutStatus); //for 4 unloading //IOStatus = 0; //CPCI_DMC.CS_DMC_01_get_rm_output_value(CardNo[0], 12, 0, 1, ref IOStatus); //myVal = new BitArray(new int[] { (int)IOStatus }); //for (int i = 0; i < 16; i++) // myVal[i] = false; //myB = new Byte[4]; //myVal.CopyTo(myB, 0); //IOOutStatus = BitConverter.ToUInt16(myB, 0); //CPCI_DMC.CS_DMC_01_set_rm_output_value(CardNo[0], 12, 0, 1, IOOutStatus); }
public void WriteIOOut(ushort port, bool sts) { if (CardNo.Count == 0) { return; } uint IOStatus = 0; lock (sny_Obj) { CPCI_DMC.CS_DMC_01_get_dio_output_DW(CardNo[0], ref IOStatus); //ushort IOOutStatus = 0; //if (sts) //{ // IOOutStatus = (ushort)(IOStatus | (ushort)Math.Pow(2, port)); //} //else //{ // IOOutStatus = (ushort)(IOStatus & (0xFFFF - (ushort)Math.Pow(2, port))); //} BitArray myVal = new BitArray(new int[] { (int)IOStatus }); myVal[port] = sts; Byte[] myB = new Byte[4]; myVal.CopyTo(myB, 0); uint IOOutStatus = BitConverter.ToUInt32(myB, 0); CPCI_DMC.CS_DMC_01_set_dio_output_DW(CardNo[0], IOOutStatus); } }
private bool ReadServoDI(ushort NodeID, int idnum) //idnum为4则对应原点位,5、6分别对应负限位和正限位 { if (CardNo.Count == 0) { return(false); } bool res = false; ushort servo_DI = 0; try { CPCI_DMC.CS_DMC_01_get_servo_DI(CardNo[0], NodeID, 0, ref servo_DI); if ((servo_DI & (0x01 << idnum)) != 0) { res = true; } else { res = false; } } catch { res = false; } if (GetPara(NodeID).IsServoMotor) { return(res); } else { return(!res); } }
public bool ReadIOIn(ushort port) { if (CardNo.Count == 0) { return(false); } uint IOStatus = 0; try { CPCI_DMC.CS_DMC_01_get_dio_input_DW(CardNo[0], ref IOStatus); if ((IOStatus & (0x01 << port)) != 0) { return(true); } else { return(false); } } catch { return(false); } }
private void btnreset_Click(object sender, EventArgs e) { gnodeid = ushort.Parse(cmbNodeID.Text); CPCI_DMC.CS_DMC_01_set_position(gCardNo, gnodeid, 0, 0); CPCI_DMC.CS_DMC_01_set_command(gCardNo, gnodeid, 0, 0); }
public int WaitAxisStop(ushort nodeid) { if (CardNo.Count == 0) { return((int)DM_ErrorList.NoCardFound); } ushort MC_done = 0; short rc; rc = CPCI_DMC.CS_DMC_01_motion_done(CardNo[0], nodeid, 0, ref MC_done); DateTime st_time = DateTime.Now; TimeSpan time_span; while (MC_done != 0) { time_span = DateTime.Now - st_time; if (time_span.TotalMilliseconds > MotionTimeoutMS) { return((int)DM_ErrorList.MotionTimeout); } Application.DoEvents(); Thread.Sleep(10); CPCI_DMC.CS_DMC_01_motion_done(CardNo[0], nodeid, 0, ref MC_done); } return((int)DM_ErrorList.NoError); }
public void Homing(ushort nodeid, ushort home_mode) //home_mode=1,以负限位为原点,2,为正限为原点,7以原点遇正限位反转 { ResetAlarm(nodeid); if (CardNo.Count == 0) { return; } if (!GetPara(nodeid).IsServoMotor) { //ManHoming(nodeid, home_mode); double acc = 0.1; ushort StrVel = 100; CPCI_DMC.CS_DMC_01_set_home_config(CardNo[0], nodeid, 0, 17, 0, StrVel, (ushort)GetPara(nodeid).HomeSpeed, acc); CPCI_DMC.CS_DMC_01_set_home_move(CardNo[0], nodeid, 0); Thread.Sleep(motionCmdDly); } else { double acc = 0.1; ushort StrVel = 100; CPCI_DMC.CS_DMC_01_set_home_config(CardNo[0], nodeid, 0, home_mode, 0, StrVel, (ushort)GetPara(nodeid).HomeSpeed, acc); CPCI_DMC.CS_DMC_01_set_home_move(CardNo[0], nodeid, 0); Thread.Sleep(motionCmdDly); } }
private void MotorListen() { rc = CPCI_DMC.CS_DMC_01_get_rpm(gCardNo, node1, 0, ref spd1); //if (rc == 0) //{ txtspeed1.Text = spd1.ToString(); //} //Torque rc = CPCI_DMC.CS_DMC_01_get_torque(gCardNo, node1, 0, ref toe1); //if (rc == 0) //{ // //扭矩是千分比 double toe = (double)toe1 / 1000 * ServoMaxTorq; txtTorque1.Text = toe.ToString(); if (toe > ServoMaxTorq) { txtTorque1.BackColor = Color.Red; } else { txtTorque1.BackColor = Color.White; } //} motorTorque1.Add(toe); motorRpm1.Add(spd1 / 10); }
public int MoveTo(ushort NodeID, double Position, int Profile) { ResetAlarm(NodeID); if (CardNo.Count == 0) { return((int)DM_ErrorList.NoCardFound); } double acc = 0.2; double Tdec = 0.2; int speed = GetPara(NodeID).RunSpeed; if (Profile == 0) { speed = GetPara(NodeID).HomeSpeed; } int StrVel = speed / 10; int dist; dist = (Int32)(GetPara(NodeID).MotorScale *Position); short rc = CPCI_DMC.CS_DMC_01_start_ta_move(CardNo[0], NodeID, 0, dist, StrVel, speed, acc, Tdec); if (rc != 0) { return((int)DM_ErrorList.MotionError); } Thread.Sleep(motionCmdDly); return((int)DM_ErrorList.NoError); }
public int MoveTo(ushort NodeID, double Position) { ResetAlarm(NodeID); if (CardNo.Count == 0) { return((int)DM_ErrorList.NoCardFound); } double acc = 0.2; double Tdec = 0.2; int speed = GetPara(NodeID).RunSpeed; int StrVel = speed / 10; int dist; dist = (Int32)(GetPara(NodeID).MotorScale *Position); if ((NodeID == (ushort)Axislist.Mod1YAxis) || (NodeID == (ushort)Axislist.Mod2YAxis)) { if (!ReadIOIn((ushort)InputIOlist.RotaryMotionDone)) { return((int)DM_ErrorList.MotionSafetyError); } } short rc = CPCI_DMC.CS_DMC_01_start_ta_move(CardNo[0], NodeID, 0, dist, StrVel, speed, acc, Tdec); if (rc != 0) { return((int)DM_ErrorList.MotionError); } Thread.Sleep(motionCmdDly); return((int)DM_ErrorList.NoError); }
public void VReSetAlm(ushort CardNo, ushort NodeID) { rc = CPCI_DMC.CS_DMC_01_set_ralm(gCardNo, NodeID, 0); if (rc != 0) { SendMsgToDisplayWarning("Clear the alm of PCI_DMC Master Card failed!"); } }
public void SetServoOn(ushort NodeID, ushort svonON_OFF) { if (CardNo.Count == 0) { return; } CPCI_DMC.CS_DMC_01_ipo_set_svon(CardNo[0], NodeID, 0, svonON_OFF); }
public void VSetCard(ushort CardNo, ushort NodeID, ushort svonON_OFF) //设置脉冲模式及伺服是能 { //rc = CPCI_DMC.CS_DMC_01_set_rm_04pi_ipulser_mode(gCardNo, NodeID, 0, 1); //rc = CPCI_DMC.CS_DMC_01_set_rm_04pi_opulser_mode(gCardNo, NodeID, 0, 1); rc = CPCI_DMC.CS_DMC_01_ipo_set_svon(gCardNo, NodeID, 0, svonON_OFF); //1为伺服ON,0为伺服OFF //CPCI_DMC.CS_DMC_01_enable_soft_limit(gCardNo, NodeID, 0, 1); //设置轴的软限位是能,1为碰到限位立即停止,2为减数停止。 }
public void SetPosition(ushort NodeID, int Pos) { if (CardNo.Count == 0) { return; } CPCI_DMC.CS_DMC_01_set_position(CardNo[0], NodeID, 0, Pos); CPCI_DMC.CS_DMC_01_set_command(CardNo[0], NodeID, 0, Pos); }
public double DReadcurrentencodePos(ushort CardNo, ushort NodeID) { int pos = 0; double codepos = 0.0; CPCI_DMC.CS_DMC_01_get_position(gCardNo, NodeID, 0, ref pos); codepos = (double)pos / ScaleAxis[NodeID]; return(codepos); }
public double DReadcurrentpulsePos(ushort CardNo, ushort NodeID) { int cmd = 0; double commdpos = 0.0; CPCI_DMC.CS_DMC_01_get_command(gCardNo, NodeID, 0, ref cmd); commdpos = cmd / ScaleAxis[NodeID]; return(commdpos); }
public void CloseCard() //关闭运动控制卡 { for (int i = 0; i < CardNo.Count; i++) { CPCI_DMC.CS_DMC_01_reset_card(CardNo[i]); } CPCI_DMC.CS_DMC_01_close(); }
private void btnNmove_Click(object sender, EventArgs e) { double m_Tacc = Double.Parse(txtTacc.Text), m_Tdec = Double.Parse(txtTdec.Text); int m_Rpm = Int16.Parse(txtRpm.Text); gnodeid = ushort.Parse(cmbNodeID.Text); rc = CPCI_DMC.CS_DMC_01_set_velocity_mode(gCardNo, gnodeid, 0, m_Tacc, m_Tdec); rc = CPCI_DMC.CS_DMC_01_set_velocity(gCardNo, gnodeid, 0, 0 - m_Rpm); }
private void chksvon_CheckedChanged(object sender, EventArgs e) { gIsServoOn = chksvon.Checked; gnodeid = ushort.Parse(cmbNodeID.Text); rc = CPCI_DMC.CS_DMC_01_set_rm_04pi_ipulser_mode(gCardNo, gnodeid, 0, 1); rc = CPCI_DMC.CS_DMC_01_set_rm_04pi_opulser_mode(gCardNo, gnodeid, 0, 1); rc = CPCI_DMC.CS_DMC_01_ipo_set_svon(gCardNo, gnodeid, 0, (ushort)(gIsServoOn ? 1 : 0)); }
private void btnWork_Click(object sender, EventArgs e) { btnWork.Enabled = false; btnFinish.Enabled = true; bool check_para = true; if (IfTime.Checked) { try { timer1.Interval = int.Parse(TimeValue.Text) * 1000; timer1.Tick += new EventHandler(btnFinish_Click); timer1.Enabled = true; LogOutput("定時功能啟動"); } catch (Exception) { timer1.Enabled = false; LogOutput("時間設定錯誤"); } } if (int.Parse(txtRpm2.Text) > ServoMaxSpeed) { check_para = false; } if (check_para) { LogOutput("實驗開始"); ServoON(true); SetChartType(); CleanChart(); Set_Chart(); ThWorking_PLC = new Thread(working_PLC); ThWorking_PLC.Start(); double m_Tacc = Double.Parse(txtTacc.Text), m_Tdec = Double.Parse(txtTdec.Text); int m_Rpm = Int16.Parse(txtRpm2.Text) * 10; gnodeid = ushort.Parse(cmbNodeID.Text); /* Set up Velocity mode parameter */ rc = CPCI_DMC.CS_DMC_01_set_velocity_mode(gCardNo, node1, 0, m_Tacc, m_Tdec); //* Start Velocity move: rpm > 0 move forward , rpm < 0 move negative */ rc = CPCI_DMC.CS_DMC_01_set_velocity(gCardNo, node1, 0, m_Rpm); //ThUpdateChart = new Thread(Update_Chart); //ThUpdateChart.Start(); } else { LogOutput("設定有誤"); } }
public void VStopAxis(ushort CardNo, ushort NodeID, int swichstop)//0为急停,1为减数停止 { if (swichstop == 0) { CPCI_DMC.CS_DMC_01_emg_stop(CardNo, NodeID, 0); } else { CPCI_DMC.CS_DMC_01_sd_stop(gCardNo, NodeID, 0, 0.1); } }
private void btnstop_Click(object sender, EventArgs e) { rc = CPCI_DMC.CS_DMC_01_emg_stop(gCardNo, node1, 0); rc = CPCI_DMC.CS_DMC_01_emg_stop(gCardNo, node2, 0); if (th != null) { th.Abort(); } ThWorking_PLC.Abort(); ThWorking.Abort(); }
private void btnexit_Click(object sender, EventArgs e) { ushort i; for (i = 0; i < existcard; i++) { rc = CPCI_DMC.CS_DMC_01_reset_card(gCardNoList[i]); } CPCI_DMC.CS_DMC_01_close(); Application.Exit(); }
private void btnNmove_Click_1(object sender, EventArgs e) { double m_Tacc = Double.Parse(txtTacc.Text), m_Tdec = Double.Parse(txtTdec.Text); int m_Rpm = Int16.Parse(txtRpm1.Text); gnodeid = ushort.Parse(cmbNodeID.Text); /* Set up Velocity mode parameter */ rc = CPCI_DMC.CS_DMC_01_set_velocity_mode(gCardNo, node2, 0, m_Tacc, m_Tdec); //* Start Velocity move: rpm > 0 move forward , rpm < 0 move negative */ rc = CPCI_DMC.CS_DMC_01_set_velocity(gCardNo, node2, 0, -1 * m_Rpm); }
public bool ReadIOOut(ushort port) { if (CardNo.Count == 0) { return(false); } uint IOStatus = 0; CPCI_DMC.CS_DMC_01_get_dio_output_DW(CardNo[0], ref IOStatus); return((IOStatus & (0x01 << port)) != 0 ? true : false); }
public bool ReadIOOutRM32(ushort NodeID, ushort port) { if (CardNo.Count == 0) { return(false); } ushort IOStatus = 0; CPCI_DMC.CS_DMC_01_get_rm_output_value(CardNo[0], NodeID, 0, 0, ref IOStatus); return((IOStatus & (0x01 << port)) != 0 ? true : false); }
public uint GetAlarmStatus(ushort NodeID) { uint alm_code = 0; if (CardNo.Count == 0) { return(alm_code); } CPCI_DMC.CS_DMC_01_get_alm_code(CardNo[0], NodeID, 0, ref alm_code); return(alm_code); }