【虚拟工厂】SCL编写<机械手加盖模块>应用
创始人
2024-06-01 10:33:55
0

使用scl来编写实虚拟工场中的一个机械手加盖应用项目

文章目录

目录

文章目录

前言

1.机械手加盖场景

2.了解各部分功能

3.命名变量找出输入输出

4.在博图建立变量

二、编写思路

1.分析

2.使用小模块化来编写

3.确定编程思路

三、编程

1.上料部分

2.机械手部分

3.对块进行连接

4.完整流程

四、完善和效果 

1.停止,复位,急停

2.加数,模式切换

3.效果

总结


前言

这章我们来编写一下虚拟工厂软件中的一个仿真应用——机械手加盖模块,本篇文章主要分为下面几个部分 :1.场景分析  2.编程思路 3.实现方法  4.编写控制程序 5.完善优化和总结。下面我们就通过这些步骤一步一步将应用案例完成,并对所学习的scl语言编程进行巩固和强化!


一、场景部分

 打开factoryio(虚拟工厂)软件,找到里面自带的一些工程场景,我们找到机械手加盖这一个。

1.机械手加盖场景

 

2.了解各部分功能

 打开场景后,尽快熟悉各个部位的功能和动作,传送带和传感器比较好理解,机械手的x,y,z轴和气动的一个挡块可以打开实训强制执行器来看一下是如何动作的;或者将上面的英文翻译一下,意思应该都差不多;总之熟悉各部分元件的功能。

3.命名变量找出输入输出

 各功能了解后,给它们写上相应的变量名称:

名字写好后,在驱动中找到PLCSIM 将相应的输入输出拖拽上去: 

4.在博图建立变量

 上面做好后,这里就将博图变量建一下;注:博图建变量时先确定是实际参数还是形式参数,如果是实际参数,在驱动底部将变量导出,然后在博图变量中导入就可以了;如果是形式参数就在FB块中建立变量。

这里是用的形参:




二、编写思路

 场景和变量做好后,下面就是编写思路部分了!

1.分析

 这是一个标准的加盖场景,这个场景中有一个控制台,两个传送带和两个气动挡块,还有一个机械手;虽然没有具体的控制要求,但是传送带,机械手和挡块这些部分是有基本控制的,就像传送带,要么运行要么停止;机械手也一样,基本的控制就是伸出缩回,下降上升,吸盘得电失电等。所以在这里我们基本可以知道一个大概的流程是什么样的啦!

这里并不是一定要有具体的控制要求才能写程序,只要有基本控制是一样可以的!

2.使用小模块化来编写

 简单分析过之后,我们的基本流程是:按下启动后,传送带进行上料,当料到达挡块位置后,传送带停止;机械手夹起料,伸出机械臂将料盖放在料的底座上,同时挡块抬起,让加过盖子的料继续传送,到达指定的地方;一个基本的流程就是这样了。

那我们要怎样进行编写呢!不错,和小标题一样 使用小模块化,具体就是将机械手写成一个块,传送带一个块,或者其他的一些写成一个块;最后根据具体化的控制流程在一个主程序里面按照要求来将各个块连接起来,完成要求!

3.确定编程思路

分析好之后,我们这里使用块来编写,机械手的控制时一个函数块,传送带是一个函数块,还有函数块是将它们联系起来,最后完成我们的加盖控制要求!




三、编程

 按照上面的思路我们建立相应的程序块:第一个是和虚拟工厂仿真连接的一个fc块,第二个和第四个是来写机械手后上料控制的块,第三个是实现具体控制的一个块。

 

1.上料部分

我们根据场景来看上料部分(传送带部分)的一个简单流程:按下启动后,两个传送带要开始运行,当运行到传感器位置后,传送带停止,这时挡块得电将两个料摆好,就完成了。

 (注:相应的变量是在块_1中建立的,所以这里使用的是块_1的背景数据,如果感觉这样很乱的话可以使用全局变量来编写)

