AB PLC测试程序的应用场景与实施步骤 (abplc测试模式)

AB PLC测试程序的应用场景与实施步骤(AB PLC测试模式) AB

一、引言

在现代工业自动化领域,可编程逻辑控制器(PLC)扮演着至关重要的角色。
作为工业自动化的核心设备,PLC的可靠性和稳定性对于保障生产线的正常运行具有举足轻重的意义。
AB PLC作为市场上广受欢迎的PLC品牌之一,其测试程序的应用与实施对于确保PLC性能至关重要。
本文将详细介绍AB PLC测试程序的应用场景与实施步骤,帮助读者更好地理解和应用AB PLC测试模式。

二、AB PLC测试程序的应用场景

1. 生产线调试:在生产线搭建完成后,需要进行调试以确保各设备之间的通信正常、逻辑控制准确。AB PLC测试程序可用于模拟生产线上的各种信号,测试PLC的输入输出、逻辑控制等功能是否正常。
2. 故障诊断与排查:在生产过程中,设备故障是难以避免的。AB PLC测试程序可用于模拟故障场景,帮助工程师快速定位问题,提高故障排查效率。
3. 性能评估与优化:为了保障生产线的稳定运行,需要对PLC的性能进行评估。AB PLC测试程序可通过模拟不同负载和工作场景,评估PLC的性能表现,为优化提供数据支持。
4. 软件升级与验证:当PLC软件升级时,需要验证新版本的性能是否满足要求。AB PLC测试程序可帮助工程师在新版本软件上线前进行充分测试,确保升级后的PLC性能稳定、可靠。

三、AB PLC测试程序的实施步骤

1. 需求分析:根据测试目的,明确测试需求,包括测试场景、测试参数、测试时间等。
2. 测试环境搭建:搭建与实际应用场景相似的测试环境,包括硬件连接、软件配置、通信网络等。
3. 测试程序编写:根据测试需求,编写AB PLC测试程序。测试程序应包含模拟信号输入、输出、逻辑控制等功能。
4. 测试程序下载与调试:将测试程序下载到AB PLC中,进行调试以确保程序正常运行。
5. 测试执行:按照预定的测试场景和参数,执行测试程序,记录测试结果。
6. 结果分析:对测试结果进行分析,评估AB PLC的性能是否满足要求,识别潜在问题。
7. 优化与改进:根据测试结果,对AB PLC进行优化和改进,提高性能。
8. 文档编写:整理测试过程、结果及优化措施,形成文档以便于后续查阅和参考。

四、AB PLC测试模式的注意事项

1. 测试程序的编写应遵循AB PLC的编程规范,确保代码的可读性和可维护性。
2. 在测试过程中,应注意安全,避免对生产线的设备造成损坏。
3. 测试环境应尽可能模拟实际生产环境,以提高测试的准确性和可靠性。
4. 在测试结果分析时,应关注数据的完整性和准确性,避免误判。
5. 对于复杂的测试场景,可采用逐步调试的方法,定位问题。

五、结语

AB PLC测试程序在生产线调试、故障诊断与排查、性能评估与优化以及软件升级与验证等方面具有广泛应用。
通过遵循本文所述的实施步骤和注意事项,工程师可以更有效地应用AB PLC测试模式,确保PLC的性能稳定、可靠。
在实际应用中,工程师还应根据具体情况灵活调整测试方案,以提高测试的效率和准确性。


ABplc报警Excel

ABplc报警Excel是为了快速明确硬件是否存在的故障。 1.模块指示灯状态为了快速明确硬件是否存在的故障,总结常用的指示灯状态如下:CPU模块|OK|绿常亮|正常||红闪烁|模块故障(可恢复)||红常亮|模块故障(不可恢复)|RUN|绿常亮|PLC运行程序||灭|PLC在编程模式下|SAFERUN|绿常亮|PLC安全任务在运行,安全输出被使能||灭|PLC安全任务故障,PLC处于编程或测试状态,安全输出被禁止|FORCE|黄常亮|强制被使能||黄闪烁|有强制存在,但是未被使能||灭|无强制|BAT|。

