1     免责声明

本手册及样例包均为免费提供,仅供参考。所述版本、应用及案例可能与用户实际应用不符,请用户在使用前认真阅读相关使用说明,根据自身的应用环境及机床特点进行调整,并进行严格的测试,以规避可能存在的风险。对于在使用中发生的人员、财产等损失,由用户自行承担。

以上声明内容的最终解释权归西门子(中国)有限公司所有,后续内容更新恕不做另行通知。

2     概述

某些加工应用需要记录一些机内检测值,或其他加工、机床信息,Sinumerik提供Write指令可实现文件写入,配合自定义变量、事件程序等功能,即可在程序中按需求完成信息的输出。

本文档以一个实例作为说明,演示如何使用M代码指令实现CSV文件以日期为文件名建立,并执行输出操作。


3     要求

3.1   硬件要求


硬件

工艺

PPU24x/NCU710

PPU26x/NCU720

PPU28x/NCU730

PPU28x.Advance

车床

铣床

磨床

-

3.2      软件版本要求

         V4.7+SP02

3.3      其他要求

无选项要求或其他特殊要求


4     注意事项

4.1    注意事项一

记录文件,即日志文件的大小限制,有MD11240 $MN_LEN_PROTOCOL_FILE设置,828D默认值为100K,可根据实际需求适当调整。

 

5     调试或使用步骤

5.1    功能步骤

         image.png

5.2     CSV文件

CSV文件(Comma-Separated Values),逗号分隔值,其文件以纯文本形式存储表格数据(数字和文本),由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。可以使用EXCEL、记事本来开启。

         使用记事本打开如下

      image.png

 

         使用Excel打开这个CSV文件,如下:

No.

Recode1

 Recode2

 Recode3

 Recode time

1

0.123

0.456

0.789

14:24:53

2

0.123

0.456

0.789

14:24:55

3

0.123

0.456

0.789

14:24:57

4

0.123

0.456

0.789

14:24:57

5

0.123

0.456

0.789

14:24:57

 

         CSV文本形式与表格形式对照如下:

    image.png

1列标题

2列标题

3列标题

4列标题

5列标题

n列标题

1列1行值

 2列1行值

 3列1行值

 4列1行值

 ……

 n列1行值

1列2行值

 2列2行值

 3列2行值

 4列2行值

 ……

 n列2行值

1列3行值

 2列3行值

 3列3行值

 4列3行值

 ……

 n列3行值

1列4行值

 2列4行值

 3列4行值

 4列4行值

 ……

 n列4行值

……

1列m行值

 2列m行值

 3列m行值

 4列m行值

 ……

 n列m行值

 

5.3    输出指令

使用打开外部文件,将数据写入外部文件,写入指令带有有精确编程的换行符 - “LF”,具体流程如下:

         image.png


         输出记录指令举例

WRITE(ERROR,_DEV,<<_OutNo<<","<<VAR1<<","<<VAR2<<","<<VAR3<<","<<$A_HOUR<<":"<<$A_MINUTE<<":"<<$A_SECOND<<"'H0A'")          

ERROR :返回错误值的变量,类型INT,变量在程序开头自由定义

 值: 0 无错误

1 非法路径

2 路径未找到

3 文件未找到

4 错误的文件类型

10 文件已满

11 文件正被使用

12 没有空余的存储量

13 无访问权限

14 输出设备缺少 EXTOPEN 指令或指令出错

15 写入外部设备出错

16 写入了无效的外部路径

_DEV :插入指定程序段/数据的文件路径和名称,类型:STRING,变量在程序开头自由定义


_OutNo :输出的第一个变量元素,变量在程序开头自由定义;


"," :元素分隔符à逗号;


VAR1~VAR3:其他输出的元素;


$A_HOUR<<":"<<$A_MINUTE<<":"<<$A_SECOND :当前时间作为记录输出;


"'H0A'" :精确编程的“LF”,换行符。


<< : 通过运算符“<<”实现字符串链接



6     应用举例

本示例,使用M228调用输出元素子程序(WRITE_DATA.SPF),M229调用初始化记录程序(WRITE_RESET.SPF),首次调用M228,将在指定目录建立当前日期为名字的CVS文件,如20210531.CSV,输出表头元素,并输出指定元素。当日再次执行M228指令,将会将输出元素值按行的形式写入当日的CSV文件中,当执行WRITE_DATA.SPF时,程序判断记录的日期与实际日期不一致,将会创建新的当日日期CSV文件。

M229将会初始化记录日期的变量值。

以下为本示例的实现过程:

6.1   建立通道GUD变量

建立两个通道GUD变量,用于存储CSV文件中的元素行号,及日期变量,定义后生效GUD变量

DEF CHAN INT _OUTNO=1   ;表格内的No. 序号变量

DEF CHAN INT _DATE_CHK=0 ;日期存储变量,每次执行后更新,下一次运行时进行日期对比,判断是否建立新的日期文件


