新手西门子PLC编程技巧,就是简单快速好用
本文通过例程的方式总结一些常用的西门子PLC编程技巧,从简单到复杂,从梯形图到SCL,希望对大家有所帮助。
(一)PLC系统常闭点
(二)PLC系统常开点
(三)PLC系统上电脉冲
PLC程序的系统上电脉冲,可以作为系统初始化脉冲来复位、清零和设置系统重要参数,尽量使用比较独立的存储位。
(四)一键触发启停功能
用一个按钮实现启动和停止功能,可以作为操作按钮不够时的一个补救措施。
(五)模拟量输入标定功能
将整数的模拟量标定为实数的工程量,相当于博途中自带的SCALE_X ,但该子程序结合高低量程限制后,标定和调试都更加方便。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
IF (#Emin < #Emax) AND (#Dmin < #Dmax) THEN
IF #Raw < #Dmin THEN
#RawTemp := #Dmin;
END_IF;
IF #Raw > #Dmax THEN
#RawTemp := #Dmax;
END_IF;
IF (#Raw >= #Dmin) AND (#Raw <= #Dmax) THEN
#RawTemp := #Raw;
END_IF;
#OutReal := (INT_TO_REAL(#RawTemp - #Dmin) / INT_TO_REAL(#Dmax - #Dmin)) * (#Emax - #Emin) + #Emin;
#OutPercentage := (#OutReal / (#Emax - #Emin)) * 100.0;
ELSE
#OutReal := 0.0;
#OutPercentage := 0.0;
END_IF;
(六)模拟量输出标定功能
将实数的工程量标定为整数的数字量,相当于博途中自带的NORM_X ,但该子程序结合高低量程限制后,标定和调试都更加方便。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
IF (#Dmin < #Dmax) AND (#Emin < #Emax) THEN
IF #Raw < #Emin THEN
#RawTemp := #Emin;
END_IF;
IF #Raw > #Emax THEN
#RawTemp := #Emax;
END_IF;
IF (#Raw >= #Emin) AND (#Raw <= #Emax) THEN
#RawTemp := #Raw;
END_IF;
#OutInteger := REAL_TO_INT(((#RawTemp - #Emin) / (#Emax - #Emin)) * INT_TO_REAL(#Dmax - #Dmin) + INT_TO_REAL(#Dmin));
#OutPercentage := ((((#RawTemp - #Emin) / (#Emax - #Emin)) * INT_TO_REAL(#Dmax - #Dmin) + INT_TO_REAL(#Dmin)) / INT_TO_REAL((#Dmax - #Dmin))) * 100.0;
ELSE
#OutInteger := 0;
#OutPercentage := 0.0;
END_IF;
RETURN;
(七)冒泡法排序功能
通过冒泡法升序或降序模式排序数组。
(1)子程序调用
(2)子程序变量声明
(3)模式为1(升序)的运行结果如下图所示:
(4)模式为0(降序)的运行结果如下图所示:
(5)SCL代码
IF #Enable THEN
//获取数组上限
#L := LOWER_BOUND(ARR := #Array, DIM := 1);
//获取数组下限
#H := UPPER_BOUND(ARR := #Array, DIM := 1);
//冒泡法排序
FOR #i := #L TO #H-1 DO
FOR #j := #L TO #H-1-#i DO
IF #Mode THEN
//升序
IF #Array[#j] > #Array[#j + 1] THEN
#temp1 := #Array[#j];
#Array[#j] := #Array[#j + 1];
#Array[#j + 1] := #temp1;
END_IF;
ELSE
//降序
IF #Array[#j] < #Array[#j + 1] THEN
#temp1 := #Array[#j];
#Array[#j] := #Array[#j + 1];
#Array[#j + 1] := #temp1;
END_IF;
END_IF;
END_FOR;
END_FOR;
END_IF;
(八)斜坡函数功能
输出值按照指定斜率(单位/秒)跟随设定值,可以用来防止数值突变,这个功能可以在博途中添加扩展库函数(LGF)后直接调用Ramp函数。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
#rv1:= RD_SYS_T(#ActualTime);
IF #InitFB = true THEN
#LastTime := #ActualTime;
#AuxOut := #SetPoint;
#Out := #AuxOut;
END_IF;
#DeltaTime_T:= T_DIFF(IN1:=#ActualTime, IN2:=#LastTime);
#DeltaTime_DI:= TIME_TO_DINT(#DeltaTime_T);
#DeltaTime:= DINT_TO_REAL(#DeltaTime_DI);
#DeltaTime := #DeltaTime / 1000.0;
#LastTime := #ActualTime;
IF #SetPoint < #AuxOut THEN
#Out := #AuxOut;
#auxR := #AuxOut - (#Rate * #DeltaTime);
#Out := #AuxOut;
#AuxOut := MAX(IN1 := #auxR, IN2 := #SetPoint);
#Out := #AuxOut;
RETURN;
ELSE
IF #SetPoint > #AuxOut THEN
#Out := #AuxOut;
#auxR := (#Rate * #DeltaTime) + #AuxOut;
#Out := #AuxOut;
#AuxOut := MIN(IN1 := #auxR, IN2 := #SetPoint);
#Out := #AuxOut;
END_IF;
END_IF;
RETURN;
例程说明
以上例程均在博途V15.1环境下测试通过,大家有什么好的编程技巧,欢迎留言!
零基础入门ABB机器人,仅需掌握6大编程技巧
工业机器人的发展以及机器人智能化水平的提高,机器人的应用范围还在不断地扩大。那么机器人能干啥?自动识别、在线生成包含工艺参数的轨迹、自动作业。
只有你想不到没有他们做不到!今天小编就带大家见识下,ABB机器人的风采!
广泛采用工业机器人,不仅可提高产品的质量与产量,而且对保障人身安全,改善劳动环境,减轻劳动强度,提高劳动生产率,节约原材料消耗以及降低生产成本,有着十分重要的意义。
因为ABB机器人应用于焊接、搬运、装配、涂装、机加工、捡拾、包装、码垛、上下料 等,逐渐替代人工,在工厂担任越来越重要的角色,为此需要大量的技术人员对机器人系统进行定时定点的维护与保养,并且在产生故障时及时解决问题,使机器人高效生产,高效运行。
下图是ABB机器人基于首创的底涂涂胶免示教编程技术为宇通客车打造了首条客车边窗底涂涂胶免示教编程智能生产线,已实现小批量、多品种的柔性生产模式。
机器正在进行底涂和涂胶工作
说了那么多机器人可以操作完成的工作,那下面咱们就一起来看看,ABB机器人的6大编程技巧!
Pdisp轨迹偏移使用、单工位多次预约程序、在robotstudio创建两台机器人的socket连接、双工位预约程序、与相机通讯的Socket收发数据处理与提取、如何创建数组等编程技巧,满满的实用干货!
1ABB机器人Pdisp 轨迹偏移使用
1.如果有下图两个产品,已经完成了右边产品轨迹,左边产品估计一样,如何快速生成左边轨迹(左边产品可能有平移和旋转)。
2.完成右边轨迹示教Path_30,如上图。起点为Target_20。
3. 完成左边起点的示教,为Target_ref_start,如下图。
注:如果左边产品轨迹有旋转,示教的Target_ref_start相对于左边产品的姿态要和Target_20相对于右边产品的姿态一致(此处左边产品旋转了30°,示教的角度z方向也旋转了30°)
4.插入指令如下:
MoveJ pHome,v1000,z100,tWeldGunWObj:=wobj0;//移动到Home位置
Path_30;//运行右边产品轨迹;
MoveJpHome,v1000,z100,tWeldGunWObj:=wobj0;//回到Home;
MoveJTarget_ref_start,v1000,fine,tWeldGunWObj:=wobj0;//走到左边产品起点;
ConfJOff;//因为使用偏移,关闭轴配置监控,否则有可能使用原配置参数导致位置走不到而报错 ConfLOff; //因为使用偏移,关闭轴配置监控,否则有可能使用原配置参数导致位置走不到而报错;
PDispOnRot,Target_20,tWeldGun;//设定当前位置和Target_20的偏差关系(包括平移和旋转),因为此时机器人停在Target_ref_start起点,即设定左边轨迹和右边轨迹的整体偏移关系。使用 ot表示平移和旋转均计算。如果不使用 ot,则只使用平移,旋转不计算;
Path_30;//运行原有轨迹,此时轨迹参考坐标移动关系,机器人实际走左边产品轨迹;
PDispOff;//轨迹完成,关闭平移关系;
MoveJ pHome,v1000,z100,tWeldGunWObj:=wobj0;
2ABB机器人单工位多次预约程序
1.机器人有程序如下:
2.工艺过程如下:
机器人在home等待。有人按过di信号,机器人开始执行。人工可以一次性多次预约,即如果人工一次性按过3次,机器人执行三次。
3.我们通过中断来实现。
4.中断的意义为,机器人后台在不断扫描(类似PLC),和机器人前台运动不冲突。后台实时扫描到信号就会去执行设定的中断程序,中断程序里没有运动指令,前台机器人不停,不影响运动。
5.新建一个例行程序,取名tr_1,注意:类型选中断(trap)
6.进入中断程序,插入指令如下,即当机器人执行中断程序时,给reg1记录次数加1。
7.进入主程序,设置中断及对应的io信号。
37行的意思是,任何时候di_1信号0变1,就会触发执行tr_1中断程序,即置flag1为true;
35-37行程序只要运行过一遍即可,类似于设置开关,不需要反复运行;
8. 主要程序如下。即如果reg1=0,机器人在home等待
3在robotstudio创建两台机器人的socket连接
1.什么是socket通讯?
就是TCP/IP通讯,无协议,在微软环境下称为socket。
2.socket通讯能干什么?
可以收发指定的数据,包括sting字符串,byte数组等。
3.创建socket机器人需要什么选项?
机器人需要616-1 PC-INTERFACE选项。
4.socket通讯网线插哪个网口?
Service口(IP固定:192.168.125.1)或者Wan口都可以(可以自己设置)。
5.创建client端的实例
通常机器人和相机通讯,机器人作为client端。
a、新建一个机器人系统,注意建立系统时加入pc-interface选项。
b、为了避免之前的连接没有关闭,先插入socketclose指令,后面的socket1为自己新建的socketdev类型的变量。
c、之后插入创建连接socketCreate。
d、插入建立连接SocketConnect,后面需要制定Server的ip和端口,如果是在电脑和另一台虚拟控制器连接,ip设为“127.0.0.1”,端口自定义,建议不要用默认的1025。
这一步作用为机器人会和server建立连接,如果没有建立成功会一直等待,如果成功则往下执行。
e、此处做测试,在建立成功后,插入TPWrite指令,可以在示教器看到socketclinent connect successful。
f、接下去可以收发数据,此处示例为client先发送数据给server,再接受server发送回来的数据。
g、SocketSend后面可以发送string或者byte数组,具体可以选择不同可选变量。
h、发送完毕后client接收到server发回的数据并写屏。
6.以下为server端示例
a、重新创建一个工作站,创建时不要忘记添加pcinterface选项。
b、作为server,机器人需要创建2个socketdev变量。
c、为了避免之前的连接没有关闭,同样建议先socketclose。
d、
e、接着创建socketCreatetemp_socket 服务器端socketdev。
f、SocketBind为绑定socket要监控的ip和端口,如果是虚拟仿真,ip为127.0.0.1,端口自定义(和client端设置一致)。
g、SocketListen为机器人server监听是否有client连接。
h、socketAccept为接受client的连接。
i、建立连接后,机器人就可以执行死循环,即一直处于收发状态。
j、 之前client程序为client先发后收,故这里server先收后发。
7.client和server都写完后,可以运行,注意先运行server端,即server机器人处于监听状态
8.server机器人收到的讯息如下:
9. client机器人收到的讯息如下:
4双工位预约程序
1.有如下双工位生产
2.工艺过程如下:
人工完成1#工位上料后按按钮di_1(按钮不带保持,即人手松开信号为0))机器人焊接1#工位。
此过程中人工对2#工位上下料,完成后按di_2完成预约(即不需要等机器人完成1#工作)。
机器人完成1#工作后,由于收到过di_2预约信号,机器人自动去完成2#工位
3.我们通过中断来实现。
4.中断的意义为,机器人后台在不断扫描(类似PLC),和机器人前台运动不冲突。后台实时扫描到信号就会去执行设定的中断程序,中断程序里没有运动指令,前台机器人不停,不影响运动
5.新建一个例行程序,取名tr_1,注意:类型选中断(trap)
6.进入中断程序,插入指令如下,即当机器人执行中断程序时,给bool量置true
同理设置第二个中断程序
7.进入主程序,设置中断及对应的io信号
37行的意思是,任何时候di_1信号0变1,就会触发执行tr_1中断程序,即置flag1为true
35-40行程序只要运行过一遍即可,类似于设置开关,不需要反复运行
8.主要程序如下。即如果没有人给di信号,机器人就在home位等待。
5与相机通讯的Socket收发数据处理与提取
1.相机通常发送字符串给机器人,比如”1.23,4.56,7.89D”,即x为1.23,y为4.56,z的角度为7.89,用D作为结束符,数据之间用“,”隔开。
2.如果机器人收到上述字符串,如何把字符串提取出来并付给变量deltaX,deltaY,和thetaZ?
3.建立若干num变量,用以存储过程数据,比如StartBit1,表示x的数据从第几位开始,Endbit1表示x的数据结束是第几位,Lenbit1表示x数据的长度,s1表示提取的x的值的字符串
4.
5.先假设x的第一位是1,给Startbit1赋值为1
6.插入函数strfind,查找第一个“,”在第几位,得到EndBit1值
7.
8.EndBit1减去StartBit1就是x的数据长度
9.同理得到y和theta的信息
10.通过StrPart函数,提取从StartBit1开始到LenBit1结束的字符串,即x的值的字符串
11.
12.同理得到y和z的字符串
13.通过StrToVal函数,把s1转为num型,付给delta_x, StrToVal函数的反馈值为bool量,即转换成功为true不成功为false
14.同理得到delta_y和delta_theta
15.成功后可以写屏测试,如下图:
6ABB机器人如何创建数组
1.什么是数组?
将相同数据类型的元素按一定顺序排列的集合
2.有什么用?
比如创建一个robtarget类型的数组p_array,p_array里有10个点位,走完10个位置就可以用如下代码,方便简洁
FOR i FROM 1 TO 10 DO
MoveL p_array{i},v500,z1,tool0;
ENDFOR
3.哪些数据类型能创建数组?
所有数据类型都可以创建数组
4.数组最大几维?
ABB机器人">ABB机器人数组最大三维!
5.数组起始序号是0还是1?
是1
6.如何创建?
a.程序数据
b.选中类型,比如Robtarget
c.新建,设置名称,维数(这里举例1维),每个维度的元素数量(举例为10)
d.创建完,就有了一个10个数据的p_array,
e.修改点位,点击上图上某一行,修改位置,即把数组里的某一个元素位置修改了。
为了让大家更深入了解ABB机器人编程,可以看看ABB机器人相关语言基础、课程规划、坐标系的使用,作为初学者不知该如何入门,将引导大家一步步进阶并且做好规划。
对最基本常用的机器人的工具坐标系、工件坐标系、基坐标系做了详细的讲解,让学员理解透彻。
最后,有需要的伙伴,可以看下图,获取相关机器人编程资料!
相关问答
台达PLC通讯问题:程序无法写入PLC?
1、检查PLC设置的串口12、检查PC串口设置PC串口设置要把PLC的站号设置正确,PLC的站号在没有更改的情况下,默认为1;端口是电脑连接PLC的那个RS232接口,按...
delta是什么型号?
Delta是西门子PLC中的SIMATICS7-300系列的一个型号。S7-300系列是西门子中等规模自动化系统的主要控制器之一,适用于工业现场、农业生产、流水线生产、水处理...
PLC控制系统的软件有哪些?
plc编程软件如下:1、欧姆龙plc编程软件欧姆龙pIc编程软件集成了CX-ProgrammerV9.5,能够为欧姆龙PLC编程提供全面的软件支持,本版本为最新版,全面支持32/6...
dcisoft是啥软件?
DeltaDCISoft是一款台达组态软件,适用于台,适用于台达EtherNet/IP系列的AH系列Ethernet/串列通信模块、AS系列SCM模块、DVP系列内置EthernetPLC、DVP...
DeltaV系统控制器的后备电池在哪?-盖德问答-化工人互助问答社区
deltav可以冷启动,不会丢失数据,也没有电池。deltav似乎是不需要后备电池,他的机制与其他的系统不同。我们厂目前用的就是daltav系统,这个系统...
台达plc通讯通道无效COMMMGR尚未启动?
1、说明你仅仅安装了ISPSOFT软件,没有安装通讯软件COMMER,你下载COMMER并安装2、没有配置好COMMER,需要配置该软件你在哪个城市?1、说明你仅仅安装了ISPSOF...
台达PLC通讯问题?台达plc好维护吗?
[回答]冲区3+缓冲区4=2+88+128+168+208=594字节。01FEDFUU0U在后。00c230200A4UDA在后。041AU魔U0在后。则会在相应的地方将数据写入进去。不同于常见.....
台达plc问题?,台达plc有哪些公司生产??
[回答]现金交易,价格合理,可看货交易,为广大外资企业提供了足够的便利。菱PLC模块A1S63ADA,菱PLC编程控制器FX1N-40MT-MT40MT60MT/MR,TWDLCDA40DRF,.....
可否使用PLC来实现批量控制?-盖德问答-化工人互助问答社区
可否使用plc来实现批量控制?有的话希望有人传授下制作批量控制的心得。
EE专业有哪些常用论坛吗?申请方
凹凸网:http://www.auto100.net工控大世界http://www.ylzb.com德阳四星电子;http://www.fourstar-dy.com/,生产PLC编程电缆等http:...