在我们的一个项目中,需要用C#实现一个SDK,以便于以后调用这个SDK来对机器人进行操控。
首先这个SDK是继承了base. base是abstract抽象类,大致如下所示:
public abstract class Base
{
public abstract void Start(Dictionary<string, Object> cfg);
public abstract bool IsOnline();
public abstract bool LoadPara();
public abstract bool SetPara(int id, Dictionary<string, Object> para);
public abstract bool GetPara(int id, ref Dictionary<string, Object> para);
public abstract bool FireOn(bool flag, int fireOnTime, int fireOffTime, float weldVoltage, float weldCurrent);
可以看到抽象类定义焊接机器人的很多动作。
下面是SDK的部分代码:
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Hanli.Driver;
using Hanli.ParaStorage;
using Hanli.Platform;
namespace Hanli.MotionMidware
{
public class STEP_ROBOT : Base
{
private static STEP_ROBOT _robot;
public const float LenUnitScale = GlobalParam.LEN_UNIT_SCALE;
private const int MonitorInterval = 100; // 线程间隔(ms)
private bool myMovActually = false;
bool myCMModeOn = false;
public static STEP_ROBOT GetRobot()
{
if (_robot == null)
{
_robot = new STEP_ROBOT();
}
return _robot;
}
STEPSDK _sdk;
private bool[] _DIs;
private Coord _currentPosition;
private Coord _resetPosition;
private Coord myCurPos;
private STEP_ROBOT()
{
_sdk = STEPSDK.GetSDK();
_currentPosition = new Coord();
myCurPos = new Coord();
//_resetPosition = new Coord()
//{
// x = -1224,
// y = -1943,
// z = 2276,
// rx = -1766,
// ry = 66,
// rz = -491
//};
Task.Run(UpdataDIs);
}
public void WriteSDK()
{
_sdk.Write();
}
在窗体中,可以这么调用SDK:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Hanli.MotionMidware;
private void button16_Click(object sender, EventArgs e)
{
STEPSDK _sdk = STEPSDK.GetSDK();
_sdk.SetWeldingProcess(int WeldVoltage, int WeldCurrent, int WeldSpeed, int StartArcDelay, int StopArcDelay);
}
这个SDK是和机器人进行通讯,其通讯方式如下图所示: