qq群里老被人吊,看不起玩C#的,我只是业余看看下位机,发现汇川PLC是真的香,支持G代码,带的ecat轴数也多。就是新的购买渠道不行。 学习资料还有些欠缺。比如PLC去读取电脑上的G代码文件。每次拷贝下去很麻烦。下面我写个帖子:PLC控制电脑在D盘:打开文件,读写文件,删除文件,关闭文件。
1先看下PLC本地文件的操作:
这种操作简单。缺点是不能读取电脑的文件。
生成的文件在PlcLogic文件夹下
2读取电脑文件:
常用函数库名称:SysFile/SysDir/File Access
1SysFile: 这个库还需要再加载参数类型
sysfile和systype这2个文件必须要装
高级》sysfile 基础文件
双击》再装个systype 基础数据类型
这2文件装好后,就可以准备干活了,来看下函数: ST空白行处》右击》输入助手
1:输出的是结构体,你就当她是对象,潘金莲来了(hFile)。。。
234:这3个是输入参数:2文件路径,3文件操作模式,4错误日志
这里要注意:文件路径不能有反斜杠\ 操作模式要记住名字,一会要用,错误日志是用来判断错误的。
在plc里写ST程序:
// PC端:打开文件
IF key THEN // key是使能,调用方法前加个 阀门key
hFile := SysFileOpen(szFile:='D:/cnc/weixiudiangong.txt' //返回的是文件对象,szFile是文件路径
, am:= ACCESS_MODE.AM_WRITE_PLUS //plus是找不到文件的话,会新建这个文件,再打开
, pResult:= udiopenerror1 // 这个是错误日志,用于判断文件操作是否遇到错误
);
;
ELSE
;
END_IF
// SysFileOpen(szFile:= , am:= , pResult:= )
plc程序和C语言最大的区别就是,plc的函数全往main里面扔,靠bool标志位控制函数是否运行,看下效果:
和预想的一样,在我笔记本D盘新建了,维修电工的文件。
文件操作模式:追加,读,写
2读取文件:
// 中文有bug
IF Test THEN
szTestLine := 'This is the first line.';
hFile := SysFileOpen(szFile:='D:/Test/Test.txt', am:=ACCESS_MODE.AM_WRITE_PLUS, pResult:=ADR(udiOpenError1));
IF hFile <> RTS_INVALID_HANDLE THEN
//udiPosError := SysFileGetPos(hFile:=hFile, pulPos:=ADR(udiPos));
udiWrite := SysFileWrite(hFile:=hFile, pbyBuffer:=ADR(szTestLine),
ulSize:=INT_TO_UDINT(LEN(szTestLine)), pResult:=ADR(udiWriteError1));
udiPosError2 := SysFileSetPos(hFile:=hFile , ulOffset:= 0 );
udiRead := SysFileRead(hFile:=hFile , pbyBuffer:=ADR(szReadLine) , ulSize:=SIZEOF(szReadLine) , pResult:= udiWriteError1);
udiCloseError1 := SysFileClose(hFile:=hFile);
END_IF
Test:=FALSE;
END_IF
PROGRAM PLC_PRG
VAR
szTestLine: STRING(INT#128);
szReadLine: STRING(INT#128);
hFile : RTS_IEC_HANDLE := RTS_INVALID_HANDLE;
udiOpenError1: RTS_IEC_RESULT;
udiPosError: UDINT;
udiPos: __XWORD;
udiWrite: __XWORD;
udiWriteError1: RTS_IEC_RESULT;
udiCloseError1: UDINT;
Test: BOOL;
udiPosError2: UDINT;
udiRead: __XWORD;
udiReadError1: POINTER TO RTS_IEC_RESULT;
END_VAR
解决bug:
// 中文
// 读取文件 电脑D盘 DGcnc文件(电工文件)
IF dk打开文件 THEN
//打开文件 DGcnc文件(电工文件) ACCESS_MODE.AM_READ_PLUS
DGcnc := SysFile.SysFileOpen(szFile:='D:/cnc/DGcnc.txt' , am:=ACCESS_MODE.AM_WRITE_PLUS , pResult:=rz错误日志 );
;
IF DGcnc <> RTS_INVALID_HANDLE THEN // 不是-1时(文件打开成功)
// 读
// SysFile.SysFileRead(hFile:=DGcnc , pbyBuffer:= ADR(rxbuff) , ulSize:=200 , pResult:= rz错误日志 );
// 写
len长度 :=SIZEOF (szTestLine);
szTestLine := '维修电工到此一游!';
SysFile.SysFileWrite(hFile:= DGcnc , pbyBuffer:= ADR( (szTestLine) ), ulSize:=INT_TO_UDINT(LEN(szTestLine)), pResult:= rz错误日志 );
// 写追加
// 删
// 关闭文件
SysFile.SysFileClose(hFile:= DGcnc);
;
ELSE
RETURN;//打开文件失败,退出
END_IF
;
ELSE
;
END_IF
还得编码转换
//=======================================================
am:= ACCESS_MODE控制文件的操作模式:plus是写不了就新建这个文件
高级》file access
双击》再装个cmperrors
双击》再装个sysdir 这个是文件目录管理(视频是这么说的)
双击 SysFile
File Access是同步的,用这个。SysFile是异步的,且不能使用反斜杠。
access需要实例化,sysfile直接拖入就行,资料可能有错,sysfile不能使用反斜杠 \
提示无该变量:添加SysTypes Interfaces函数库,还有CmpErrors,3.3.1.40
旁击
全局变量,没有的话,按提示新建。
//文件路径
wenjian文件路径 : string := 'D:/cnc';
1开始调用库:
空行》右击》输入助手》
双击
函数就出来了
PROGRAM PLC_PRG
VAR
szTestLine: STRING(INT#128);
szReadLine: STRING(INT#128);
hFile : RTS_IEC_HANDLE := RTS_INVALID_HANDLE;
udiOpenError1: RTS_IEC_RESULT;
udiPosError: UDINT;
udiPos: __XWORD;
udiWrite: __XWORD;
udiWriteError1: RTS_IEC_RESULT;
udiCloseError1: UDINT;
Test: BOOL;
udiPosError2: UDINT;
udiRead: __XWORD;
udiReadError1: POINTER TO RTS_IEC_RESULT;
END_VAR
IF Test THEN
szTestLine := 'This is the first line.';
hFile := SysFileOpen(szFile:='D:/Test/Test.txt', am:=ACCESS_MODE.AM_WRITE_PLUS, pResult:=ADR(udiOpenError1));
IF hFile <> RTS_INVALID_HANDLE THEN
//udiPosError := SysFileGetPos(hFile:=hFile, pulPos:=ADR(udiPos));
udiWrite := SysFileWrite(hFile:=hFile, pbyBuffer:=ADR(szTestLine),
ulSize:=INT_TO_UDINT(LEN(szTestLine)), pResult:=ADR(udiWriteError1));
udiPosError2 := SysFileSetPos(hFile:=hFile , ulOffset:= 0 );
udiRead := SysFileRead(hFile:=hFile , pbyBuffer:=ADR(szReadLine) , ulSize:=SIZEOF(szReadLine) , pResult:= udiWriteError1);
udiCloseError1 := SysFileClose(hFile:=hFile);
END_IF
Test:=FALSE;
END_IF
文件操作篇:3、基础内容-文件操作函数 - 中型PLC - 汇川技术官网-水滴社区 - Powered by Discuz!
库核对老出错,多装了库,自己去这网页下载文件。