触摸屏与伺服驱动器APCM模式编程总结

合集下载

PCM ADPCM编译码实验报告

PCM ADPCM编译码实验报告

PCM ADPCM编译码实验报告姓名:专业:学号:PCM/ADPCM编码实验一、实验目的1、了解语音编码的工作原理,验证pcm/adpcm编译码原理。

2、熟悉pcm/adpcm抽样时钟,编码数据和输入速出时钟之间的关系。

3、了解pcm/adpcm专用大规模集成电路的工作原理和应用4、熟悉语音数字化技术的主要指标及测量方法。

二、实验仪器1、 JH5001通信原理综合实验系统。

2、 20M双踪示波器。

3、信号源。

4、音频信道传输损伤测试仪。

三、实验原理TP501 TP502 至用户接口 K501 N 测试信号 T 跳线器·· - + K502 · T · N··发PCM码字U502 PCM 编译码器 TP504 8KHz同步 256KHz时钟 K504 跳线器TP503 至用户接口 K503 T ···N·· - · + TP505 LOOP ADPCM2 MUX TP506 收PCM码字图3. 1 PCM模块电路组成框图 1、PCM/ADPCM编译码模块中,收、发两个支路组成,在发送支路上发送信号经U501A运放后放大后,送入U502的2脚进行PCM/ADPCM编码。

编码输出时钟为BCLK,编码数据从U502的20脚输出,FSX为编码抽样时钟。

编码之后的数据结果送入后续数据复接模块进行处理,或直接送到对方PCM/ADPCM译码单元。

在接收支路中,收数据是来自解数据复接模块的信号,或是直接来自对方PCM/ADPCM编码单元信号,在接收帧同步时钟FSX与接收输入时钟BCLK的共同作用下,将接收数据送入U502中进行PCM/ADPCM译码。

译码之后的模拟信号经运放U501B放大缓冲输出,送到用户接口模块中。

2、各跳线功能如下:1、跳线开关K501是用于选择输入信号,当K501置于N 位置时,选择来自用户接口单元的话音信号;当K501置于T 位置时选择测试信号。

PLC触摸屏控制伺服电机程序实例

PLC触摸屏控制伺服电机程序实例

PLC触摸屏控制伺服电机程序设计摘要:以三菱公司的FX3U-48MT-ES-A作为控制元件,GT1155-QFBD-C 作为操作元件直接控制三菱伺服电机的具体程序设计。

关键词:PLC; 触摸屏; 伺服电机伺服电机又称执行电机,它是控制电机的一种。

它是一种用电脉冲信号进行控制的,并将脉冲信号转变成相应的角位移或直线位移和角速度的执行元件。

根据控制对象的不同,由伺服电机组成的伺服系统一般有三种基本控制方式,即位置控制、速度控制、力矩控制。

本系统我们采用位置控制。

PLC在自动化控制领域中,应用十分广泛。

尤其是近几年PLC在处理速度,指令及容量、单轴控制方面得到飞速的发展,使得PLC在控制伺服电机方面也变得简单易行。

1控制系统中元件的选型1.1PLC的选型因为伺服电机的位移量与输入脉冲个数成正比,伺服电机的转速与脉冲频率成正比,所以我们需要对电机的脉冲个数和脉冲频率进行精确控制。

且由于伺服电机具有无累计误差、跟踪性能好的优点,伺服电机的控制主要采用开环数字控制系统,通常在使用时要搭配伺服驱动器进行控制,而伺服电机驱动器采用了大规模集成电路,具有高抗干扰性及快速的响应性。

在使用伺服驱动器时,往往需要较高频率的脉冲,所以就要求所使用的PLC能产生高频率脉冲。

三菱公司的FX3U晶体管输出的PLC可以进行6点同时100 kHz高速计数及3轴独立100 kHz的定位功能,并且可以通过基本指令0.065 μs、PCMIX值实现了以4.5倍的高速度,完全满足了我们控制伺服电机的要求,所以我们选用FX3U-48MT-ES-A型PLC。

1.2伺服电机的选型在选择伺服电机和驱动器时,只需要知道电机驱动负载的转距要求及安装方式即可,我们选择额定转距为2.4 N·m,额定转速为3 000 r/min,每转为131 072 p/rev分辨率的三菱公司HF-KE73W1-S100伺服电机,与之配套使用的驱动器我们选用MR-E-70A-KH003伺服驱动器。

伺服控制器与HMI的数据交互技术

伺服控制器与HMI的数据交互技术

伺服控制器与HMI的数据交互技术伺服控制器(Servo Controller)和HMI(Human Machine Interface)是现代工业自动化中常用的两个设备。

伺服控制器负责控制伺服电机的运动,而HMI则负责与操作人员进行交互和显示相关的信息。

伺服控制器与HMI之间的数据交互技术,是实现工业自动化系统高效运行的重要组成部分。

一、伺服控制器与HMI的基本概念1. 伺服控制器伺服控制器是一种能够根据控制信号来精确控制伺服电机的设备。

它通常包括多个输入输出接口,用于接收传感器的反馈信号和发送控制信号给伺服电机。

伺服控制器的核心部分是控制算法,利用这些算法可以精确控制伺服电机的位置、速度和加速度。

2. HMIHMI是人机交互界面的缩写,用于描述人和机器之间进行信息交互的界面。

它通常由显示屏、按键、指示灯等组成,可以向操作人员显示相关的信息,并接受人员的输入命令。

HMI的设计直接影响到操作人员与自动化系统的交互效果和操作效率。

二、伺服控制器与HMI的数据交互方式伺服控制器与HMI之间的数据交互是实现工业自动化系统集中控制和监控的关键所在。

下面介绍几种常见的数据交互方式。

1. 串口通信串口通信是最常见也是最简单的伺服控制器与HMI之间的数据交互方式。