程序如下:

变量A是一个触发条件,触发后执行下面的程序。 

   CASE "块_1_DB".A OF1:"块_1_DB".#传送带1 := 1;"块_1_DB".#传送带2 := 1;"块_1_DB".A := 2;2:IF "块_1_DB".PF[0].Q THEN"块_1_DB".传送带1 := 0;"块_1_DB".ZJ1 := 1;END_IF;IF "块_1_DB".PF[1].Q THEN"块_1_DB".传送带2 := 0;"块_1_DB".ZJ2 := 1;END_IF;IF "块_1_DB".ZJ1 & "块_1_DB".ZJ2 THEN"块_1_DB".ZJ1 := 0;"块_1_DB".ZJ2 := 0;"块_1_DB".A := 3;END_IF;3:"块_1_DB".挡块1 := 1;"块_1_DB".挡块2 := 1;IF "块_1_DB".挡块到位信号1 THEN"块_1_DB".挡块1 := 0;"块_1_DB".ZJ5 := 1;END_IF;IF "块_1_DB".挡块到位信号2 THEN"块_1_DB".挡块2 := 0;"块_1_DB".ZJ6 := 1;END_IF;IF "块_1_DB".ZJ5 & "块_1_DB".ZJ6 THEN"块_1_DB".I := 1;"块_1_DB".ZJ5 := 0;"块_1_DB".ZJ6 := 0;"块_1_DB".A := 0;END_IF;END_CASE;

上料效果:

 这里可来简单看一下!

 

2.机械手部分

上料部分完成后,下面就是机械手动作部分了(前面文章也写过的),这里就简单说一下基本控制:料到位后,机械手下降抓取料,然后上升,机械手伸出,伸出后下降,将料放进去,然后机械手上升,回到原位,就好了!

程序如下:

这里只用到了机械手的x轴后z轴,还是比较简单的。 

#TT[0].TON(IN := #BZ1,PT := T#1s);#TT[1].TON(IN := #BZ2,PT := T#1s);#TT[2].TON(IN := #BZ3,PT := T#1s);#TT[3].TON(IN := #BZ4,PT := T#1s);#TT[4].TON(IN := #BZ5,PT := T#1s);CASE "块_1_DB".W OF0:;1:"块_1_DB".吸盘 := 1;"块_1_DB".机械手Z轴 := 1;IF "块_1_DB".抓取到位 THEN#BZ1 := 1;"块_1_DB".W := 2;END_IF;2:IF #TT[0].Q THEN"块_1_DB".机械手Z轴 := 0;#BZ2 := 1;#BZ1 := 0;END_IF;IF #TT[1].Q THEN#BZ2 := 0;"块_1_DB".W := 3;END_IF;3:"块_1_DB".机械手X轴 := 1;IF "块_1_DB".伸出缩回信号 THEN#BZ3 := 0;ELSE#BZ3 := 1;END_IF;IF #TT[2].Q THEN#BZ3 := 0;"块_1_DB".W := 4;END_IF;4:"块_1_DB".机械手Z轴 := 1;IF "块_1_DB".下降上升信号 THEN#BZ4 := 0;ELSE#BZ4 := 1;END_IF;IF #TT[3].Q THEN"块_1_DB".吸盘 := 0;"块_1_DB".机械手Z轴 := 0;#BZ5 := 1;#BZ4 := 0;"块_1_DB".W := 5;END_IF;5:IF #TT[4].Q THEN"块_1_DB".机械手X轴 := 0;   #BZ5 := 0;"块_1_DB".W := 6;END_IF;6:  "块_1_DB".M := 1;//机械手部分完成信号"块_1_DB".W := 0;END_CASE;

机械手效果:

 

3.对块进行连接

