sxssf cellstyle.setdataformat 设置为数值类型_S7200SMART使用之读取V90绝对值编码器数值...

S7-200 SMART PLC读取V90绝对值编码器数值

1.概况

SINAMICS V90是西门子推出的一款小型、高效便捷的伺服系统。它作为 SINAMICS 驱动系列家族的新成员,与SIMOTICS S-1FL6 伺服电机完美结合,组成最佳的伺服驱动系统,实现位置控制、速度控制和扭矩控制。目前1FL6电机有两种编码器类型,即增量编码器类型及绝对值编码器类型。
西门子的小型自动化S7-200 SMART PLC可以控制V90驱动器,本文介绍如何实现SMART PLC读取1FL6伺服电机的绝对值编码器数值。
关于如何实现SMART PLC控制V90实现定位控制请参见《SIMATIC S7-200 SMART 系统手册》及《S7-200 SMART连接SINAMICS V90 实现位置控制》。

2.使用的硬件及软件

硬件

序号

设备名称

订货号

1

PS207电源 24 V DC/2.5 A

6EP1 332-1LA00

2

SIMATIC S7-200 SMART CPU ST60

6ES7288-1ST60-0AA0

3

V90驱动器

6SL3210-5FE10-4UA0

4

伺服电机

1FL6042-1AF61-0LG1

5

V90 动力电缆 (含接头)

6FX3002-5CL01-1AD0

6

伺服电机编码器电缆
(含接头,用于绝对值编码器)

6FX3002-2DB10-1AD0

7

V90 控制信号电缆(含 50 针接头及 1m 电缆线)

6SL3260-4NA00-1VB0

8

SIMATIC Field PG M3

6ES7715-1BB23-0AA1

9

Mini USB电缆

软件

序号

说  明

1

Window 7 旗舰版 32位

2

STEP 7-Micro/WIN SMART 编程软件

3

SINAMICS_V-ASSISTANT

3.实现方法

 3.1概述

如图1,使用PG通过标准mini USB电缆与V90连接,打开SINAMICS V—ASSITANT软件设置驱动器的参数。

36a12d017a9f6dfdc6d45db9e8044044.png


图1 PG与V90连接
如图2所示,PLC通过V90上的RS485通讯读取编码器调整状态并且通过V90的数字量输出检查V90的驱动器状态,判断绝对位置是否有效。如果V90的DO1=1,DO2=0和DO3=1且r2507=3,这意味着PLC可以有效地读取编码器的绝对位置,此时可以通过RS485 USS通讯读取绝对位置(r2521[0]),否则r2521是无效的。PLC可以通过数字量输出报警或面板来提示用户当前r2521无效。读取r2521值后,PLC可以通过PTI方式输出脉冲给驱动器执行相应的运动控制。     

f671aa3058c1ed69805f3f7657433a8a.png

图2 PLC与V90系统连接图

3.2实现步骤

根据SIMATIC S7-200 SMART CPU ST60的运动控制功能信号分配和V90端子定义进行接线(详见《SINAMICS V90 OPI操作手册》);使用SINAMICS_V-ASSISTANT对SINAMICS V90进行参数设置以及对电机的绝对值编码器进行调试;使用STEP 7-Micro/WIN SMART编程软件对CPU ST60进行组态和参数化,操作步骤如表1所示。
表1.操作步骤

步骤

内容

1

接线

2

进行外部脉冲位置控制模式(PTI)下的系统调试

3

STEP 7-Micro/WIN SMART连接S7-200 SMART

4

组态运动轴

5

组态轴工艺对象的参数

6

下载到PLC

7

用轴控制面板调试轴

8

编程

9

下载到PLC

10

试运行

3.3接线

S7-200 SMART与V90的485通讯连接:
SINAMICS V90 伺服驱动通过 RS485 接口(X12)使用 USS 协议与 PLC RS485(端口 0) 进行通讯,接线如图3所示。

b02d710027fbf0dbe53c5b26e171974b.png

图3  S7-200 SMART CPU 与V90通讯线连接

S7-200 SMART通过PTI方式控制V90定位的控制信号接线如图4所示:

d35b3f465907ea779fc705930fd4d5dc.png


图4  S7-200 SMART CPU 与V90控制信号连接

3.4 伺服驱动器的参数

3.4.1 位置控制相关的参数
按照表2所示对伺服驱动器的位置控制相关的参数进行设置
表2.V90 位置控制参数


参数

说明

设置

P29003

控制模式设定为PTI

P29003 = 0

P29250

使能PTI 绝对位置模式

P29250 = 1

P29010~P29014

PTI控制模式下的相关参数

根据实际条件设置

P29012 P29013
P29247~P29249

位置控制相关的参数
P29012 P29013是电子齿轮比

根据实际条件设置

3.4.2 USS通讯相关的参数
按照表3所示对伺服驱动器的USS通讯相关的参数进行设置
表3. V90 USS通讯参数


参数

说明

设置

USS波特率

USS 波特率8(38400bits/s)

缺省值

P29004

USS 地址

0-31

PKW/PZD

USS PZD/PKW 长度为0/4

缺省值

注意:
PLC的 RS485接口的波特率和驱动器USS地址要求与V90一致, 因此, 需要对V90里的参数P29004设置一致的USS地址。并且V90 USS RS485端口的波特率设置为38400bits/s,报文长度为4个PKW和0个PZD的USS协议。

3.5 PLC组态及编程

在PLC的编程软件中组态运动轴,详细步骤参见《SIMATIC S7-200 SMART系统手册》,注意在组态轴工艺对象的参数中需启用从驱动器里读取1FL6伺服电机绝对值编码器的位置,如图5所示。

c4fa477f7f9a3202750191e522184084.png

图5  启用从驱动器里读取1FL6伺服电机绝对值编码器的位置
在PLC中编程如表4所示:

表4. PLC编程

启用和初始化运动轴:执行AXISx_CTRL 。

bee52ffbc66fe4305d6e09f61445e149.png

使用手动模式运行轴运动:执行AXISx_MAN,输入RUN、JOG_P 或 JOG_N之一,使轴速度或位置点动运行。

1c9d40595dc758fc30c77c731fb5047d.png

通过 SINAMICS V90 伺服驱动器读取绝对位置值:
–执行AXIS0_ABSPOS
–把伺服驱动器返回的当前绝对位置放到VD326里

44f4ffd9835a19e678c99109b0a2adfa.png

总结:

ABSPOS指令用途:

AXISx_ABSPOS 指令用于读取SINAMICS V90 伺服驱动器绝对值编码器数值。读取绝对位置值的目的是为了更新运动轴中的当前位置值。
SINAMICS V90 伺服驱动器与安装了绝对值编码器的 SIMOTICS-1FL6 伺服电机结合使用时,支持此功能。

ABSPOS指令D_POS:

AXISx_ABSPOS 指令的D_Pos 输出,指示SINAMICS V90 伺服驱动器绝对值编码器数值,该数值只在AXISx_ABSPOS 指令的完成位=1时有效,
为了保证D_Pos读数的稳定值,需要采用完成位的上升沿转移该数值。该数值显示方式因为运动控制组态向导不同而显示不同。如下所示:

(1)、测量系统选择:工程单位

d17d51b55b369af77c3f2e5ecaf17e85.png

如果测量系统选择为“工程单位”,则AXISx_ABSPOS.D_Pos的计算公式如下:

fc045b91912ceabdf8ab96e55bc6d9dc.png

,数据类型为real 。
其中:r2521显示V90 的编码器实际位置值,r2521正确显示必须先将V90驱动器ABS。
 注:上边公式的假设条件为P29247 = 2^20=1048576, P29248 = 1, P29249 = 1

(2)、测量系统选择:相对脉冲
如果测量系统选择为“相对脉冲”,则AXISx_ABSPOS.D_Pos的计算公式如下:

e075f5110e94936bd5740eb23a480beb.png

,数据类型为DINT

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
web中使用POI导入导出EXCEL文件的例子 struts1.x的例子,struts2.x可以参考自己修改 1.action的写法 import java.io.*; import java.sql.*; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.*; import org.apache.struts.action.*; import org.apache.struts.upload.FormFile; import org.apache.commons.beanutils.BeanUtils; public class Action { /**//* * 把数据库中的字段导入到Excel ,并生成Excel文档 **/ public ActionForward getDownload(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception { Form fm = (Form) actionForm; // Excel 文件存放在服务器的相对路径下 String outputFile = request.getRealPath("/tmp/Excel.xls"); try { // 创建新的Excel 工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 在Excel 工作簿中建一工作表 HSSFSheet sheet = workbook.createSheet("Sheet1"); // 设置单元格格式(文本) HSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("@")); // 在索引0的位置创建行(第一行) HSSFRow row = sheet.createRow((short) 0); HSSFCell cell1 = row.createCell((short) 0);// 第一列 HSSFCell cell2 = row.createCell((short) 1); HSSFCell cell3 = row.createCell((short) 2); // 定义单元格为字符串类型 cell1.setCellType(HSSFCell.CELL_TYPE_STRING); cell2.setCellType(HSSFCell.CELL_TYPE_STRING); cell3.setCellType(HSSFCell.CELL_TYPE_STRING); cell1.setEncoding(HSSFCell.ENCODING_UTF_16); cell2.setEncoding(HSSFCell.ENCODING_UTF_16); cell3.setEncoding(HSSFCell.ENCODING_UTF_16); // 在单元格中输入数据 cell1.setCellValue("姓名"); cell2.setCellValue("性别"); cell3.setCellValue("年龄"); Connection connection = session.connection(); String sql = "Select t.name, t.sex, t.age from table t where t.sex = ?"; try { PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, fm.getSex());// 传入查询条件 ResultSet rs = ps.executeQuery();// 查询结果存入rs connection.commit();// 执行SQL while (rs.next()) { //设置j行从第二行开始 int j = 1; row = sheet.createRow((short) j); //设置i列从第二列开始 for (int i = 1; i <= 3; i++) { HSSFCell cell = row.createCell((short) (i-1)); // 设置单元格格式 cell.setCellStyle(cellStyle); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(rs.getString(i)); } j++; } request.setAttribute("message", "文件生成成功!"); } catch (SQLException e) { request.setAttribute("message", "创建文件失败!"); e.printStackTrace(); } // 删除路径下同名的Excel 文件 File path = new File(outputFile); path.delete(); // 新建一输出文件流 FileOutputStream fOut = new FileOutputStream(outputFile); // 把相应的Excel 工作簿存盘 workbook.write(fOut); // 操作结束,关闭文件 fOut.flush(); fOut.close(); //该处如果Excel过大会影响效率,谁有好的想法可以提出来参考(不过从页面下载完后就会清空) request.getSession().setAttribute("Download", outputFile); } catch (Exception ioexception) { request.setAttribute("message", "创建文件失败!"); return actionMapping.findForward("outJSP"); } return actionMapping.findForward("outJSP"); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值