通过连接一个串口线,伺服控制器可以将控制指令发送给HMI,同时接收HMI传来的数据。

这种方式适用于简单的控制和数据传输场景,但速度较慢,不适合大规模数据交互。

2. 以太网通信以太网通信是实现伺服控制器与HMI高效数据交互的一种方式。

通过以太网连接,伺服控制器和HMI可以快速、稳定地进行数据传输。

以太网通信可支持更复杂的数据交互,例如实时监控、远程控制等。

此外,以太网通信还可以实现多台伺服控制器和HMI之间的数据互联。

3. 总线通信总线通信是一种广泛应用于工业自动化领域的数据交互方式。

通过将伺服控制器和HMI连接到同一条总线上,可以实现多设备之间的高效通信。

交流伺服与触摸屏

交流伺服与触摸屏

触摸屏的工作原理与特点
工作原理
触摸屏的工作原理主要依赖于其感应装置。当用户触摸屏幕时,感应装置会检测 到触摸点的位置和压力,并将这些信息转换为电信号。这些电信号经过处理后, 会被转换为对应的坐标信息,从而实现对触摸点的定位。
特点
触摸屏具有直观、易用、反应速度快、节省空间、易于维护等特点。同时,触摸 屏还可以实现多点触控、手势识别等高级功能,进一步提高了用户体验。
06 结论与展望
研究结论
交流伺服系统具有高精度、高响应速度、高可靠性等优点,在工业自动化 领域得到广泛应用。
触摸屏作为一种直观、便捷的人机交互方式,与交流伺服系统相结合,可 以大大提高设备的操作性和使用效率。
本研究通过实验验证了交流伺服与触摸屏在工业自动化领域的有效性和优 越性,为相关领域的研究和应用提供了有力支持。
交流伺服系统提供了强大的运动控制能力,而触摸屏则提供了直观的操作界面和丰富的信 息显示功能,两者的结合可以实现功能互补和增强,提高设备的整体性能和使用体验。
02 交流伺服系统概述
交流伺服系统的定义与组成
定义
交流伺服系统是一种能够精确控制电 机位置和速度的闭环控制系统,广泛 应用于工业自动化领域。
集成应用的优势与挑战
兼容性
01
不同厂商的交流伺服系统和触摸屏可能存在兼容性问题,需要
进行额外的适配工作。
稳定性
02
集成应用可能增加系统的复杂性,对系统的稳定性提出了更高
的要求。
成本
03
集成应用可能需要额外的硬件和软件支持,增加了系统的成本。
典型案例分析
案例一
在某自动化生产线上,采用交流 伺服驱动器和触摸屏的集成应用, 实现了对生产设备的精确控制和 实时监控,提高了生产效率和产

PLC触摸屏控制伺服电机程序实例

PLC触摸屏控制伺服电机程序实例

PLC触摸屏控制伺服电机程序设计摘要:以三菱公司的FX3U-48MT-ES-A作为控制元件,GT1155-QFBD-C作为操作元件直接控制三菱伺服电机的具体程序设计。

关键词:PLC; 触摸屏; 伺服电机伺服电机又称执行电机,它是控制电机的一种。

它是一种用电脉冲信号进行控制的,并将脉冲信号转变成相应的角位移或直线位移和角速度的执行元件。

根据控制对象的不同,由伺服电机组成的伺服系统一般有三种基本控制方式,即位置控制、速度控制、力矩控制。

本系统我们采用位置控制。

PLC在自动化控制领域中,应用十分广泛。

尤其是近几年PLC 在处理速度,指令及容量、单轴控制方面得到飞速的发展,使得PLC在控制伺服电机方面也变得简单易行。

1控制系统中元件的选型1.1PLC的选型因为伺服电机的位移量与输入脉冲个数成正比,伺服电机的转速与脉冲频率成正比,所以我们需要对电机的脉冲个数和脉冲频率进行精确控制。

且由于伺服电机具有无累计误差、跟踪性能好的优点,伺服电机的控制主要采用开环数字控制系统,通常在使用时要搭配伺服驱动器进行控制,而伺服电机驱动器采用了大规模集成电路,具有高抗干扰性及快速的响应性。

在使用伺服驱动器时,往往需要较高频率的脉冲,所以就要求所使用的PLC能产生高频率脉冲。

三菱公司的FX3U晶体管输出的PLC可以进行6点同时100 kHz高速计数及3轴独立100 kHz的定位功能,并且可以通过基本指令0.065 μs、PCMIX值实现了以4.5倍的高速度,完全满足了我们控制伺服电机的要求,所以我们选用FX3U-48MT-ES-A 型PLC。

1.2伺服电机的选型在选择伺服电机和驱动器时,只需要知道电机驱动负载的转距要求及安装方式即可,我们选择额定转距为2.4 N·m,额定转速为3 000 r/min,每转为131 072 p/rev分辨率的三菱公司HF-KE73W1-S100伺服电机,与之配套使用的驱动器我们选用MR-E-70A-KH003伺服驱动器。

实现三菱PLC触摸屏控制伺服电机

实现三菱PLC触摸屏控制伺服电机

