Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
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);
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
 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!");
     }
 }
Esempio n. 15
0
 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);
 }
Esempio n. 16
0
        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为减数停止。
        }
Esempio n. 17
0
 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);
 }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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();
        }
Esempio n. 21
0
        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);
        }
Esempio n. 22
0
        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));
        }
Esempio n. 23
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("設定有誤");
            }
        }
Esempio n. 24
0
 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);
     }
 }
Esempio n. 25
0
 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();
 }
Esempio n. 26
0
        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();
        }
Esempio n. 27
0
        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);
        }
Esempio n. 28
0
        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);
        }
Esempio n. 29
0
        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);
        }
Esempio n. 30
0
        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);
        }