NJ/NX将数据写入到SD中,保存为CSV文件格式
实验时间:2022.10.31
实验人员:钱少青
实验器材:NJ501-1300(Ver:1.12),HMC-SD291(2G),SysmacStudio(ver:1.52)
实验目的:将Byte、Int、Real、String等类型的数据写到SD卡,保存为CSV文件可在Excel中打开
实验步骤:
1. 编码与解码
当发送的是字符串的数组时,PLC默认是以UTF-8编码后将对应的16进制数写入到文件中。如果发送的是Byte、Int、Real等数字类的数据时,会直接将其16进制写入到文件中,这个过程不存在编码码的问题。但是在电脑中使用软件打开时显示的均为文本格式,软件会根据设定的编码格式对文件中的16进制数据进行解码。比如Byte类型的1122写入到文件后仍然是1122,但是软件用UTF-8或者其他编码类型解码时,1122可能显示就是乱码。
在使用Excel打开时,默认的解码方式为ASNI。如果写入的字符串是ASCII码表中可以查到的,那么常用的编码类型都可以直接解码。如果是汉字等字符,需要先将文件的编码类型改为ASNI后才能正常显示,否则是乱码。
在本次实验中为了解决数字类数据直接写到CSV文件中显示乱码的问题,在PLC先将数字类的数据全都转换为字符串的格式表示,这样在Excel中显示时就不会出现乱码的情况。
2. 本次实验主要包含两个部分:
-
SD卡写入指令FileWriteVar的基本使用
- 保存路径的指定;
- 是否需要覆盖已经存在的文件;
-
将Byte、Int、Real等数字型数据转换为字符串格式才能在Excel中显示,String类型不需要
- 先用** _TO_STRING指令将数字类型转换为字符串类型;
- 再用insert指令将字符串拼接为CSV文件需要的格式;
- 单元格之间用英文的逗号“,”隔开;
- 换行用回车、换行(0D0A Hex);
程序编写:
本次实验将Byte类型的数组[11, 22, 33, 44, 55, 66, 77, 88] 以2行4列写入到CSV文件中,路径为SD卡的根目录test.csv。
变量表:
程序:OverWrite设置为True,如果文件里有重名的文件将会被覆盖
实验现象:
将写入的数组元素数Length设置为8,每行数据的个数Column设置为4,触发WriteToSDCard_Ex执行SD打卡写入,在SD卡中可以看到生成的test.csv文件,如图:
将文件复制到桌面后打开,显示内容如下:
注意事项:
- PLC发送String类型的数据数据时编码类型为UTF-8,EXCEL打开CSV文件
时默认的格式ANSI,所以需要将SD中的文件编码转换为ANSI。可以先用记事本打开另存为格式选ANSI; - 如果不将数字型的数据转换为字符串发送是没有办法在EXCEL中显示的,可用NotePad++安装HexEditor插件显示十六进制的数据;
- CSV中单元格以英文","逗号隔开,换行用回车换行,转移字符为”$r$l“;