实现三菱P L C触摸屏控制伺服电机(总4页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除实现三菱PLC触摸屏控制伺服电机三菱PLC在plc行业中一直坚持高规格、高性能,得到很多技术人员的青睐,同时,在与伺服电机中也有很好的应用,下面以三菱公司的FX3U-48MT-ES-A作为控制元件,GT1155-QFBD-C作为操作元件直接控制三菱伺服电机的具体程序设计伺服电机又称执行电机,它是控制电机的一种。

它是一种用电脉冲信号进行控制的,并将脉冲信号转变成相应的角位移或直线位移和角速度的执行元件。

根据控制对象的不同,由伺服电机组成的伺服系统一般有三种基本控制方式,即位置控制、速度控制、力矩控制。

本系统我们采用位置控制。

PLC在自动化控制领域中,应用十分广泛。

尤其是近几年PLC在处理速度,指令及容量、单轴控制方面得到飞速的发展,使得PLC在控制伺服电机方面也变得简单易行。

1控制系统中元件的选型1.1PLC的选型因为伺服电机的位移量与输入脉冲个数成正比,伺服电机的转速与脉冲频率成正比,所以我们需要对电机的脉冲个数和脉冲频率进行精确控制。

且由于伺服电机具有无累计误差、跟踪性能好的优点,伺服电机的控制主要采用开环数字控制系统,通常在使用时要搭配伺服驱动器进行控制,而伺服电机驱动器采用了大规模集成电路,具有高抗干扰性及快速的响应性。

在使用伺服驱动器时,往往需要较高频率的脉冲,所以就要求所使用的PLC能产生高频率脉冲。

三菱公司的FX3U晶体管输出的PLC可以进行6点同时100 kHz高速计数及3轴独立100 kHz的定位功能,并且可以通过基本指令0.065 μs、PCMIX值实现了以4.5倍的高速度,完全满足了我们控制伺服电机的要求,所以我们选用FX3U-48MT-ES-A型PLC。

1.2伺服电机的选型在选择伺服电机和驱动器时,只需要知道电机驱动负载的转距要求及安装方式即可,我们选择额定转距为2.4 N·m,额定转速为3 000 r/min,每转为131 072 p/rev分辨率的三菱公司HF-KE73W1-S100伺服电机,与之配套使用的驱动器我们选用MR-E-70A-KH003伺服驱动器。

[新版]威纶触摸屏与安川驱动器以太网通信

[新版]威纶触摸屏与安川驱动器以太网通信

MT8000系列HMI与安川MP2300S控制器的以太网通讯设置0000做线部分参考Memobus这个PLC类型,里面就有接线的000 1)执行1、2两步进入参数设定部分:00002)MP2300S基本参数设置部分如下,执行第3步,进入通讯参数设置部分:0003)通讯参数设置部分:下图红线部分就是设定IP地址、网关、通讯参数,其中IP地址默认是192.168.1.1 可以更改,下文中提到的一个影响了通讯的拨码就是用来将IP地址恢复到192.168.1.1 ,网关255.255.255.0, LocalPort :10000(在EB8000中有设定) ,000 Node IP Address:000.000.000.000000Node Port: 00000, Connect Type :UDP , Protocol Type:Extended Memobus,Code:BIN ,Detail Setting中的参数是默认值,无需更改。

其中第4步均可采用默认值,第5步是设定更改内容,其中若CNO是01 属于自动连接,其他就需要做梯形图程序来引导通讯。

保持MP2300S IP 地址和HMI IP在同一网段。

00第4步第5步0004)注意事项1:主从站问题,需要注意的是MP2300S需要设置成主站,0000双击红圈部分就进入设置页面,将MP2300S设置成Master(设备默认的设置就是Master)。

0005)注意事项2:MP2300S设备中有个拨码开关S2-2(红色标记部分),正常通讯时在OFF 位置,如果在ON的位置,断电会重置IP地址,在ON状态下用以太网和HMI无法正常通讯。

0006)注意事项3:MP2300S 在设置完参数后,需要断电重启,这样参数设置才能有效。

0000附EB8000的参数设置图:0000000选择UDP协议 000端口号设成 10000。

基于PLC和触摸屏控制的台达伺服系统应用程序设计

基于PLC和触摸屏控制的台达伺服系统应用程序设计

基于PLC和触摸屏控制的台达伺服系统应用程序设计作者:王海东来源:《科学与财富》2018年第25期摘要:本文阐述在光伏玻璃生产线上,基于CP1H PLC和WEINVIEW触摸屏控制的台达伺服驱动倒角系统的程序设计及实现方法,并对其硬件组成、软件组态、程序结构及CP1H PLC在过程控制和运动控制中的应用实践进行分析。

关键词: CP1H PLC;触摸屏;台达伺服在安彩高科光伏玻璃磨边生产线上,倒角装置是独立于磨边机的控制系统。

其紧接短边、长边研磨工序后,主要完成玻璃的四角研磨。

倒角机靠伺服电机轴端齿轮和丝杆齿条传动完成玻璃前进方向的跟随动作,借助气缸适时动作推动匀速旋转的磨头电机完成倒角动作。

1、控制系统控制系统硬件配置主要包括:CP1H-XA40DT-D PLC,WEINVIEW触摸屏--MT6070IH,台达ASD-A-0721-B伺服驱动器,ECMA-C30807PS伺服电机。

CP1H PLC通过RS232接口实现和触摸屏的串行通讯,并通过高速计数/脉冲输出指令实现对伺服驱动器的定位和过程控制。

倒角机系统结构框图如下:2、组态设计2.1、组态软件倒角机采用WEINVIEW触摸屏,输入电源电压24VDC,设置三组异步式串行通讯端口:COM1(RS232/RS-485 2W/4W), COM2(RS-232), COM3(RS232/RS-485 2W),可同时连接3个不同协议的设备通讯,支持编程组态软件EB8000 V2.0.0及更高版本。

装有组态软件的PC机与其COM端连接,可实现组态画面的上传和下载,PLC通过COM接口与其连接,可实现PLC和触摸屏的串行通讯。

2.2、通讯设置WEINVIEW触摸屏使用EB8000软件进行画面组态,其设计步骤包括:画面编辑、编译、模拟与下载。

编辑画面保存为MTP工程文件,使用EB8000的编译功能,将MTP文件编译成可下载到触摸屏的XOB文件。

