本手册及样例包均为免费提供,仅供参考。所述版本、应用及案例可能与用户实际应用不符,请用户在使用前认真阅读相关使用说明,根据自身的应用环境及机床特点进行调整,并进行严格的测试,以规避可能存在的风险。对于在使用中发生的人员、财产等损失,由用户自行承担。
以上声明内容的最终解释权归西门子(中国)有限公司所有,后续内容更新恕不做另行通知。
某些加工应用需要记录一些机内检测值,或其他加工、机床信息,Sinumerik提供Write指令可实现文件写入,配合自定义变量、事件程序等功能,即可在程序中按需求完成信息的输出。
本文档以一个实例作为说明,演示如何使用M代码指令实现CSV文件以日期为文件名建立,并执行输出操作。
硬件 | ||||
工艺 | PPU24x/NCU710 | PPU26x/NCU720 | PPU28x/NCU730 | PPU28x.Advance |
车床 | ● | ● | ● | ● |
铣床 | ● | ● | ● | ● |
磨床 | ● | ● | - | ● |
• V4.7+SP02
无选项要求或其他特殊要求
记录文件,即日志文件的大小限制,有MD11240 $MN_LEN_PROTOCOL_FILE设置,828D默认值为100K,可根据实际需求适当调整。

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

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

• 输出记录指令举例
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”,换行符。
<< : 通过运算符“<<”实现字符串链接
本示例,使用M228调用输出元素子程序(WRITE_DATA.SPF),M229调用初始化记录程序(WRITE_RESET.SPF),首次调用M228,将在指定目录建立当前日期为名字的CVS文件,如20210531.CSV,输出表头元素,并输出指定元素。当日再次执行M228指令,将会将输出元素值按行的形式写入当日的CSV文件中,当执行WRITE_DATA.SPF时,程序判断记录的日期与实际日期不一致,将会创建新的当日日期CSV文件。
M229将会初始化记录日期的变量值。
以下为本示例的实现过程:
建立两个通道GUD变量,用于存储CSV文件中的元素行号,及日期变量,定义后生效GUD变量
DEF CHAN INT _OUTNO=1 ;表格内的No. 序号变量
DEF CHAN INT _DATE_CHK=0 ;日期存储变量,每次执行后更新,下一次运行时进行日期对比,判断是否建立新的日期文件
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
_DATE_CHK=0 ;初始化日期变量
M17
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
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 |
1. SINUMERIK 840D sl/ 828D 工作准备部分, 08/2018
Cao Peng
2021.5.31
版本 | 日期 | 修改内容 |
V1.0 | 2021.5.31 | |