6.2   建立输出元素值的程序文件 - WRITE_Data.SPF

N1 DEF INT PATH=1              ;0-路径为NC,1-路径为CF

N2 DEF STRING[100] DEV_1="OUTPUT"    ;输出的目录名称

N3 DEF STRING[100] _Name1  ;暂存文件名

N4 DEF STRING[100] _DEV       ;存放完整路径变量

N5 DEF INT ERROR,ERROR1,_DATE  ;文件写入返回错误值变量,文件打开返回错误值变量,暂存当前日期的临时变量

N6 DEF BOOL RESULT1     ;结果变量的定义。

N7 DEF REAL VAR1,VAR2,VAR3

N8  VAR1=R[50]    ; 输出元素变量1—R[50]

N9  VAR2=R[51]    ; 输出元素变量2—R[51]

N10 VAR3=R[52]   ; 输出元素变量3—R[52]

;*******输出路径定义*********

N11 CASE PATH OF 1 GOTO _Lab1 2 GOTOF _Lab2 DEFAULT GOTOF _DEFAULT_SET ;PATH变量决定存储在NC或CF卡

N12 _Lab1:

N13 DEV_1="/_N_WKS_DIR/_N_"<<DEV_1<<"_WPD/"    ;工件路径下创建OUTPUT.WPD文件夹,存放CSV文件

N14 GOTOF _BEG

N15 _Lab2:

N16 DEV_1="LOCAL_DRIVE/OUTPUT/"      ;CF卡路径下创建OUTPUT文件夹,存放CSV文件

N17 GOTOF _BEG

N18 _DEFAULT_SET:

N19 DEV_1="LOCAL_DRIVE/OUTPUT/"

N20 GOTOF _BEG

 

;*******完整路径文件名*********

N21 _BEG:

N22 _DATE=20000000+$A_YEAR*10000+$A_MONTH*100+$A_DAY 

;将完整的当前日期赋值给变量_DATE,格式为YYYYMMDD

N23 _DEV=DEV_1<<_DATE<<".CSV"     ;将目录路径与日期文件名字符串变量,连接赋值给完整路径变量:_DEV

 

;*******打开外部文件*********

N24 EXTOPEN(ERROR1,_DEV,"SYN","SHARED")

N25 RESULT1=ISFILE(_DEV)

N26 IF(RESULT1==FALSE)

N27 MSG("文件不存在")

N28 M0

N29 GOTO _END1

N30 ENDIF

 

;*******比较日期,是否新建文件,新建则添加表头*********

N31 IF (_DATE<>_DATE_CHK)   ;如果当前日期不等于记录日期变量的存储的日期

N32 _DATE_CHK=_DATE           ;记录日期被赋值为当前日期

N33 _OutNo=1                          ;行号复位为1

N34 WRITE(ERROR,_DEV,"No.,Ori Inc X,Ori Inc Y,Ori Inc Z,TIME'H0A'")  ;写入表头元素

N35 ENDIF

 

;*******写文件元素内容,带换行符LF *********

N36 WRITE(ERROR,_DEV,<<_OutNo<<","<<VAR1<<","<<VAR2<<","<<VAR3<<","<<$A_HOUR<<":"<<$A_MINUTE<<":"<<$A_SECOND<<"'H0A'")

N37 EXTCLOSE(ERROR1,_DEV)   ;关闭外部文件

 

;*******写文件错误检查*********

N38 IF ERROR ;出错分析。

N39 MSG ("执行 WRITE 指令时出错:" <<ERROR)

N40 M0

N41 ELSE

N42 _OutNo=_OutNo+1   ;行号元素加1

N43 ENDIF

N44 _END1:

N45 M17

6.3    建立初始化程序文件 - WRITE_RESET.SPF

_DATE_CHK=0    ;初始化日期变量

M17

6.4   设置用户M代码调用子程序

MD10715 $MN_M_NO_FCT_CYCLE[9]= 228
MD10715 $MN_M_NO_FCT_CYCLE[10]= 229
MD10716 $MN_M_NO_FCT_CYCLE_NAME[9] = WRITE_DATA
MD10716 $MN_M_NO_FCT_CYCLE_NAME[10] = WRITE_RESET

6.5    执行M228输出记录指令后,建立CVS文件并作记录

No.

Recode1

 Recode2

 Recode3

 Recode time

1

0.123

0.456

0.789

14:24:50

2

0.123

0.456

0.789

14:24:55

3

0.123

0.456

0.789

14:24:59

4

0.123

0.456

0.789

14:25:23

5

0.123

0.456

0.789

14:25:57

 

7     参考文献

1.     SINUMERIK 840D sl/ 828D 工作准备部分, 08/2018

8     作者/联系人

Cao Peng

2021.5.31

9     版本信息

版本

日期

修改内容

V1.0

2021.5.31