模拟分为离线和在线模拟,在线模拟前需正确设定PLC的通讯参数,选择EB8000软件的“编辑”菜单,选择“系统参数设置”,在“设备列表”里分别设定“本机HMI”和“本机PLC”主机类型,预设站点号,通讯接口类型,并在通讯参数里进行COM口、波特率、PLC地址、数据位、通讯延时等设置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

伺服驱动器APCM模式编程总结经过一个多月的努力,终于将触摸屏控制伺服驱动器工作于APCM模式的程序做好了。

这段时间,在赵老师的指导下,我不断查找资料、上机实验、询问客服等方法,终于将触摸屏控制伺服驱动器工作于APCM模式的不同控制方式下的几个程序做了出来。

在这个过程中,我收获了很多的知识,不仅是关于触摸屏与伺服电机的专业知识,更多的是在程序设计中怎样与实践结合,怎样从使用方便的角度去设计程序。

我编写的程序包括APCM模式的单次定位方式程序、APCM模式的连续定位方式、APCM模式的连续速度模式和两轴联动的APCM单次绝对位置定位模式,以及内部速度通信调速模式。

在这里,我将各个程序的编写方法及宏指令总结如下。

首先说明编写程序及调试所用的主要设备:两台珠海运控PSDA0633A6伺服驱动器及两台BPA6系列60型C60-30伺服电机、一台威纶通MT6070iH触摸屏。

一、APCM模式的连续定位方式使用APCM模式,需先将51号参数设为5,然后断电再上电,该模式才会有效。

伺服驱动器工作在APCM模式的单次定位方式,需在单次定位控制方式页面打开时,设定65号参数为11850(APCM控制字为10111110001010)。

屏幕上需设定速度参数设定、伺服ON、伺服OFF、启动、停止、故障处理等6个主要控制键,分别用于切换到速度设定窗口、打开伺服、关闭伺服、启动电机、停止电机和故障处理等。

在屏幕上还要设置一个趋势图元件,来形象显示电机的实时速度,同时趋势图元件还可以查看过去某个时刻的速度、观察速度曲线等功能。

我在该定位方式的控制控制页面上还添加了伺服准备好、伺服ON、正转、反转、驱动器报警等运行状态显示元件来实时显示伺服驱动器的运行状态。

为了根据需要实现电机的正反转,还用到了两个置位开关,位地址都为0x52,但是在这里我将这两个置位开关做成透明的,然后在上面添加两个位地址也为0x52的位状态指示灯,这样在点击正转或反转的按键后,相应的位状态指示灯就会亮,表明正转(反转)设定有效。

同时在控制页面上还添加了一个保存参数的按键,用来将设定的参数保存在伺服驱动器里。

控制页面上所用的元件的地址都是根据伺服驱动器手册里的Modbus协议分配的地址来设定的。

在做这个连续定位方式的程序过程中,曾经遇到两个问题:第一个问题是,在设定好电机的加减速时间后(运行速度设定为600转),电机从0转开始启动,加速到600转,然后按停止键,电机瞬时停止,可以在趋势图上观察到启动的时候速度曲线是斜线,停止的时候速度曲线是一条竖直线,这说明启动的时候电机按设定的加减速时间启动了,但是停止的时候没按设定的加减速时间停止。

如果将电机从0转加速到3000转,可以在趋势图上观察到电机按设定的加减速时间启动了,按下停止键,电机会瞬时停止转动,同时会发生很大的噪声,这时在趋势图上观察到停止的时候速度曲线是一条竖直线。

反复分析了这种情况,最后找到了出现这种情况的原因是在电机停止的宏指令里,没有在减速指令后加上一条延时指令来给电机时间减速,而是直接执行停止指令,这样电机刚接收到减速指令,马上就又接收到停止指令,电机来不及减速,转速直接从3000转跌到0转,这样就产生了很大的震动和噪声。

后来我在电机停止的宏指令里添加了电机从设定的运行速度减速到启动速度的延时时间,这个问题才得以解决。

第二个问题是,我在调试的过程中,发现加减速时间的设定值超过8100mm时,不论设定的加减速时间是多少,电机都在两秒钟左右的时间内加速到运行速度。

特别是把加减速时间设定为8200mm时,按启动键,电机不启动,同时还会发出转速瞬时下降时的那种噪声。

起初我以为是个别驱动器的问题,但是换了个驱动器之后发现问题依然存在。

这个情况要等问过他们厂家的在线客服之后才明白是怎么回事。

二、APCM模式的连续速度方式APCM模式的连续速度方式程序的编写基本上与APCM模式的连续定位方式一样,但是在控制页面打开的时候要把65号参数设定为3635(APCM控制字为0000111001001000)。

控制页面上同样需要设定速度参数设定、伺服ON、伺服OFF、启动、停止、故障处理等6个主要控制按键。

在该控制页面上也需要添加上正反转按键、趋势图、状态显示指示灯、保存参数等元件。

需要指出的一点是,这两种控制方式如果用于调速的话,不是很方便,因为速度参数的设定位置只有一个地址,且在电机的运行过程中,设定电机向相反方向运转,该指令不会马上执行,必需在电机停止后再启动,驱动器才会执行反转指令。

三、APCM模式的单次定位方式APCM模式的单次定位方式适合于进行精确的位置控制。

伺服驱动器工作在APCM模式的单次定位方式,需在单次定位控制方式页面打开时,设定65号参数为12170(APCM控制字为0010111110001010)。

单次定位方式的控制按键跟连续定位方式的控制按键相似,也要设定速度参数设定、伺服ON、伺服OFF、启动、停止、故障处理、保存参数等按键和位状态显示指示灯,不同的是这这段程序中,我选择的是绝对位置控制,这样,如果输入的脉冲总数是正值,则电机正转,输入脉冲式负值,则电机反转,同时还可以进行原点校正、回归原点、点动控制等功能(点动控制只在该控制方式里有效,在连续控制方式里无效)。