这两个块完成后,我们通过一个块_1来进行连接,按下启动后触发上料部分,上料完成后延时1s给一个信号,触发机械手部分。

 IF #启动 THEN#A := 1;END_IF;//I为1时代表上料完成,可以进行下一步IF #I = 1 THEN#BZ1 := 1;END_IF;//上料完成后延时1s,触发机械手部分//w为1是触发条件IF #T[0].Q THEN#W := 1;#I := 0;#BZ1 := 0;END_IF;//M为1是机械手完成信号IF #M = 1 THEN#A := 1;#M := 0;END_IF;

4.完整流程

机械手后上料完成后,我们还有一个挡块抬起让完成的料继续传送的动作,如果没有这一个后面就没法继续运行了。

 我们来看场景进行分析,在机械手缩回的那一步的同时,我们要让挡块2抬起,传送带2继续运行,直到走过料传感器3,我们再将挡块放下,那么这才是一个完整的流程。

 在机械手的第5步,我们让x轴缩回的同时,让挡块抬起,然后再触发传送带(上料部分),在上料部分中再加一个判断,当料到第3个传感器位置时,再让挡块落下。

机械手第5步: 

 5:IF #TT[4].Q THEN"块_1_DB".机械手X轴 := 0;"块_1_DB".挡块抬起2 := 1;#BZ5 := 0;"块_1_DB".W := 6;END_IF;

 上料部分判断:

    2://判断是否到达第3个传感器IF "块_1_DB".PF[2].Q THEN"块_1_DB".挡块抬起2 := 0;END_IF;

 一个流程效果:

 




四、完善和效果 

这里我们对程序进行一个完善。

1.停止,复位,急停

场景的控制台中给我们了4个按钮,1个模式切换,还有一个计数的模拟器。 

下面我们来实现一下这几个按钮。 

 启动我们已经完成了,这里复位和停止我做了一个功能,按下后运行完这次后停止;急停是立即停止,松开后继续运行。
代码:

将急停放在主程序的最前面就可以了。 

 //复位按钮和停止按钮IF #复位 THEN#E := 1;END_IF;IF #停止 THEN;ELSE#E := 1;END_IF;

当E=1的时候,在机械手里面进行一个判断,然让他们不循环就好了。

2.加数,模式切换

加数功能就是,每做好一个完整的料,就对一个变量进行加1,就可以了。

在上料部分进行加1。 

 2://判断是否到达第3个传感器IF "块_1_DB".PF[2].Q THEN"块_1_DB".计件器 := "块_1_DB".计件器 + 1;"块_1_DB".挡块抬起2 := 0;END_IF;

模式切换功能就是,手动时是按一次启动按钮,系统执行一次;自动就是按一下启动按钮,系统一直执行。

在主程序进行一个选择,然后再机械手里面进行一个判断:

//模式切换部分//有自动和手动两个IF #手动 THEN#Z := 1;ELSIF #自动 THEN#Z := 2;END_IF;
 6:                            //判断是自动模式还是手动模式IF "块_1_DB".Z = 1 OR "块_1_DB".E = 1 THEN"块_1_DB".W := 8;    //手动模式ELSIF "块_1_DB".Z = 2 THEN"块_1_DB".W := 7;    //自动模式END_IF;7:"块_1_DB".M := 1;//机械手部分完成信号"块_1_DB".W := 0;;8:"块_1_DB".传送带2 := 1;IF "块_1_DB".PF[2].Q THEN"块_1_DB".计件器 := "块_1_DB".计件器 + 1;"块_1_DB".挡块抬起2 := 0;"块_1_DB".传送带2 := 0;"块_1_DB".E := 0;"块_1_DB".W := 0;END_IF;END_CASE;

3.效果




总结

最后的最后,我们简单来总结一下吧!先说思路,这种分成小模块然后再组装的方法是很不错的,对于一些较大的案例或者有很多设备的项目会很有效果,要比全部写在一起好很多,如果程序哪里出了问题,我们只要找控制部分就可以了,前提是小模块必须是正确的!