PLC自动控制系统是什么啊?

目前,PLC在国内外已广泛应用于钢铁、石油、化工、电力、建材、机械制造、汽车、轻纺、交通运输、环保及文化娱乐等各个行业,使用情况主要分为如下几类:1.开关量逻辑控制 取代传统的继电器电路,实现逻辑控制、顺序控制,既可用于单台设备的控制,也可用于多机群控及自动化流水线。 如注塑机、印刷机、订书机械、组合机床、磨床、包装生产线、电镀流水线等。 2.工业过程控制 在工业生产过程当中,存在一些如温度、压力、流量、液位和速度等连续变化的量(即模拟量),PLC采用相应的A/D和D/A转换模块及各种各样的控制算法程序来处理模拟量,完成闭环控制。 PID调节是一般闭环控制系统中用得较多的一种调节方法。 过程控制在冶金、化工、热处理、锅炉控制等场合有非常广泛的应用。 3.运动控制 PLC可以用于圆周运动或直线运动的控制。 一般使用专用的运动控制模块,如可驱动步进电机或伺服电机的单轴或多轴位置控制模块,广泛用于各种机械、机床、机器人、电梯等场合。 4.数据处理 PLC具有数学运算(含矩阵运算、函数运算、逻辑运算)、数据传送、数据转换、排序、查表、位操作等功能,可以完成数据的采集、分析及处理。 数据处理一般用于如造纸、冶金、食品工业中的一些大型控制系统。 5.通信及联网PLC通信含PLC间的通信及PLC与其它智能设备间的通信。 随着工厂自动化网络的发展,现在的PLC都具有通信接口,通信非常方便。 三、PLC的应用特点 1.可靠性高,抗干扰能力强 高可靠性是电气控制设备的关键性能——PLC由于采用现代大规模集成电路技术,采用严格的生产工艺制造,内部电路采取了先进的抗干扰技术,具有很高的可靠性。 使用PLC构成控制系统,和同等规模的继电接触器系统相比,电气接线及开关接点已减少到数百甚至数千分之一,故障也就大大降低。 此外,PLC带有硬件故障自我检测功能,出现故障时可及时发出警报信息。 在应用软件中,应用者还可以编入外围器件的故障自诊断程序,使系统中除PLC以外的电路及设备也获得故障自诊断保护。 这样,整个系统将极高的可靠性。 2.配套齐全,功能完善,适用性强——PLC发展到今天,已经形成了各种规模的系列化产品,可以用于各种规模的工业控制场合。 除了逻辑处理功能以外,PLC大多具有完善的数据运算能力,可用于各种数字控制领域。 多种多样的功能单元大量涌现,使PLC渗透到了位置控制、温度控制、CNC等各种工业控制中。 加上PLC通信能力的增强及人机界面技术的发展,使用PLC组成各种控制系统变得非常容易。 3.易学易用,深受工程技术人员欢迎——PLC是面向工矿企业的工控设备。 它接口容易,编程语言易于为工程技术人员接受。 梯形图语言的图形符号与表达方式和继电器电路图相当接近,为不熟悉电子电路、不懂计算机原理和汇编语言的人从事工业控制打开了方便之门。 4.系统的设计,工作量小,维护方便,容易改造——PLC用存储逻辑代替接线逻辑,大大减少了控制设备外部的接线,使控制系统设计及建造的周期大为缩短,同时日常维护也变得容易起来,更重要的是使同一设备经过改变程序而改变生产过程成为可能。 这特别适合多品种、小批量的生产场合。 [编辑本段]PLC死机的原因有哪些?引起PLC死机的原因很多,软硬件的错误都可能引起死机。 1、硬件方面(1)I/O窜电,PLC自动侦测到I/O错误,进入STOP模式。 (2)I/O损坏,程序运行到需要该I/O的反馈信号,不能向下执行指令。 (3)扩展模块(功能型,如A/D)线路干扰或开路等。 (4)电源部分有干扰或故障。 (5)PLC的连接模块及地址分配模块出故障。 (6)电缆引起的故障。 2、软件方面(1)触发了死循环。 (2)程序改写了系统参数区的内容,却没有初始化部分。 (3)保护程序启动:硬件保护、限制使用时间(针对货款收回)(4)数据溢出,步长过大、看门狗 (可修改DOG时间)动作。 PLC的维修与保养一、 保养规程、设备定期测试、调整规定 (1) 每半年或季度检查PLC柜中接线端子的连接情况,若发现松动的地方及时重新坚固连接; (2) 对柜中给主机供电的电源每月重新测量工作电压; 二、 设备定期清扫的规定 (1) 每六个月或季度对PLC进行清扫,切断给PLC供电的电源把电源机架、CPU主板及输入/输出板依次拆下,进行吹扫、清扫后再依次原位安装好,将全部连接恢复后送电并启动PLC主机。 认真清扫PLC箱内卫生; (2) 每三个月更换电源机架下方过滤网; 三、 检修前准备、检修规程 (1) 检修前准备好工具; (2) 为保障元件的功能不出故障及模板不损坏,必须用保护装置及认真作防静电准备工作; (3) 检修前与调度和操作工联系好,需挂检修牌处挂好检修牌; 四、 设备拆装顺序及方法 (1) 停机检修,必须两个人以上监护操作; (2) 把CPU前面板上的方式选择开关从“运行”转到“停”位置; (3) 关闭PLC供电的总电源,然后关闭其它给模坂供电的电源; (4) 把与电源架相连的电源线记清线号及连接位置后拆下,然后拆下电源机架与机柜相连的螺丝,电源机架就可拆下;(5) CPU主板及I/0板可在旋转模板下方的螺丝后拆下; (6) 安装时以相反顺序进行;五、 检修工艺及技术要求 (1) 测量电压时,要用数字电压表或精度为1%的万能表测量 (2) 电源机架,CPU主板都只能在主电源切断时取下; (3) 在RAM模块从CPU取下或插入CPU之前,要断开PC的电源,这样才能保证数据不混乱; (4) 在取下RAM模块之前,检查一下模块电池是否正常工作,如果电池故障灯亮时取下模块PAM内容将丢失; (5) 输入/输出板取下前也应先关掉总电源,但如果生产需要时I/0板也可在可编程控制器运行时取下,但CPU板上的QVZ(超时)灯亮; (6) 拨插模板时,要格外小心,轻拿轻放,并运离产生静电的物品;(7) 更换元件不得带电操作; (8) 检修后模板安装一定要安插到位PLC主适用于小批量多变工艺型设备的控制核心,以缩短开发周期,快速适用于生产。