在单次定位方式里,可以准确设定电机运行的脉冲数目,这样电机就能够准确的运行一段距离。

该方式适合于用通信方式进行精确的距离控制。

四、内部速度调速使用内部速度调速模式,需先将51号参数设为0,然后断电再上电,该模式才会有效。

内部速度模式控制页面的参数设置也跟上面几种模式一样,需要设定速度参数按键、伺服ON、伺服OFF、停止、故障处理、正转、反转、保存参数、趋势图以及状态显示等元件。

与上面的模式不同的是,内部速度模式可以设定八级速度,而且可以在这八及速度中任意切换,点正转(反转)按键后,电机会马上按设定的加减速时间减速然后反转(正转)。

这种模式比APCM模式更适合用于调速。

五、两轴联动的APCM单次绝对位置定位模式这个程序可以同时控制两个电机带动一个工作台分别向X、Y方向移动。

在这个程序的控制页面上,除了上面所叙述的参数设定、伺服ON、伺服OFF、启动、停止和故障处理等参数外,还需要设定一个坐标系。

坐标系里,X轴和Y轴的最大值都是5mm,坐标系的四个方向设定四个上下左右的箭头,点一下箭头,电机就向相应的方向运行0.01mm(1丝),同时可以在坐标系里用鼠标进行目标位置的选取,也可以在专门的数值输入框里输入目标坐标。

设定好目标坐标后,会有两条黄色的水平和数值的虚线相交叉,交叉点即为选取的目标点。

在该控制页面上,我还进行了电机速度的实时显示、电机已运行距离的实时显示,目标位置的设定和目标位置的径向距离和电机当前位置相对于原点的径向距离的显示。

点击电机速度显示框、电机已运行距离显示框或目标位置设定方框时都有一个相对应的放大的窗口弹出来,这样可以更加清晰地观察和设定参数。

在这个程序里,可以进行配方数据的上传和下载。

在坐标系下,我添加了一个直径为5毫米、圆心在原点的圆,这样在目标位置选取的时候,可以直观里看到选取的目标位置的径向距离有没有超过最大值5mm,也可以观察目标位置径向距离显示元件,这样更精确一些。

同时,在控制页面的下方,我还添加了X轴、Y轴脉冲总数的显示元件,显示X轴、Y轴方向要执行的脉冲总数,还在控制页面下方添加了两个数据显示元件(地址类型为配方地址),来实时显示并记录电机当前位置,来显示当前电机的位置,并实时记载电机当前位置,这样可以在断电或者伺服OFF时,保存当前电机位置,不至于在重新上电或伺服ON时,电机上次运行的位置丢失。

在这几种模式程序的编写中,有几点经验是相同的:1、在这几种模式的程序的开始,都使用了快选窗口,在快选窗口里可以进行登录、注销、重新启动、控制画面切换等操作,这种方式也是实际应用中必不可少的,因为它方便、快捷。

2、在这几种模式的程序里,除了可在各种模式的控制窗口里正常进入报警处理窗口外,还另外添加了一个报警处理弹出窗口,同时在公共窗口添加了一个与报警弹出窗口等大小的直接窗口,并设定弹出窗口为报警处理窗口,这样不管当前页面为哪个页面,如果有警情,报警处理弹出窗口都可以自动弹出来,方便操作人员及时进行报警处理。

3、因为保存参数按键不常使用,所以我在保存参数的安全选项里设定最少按键时间为2秒钟,这样可以避免误触保存参数按键,造成原来保存的参数丢失。

同时还设定了该按键在伺服OFF时有效,伺服ON时无效,这样可以避免在伺服驱动器上电时电机自动运行。

4、在选择位状态指示灯时,要用不同状态颜色反差比较大的指示灯,这样便于识别。

此外,还需要指出的一点是,A6系列的驱动器在进行485联机通信时,不可以使用2号机器编号,因为据客服人员讲,驱动器软件里存在漏洞,不能识别2号机器编号。

所以在联机通信时,要使用1号和2号以后的机器编号。

同时还需要注意的是,在用485方式进行联机通信的时候,要采用手拉手的方式,就是触摸屏连一个伺服驱动器,这个驱动器再连下一个,这样一个连一个,不能出现分支的情况。

因为前面几种模式程序的编写的主要目的是练习,是为编写两轴联动的APCM单次绝对位置定位模式这个程序打基础的,所以在这里只附带两轴联动的APCM单次绝对位置定位模式程序宏指令以及对应语句的解释。