然后关于这一个加盖小案例,只要保证两个小的功能块不出问题,那么程序就很容易啦!还有一点我在编写急停时,急停无法停掉两个传送带,不知道大家是不是这样,我暂时还没有找到好的方法!

好了,以上就是今天的内容啦,感谢大家的阅读!

相关内容

热门资讯

《墨竹梅》 《墨竹梅》 曾几 宋代 曾几 的皪江梅竹外枝,能将幻法转生机。凭君莫作风垂绿,便恐飘零学雪飞...
《中秋夜月》 《中秋夜月》 钱钟书 当代 钱钟书 赢得儿童尽笑欢,盈盈露洗挂云端。一生几见当头满,四野哀嗷...
《人欲》 《人欲》 李商隐 唐代 李商隐 人欲天从竟不疑,莫言圆盖便无私。秦中已久乌头白,却是君王未备...
《饭客》 《饭客》 艾性夫 宋代 艾性夫 菜剪尧时韭,羹羞晋代莼。家寒多食淡,客好不嫌贫。一夜小窗雨,...
《齐威王》 《齐威王》 徐钧 宋代 徐钧 赏罚严明国富强,独能仗义一朝王。周网此日微如发,独有人心理未亡...
《和惠思波上鸥》 《和惠思波上鸥》 王安石 宋代 王安石 翩翩白凫鸥,泛泛水中游。西来久不见,梦想在沧洲。 作...
《采桑子》 《采桑子》 欧阳修 宋代 欧阳修 天容水色西湖好,云物俱鲜。鸥鹭闲眠,应惯寻常听管弦。风清月...
《观刈麦》 《观刈麦》 白居易 唐代 白居易 田家少闲月,五月人倍忙。夜来南风起,小麦覆陇黄。妇姑荷箪食...
《春光》 《春光》 李商隐 唐代 李商隐 九十春光斗日光,山城斜路杏花香。几时心绪浑无事,得及游丝百尺...
《读东湖集二首》 《读东湖集二首》 赵蕃 宋代 赵蕃 世竞江西派,人吟老杜诗。五言真有律,徐稚是吾师。不但时相...
《寄黄晞》 《寄黄晞》 李覯 宋代 李覯 长忆黄夫子,才高行亦淳。世情轻近事,见惯即常人。何力康时务,将...
《虞美人草》 《虞美人草》 姜夔 宋代 姜夔 夜阑浩歌起,玉帐生悲风。江东可千里,弃妾蓬蒿中。化石那解语,...
《狂歌》 《狂歌》 陆游 宋代 陆游 少年虽狂犹有限,遇酒时能傲忧患;即今狂处不待酒,混混长歌老岩涧。...
《咏华山》 《咏华山》 寇准 宋代 寇准 只有天在上,更无山与齐。举头红日近,回首白云低。 作者简介(寇...
《长安少年行》 《长安少年行》 皎然 唐代 皎然 翠楼春酒虾蟆陵,长安少年皆共矜。纷纷半醉绿槐道,躞蹀花骢骄...
《月儿弯弯照九州》 《月儿弯弯照九州》 佚名 宋代 佚名 月儿弯弯照九州,几家欢乐几家愁。几家夫妇同罗帐,几个飘...
《双髻山》 《双髻山》 胡仲弓 宋代 胡仲弓 千古丫鬟高插天,淡妆浓抹傅雪烟。眼前不见峨眉老,独有青山长...
《山中呈聂心远诸客》 《山中呈聂心远诸客》 文天祥 宋代 文天祥 谁入山来问野舟,一篙花外渡深流。小颦风树蹁跹鹤,...
《千丈岩瀑布》 《千丈岩瀑布》 曾巩 宋代 曾巩 玉虬垂处雪花翻,四季雷声六月寒。凭槛未穷千丈势,请从岩下举...
《盖延》 《盖延》 徐钧 宋代 徐钧 力挽强弓数百斤,兵锋到处策奇勋。可怜轻敌多深入,不似君王善料军。...