1、上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)BendCtrl弯管机仿真控件使用手册上海隆欣自动化技术有限公司上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)版权声明 本用户手册的所有部分,其著作财产权归属上海隆欣自动化技术有限公司(以下简称隆欣自动化)所有,未经隆欣自动化许可,任何人不可任意仿制,拷贝、誊抄或转译。本用户手册没有任何形式的担保,立场表达或其他暗示。若有任何因本用户手册或其所提到之产品的所有信息,所引起的直接或间接的资料流出,利益损失或事业终止,隆欣自动化及其所属员工恕不担负任何责任。上海隆欣
2、自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)第 1 章 控件接口函数说明提供全部弯管机仿真所需要的接口函数。机床配置文件导入:BOOL APILoadConfigFile(LPCTSTR filepath)参数:filepath 机床配置文件 bcg 文件路径返回值 1:正确 0:错误 功能描述: 导入机床配置文件 .例程: (以标准 C 语言为例说明,下同)视图控制:void APIRestoreView()参数:返回值 无功能描述: 还原成默认视图 ,当想看到整个
3、机床整个模型时候调用.例程: (以标准 C 语言为例说明,下同)void APIISOView()参数:返回值 无功能描述: 将模型成等测图显示 .例程: (以标准 C 语言为例说明,下同)加工管子的参数:void APISetUpBendParameter(float PipeRadius, float PipeIniExtendLength, float PipeTotalLength)参数:PipeRadius 管子半径PipeIniExtendLength 首弯长度,=0PipeTotalLength 管长.返回值 无上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说
4、明 书 ( V1.0)功能描述: 设定管子的参数 .例程: (以标准 C 语言为例说明,下同)模具参数查询:short APIGetBenderDieNum()参数:返回值 返回当前的模具模层数功能描述: 当想知道当前机床配置文件有多少层模具时候调用.例程: (以标准 C 语言为例说明,下同)BOOL APIGetDieParameterByIndex(float FAR* pDieRadius, float FAR* pDieCenterZ, float FAR* pDieThick, short DieIndex);参数:DieIndex 弯曲模层索引,从 0 开始最大是模具层数减 1pD
5、ieRadius 弯曲模半径pDieCenterZ 弯曲模 Z 向轴心的中点的 Z 值.pDieThick 弯曲模厚度.返回值 1:正确 0:错误 功能描述: 得到某层轮模的参数 .例程: (以标准 C 语言为例说明,下同)模具动态生成 (4 个步骤 ):void APISetTotalLengthOfDieAndDie(float totallength)参数:totallength 合模长度返回值 功能描述: 当轮模跟夹模合起来时候的轮模中心到夹模最右边的距离.void APIAddDieMoldsBegin()参数:返回值功能描述: 模具开始创建函数 .上海隆欣自动化技术有限公司 弯 管
6、 机 仿 真 控 件 使 用 说 明 书 ( V1.0)void APIAddDieMoldOneByOne(float WanQuMoldWidth, float WanQuMoldThich, float WanQuMoldLength, float WanQuMoldMajorRadius, float SuiDongYaMoMoldLength, short DieType)参数:WanQuMoldWidth 弯曲模宽度WanQuMoldThich 弯曲模厚度WanQuMoldLength 弯曲模直线段长度WanQuMoldMajorRadius 弯曲模半径SuiDongYaMoMol
7、dLength 随动压模长度DieType 模具类型,目前为保留值返回值功能描述: 一层模具的创建 .void APIAddDieMoldsEnd()参数:返回值功能描述: 模具创建结束.例程: (以标准 C 语言为例说明,下同)(1) APISetTotalLengthOfDieAndDie(float totallength)(2) APIAddDieMoldsBegin()(3)APIAddDieMoldOneByOne-第一层模APIAddDieMoldOneByOne-第二层模APIAddDieMoldOneByOne-第三层模(4) APIAddDieMoldsEnd()模具小车炮
8、筒以及小车定位:APIGetCannonCenterXYZOfCar(float FAR* pOffsetX, float FAR* pOffsetY, float FAR* pOffsetZ)参数:pOffsetX 炮筒中心轴心线 X 值,一般为负数.pOffsetY 炮筒离弯曲模那个端面的 Y 值,一般为负数.上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)pOffsetZ 炮筒中心轴心线 Z 值,一般为正数.返回值 功能描述: 得到小车炮筒的位置,主要用于开始时候换模具要走得 XZ 值.而 Y 值主要定位小车的 Y 向初始位置.void APIS
9、etIniCannonCenterOfCar(float position)参数:position 在开始弯管前,定位小车位置,为炮筒靠近弯曲模那个端面的 Y 值,一般为负数返回值 功能描述: 在开始弯管前,定位小车位置装配误差:void APISetAssembleError(float error)参数:error 装配误差,默认为 0.1返回值 功能描述: 由于模型是三角形去描述曲面,所以存在离散误差,该值应该是弯曲模跟夹模合拢时候,不跟管子发生干涉的值.仿真干涉类型:void APISetCollisionMode(short mode)参数:mode 干涉类型,0 为无干涉,1 为干
10、涉时候精度优先,2 为干涉时候速度优先通常取 2.返回值 功能描述: 用于设定干涉类型 .仿真控制:void APIStartSim()参数:返回值 功能描述: 仿真开始void APIPauseSim()参数:上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)返回值 功能描述: 仿真暂停,如果要继续就要调用开始仿真接口void APIStopAndRestSim()参数:返回值 功能描述: 重置仿真.void APISkipCollision(BOOL bIsSkipCollision)参数:返回值 功能描述: 由于干涉产生时候会仿真停下来,所以当调用
11、该函数一次,仿真会前进一步,如果还有干涉那么要接着调用该函数,直到跳出干涉区.void APISetSimulationSpeed(short speed)参数:Speed 仿真速度,从 1 到 100,如果设定为 100,那么就是按最大的速度仿真.返回值 功能描述: 设定仿真速度是否有随动:BOOL APIGetHasSuiDong()参数:返回值 1:有随动 0:无随动功能描述: 用于判断是否当前模型有随动 模型单位:float APIGetMachineModelUnite()参数:返回值 模型单位功能描述: 机床模型是原始模型缩小的结果 ,所以机床的很多参数要乘以该系数.加载运动指令文
12、本:BOOL APILoadCommandFile(LPCTSTR path)参数:上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)参数:Path 运动指令文本路径.返回值 1:成功 0:失败功能描述: 仿真开始上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)第 2 章 运动指令说明(1)辅夹模的同动,同退的功能M100 为 2 个模具同时进M101 为 2 个模具同时退(2)夹模辅助运动M20 夹模进M21 夹模退(3)压模辅助运动M90 压模进M91 压模退(4)小车夹头状态M50 小车夹头夹紧M51 小车
13、夹头松(5)多轴联动YBC 的联动功能,可以任意组合,控制指令如下:指令用括号括起来 中间数值用空格格开 如:(Y 数值 空格B 数值空格C 数值)三轴同动 YBC,次序可以任意写(Y10.0 B20.34 C22.12)2 轴同动:YB,YC,BC(B20.34 C22.12)或写成(C22.12 B20.34)上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)第 3 章 范例参考一个完整 VB6.0 的例子如下:Private Sub Command1_Click()EndEnd SubPrivate Sub Command2_Click()Dim
14、colimod As Integercolimode = 0Dim speed As Singlespeed = 100Call BendCtrl1.APISetCollisionMode(colimode)Call BendCtrl1.APISetSimulationSpeed(speed)BendCtrl1.APIStartSimEnd SubPrivate Sub Form_Load()BendCtrl1.API_LoadConfigFile (“C:bend.bcg“)BendCtrl1.APILoadCommandFile (“C:command.txt“)End Sub一个完整编译
15、 YBC 到运动控制指令.txt 例子如下(务必仔细参考 ):void CInputtWnd:OnCompile()CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();pMainWnd-OnShowSimulationCommandControlBar();上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)CWanQuMold *pWanQuMold = NULL;for(int i = 0; i m_motionobjectsarray.size(); i+)if (g_pSolidView-m_mo
16、tionobjectsarrayi-m_objectname = “wanqumold“)pWanQuMold = (CWanQuMold *)g_pSolidView-m_motionobjectsarrayi-pobject;/清除指令g_pSolidView-m_commands.erase(g_pSolidView-m_commands.begin(),g_pSolidView-m_commands.end() );g_pSolidView-m_commands.clear();/下面开始编译指令if (gYBCs.size() 0)g_pSolidView-m_nCurStep =
17、-1;/当前步数g_pSolidView-m_nNextStep = 0;/下一步数g_pSolidView-fGuanCurrentL = g_pSolidView-fGuanTotalL;g_pSolidView-nSimType = -1;float curR = gYBCs0.fR;/管子离 YZ 平面距离float curZ = pWanQuMold-m_fbasez; /管子离 XY 平面的距离 m_fbasez 为对称平面的距离for (int i = 0; i 0.0)g_pSolidView-m_commands.push_back(cmd);/加入 Z 的偏移cmd.GTy
18、pe = “Z“;cmd.fRadius = 0.0;if (i = 0)cmd.fFeedValue = 0.0f;elseint first = -1;/当前程序模层号int second = -1;/下一程序模层号for (int j = 0; j wanqumolds.size(); j+)if (fabs(pWanQuMold-wanqumoldsj.fMajorRadius - gYBCsi.fR) wanqumolds.size(); j+)if (fabs(pWanQuMold-wanqumoldsj.fMajorRadius - gYBCsi - 1.fR) m_moldsZ
19、Basefirst - pWanQuMold-m_moldsZBasesecond;cmd.fCenx = 0.0;cmd.fCenY = 0.0f;if (cmd.fFeedValue 0.0)g_pSolidView-m_commands.push_back(cmd);/if (i != 0)/随动模回退cmd.GType = “M81“;g_pSolidView-m_commands.push_back(cmd);if (i != 0)/压模回退cmd.GType = “M91“;g_pSolidView-m_commands.push_back(cmd);/小车夹紧cmd.GType
20、= “M50“;g_pSolidView-m_commands.push_back(cmd);/cmd.GType = “Y“;上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)cmd.fRadius = gYBCsi.fR;cmd.fFeedValue = gYBCsi.fY;if (cmd.fFeedValue 0.0)g_pSolidView-m_commands.push_back(cmd);if (i != 0)/弯曲模回退cmd.GType = “M41“;g_pSolidView-m_commands.push_back(cmd);cmd.
21、GType = “B“;cmd.fRadius = gYBCsi.fR;cmd.fFeedValue = gYBCsi.fB;if (cmd.fFeedValue 0.0)g_pSolidView-m_commands.push_back(cmd);/压模靠cmd.GType = “M90“;g_pSolidView-m_commands.push_back(cmd);/加入夹模头辅助运动cmd.GType = “M20“;g_pSolidView-m_commands.push_back(cmd);/C 指令cmd.GType = “C“;cmd.fRadius = gYBCsi.fR;cm
22、d.fFeedValue = gYBCsi.fC;cmd.fCenx = gYBCsi.fR - curR;/对于旋转中心对原始位置的偏移cmd.fCenY = 0.0f;上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)if (cmd.fFeedValue 0.0)g_pSolidView-m_commands.push_back(cmd);/加入夹头复位运动cmd.GType = “M21“;g_pSolidView-m_commands.push_back(cmd);/小车夹紧松cmd.GType = “M51“;g_pSolidView-m_co
23、mmands.push_back(cmd);/小车回退cmd.GType = “Y“;cmd.fRadius = gYBCsi.fR;cmd.fFeedValue = -gYBCsi.fY-10;if (cmd.fFeedValue != 0.0)g_pSolidView-m_commands.push_back(cmd);/end 编译完毕CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();CSimBar *pSimBar = pMainWnd-GetSimulationCommandDialogBar();CString csConten
24、t;for (i = 0; i m_commands.size(); i+)Command motioncommand = g_pSolidView-m_commandsi;if (motioncommand.GType.Find(M) -1 | motioncommand.GType.Find(m) -1)csContent = csContent + motioncommand.GType +“rn“;elseCString value;value.Format(“%.3frn“, motioncommand.fFeedValue);csContent = csContent +motio
25、ncommand.GType + value;上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)/*/将指令代码写入文本文件CFile fp; if(!(fp.Open(“C:command.txt“, CFile:modeCreate | CFile:modeWrite) return; fp.SeekToBegin(); fp.Write(csContent.GetBuffer(csContent.GetLength(), csContent.GetLength(); fprintf(fp, “%sn%sn%sn“, str1, str2, str3
26、); fp.Close();*/FILE *out;if (out = fopen(“C:command.txt“, “w“)fprintf(out, “%s“,csContent.GetBuffer(csContent.GetLength(); elseAfxMessageBox(“can not open command.txt“);fclose( out ); /pSimBar-m_rich.SetWindowText(csContent);上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)一个完整完整运动指令例子如下:command.txtM50Y20.000M100C90.000M101M50M51M21M51Y-30.000M81M91M50Y40.000M41B90.000M100C90.000M21M51Y-50.000上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)X4.000Z6.000M81M91M50Y30.000M41B90.000M100C90.000M21M51Y-40.000M81M91M50Y20.000M41M100C90.000M21M51上海隆欣自动化技术有限公司 弯 管 机 仿 真 控 件 使 用 说 明 书 ( V1.0)Y-30.000