PLC读取PC文件(汇川PLC读取电脑上的文件)

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!

库核对老出错,多装了库,自己去这网页下载文件。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值