TwinCAT3读取CSV文件
读取CSV文件的用途
在使用TwinCAT3过程中,假如有些参数需要频繁的修改,或者是根据不同的制程要求设置不同的参数,这时候可以把这些参数放到一个CSV文件中,参数修改后,直接让TwinCAT plc重新读取参数就可以了,很方便。
本示例所使用到的功能块
FB_FileOpen, 用来打开CSV文件。
FB_FileGets, 用来取得CSV文件中的一整行数据。
FB_CSVMemBufferReader,更加数据分割符,把一整行数据解析成更小的数据单元。
FB_FileClose,用来关闭上文中打开的CSV文件。
所使用到的CSV文件
文件存放路径:C:\Temp\Demo.csv
CSV文件内容:
假定有四个参数Parameter1~Parameter4 需要经常调整,现场技术员不需要到plc程序里边,而只需要修改此CSV参数,然后重新读取数据就可以了。
在此,我把第一行Parameter1~Parameter4称为title行。
把100,110,120,132,成为参数行(Parameters)
具体代码
- 变量声明代码块
PROGRAM MAIN
VAR(*Huang HanSheng 2017-03-21*) (* Read CSV file from computer*)fbFileClose: FB_FileClose; fbFileGets: FB_FileGets;fbFileOpen: FB_FileOpen;fbCSVMemBufferReader: FB_CSVMemBufferReader;sCSVField,sCSVLine,tmpString: T_maxstring; fileName:STRING := 'C:\Temp\Demo.csv'; //file directorylineIdx:INT; //lineIdx=0-->Title, lineIdx=1-->ParametersSteps:eSteps; // 自己定义的一个枚举变量bStart: BOOL; strPara: ARRAY[1..4] OF STRING; //输出参数数组 strTitle: ARRAY[1..4] OF STRING; //输出参数Title数组
END_VAR
主程序代码段
DEFAULT_CSV_FIELD_SEP:= 16#2C; //配置CSV文件的分割符,16#2C表明各个参数之间是用逗号分隔的。
IF bStart THEN //bStart是总的开始变量,把bStart置位true,则程序开始读取数据CASE Steps OFStep_Init: //读取CSV文件初始步骤fbFileOpen(bExecute:=FALSE);fbFileClose(bExecute:=FALSE);fbFileGets(bExecute:=FALSE);lineIdx:= 0; Steps:= Step_OpenFile;Step_OpenFile: //FB_FileOpen 用打开csv文件 fbFileOpen(sNetId:='',sPathName:=fileName,nMode:=FOPEN_MODEREAD OR FOPEN_MODETEXT, ePath:=PATH_GENERIC,bExecute:=TRUE,tTimeout:=T#3S,bBusy=> ,bError=>,nErrId=>,hFile=> );IF NOT fbFileOpen.bBusy AND NOT fbFileOpen.bError THEN //确保打开Demo.csv文件正确无错误的情况下执行下一步 Steps:= Step_Getfile;END_IFStep_Getfile: //用FB_FileGets取得文件中的一行数据,并把数据存放到sCSVLine变量中fbFileGets(sNetId:='',hFile:=fbFileOpen.hFile,bExecute:=TRUE,tTimeout:=T#3S,bBusy=> , bError=>,nErrId=> ,sLine=>sCSVLine,bEOF=> );IF NOT fbFileGets.bBusy AND NOT fbFileGets.bError THEN(* FB_FileGets中sCSVLine读取到的数据是以一个换行符'$N'结尾的,但是在FB_CSVMemBufferReader功能块中,需要使用回车换行符'$R$N'来作为一行数据结束的分割符,所以此处为读取的数据添加'$R' 符号*)IF RIGHT(STR:= sCSVLine,SIZE:= 1) = '$N' THENsCSVLine:= REPLACE(STR1:=sCSVLine, STR2:='$r$n',L:=2,P:= LEN(STR:=sCSVLine) ); END_IFfbFileGets(bExecute:=FALSE);//读取一行完成后,就停止执行FB_FileGets功能块IF lineIdx = 0 THEN //此处如果lineIdx=0,则读取Title行Steps:=Step_Title;ELSIF lineIdx=1 THEN 此处如果lineIdx=1,则读取参数行Steps:=Step_Para;END_IFlineIdx:= lineIdx+1;END_IFStep_Title: //读取参数的Title,并用FB_CSVMemBufferReader分解为单个的数据,存入strTitle数组中//--------------------read 1st titlefbCSVMemBufferReader(eCmd:=eEnumCmd_First,pBuffer:=ADR(sCSVLine),cbBuffer:=SIZEOF(sCSVLine)-1, bOk=> ,getValue=>sCSVField, pValue=> ,cbValue=> ,bCRLF=> ,cbRead=> );strTitle[1]:= CSVFIELD_TO_STRING(in:= sCSVField,bQM:= FALSE);//--------------------read 2nd titlefbCSVMemBufferReader(eCmd:=eEnumCmd_Next,pBuffer:=ADR(sCSVLine),cbBuffer:=SIZEOF(sCSVLine)-1, bOk=> ,getValue=>sCSVField, pValue=> ,cbValue=> ,bCRLF=> ,cbRead=> );strTitle[2]:= CSVFIELD_TO_STRING(in:= sCSVField,bQM:= FALSE);//--------------------read 3rd titlefbCSVMemBufferReader(eCmd:=eEnumCmd_Next,pBuffer:=ADR(sCSVLine),cbBuffer:=SIZEOF(sCSVLine)-1, bOk=> ,getValue=>sCSVField, pValue=> ,cbValue=> ,bCRLF=> ,cbRead=> );strTitle[3]:= CSVFIELD_TO_STRING(in:= sCSVField,bQM:= FALSE);//--------------------read 4th titlefbCSVMemBufferReader(eCmd:=eEnumCmd_Next,pBuffer:=ADR(sCSVLine),cbBuffer:=SIZEOF(sCSVLine)-1, bOk=> ,getValue=>sCSVField, pValue=> ,cbValue=> ,bCRLF=> ,cbRead=> );strTitle[4]:= CSVFIELD_TO_STRING(in:= sCSVField,bQM:= FALSE);// 让Step 重回到Step_Getfile,准备读取参数行Steps:= Step_Getfile;Step_Para: //读取参数行,并用FB_CSVMemBufferReader分解为单个的数据,存入strPara中fbCSVMemBufferReader(eCmd:=eEnumCmd_First,pBuffer:=ADR(sCSVLine),cbBuffer:=SIZEOF(sCSVLine)-1, bOk=> ,getValue=>sCSVField, pValue=> ,cbValue=> ,bCRLF=> ,cbRead=> );strPara[1]:= CSVFIELD_TO_STRING(in:= sCSVField,bQM:= FALSE);//--------------------read 2nd parameterfbCSVMemBufferReader(eCmd:=eEnumCmd_Next,pBuffer:=ADR(sCSVLine),cbBuffer:=SIZEOF(sCSVLine)-1, bOk=> ,getValue=>sCSVField, pValue=> ,cbValue=> ,bCRLF=> ,cbRead=> );strPara[2]:= CSVFIELD_TO_STRING(in:= sCSVField,bQM:= FALSE);//--------------------read 3rd parameterfbCSVMemBufferReader(eCmd:=eEnumCmd_Next,pBuffer:=ADR(sCSVLine),cbBuffer:=SIZEOF(sCSVLine)-1, bOk=> ,getValue=>sCSVField, pValue=> ,cbValue=> ,bCRLF=> ,cbRead=> );strPara[3]:= CSVFIELD_TO_STRING(in:= sCSVField,bQM:= FALSE);//--------------------read 4th parameterfbCSVMemBufferReader(eCmd:=eEnumCmd_Next,pBuffer:=ADR(sCSVLine),cbBuffer:=SIZEOF(sCSVLine)-1, bOk=> ,getValue=>sCSVField, pValue=> ,cbValue=> ,bCRLF=> ,cbRead=> );strPara[4]:= CSVFIELD_TO_STRING(in:= sCSVField,bQM:= FALSE);// the steps go to Step_CloseSteps:= Step_Close;Step_Close: //关闭打开的Demo.csv文件fbFileClose(sNetId:='',hFile:=fbFileOpen.hFile,bExecute:=TRUE,tTimeout:=T#3S,bBusy=> , bError=> , nErrId=> );(*Huang HanSheng 2017-03-21*) (* Read CSV file from computer*)
END_CASEEND_IF
Step的定义方法和具体代码:
TYPE eSteps :
(Step_Init := 0,Step_OpenFile:=10,Step_Getfile:=20,Step_Title:= 30,Step_Para:= 35,Step_Close:= 40,Step_Last:= 100
);
END_TYPE
TwinCAT3自带的Visualization功能检查程序
当点击bStart按钮后,就会下边的6个显示框会分别显示读取到的结果。
TwinCAT3读取CSV文件相关推荐
- 【OpenCV】读取csv文件
csv简介 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该文件是一个 ...
- 读取CSV文件内容,将其转换成JSON字符串输出
CsvToJsonUtil 工具类作用:读取CSV文件内容,将其转换成JSON字符串输出 转换工具类代码如下: package com.test.util;import java.io.*; impo ...
- 技术图文:C# VS. Python 读取CSV文件指南
背景 CSV 是一种以逗号进行特征分隔的文本文件类型,在数据库或电子表格中是一种非常常见的导入导出格式.本篇图文就以泰坦尼克号船员获救预测( Kaggle)中使用的数据集为例来说明 C#.Python ...
- python将二维列表内容写入和读取.csv文件
python将列表按行写入至.csv文件 # coding:utf-8 import csv list=[[1,2,3,4],[5,6,7,8],[89,55,66666,5],['张三','李四', ...
- R语言读取CSV文件
#读取CSV文件 data <- read.csv("drugbank.csv", header = FALSE)
- pandas读取csv文件的前几行数据(nrows参数)、pandas读取csv文件的中间几行数据(skiprows=range(a,b))
pandas读取csv文件的前几行数据(nrows参数).pandas读取csv文件的中间几行数据(skiprows=range(a,b)) 目录 pandas读取csv文件的前几行数据.pandas ...
- pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件
pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件 目录
- python读取csv文件并修改指定内容-pandas读取CSV文件时查看修改各列的数据类型格式...
下面给大家介绍下pandas读取CSV文件时查看修改各列的数据类型格式,具体内容如下所述: 我们在调bug的时候会经常查看.修改pandas列数据的数据类型,今天就总结一下: 1.查看: Numpy和 ...
- python读取csv文件的方法-CSV文件在Python中的几种处理方式
Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型.在数据库或电子表格中,它是最常见的导入导出格式,它以一种简单而明了的方式存储和共享数据,CSV文件通常以纯文 ...
最新文章
- 【Qt】菜单栏、工具栏、状态栏、右键菜单的实现
- hung-yi lee_p5-7_Gradient Descent(梯度下降)
- NeurIPS 2020 接收率创史低,千篇论文被摘要拒稿,官方:错误率只有 6%
- python commands模块_python commands模块在python3.x被subprocess取代
- MVC3.0 Razor实现Ajax数据分页
- ITK:将图像粘贴到另一个
- [傅里叶变换及其应用学习笔记] 九. 继续卷积的讨论
- sqlserver 数据库角色成员身份
- spring mvc---controller返回值
- 处女座的期末复习-贪心
- 我的世界光影Java优化_教程/提高帧率 - Minecraft Wiki,最详细的官方我的世界百科...
- oracle ebs 采购入库,ORACLE EBS/ERP 采购库存模块分录
- [开源]免费天气预报接口,提供七天预报(包括省市代码)
- Mac的邮件客户端使用--登录GMail邮箱和QQ邮箱的解决方案
- 高等数学---第一章导数定义的考法
- Python爬虫 Selenium实现自动登录163邮箱和Locating Elements介绍
- Tecplot中用excel表格绘制xy图的一点理解
- 计算二分类的特异性和灵敏度
- 机顶盒ttl无法输入_中兴盒子连接TTL线后无法输入代码、不跑码乱码的解决方法分享...
- 4、木马防范:木马分析检测及常见木马防护工具