/************************初始化指令*****************************/ macro_command main()short a,bint pulsex,pulseya=3714 //APCM控制字:0000111010000010 b=127 //X轴5mm距离对应的屏上坐标长度SetData(b, "Local HMI", LW, 5, 1) //将X轴移动的定位虚线移动到原点SetData(b, "Local HMI", LW, 8, 1) //将Y轴移动的定位虚线移动到原点SetData(a, "MODBUS RTU", 4x, 1#102, 1) //将APCM控制字写进1号伺服65号参数SetData(a, "MODBUS RTU", 4x, 3#102, 1) //将APCM控制字写进2号伺服65号参数SetData(b, "Local HMI", LW, 13, 1)SetData(b, "Local HMI", LW, 14, 1) //将显示电机轴当前位置的元件移到原点GetData(pulsex, "Local HMI", RW, 20, 1)GetData(pulsey, "Local HMI", RW, 22, 1) //得到关机前电机X Y轴向已运行脉冲数SetData(pulsex, "MODBUS RTU", 4x, 1#145, 1) //将关机前电机X Y轴向已运行冲SetData(pulsey, "MODBUS RTU", 4x, 3#145, 1) //数写入已运行脉冲数0x90号的参end macro_command //数里/************************X Y轴停止*****************************/ macro_command main()bool a,ba=trueb=falseSetData(a, "MODBUS RTU", 0x, 1#3, 1)SetData(b, "MODBUS RTU", 0x, 1#3, 1) //X轴脉冲减速信号SetData(a, "MODBUS RTU", 0x, 3#3, 1)SetData(b, "MODBUS RTU", 0x, 3#3, 1) //Y轴脉冲减速信号SetData(a, "MODBUS RTU", 0x, 1#4, 1)SetData(b, "MODBUS RTU", 0x, 1#4, 1) //X轴脉冲到位信号SetData(a, "MODBUS RTU", 0x, 3#4, 1)SetData(b, "MODBUS RTU", 0x, 3#4, 1) //Y轴脉冲到位信号end macro_command/*************读取目标距离写入电机并记录本次电机轴位置*************/ macro_command main()float distance,distance1,distancex,distancey,x,y,c,d,g,h,j,k,l,mint pulsex,pulsey,pulsexx,pulseyy //pulsexx pulseyy:上次记录的已运行脉冲数short a,b,beishu,speedx,speedy,speedbool OFFspeed=40OFF=falseGetData(distancex, "Local HMI", LW, 0, 1)GetData(distancey, "Local HMI", LW, 2, 1) //读取目标距离元件里设定的X Y轴坐标distance1=distancex*distancex+distancey*distanceySQRT(distance1, distance)SetData(distance, "Local HMI", LW, 15, 1) //计算目标位置的径向距离c=distancex/5*127d=distancey/5*127 //计算当前设定目标位置在新坐标系上相对原点的位置x=c+438y=244-d //目标位置在屏幕原始坐标系上的坐标a=x-311b=y-117 //目标位置相对相对新坐标系左上角在X Y轴的变化距离SetData(a, "Local HMI", LW, 5, 1)SetData(b, "Local HMI", LW, 8, 1) //将目标位置的变化距离传给移动图形虚线pulsex=distancex*80000pulsey=distancey*80000 //将目标位置的坐标由毫米转化为脉冲数SetData(pulsex, "MODBUS RTU", 4x, 1#41, 1) //将需要运行的脉冲总数写入SetData(pulsey, "MODBUS RTU", 4x, 3#41, 1) //相应伺服SetData(OFF, "Local HMI", LB, 1, 1) //将触发该宏指令的位地址置1 GetData(pulsexx, "Local HMI", RW, 20, 1) //读取上次运行结束时X Y轴GetData(pulseyy, "Local HMI", RW, 22, 1) //已运行脉冲数j=pulsexx*1.0/80000k=pulseyy*1.0/80000 //计算出上次电机轴的位置(单位:mm) l=distancex-jm=distancey-k //计算两次目标位置之间的距离if l<=0 theng=(-1)*lelseg=lend if //计算X轴方向两次目标之间距离的绝对值if m<=0 thenh=(-1)*melseh=mend if //计算Y轴方向两次目标之间距离的绝对值if g==0 or h==0 thenSetData(speed, "MODBUS RTU", 4x, 1#44, 1) //如果有一个方向的目标位置相对上SetData(speed, "MODBUS RTU", 4x, 3#44, 1) //次没有变化,则将另一方向上的电机else if g>h then //速度设为40rpmbeishu=40/g //如果X轴向目标距离变化距离大于Y轴目标距离变化距离speedx=g*beishu //求出40除以最大变化距离得出的整数值speedy=h*beishu //将该整数值乘以每个轴向目标距离变化距离,取结果//的整数值作为该轴向的电机运行速度值SetData(speedx, "MODBUS RTU", 4x, 1#44, 1) //将求出的各轴电机运行速度值SetData(speedy, "MODBUS RTU", 4x, 3#44, 1)// 赋给相应伺服2B号参数else if g<=h then //如果Y轴向目标距离变化距离大于或等于X轴目标距离//变化距离beishu=40/h //求出40除以最大变化距离得出的整数值speedx=g*beishu //将该整数值乘以每个轴向目标距离变化距离,取结果speedy=h*beishu //的整数值作为该轴向的电机运行速度值SetData(speedx, "MODBUS RTU", 4x, 1#44, 1) //将求出的各轴电机运行速度值SetData(speedy, "MODBUS RTU", 4x, 3#44, 1) // 赋给相应伺服2B号参数end ifend macro_command/****************读取触碰点坐标并将各项参数写入伺服****************/ macro_command main()short x,y,a,b,e,f,speed,beishu,speedx,speedyfloat c,d,g,h,j,k,l,m,distance,distance1int pulsex,pulsey,pulsexx,pulseyyspeed=40GetData(x, "Local HMI", LW, 9042, 1)GetData(y, "Local HMI", LW, 9043, 1) //读取本次光标所点位置坐标e=x-311f=y-117 //计算出光标所点位置相对新坐标系左上角的变化距离SetData(e, "Local HMI", LW, 5, 1)SetData(f, "Local HMI", LW, 8, 1) //将光标位置变化传给移动图形虚线a=x-438b=244-yc=(a*1.0)/127*5 //计算出目标位置在新坐标系X轴上的坐标d=(b*1.0)/127*5 //计算出目标位置在新坐标系Y轴上的坐标pulsex=c*80000pulsey=d*80000 //求出各轴相对应的脉冲数pulsex=pulsex-pulsex%800pulsey=pulsey-pulsey%800 //修正发送的脉冲为800的倍数,因为驱动器接受//800个脉冲丝杠运行1丝(0.01mm)c=pulsex*1.0/80000d=pulsey*1.0/80000 //计算目标位置在新坐标系上的X Y坐标SetData(c, "Local HMI", LW, 0, 1)SetData(d, "Local HMI", LW, 2, 1) //准确显示目标位置在新坐标系上的X Y坐标distance1=c*c+d*dSQRT(distance1, distance)SetData(distance, "Local HMI", LW, 15, 1) //计算目标位置的径向距离SetData(pulsex, "MODBUS RTU", 4x, 1#41, 1)SetData(pulsey, "MODBUS RTU", 4x, 3#41, 1) //将各轴上脉冲数写入相应伺服GetData(pulsexx, "Local HMI", RW, 20, 1)GetData(pulseyy, "Local HMI", RW, 22, 1) //读取上次各轴已运行脉冲数j=pulsexx*1.0/80000k=pulseyy*1.0/80000 //计算上次电机位置l=c-jm=d-k //计算两次目标位置之间的距离if l<=0 then //本段程序注释与上个计算速度的程序的注释一样,在次就不注释g=(-1)*lelseg=lend ifif m<=0 thenh=(-1)*melseh=mend ifif g==0 or h==0 thenSetData(speed, "MODBUS RTU", 4x, 1#44, 1)SetData(speed, "MODBUS RTU", 4x, 3#44, 1)else if g>h thenbeishu=40/gspeedx=g*beishuspeedy=h*beishuSetData(speedx, "MODBUS RTU", 4x, 1#44, 1)SetData(speedy, "MODBUS RTU", 4x, 3#44, 1)else if g<=h thenbeishu=40/hspeedx=g*beishuspeedy=h*beishuSetData(speedx, "MODBUS RTU", 4x, 1#44, 1)SetData(speedy, "MODBUS RTU", 4x, 3#44, 1)end ifend macro_command/*********将反馈回的脉冲传给图形工作台并保存当前电机轴位置*********/ macro_command main()int pulsex,pulseyshort x,y,x1,y1,a,bfloat distance,distance1GetData(pulsex, "MODBUS RTU", 4x, 1#145, 1)GetData(pulsey, "MODBUS RTU", 4x, 3#145, 1) //读取各轴已运行脉冲数distance1=(pulsex*1.0/80000)*(pulsex*1.0/80000)+(pulsey*1.0/80000)*(pulsey*1.0 /80000)SQRT(distance1, distance) //计算出当前电机轴位置在新坐标系上的径向距离SetData(distance, "Local HMI", LW, 17, 1) //显示当前电机的径向位移x=(pulsex*1.0)/80000/5*127y=(pulsey*1.0)/80000/5*127 //当前电机轴在屏幕坐标系上的位置a=127+xb=127-ySetData(a, "Local HMI", LW, 13, 1)SetData(b, "Local HMI", LW, 14, 1) //将电机轴坐标变化传给移动图形工作台SetData(pulsex, "Local HMI", RW, 20, 1)SetData(pulsey, "Local HMI", RW, 22, 1) //保存当前电机轴位置end macro_command/*********************原点校正图形工作台回归**********************/ macro_command main()int bshort aa=127b=0SetData(a, "Local HMI", LW, 13, 1)SetData(a, "Local HMI", LW, 14, 1) //移动图形图形工作台到原点SetData(b, "MODBUS RTU", 4x, 1#145, 1)SetData(b, "MODBUS RTU", 4x, 3#145, 1) //将已运行脉冲数置0 SetData(b, "Local HMI", RW, 20, 1)SetData(b, "Local HMI", RW, 22, 1) //记录原点校正后的电机轴坐标(0.00,0.00 ) end macro_command/*********************X轴报警清楚复位**********************/macro_command main()bool OFFOFF=falseDELAY(1000) //报警清除地址置ON后延时1s,清楚报警SetData(OFF, "MODBUS RTU", 0x, 1#9, 1) //报警清除位地址复位end macro_command/*********************Y轴报警清楚复位**********************/macro_command main()bool OFFOFF=falseDELAY(1000) //报警清除地址置ON后延时1s,清楚报警SetData(OFF, "MODBUS RTU", 0x, 3#9, 1) //报警清除位地址复位end macro_command/*********************X轴恒距点动递加**********************/macro_command main()int pulse,pulsexshort speed,a,bbool OFF,ONspeed=40ON=trueOFF=falseGetData(pulse, "MODBUS RTU", 4x, 1#145, 1) //读取当前已运行脉冲数pulsex=pulse+800 //将目标脉冲数设定为当前已运行脉冲数+800 a=pulsex*1.0/80000/5*127 //目标位置X轴距离b=127+aSetData(b, "Local HMI", LW, 5, 1) //移动X轴向移动的虚线到目标位置SetData(pulsex, "MODBUS RTU", 4x, 1#41, 1) //写入脉冲个数SetData(speed, "MODBUS RTU", 4x, 1#44, 1) //写入运行速度SetData(ON, "MODBUS RTU", 0x, 1#5, 1)SetData(OFF, "MODBUS RTU", 0x, 1#5, 1) //启动DELAY(2000)GetData(pulse, "MODBUS RTU", 4x, 1#145, 1) //读取当前已运行脉冲SetData(pulse, "Local HMI", RW, 20, 1) //保存电机轴当前位置end macro_command/*********************X轴恒距点动递减**********************/macro_command main()int pulse,pulsexshort speed,a,bbool OFF,ONspeed=40ON=trueOFF=falseGetData(pulse, "MODBUS RTU", 4x, 1#145, 1) //读取当前已运行脉冲pulsex=pulse-800 //将目标脉冲数设定为当前已运行脉冲数-800 a=pulsex*1.0/80000/5*127 //目标位置X轴距离b=127+aSetData(b, "Local HMI", LW, 5, 1) //移动X轴向移动的虚线到目标位置SetData(pulsex, "MODBUS RTU", 4x, 1#41, 1) //写入脉冲个数SetData(speed, "MODBUS RTU", 4x, 1#44, 1) //写入运行速度SetData(ON, "MODBUS RTU", 0x, 1#5, 1)SetData(OFF, "MODBUS RTU", 0x, 1#5, 1) //启动DELAY(2000)GetData(pulse, "MODBUS RTU", 4x, 1#145, 1) //读取当前已运行脉冲SetData(pulse, "Local HMI", RW, 20, 1) //保存电机轴当前位置end macro_command/*********************Y轴恒距点动递加**********************/ macro_command main()int pulsey,pulseshort speed,a,bbool OFF,ONspeed=40ON=trueOFF=falseGetData(pulse, "MODBUS RTU", 4x, 3#145, 1) //读取当前已运行脉冲pulsey=pulse+800 //将目标脉冲数设定为当前已运行脉冲数+800 a=pulsey*1.0/80000/5*127 //目标位置Y轴距离b=127-aSetData(b, "Local HMI", LW, 7, 1) //移动Y轴向移动的虚线到目标位置SetData(pulsey, "MODBUS RTU", 4x, 3#41, 1) //写入脉冲SetData(speed, "MODBUS RTU", 4x, 3#44, 1) //写入速度SetData(ON, "MODBUS RTU", 0x, 3#5, 1) //启动SetData(OFF, "MODBUS RTU", 0x, 3#5, 1)DELAY(2000)GetData(pulse, "MODBUS RTU", 4x, 3#145, 1) //读取当前已运行脉冲SetData(pulse, "Local HMI", RW, 22, 1) //保存电机轴当前位置end macro_command/*********************Y轴恒距点动递减**********************/ macro_command main()int pulsey,pulseshort speed,a,bbool OFF,ONspeed=40ON=trueOFF=falseGetData(pulse, "MODBUS RTU", 4x, 3#145, 1) //读取当前已运行脉冲pulsey=pulse-800 //将目标脉冲数设定为当前已运行脉冲数-800 a=pulsey*1.0/80000/5*127 //目标位置Y轴距离b=127-aSetData(b, "Local HMI", LW, 7, 1) //移动Y轴向移动的虚线到目标位置SetData(pulsey, "MODBUS RTU", 4x, 3#41, 1) //写入脉冲SetData(speed, "MODBUS RTU", 4x, 3#44, 1) //写入速度SetData(ON, "MODBUS RTU", 0x, 3#5, 1) //启动SetData(OFF, "MODBUS RTU", 0x, 3#5, 1)DELAY(2000)GetData(pulse, "MODBUS RTU", 4x, 3#145, 1) //读取当前已运行脉冲SetData(pulse, "Local HMI", RW, 22, 1) //保存电机轴当前位置end macro_command/*************8*************原点回归***************************/ macro_command main()int pulse,pulsex,pulseyfloat distance,g,h,l,mshort a,speed,speedx,speedy,beishubool ON,OFFpulse=0a=127distance=0speed=40ON=trueOFF=falseSetData(pulse, "MODBUS RTU", 4x, 1#41, 1)SetData(pulse, "MODBUS RTU", 4x, 3#41, 1) //将两轴脉冲总数置为0 SetData(a, "Local HMI", LW, 5, 1)SetData(a, "Local HMI", LW, 8, 1) //虚线回归原点SetData(distance, "Local HMI", LW, 0, 1)SetData(distance, "Local HMI", LW, 2, 1) //目标距离元件置0GetData(pulsex, "MODBUS RTU", 4x, 1#145, 1)GetData(pulsey, "MODBUS RTU", 4x, 3#145, 1) //读取已运行脉冲数l=pulsex*1.0/80000m=pulsey*1.0/80000 //计算出本次电机位置if l<=0 then //本段程序注释与上边计算速度的程序的注释一样,在次不再注释g=(-1)*lelseg=lend ifif m<=0 thenh=(-1)*melseh=mend ifif g==0 or h==0 thenSetData(speed, "MODBUS RTU", 4x, 1#44, 1)SetData(speed, "MODBUS RTU", 4x, 3#44, 1)else if g>h thenbeishu=40/gspeedx=g*beishuspeedy=h*beishuSetData(speedx, "MODBUS RTU", 4x, 1#44, 1)SetData(speedy, "MODBUS RTU", 4x, 3#44, 1)else if g<=h thenbeishu=40/hspeedx=g*beishuspeedy=h*beishuSetData(speedx, "MODBUS RTU", 4x, 1#44, 1)SetData(speedy, "MODBUS RTU", 4x, 3#44, 1)end ifSetData(ON, "MODBUS RTU", 0x, 1#5, 1)SetData(OFF, "MODBUS RTU", 0x, 1#5, 1) //启动X轴伺服电机SetData(ON, "MODBUS RTU", 0x, 3#5, 1)SetData(OFF, "MODBUS RTU", 0x, 3#5, 1) //启动Y轴伺服电机end macro_command/*************8**********读取上次电机轴位置***********************/ macro_command main()int pulsex,pulseyshort x,y,a,b,cc=1GetData(pulsex, "Local HMI", RW, 20, 1)GetData(pulsey, "Local HMI", RW, 22, 1) //读取上次电机轴位置(已运行脉冲数) SetData(pulsex, "MODBUS RTU", 4x, 1#145, 1) //将上次电机轴位置(已运行脉冲数) SetData(pulsey, "MODBUS RTU", 4x, 3#145, 1)//写入各个伺服驱动器0x90号参数x=(pulsex*1.0)/80000/5*127y=(pulsey*1.0)/80000/5*127 //计算当前工作台位置a=127+xb=127-ySetData(a, "Local HMI", LW, 13, 1)SetData(b, "Local HMI", LW, 14, 1) //将工作台变化传给移动图形工作台SetData(c, "Local HMI", LB, 20, 1)end macro_command赵群辉2011-1-19。

相关文档
最新文档