ABB机器人:基于现场通信方式向西门子PLC发送实时位置数据的方法

概述在ABB机器人系统集成项目中,很多时候由于控制需求,我们需要对机器人的实时位置进行监控,这样就需要机器人向主控系统实时发送当前位置数据。 对于不同的主控系统,机器人发送当前位置数据的方式也多种多样。 如果使用PC机作为上位机来读取机器人实时位置信息,那么我们就可以通过使用IRC5OPCServer来读取机器人位置数据,然后再发送给PC上位机;当然,也可以通过PCSDK对机器人控制器进行二次开发,然后通过PCInterface选项,直接读取控制器中机器人的位置信息。 如果是使用PLC作为上位机来读取机器人实时位置信息,那么我们就可以通过工业现场通信,如ProfiBus、ProfiNet、DeviceNet等,然后使用ABB机器人内置的数据处理指令编写实时位置数据发送程序,来实现机器人位置数据的发送。 本期,就来为大家介绍一下ABB机器人通过现场通信形式,向西门子PLC发送实时位置数据的方法。 变量声明机器人的当前位置就是工具末端的当前位置,也就是TCP的当前坐标,它是由x、y、z的坐标值以及分别绕x、y、z轴旋转的角度值组成,这些数据的类型均是实数类型。 在ABB机器人中,使用num与dnum来表示实数,其中num类型与西门子PLC中的real类型一致,都是32位的单精度实数;而dnum类型数据是64位的双精度实数。 因此,在机器人中,我们可以声明num类型变量来存放机器人的当前位置数据。 同时,声明其他类型的数据变量,作为数据处理的中间转换变量。 变量声明代码如下所示。 变量声明程序代码如下所示:!声明机器人当前位姿变量VARrobtargetpCurrentPos;!声明机器人位姿存储变量VARnumx;VARnumy;VARnumz;VARnumrx;VARnumry;VARnumrz;!声明机器人位姿通用数据容器中间转换变量VARrawbytesrawbyte_x;VARrawbytesrawbyte_y;VARrawbytesrawbyte_z;VARrawbytesrawbyte_rx;VARrawbytesrawbyte_ry;VARrawbytesrawbyte_rz;!声明机器人位姿字节型中间数据转换变量VARbytebyte_x{4};VARbytebyte_y{4};VARbytebyte_z{4};VARbytebyte_rx{4};VARbytebyte_ry{4};VARbytebyte_rz{4};!声明双精度类型机器人位姿数据变量VARdnumdn_x;VARdnumdn_y;VARdnumdn_z;VARdnumdn_rx;VARdnumdn_ry;VARdnumdn_rz;!声明中断数据变量VARintnumTrapNum;组输出信号配置ABB机器人传输实数数据的方式大致可以分为两种:一、使用模拟量输出信号传输实数数据,由于模拟量信号自身抗干扰性能差,并且需要加装价格昂贵的模量信号扩展模块,因此,在传输大量的实数数据的场合中,一般很少使用模拟量信号;二、使用组输出信号传输实数数据,组输出信号不仅可以通过加装价格相对低廉的数字量I/O信号扩展模块实现,也可以通过加装现场通信模块的方式实现。 本例,使用第二种方式,通过ProfiBus现场总线通信的形式来传输机器人当前位置数据。 由于机器人当前位置数据都是32位的单精度实数类型,所以,我们定义的每一个组输出信号长度也应该是32位。 中断子程序编写创建中断子例行程序,并在其中编写读取机器人当前位置x、y、z坐标数据程序。 由于ABB机器人系统中使用四元数形式表示TCP绕相应坐标轴的旋转角度,因此,这里需要使用EulerZYX指令将以四元数形式表示的角度数据转换为欧拉角形式表示的旋转角度数据。 完整的中断子程序代码如下所示。 中断子程序代码如下所示:TRAPiTrap!中断程序iTrap!读取机器人当前位置,并将读取数据赋值给pCurrentPospCurrentPos:=CRobT();!将读取到的机器人当前位置x、y、z坐标值分别赋值给变量x、y、zx:=.x;y:=.y;z:=.z;!将将读取到的机器人当前位置四元数角度值转换为欧拉角之后,分别赋值给变量rx、ry、rzrx:=EulerZYX(\x,);ry:=EulerZYX(\y,);rz:=EulerZYX(\z,);!调用发送机器人当前位置例行程序send_pCurrentPos;ENDTRAP机器人当前位置数据发送子程序编写创建发送机器人当前位置数据子例行程序,并将其在中断子程序中调用。 首先,将读取的机器人当前位置数据使用PackRawBytes指令按照Float形式进行打包,然后将其存放到已经声明的rawbyte类型容器变量的连续四个字节中。 然后使用FOR指令进行循环解包操作,即将打包好的数据使用UnpackRawBytes指令解包到声明的byte类型四维数组变量中,每一个字节对应数组变量中的一维byte元素。 由于西门子PLC中数据采用大端存储模式,而ABB机器人中的数据采用的是小端存储模式,为了发送的数据能够被PLC正确解析,因此,我们需要对机器人的位置数据进行移位操作。 所谓的大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,地址由小向大增加,而数据从高位往低位放;小端模式(Little-endian)是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权值有效结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。 对于ABB机器人当前位置数据的移位操作:首先使用NumToDnum指令将解包后的byte类型数据转换为dnum类型,然后按照西门子PLC中实数类型数据高低字节顺序进行移位操作,数据移位指令使用BitLShDnum。 同时,将四个移位后的byte类型数据使用BitOrDnum指令进行“逻辑或”运算,重新组成32位的单精度数据,并将其存放到声明好的dnum类型变量中。 当然,这个移位操作,我们也可以在PLC中实现。 最后,使用setgo指令将转换好的机器人当前位置数据赋值到相应的组输出信号,然后发送给PLC。 机器人当前位置数据发送子程序代码如下所示:PROCsend_pCurrentPos()!发送机器人当前位置例行程序!清空机器人位姿通用数据容器中间转换变量ClearRawBytesrawbyte_x;ClearRawBytesrawbyte_y;ClearRawBytesrawbyte_z;ClearRawBytesrawbyte_rx;ClearRawBytesrawbyte_ry;ClearRawBytesrawbyte_rz;!将机器人当前位置数据按照float形式打包PackRawBytesx,rawbyte_x,RawBytesLen(rawbyte_x)1\Float4;PackRawBytesy,rawbyte_y,RawBytesLen(rawbyte_y)1\Float4;PackRawBytesz,rawbyte_z,RawBytesLen(rawbyte_z)1\Float4;PackRawBytesrx,rawbyte_rx,RawBytesLen(rawbyte_rx)1\Float4;PackRawBytesry,rawbyte_ry,RawBytesLen(rawbyte_ry)1\Float4;PackRawBytesrz,rawbyte_rz,RawBytesLen(rawbyte_rz)1\Float4;!将机器人位姿通用数据容器里的前4个字节数据分别保存到字节数组变量中FORiFROM1TO4DOUnpackRawBytesrawbyte_x,i,byte_x{i}\Hex1;UnpackRawBytesrawbyte_y,i,byte_y{i}\Hex1;UnpackRawBytesrawbyte_z,i,byte_z{i}\Hex1;UnpackRawBytesrawbyte_rx,i,byte_rx{i}\Hex1;UnpackRawBytesrawbyte_ry,i,byte_ry{i}\Hex1;UnpackRawBytesrawbyte_rz,i,byte_rz{i}\Hex1;ENDFOR!机器人数据格式转换(西门子PLC高低字节与机器人高低字节定义相反)dn_x:=BitLShDnum(NumToDnum(byte_x{1}),24);!将单精度数据byte_x{1}转换为双精度类型后,左移24位,然后赋值给dn_xdn_x:=BitOrDnum(dn_x,BitLShDnum(NumToDnum(byte_x{2}),16));!将单精度数据byte_x{2}转换为双精度类型后,左移16位,并与dn_x做或运算,然后赋值给自己dn_x:=BitOrDnum(dn_x,BitLShDnum(NumToDnum(byte_x{3}),8));!将单精度数据byte_x{2}转换为双精度类型后,左移8位,并与dn_x做或运算,然后赋值给自己dn_x:=BitOrDnum(dn_x,NumToDnum(byte_x{4}));!将单精度数据byte_x{2}转换为双精度类型后,与dn_x做或运算,然后赋值给自己!机器人数据格式转换dn_y:=BitLShDnum(NumToDnum(byte_y{1}),24);dn_y:=BitOrDnum(dn_y,BitLShDnum(NumToDnum(byte_y{2}),16));dn_y:=BitOrDnum(dn_y,BitLShDnum(NumToDnum(byte_y{3}),8));dn_y:=BitOrDnum(dn_y,NumToDnum(byte_y{4}));!机器人数据格式转换dn_z:=BitLShDnum(NumToDnum(byte_z{1}),24);dn_z:=BitOrDnum(dn_z,BitLShDnum(NumToDnum(byte_z{2}),16));dn_z:=BitOrDnum(dn_z,BitLShDnum(NumToDnum(byte_z{3}),8));dn_z:=BitOrDnum(dn_z,NumToDnum(byte_z{4}));!机器人数据格式转换dn_rx:=BitLShDnum(NumToDnum(byte_rx{1}),24);dn_rx:=BitOrDnum(dn_rx,BitLShDnum(NumToDnum(byte_rx{2}),16));dn_rx:=BitOrDnum(dn_rx,BitLShDnum(NumToDnum(byte_rx{3}),8));dn_rx:=BitOrDnum(dn_rx,NumToDnum(byte_rx{4}));!机器人数据格式转换dn_ry:=BitLShDnum(NumToDnum(byte_ry{1}),24);dn_ry:=BitOrDnum(dn_ry,BitLShDnum(NumToDnum(byte_ry{2}),16));dn_ry:=BitOrDnum(dn_ry,BitLShDnum(NumToDnum(byte_ry{3}),8));dn_ry:=BitOrDnum(dn_ry,NumToDnum(byte_ry{4}));!机器人数据格式转换dn_rz:=BitLShDnum(NumToDnum(byte_rz{1}),24);dn_rz:=BitOrDnum(dn_rz,BitLShDnum(NumToDnum(byte_rz{2}),16));dn_rz:=BitOrDnum(dn_rz,BitLShDnum(NumToDnum(byte_rz{3}),8));dn_rz:=BitOrDnum(dn_rz,NumToDnum(byte_rz{4}));!使用相应的组输出信号,将机器人当前位置数据进行输出setgogo_cx,dn_x;setgogo_cy,dn_y;setgogo_cz,dn_z;setgogo_crx,dn_rx;setgogo_cry,dn_ry;setgogo_crz,dn_rz;ENDPROC机器人主程序编写在主程序中编写定时器中断程序,中断时间间隔为0.5s,即每个0.5s读取一次机器人当前位置,并将当前位置数据发送给PLC。 完整机器人主程序代码如下所示。 机器人主程序代码如下所示:PROCmain()IDeleteTrapNum;!取消识别号为TrapNum的中断CONNECTTrapNumWITHiTrap;!将识别号为TrapNum的中断与中断程序iTrap连接ITimer0.5,TrapNum;!循环调用中断程序TrapNum,循环周期为0.5s!循环执行机器人运动程序WHILETRUEDOMoveAbsJjpos10\NoEOffs,v50,z50,tool0;MoveJp10,v50,z50,tool0;MoveJp20,v50,z50,tool0;MoveAbsJjpos10\NoEOffs,v50,z50,tool0;ENDWHILEENDPROC完整的机器人程序代码如下所示。 完整的机器人程序代码如下所示:MODULEModule1CONSTjointtargetjpos10:=[[0,0,0,0,30,0],[9E09,9E09,9E09,9E09,9E09,9E09]];CONSTrobtargetp10:=[[392.,-156.,309.],[0.,-0.,0.,0.],[-1,0,-1,0],[9E09,9E09,9E09,9E09,9E09,9E09]];CONSTrobtargetp20:=[[392.,149.,309.],[0.,-0.,0.,0],[0,-1,0,0],[9E09,9E09,9E09,9E09,9E09,9E09]];!声明机器人当前位姿变量VARrobtargetpCurrentPos;!声明机器人位姿存储变量VARnumx;VARnumy;VARnumz;VARnumrx;VARnumry;VARnumrz;!声明机器人位姿通用数据容器中间转换变量VARrawbytesrawbyte_x;VARrawbytesrawbyte_y;VARrawbytesrawbyte_z;VARrawbytesrawbyte_rx;VARrawbytesrawbyte_ry;VARrawbytesrawbyte_rz;!声明机器人位姿字节型中间数据转换变量VARbytebyte_x{4};VARbytebyte_y{4};VARbytebyte_z{4};VARbytebyte_rx{4};VARbytebyte_ry{4};VARbytebyte_rz{4};!声明双精度类型机器人位姿数据变量VARdnumdn_x;VARdnumdn_y;VARdnumdn_z;VARdnumdn_rx;VARdnumdn_ry;VARdnumdn_rz;!声明中断数据变量VARintnumTrapNum;PROCmain()IDeleteTrapNum;!取消识别号为TrapNum的中断CONNECTTrapNumWITHiTrap;!将识别号为TrapNum的中断与中断程序iTrap连接ITimer0.5,TrapNum;!循环调用中断程序TrapNum,循环周期为0.5s!循环执行机器人运动程序WHILETRUEDOMoveAbsJjpos10\NoEOffs,v50,z50,tool0;MoveJp10,v50,z50,tool0;MoveJp20,v50,z50,tool0;MoveAbsJjpos10\NoEOffs,v50,z50,tool0;ENDWHILEENDPROCTRAPiTrap!中断程序iTrap!读取机器人当前位置,并将读取数据赋值给pCurrentPospCurrentPos:=CRobT();!将读取到的机器人当前位置x、y、z坐标值分别赋值给变量x、y、zx:=.x;y:=.y;z:=.z;!将将读取到的机器人当前位置四元数角度值转换为欧拉角之后,分别赋值给变量rx、ry、rzrx:=EulerZYX(\x,);ry:=EulerZYX(\y,);rz:=EulerZYX(\z,);!调用发送机器人当前位置例行程序send_pCurrentPos;ENDTRAPPROCsend_pCurrentPos()!发送机器人当前位置例行程序!清空机器人位姿通用数据容器中间转换变量ClearRawBytesrawbyte_x;ClearRawBytesrawbyte_y;ClearRawBytesrawbyte_z;ClearRawBytesrawbyte_rx;ClearRawBytesrawbyte_ry;ClearRawBytesrawbyte_rz;!将机器人当前位置数据按照float形式打包PackRawBytesx,rawbyte_x,RawBytesLen(rawbyte_x)1\Float4;PackRawBytesy,rawbyte_y,RawBytesLen(rawbyte_y)1\Float4;PackRawBytesz,rawbyte_z,RawBytesLen(rawbyte_z)1\Float4;PackRawBytesrx,rawbyte_rx,RawBytesLen(rawbyte_rx)1\Float4;PackRawBytesry,rawbyte_ry,RawBytesLen(rawbyte_ry)1\Float4;PackRawBytesrz,rawbyte_rz,RawBytesLen(rawbyte_rz)1\Float4;!将机器人位姿通用数据容器里的前4个字节数据分别保存到字节数组变量中FORiFROM1TO4DOUnpackRawBytesrawbyte_x,i,byte_x{i}\Hex1;UnpackRawBytesrawbyte_y,i,byte_y{i}\Hex1;UnpackRawBytesrawbyte_z,i,byte_z{i}\Hex1;UnpackRawBytesrawbyte_rx,i,byte_rx{i}\Hex1;UnpackRawBytesrawbyte_ry,i,byte_ry{i}\Hex1;UnpackRawBytesrawbyte_rz,i,byte_rz{i}\Hex1;ENDFOR!机器人数据格式转换(西门子PLC高低字节与机器人高低字节定义相反)dn_x:=BitLShDnum(NumToDnum(byte_x{1}),24);!将单精度数据byte_x{1}转换为双精度类型后,左移24位,然后赋值给dn_xdn_x:=BitOrDnum(dn_x,BitLShDnum(NumToDnum(byte_x{2}),16));!将单精度数据byte_x{2}转换为双精度类型后,左移16位,并与dn_x做或运算,然后赋值给自己dn_x:=BitOrDnum(dn_x,BitLShDnum(NumToDnum(byte_x{3}),8));!将单精度数据byte_x{2}转换为双精度类型后,左移8位,并与dn_x做或运算,然后赋值给自己dn_x:=BitOrDnum(dn_x,NumToDnum(byte_x{4}));!将单精度数据byte_x{2}转换为双精度类型后,与dn_x做或运算,然后赋值给自己!机器人数据格式转换dn_y:=BitLShDnum(NumToDnum(byte_y{1}),24);dn_y:=BitOrDnum(dn_y,BitLShDnum(NumToDnum(byte_y{2}),16));dn_y:=BitOrDnum(dn_y,BitLShDnum(NumToDnum(byte_y{3}),8));dn_y:=BitOrDnum(dn_y,NumToDnum(byte_y{4}));!机器人数据格式转换dn_z:=BitLShDnum(NumToDnum(byte_z{1}),24);dn_z:=BitOrDnum(dn_z,BitLShDnum(NumToDnum(byte_z{2}),16));dn_z:=BitOrDnum(dn_z,BitLShDnum(NumToDnum(byte_z{3}),8));dn_z:=BitOrDnum(dn_z,NumToDnum(byte_z{4}));!机器人数据格式转换dn_rx:=BitLShDnum(NumToDnum(byte_rx{1}),24);dn_rx:=BitOrDnum(dn_rx,BitLShDnum(NumToDnum(byte_rx{2}),16));dn_rx:=BitOrDnum(dn_rx,BitLShDnum(NumToDnum(byte_rx{3}),8));dn_rx:=BitOrDnum(dn_rx,NumToDnum(byte_rx{4}));!机器人数据格式转换dn_ry:=BitLShDnum(NumToDnum(byte_ry{1}),24);dn_ry:=BitOrDnum(dn_ry,BitLShDnum(NumToDnum(byte_ry{2}),16));dn_ry:=BitOrDnum(dn_ry,BitLShDnum(NumToDnum(byte_ry{3}),8));dn_ry:=BitOrDnum(dn_ry,NumToDnum(byte_ry{4}));!机器人数据格式转换dn_rz:=BitLShDnum(NumToDnum(byte_rz{1}),24);dn_rz:=BitOrDnum(dn_rz,BitLShDnum(NumToDnum(byte_rz{2}),16));dn_rz:=BitOrDnum(dn_rz,BitLShDnum(NumToDnum(byte_rz{3}),8));dn_rz:=BitOrDnum(dn_rz,NumToDnum(byte_rz{4}));!使用相应的组输出信号,将机器人当前位置数据进行输出setgogo_cx,dn_x;setgogo_cy,dn_y;setgogo_cz,dn_z;setgogo_crx,dn_rx;setgogo_cry,dn_ry;setgogo_crz,dn_rz;ENDPROCENDMODULE运行测试在PLC中进行组态编程,然后运行机器人,同时对PLC中相应的数据寄存器进行监视,可以看到机器人的实时位置数据已经发送过来了,并且每隔0.5s刷新一次。 西门子老版本的PLC实数数据的高低位字节顺序与ABB机器人的实数数据的高低位顺序是相反的;新版本的PLC,小编还没有测试过,若是使用新版本的PLC,测试时可以注意一下。 如果高低位字节顺序是一致的,那么只需要把发送机器人当前位置数据子例行程序中的数据移位程序删除即可。 对于三菱PLC、欧姆龙PLC或是其他品牌的PLC,读取机器人当前位置的程序都是类似的,感兴趣的小伙伴可以自己测试一下。 TheEnd上一篇:Robotstudio软件:机床上下料工作站机器人主逻辑编写与仿真运行

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论