Epson機械手簡單實例編程

Epson簡單實例

1.Epson軟件方面編程

2.網絡配置方面

3.vs編碼方面

軟件配置:Epson機械手軟件,vs2012
網絡配置:Tcp通信,IP地址及端口設置
硬件配置:Pc機,機械手,機械手供電器

一.環境準備
①pc,機械手,供電器上電。
②pc與機械手的兩個網線插口連接,置供電器Power爲On
③配置pc的ip地址與Epson軟件同一個ip地址,Epson軟件每一個端口都可以設置一個ip,可以同時開多個端口(設置位置:設置—系統配置—控制器—TCP/IP)
④窗口—電腦與控制器通信–增加,添加一個以太網連接p1,同時設置ip地址
⑤將軟件狀態從離線改爲usb,在更改爲名爲p1的以太網連接。
⑥工具—機器人管理器,調試機械手,機械手運動則表示環境準備完成。

二. 編寫Epson軟件代碼
①初始化Epson

Function MainInitPro
    Reset
    If Motor = Off Then
        Motor On
        SLock 1, 2, 3, 4, 5, 6
    EndIf
    Power High
    Counts = 0

    Accel 60, 60
    Speed 10
    AccelS 1000
    SpeedS 1000
'   Go P1
Fend

②網絡配置

Function NetOpen
     NetSts = ChkNet(202)
    If (NetSts < 0) Then
        CloseNet #202
        Wait 0.5
        SetNet #202, "192.168.0.1", 2002, CRLF, NONE, 0 '配置端口號,ip地址
        OpenNet #202 As Server
        WaitNet #202
        Print "配置完成!"

    EndIf
Fend

③掃描端口,獲取端口數據,傳輸數據

Function ScanConnNet
OnErr GoTo errhandler
    Do
        NetSts = ChkNet(202)
        If (NetSts > 0) Then

            Input #202, RecvString$ '從202端口獲取輸入,並賦值到變量RecvString$
            ParseStr RecvString$, RecvStr$(), "#"
            ParseStr RecvString$, RecvStr$(), " "
            Select RecvStr$(0)
                Case "X"
                      Move CurPos +X(Val(RecvStr$(1)))
                Case "-X"
                      Move CurPos -X(Val(RecvStr$(1)))
                Case "RobotRun"
                    CX(P100) = Val(RecvStr$(1))
                    CY(P100) = Val(RecvStr$(2))
                    CZ(P100) = Val(RecvStr$(3))
                    CU(P100) = Val(RecvStr$(4))
                    CV(P100) = Val(RecvStr$(5))
                    CW(P100) = Val(RecvStr$(6))
                      Go LJM(P100)
                      '發送數據到202端口
                      Print #202, "#GoToPointok"
            Send

        ElseIf NetSts < 0 Then
        Call NetOpen
        ElseIf NetSts = 0 Then
        EndIf
         Print #202, "#RobotPos" + "," + Str$(CX(CurPos)) + "," + Str$(CY(CurPos)) + "," + Str$(CZ(CurPos)) + "," + Str$(CU(CurPos)) + "," + Str$(CV(CurPos)) + "," + Str$(CW(CurPos)) + "#"
         Wait 0.2
    Loop
errHandler:
   RecvString$ = ""
    EResume Next

Fend

三.c#編程
①Tcp連接核心代碼

using System.Threading.Tasks;
using TestLTDMC;
using System.Threading;
using System.Windows.Forms;

namespace Test
{
    class Robot
    {
        private Socket client;
        public static object sendLock = new object();
        private IPEndPoint ipep;
        private byte[] buf = new byte[1024];
        private static object SendLock = new object();
        private static object Lock = new object();
        public static Robot robot;
        private bool RobotConnectSts = false;
        public static Robot instance;
        public static Robot Instance()
        {
                    if (instance == null)
                    {
                        instance = new Robot();
                    }
                    return instance;
        }


        private  Robot()
        {
            IPAddress ipad = IPAddress.Parse("192.168.0.1");
            ipep = new IPEndPoint(ipad, 2001);
        }


        public void ConnectWithRobot()
        {
            if (client != null && client.Connected)
            {
                client.Close();
            }
            try
            {
                lock (sendLock)
                {
                    client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    client.Connect(ipep);
                    client.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), client);
                }
            }
            catch
            {
            }
        }


        public bool GetRobotConnectSts
        {
            get
            {
                if (client != null)
                {
                    RobotConnectSts = client.Connected;
                }
                else
                {
                    RobotConnectSts = false;
                }
                return RobotConnectSts;
            }
        }
        public void DisconnectWithRobot()
        {
            if (client != null)
            {
                client.Close();
            }
        }
        private void Receive(IAsyncResult ia)
        {
            try
            {
                client = ia.AsyncState as Socket;
                int count = client.EndReceive(ia);
                client.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), client);
                string context = Encoding.ASCII.GetString(buf, 0, count);
                if (context.Length > 0)
                {
                    ProcessData(context);

                }
                else
                {

                }
            }
            catch
            {
            }
        }
        private void ProcessData(string recvdata)
        {
            recvdata = recvdata.Trim();
            string[] cmddata = recvdata.Split(new char[] { '#' });
            //string[] singlecmddata1 = cmddata[1].Split(new char[] { '\r\n' });
            string[] singlecmddata = cmddata[1].Split(new char[] { ',' });
            if (singlecmddata[0].Trim() != "RobotPos")
            {
            RunLog.instance.SaveLog(1, "PC接收到Robot發來的去" + recvdata + "命令");
            }
            switch (singlecmddata[0].Trim())
            {
                case "RobotPos":
                    //相關處理
                    break;
                default:
                    break;
            }
        }
        public void SendCmdToRobot(string part1, double part2, string part3, string part4, string part5, string part6, string part7)
        {
            string sendcmd = "";
            sendcmd = part1 + " " + part2 + " " + part3 + " " + part4 + " " + part5 + " " + part6 + " " + part7;
            SendCmdData(sendcmd);
        }

        public void SendCmdData(string StrData)
        {
            RunLog.instance.SaveLog(1, "PC向Robot發送" + StrData + "命令");
            lock (SendLock)
            {
                try
                {
                    byte[] buf1;
                    buf1 = Encoding.ASCII.GetBytes(StrData + "\r\n");
                    client.Send(buf1, 0, buf1.Length, SocketFlags.None);
                }
                catch
                {
                }
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章