FrmACTest.cs 12.3 KB

using OnlineStore.Common;
using OnlineStore.DeviceLibrary;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ACServoDriveTest
{
    public partial class FrmACTest : Form
    {
        static AxisManager ACServerManager = AxisManager.instance;
        public FrmACTest()
        {
            InitializeComponent();
        }
        private string GetPortName()
        {
            return comboBoxPortName.Text;
        }
        private void btnOpen_Click(object sender, EventArgs e)
        {
            string portName = comboBoxPortName.Text;
            bool result = ACServerManager.OpenPort(portName);
            if (!result)
            {
                MessageBox.Show("打开串口失败!");
                return;
            }

            formStatus(true);

            //写入默认BLOCK
            //ACServerManager.InitSlvAddr(GetPortName(), GetSlaveAddr());
            //Thread.Sleep(100);
            //ACServerManager.ServoOn(GetPortName(), GetSlaveAddr());
        }


        private void formStatus(bool p)
        {
            btnOpen.Enabled = !p;
            btnClose.Enabled = p;
            btnWrite.Enabled = p;
            btnAbsMove.Enabled = p;
            btnSpeedMove.Enabled = p;

            btnSdStop.Enabled = p;
            btnStop.Enabled = p;
            btnHomeMove.Enabled = p;
            btnRelMove.Enabled = p;
            timer1.Enabled = p;
            btnServoOff.Enabled = p;
            btnServoOn.Enabled = p;
            btnOpenStb.Enabled = p;
            btnCloseStb.Enabled = p;
            btnClearAlarm.Enabled = p;
            btnGetActualPosition.Enabled = p;
            btnGetTargetPosition.Enabled = p;
            btnUpdateBlock.Enabled = p;
            button1.Enabled = p;
            button2.Enabled = p;
            btnGetAlarm.Enabled = p;
        }

        private void DataReceived(string portName, object sender, SerialDataReceivedEventArgs e, byte[] bits)
        {
            string strSend = "";
            for (int i = 0; i < bits.Length; i++)
            {
                strSend += string.Format("{0:X2} ", bits[i]);
            }
            this.richTextBox1.AppendText("收到数据:" + strSend + "\r\n");
            Console.WriteLine("收到数据:" + strSend);
            string str = "";
            string strFromat = "{0:X2}";
            if (bits[1].Equals(0x03) && bits.Length > 3)
            {
                int lenth = bits[2];

                if (PreReadAddr.Equals(ACCMDManager.TargetPostion))
                {
                    if (lenth == 4)
                    {
                        str = string.Format(strFromat, bits[5]) + string.Format(strFromat, bits[6]) + string.Format(strFromat, bits[3]) + string.Format(strFromat, bits[4]);
                        double value = Convert.ToInt32(str.Trim().Replace(" ", ""), 16);
                        this.txtTargetPosition.Text = value.ToString();
                    }
                }
                else if (PreReadAddr.Equals(ACCMDManager.ActualPosition))
                {
                    if (lenth == 4)
                    {
                        str = string.Format(strFromat, bits[5]) + string.Format(strFromat, bits[6]) + string.Format(strFromat, bits[3]) + string.Format(strFromat, bits[4]);
                        double value = Convert.ToInt32(str.Trim().Replace(" ", ""), 16);
                        this.txtActualPosition.Text = value.ToString();
                    }
                }
                else
                {
                    for (int i = 3; i < 3 + lenth; i++)
                    {
                        str += string.Format("{0:X2} ", bits[i]);
                    }
                    str = str.Replace(" ", "");
                    double value = Convert.ToInt32(str, 16);
                    this.richTextBox1.AppendText("转换后结果:" + value + "\r\n");
                    Console.WriteLine("转换后结果:" + value);
                }
                //MessageBox.Show("收到数据:"+value);
            }
            if (strSend.Equals(""))
            {
                return;
            }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            //bean.closePort();
            ACServerManager.ServoOff(GetPortName(), GetSlaveAddr());
            ACServerManager.ColsePort(GetPortName() );
            formStatus(false);
        }
        private void Form1_Load(object sender, EventArgs e)
        { 
            ACServerManager.IsShowMsg = true;
            LogUtil.logBox = this.richTextBox1;
            //ACServerManager.richeBox = this.richTextBox1;
            formStatus(false);
            CheckForIllegalCrossThreadCalls = false;
            List<string> port = new List<string>(SerialPort.GetPortNames());
            comboBoxPortName.DataSource = port;
        }

        private void btnWrite_Click(object sender, EventArgs e)
        {
            string addr = (txtWAddr.Text);
            string data = (txtWData.Text);
            byte cmd = Convert.ToByte(txtCmd.Text);
            int slvAddr = Convert.ToInt32(txtAddr.Text);
            int length = Convert.ToInt32(txtLength.Text);
            byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, cmd, addr, data, length);
            //SendData(dataArray);
            ACServerManager.SendData(GetPortName(), dataArray);
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            this.richTextBox1.Text = "";
        }

        private void btnRelMove_Click(object sender, EventArgs e)
        {
            int position = Convert.ToInt32(txtPosition.Text);
            ACServerManager.RelMove(GetPortName(), GetSlaveAddr(), position);
        }
        private short GetSlaveAddr()
        {
            return 01;
        }
        private void btnHomeMove_Click(object sender, EventArgs e)
        {
            int speed = Convert.ToInt32(txtSpeed.Text);
            ACServerManager.HomeMove(GetPortName(), GetSlaveAddr(), speed);
        }
        private void btnSpeedMove_Click(object sender, EventArgs e)
        {
            int speed = Convert.ToInt32(txtSpeed.Text);
            ACServerManager.SpeedMove(GetPortName(), GetSlaveAddr(), speed);
        }

        private void btnAbsMove_Click(object sender, EventArgs e)
        {
            int position = Convert.ToInt32(txtPosition.Text.Trim(), 10);
            ACServerManager.AbsMove(GetPortName(), GetSlaveAddr(), position);
        }
        private void btnSend_Click(object sender, EventArgs e)
        {
            string str = txtSendStr.Text;
            byte[] data = SerialBean.StringToByte(str);
            data[data.Length - 1] = 0x00;
            data[data.Length - 2] = 0x00;
            data = ACCMDManager.buildCheckData(data, data.Length - 2);
            ACServerManager.SendData(GetPortName(), data);
        }
        private void btnStop_Click(object sender, EventArgs e)
        {
            ACServerManager.Stop(GetPortName(), GetSlaveAddr());
        }

        private void btnSdStop_Click(object sender, EventArgs e)
        {
            ACServerManager.SuddenStop(GetPortName(), GetSlaveAddr());
        }

        private void btnServoOn_Click(object sender, EventArgs e)
        {
            ACServerManager.ServoOn(GetPortName(), GetSlaveAddr());
        }

        private void btnServoOff_Click(object sender, EventArgs e)
        {
            ACServerManager.ServoOff(GetPortName(), GetSlaveAddr());
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ACServerManager.OpenAndCloseSTB(GetPortName(), GetSlaveAddr());
            //OpenSTB();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ACServerManager.CloseSTB(GetPortName(), GetSlaveAddr());
        }

        private void btnUpdateBlock_Click(object sender, EventArgs e)
        {
            int num = Convert.ToInt32(txtNo.Text);
            ACServerManager.UpdateBlock(GetPortName(), GetSlaveAddr(), num.ToString());
        }

        private void button4_Click(object sender, EventArgs e)
        {
            ACServerManager.AlarmClear(GetPortName(), GetSlaveAddr());
        }

        private void button3_Click(object sender, EventArgs e)
        {
            ACServerManager.CloseAlarmClear(GetPortName(), GetSlaveAddr());
        }
        private string PreReadAddr = "";
        private void btnReadPosition_Click(object sender, EventArgs e)
        {
            int value = ACServerManager.GetTargetPosition(GetPortName(), GetSlaveAddr());
            txtTargetPosition.Text = value.ToString();
        }

        private void btnGetActualPosition_Click(object sender, EventArgs e)
        {
            int value = ACServerManager.GetActualtPosition(GetPortName(), GetSlaveAddr());
            txtActualPosition.Text = value.ToString();
        }
        private int getDataIndex = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {

            try
            {
                //if (getDataIndex.Equals(1))
                //{
                //    ACServerManager.GetTargetPosition(GetSlaveAddr());
                //}
                //else if (getDataIndex.Equals(2))
                //{
                //    ACServerManager.GetActualtPosition(GetSlaveAddr());
                //}
                //else if (getDataIndex.Equals(3))
                //{
                //    ACServerManager.GetAlarmStatus(GetSlaveAddr());
                //}
                //else if (getDataIndex.Equals(4))
                //{
                //    ACServerManager.GetBusyStatus(GetSlaveAddr());
                //}
                //else if (getDataIndex.Equals(5))
                //{
                //    ACServerManager.GetHomeEndStatus(GetSlaveAddr());
                //}
                //else
                //{
                //    getDataIndex = 0;
                //}
                getDataIndex++;
            }
            catch (Exception ex)
            {

            }

            try
            {
                //RegisterInfo obj = ACServerManager.GetData((byte)GetSlaveAddr(), ACCMDManager.TargetPostion);
                //RegisterInfo act = ACServerManager.GetData((byte)GetSlaveAddr(), ACCMDManager.ActualPosition);
                //if (obj != null)
                //{
                //    txtTargetPosition.Text = obj.LastData.ToString();
                //} if (act != null)
                //{
                //    txtActualPosition.Text = act.LastData.ToString();
                //}

                //RegisterInfo alarm = ACServerManager.GetData((byte)GetSlaveAddr(), ACCMDManager.Alarm_Status);
                //RegisterInfo busy = ACServerManager.GetData((byte)GetSlaveAddr(), ACCMDManager.BUSYStatus);
                //RegisterInfo home = ACServerManager.GetData((byte)GetSlaveAddr(), ACCMDManager.HOME_CMP_Status);
                //if (alarm != null)
                //{
                //    this.txtAlarmStatus.Text = alarm.LastData.ToString();
                //} if (busy != null)
                //{
                //    this.txtBusyStatus.Text = busy.LastData.ToString();
                //} if (home != null)
                //{
                //    this.txtHomeStatus.Text = home.LastData.ToString();
                //}
            }
            catch (Exception ex)
            {
            }
        }

        private void btnGetAlarm_Click(object sender, EventArgs e)
        {
            int value = ACServerManager.GetAlarmStatus(GetPortName(), GetSlaveAddr());
            this.txtAlarmStatus.Text = value.ToString();
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            int value = ACServerManager.GetBusyStatus(GetPortName(), GetSlaveAddr());
            this.txtBusyStatus.Text = value.ToString();
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            int value = ACServerManager.GetHomeEndStatus(GetPortName(), GetSlaveAddr());
            this.txtHomeStatus.Text = value.ToString();
        }

        private void button3_Click_1(object sender, EventArgs e)
        {

            //写入默认BLOCK
            ACServerManager.InitSlvAddr(GetPortName(), GetSlaveAddr());
        }
    }
}