版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6页TC2中自动更换PLC运行程序并重启TC2中自动更换PLC运行程序并重启作者:夏璐杰职务:华东区技术工程师邮箱:lj.xia@日期:2021-08-09摘要:为了方便客户升级TC2中的PLC程序,可以借助功能块“FB_CopeFileToFile”实现程序更换。附件:序号文件名备注历史版本:2021-08-09夏璐杰TC2中自动更换PLC运行程序并重启免责声明:我们已对本文档描述的内容做测试。但是差错在所难免,无法保证绝对正确并完全满足您的使用需求。本文档的内容可能随时更新,如有改动,恕不事先通知,也欢迎您提出改进建议。参考信息:目录1. 软硬件版本 21.1. 倍福Beckhoff 21.1.1. 控制器硬件 21.1.2. 控制软件 22. TC2中Boot文件夹介绍 23. FB_CopeFileToFile功能块介绍 33.1. FB_CopeFileToFile功能块用法 33.2. 功能块FB_FileCopy源代码 44. 测试程序介绍 44.1. 硬件环境 44.2. 软件环境 45. 附录 81.1 功能块FB_CopeFileToFile源代码 14
软硬件版本倍福Beckhoff控制器硬件CX8090EL2008EL2004控制软件笔记本和控制器都是基于TwinCAT2.11Build2307版本TC2中Boot文件夹介绍在倍福控制器中,TwinCAT2的项目文件总是位于“harddisk:\TwinCAT\Boot”或“C:\TwinCAT\Boot”中,所以对于某些控制器无法启动的情况,可以通过清空boot文件夹来实现TwinCAT项目恢复出厂设置,以使控制器恢复至正常状态。对于TwinCAT2的控制器,其Boot文件夹中的内容一般如下其中TCPLC_P_1.wbp为引导程序Bootproject,其为每次TwinCATPLCControl中执行CreateBootProject的时候生成。因此,对于同一套控制器及其外围设备,如果客户想进行程序升级,可以通过更换TCPLC_P_1.wbp来实现。FB_CopeFileToFile功能块介绍FB_CopeFileToFile功能块用法本文档封装了一个自定义功能块“FB_CopeFileToFile”,其功能是把文件夹1中的内容复制至文件夹2中。为了实现TCPLC_P_1.wbp的更换升级,则可以把新程序TCPLC_P_1.wbp放置在harddisk:\TwinCAT\Boot_1LED2s文件中,则当bExecute为true时,会覆盖掉harddisk:\TwinCAT\Boot中旧的TCPLC_P_1.wbp。功能块FB_FileCopy源代码FUNCTION_BLOCKFB_FileCopyVAR_INPUT srcNetId :T_AmsNetId; (*TwinCATnetworkaddressofthesourcefile*) srcFileName :T_MaxString; (*sourcefilepathandname*) destNetId :T_AmsNetId; (*TwinCATnetworkaddressofthedestinationfile*) destFileName :T_MaxString;(*destinationfilepathandname*) bExecute :BOOL; (*risingedgestartfbexecution*) tAdsTimeOut :TIME; (*adstimeout*) bLogActive : BOOL:=FALSE;END_VARVAR_OUTPUT bBusy :BOOL; bError :BOOL; nErrId :UDINT;END_VARVAR fbFileOpen :FB_FileOpen; fbFileClose :FB_FileClose; fbFileRead :FB_FileRead; fbFileWrite :FB_FileWrite; hSrcFile :UINT :=0;(*filehandleofthesourcefile*) hDestFile :UINT :=0;(*filehandleofthedestinationfile*) Step :DWORD; RisingEdge :R_TRIG; buffRead :ARRAY[1..30000]OFBYTE;(*buffer*) cbReadLength :UDINT:=0; cbWriteActLength: UDINT:=0; cnRWCounter: UDINT:=0; OnceMore: BOOL; cnRetryCounter: UDINT;END_VARVARCONSTANT FileIsEmpty: INT:=16#1234;END_VARRisingEdge(CLK:=bExecute);IFRisingEdge.QTHEN IFNOTbBusyTHEN bBusy:=TRUE; bError:=FALSE; nErrId:=0; Step:=1; cbReadLength:=0; hSrcFile:=0; hDestFile:=0; cnRWCounter:=0; cnRetryCounter:=0; END_IFEND_IFCASEStepOF 0: (*donothing*) ; 1: (*opensourcefile*) OnceMore:=FALSE; cnRWCounter:=0; fbFileOpen(bExecute:=FALSE); fbFileOpen( sNetId:=srcNetId, sPathName:=srcFileName, nMode:=FOPEN_MODEREADORFOPEN_MODEBINARY, ePath:=PATH_GENERIC, tTimeout:=tAdsTimeout, bExecute:=TRUE); IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='opensourcefile,step%d',dintArg:=Step);END_IF Step:=Step+1; 2: fbFileOpen(bExecute:=FALSE); IF(NOTfbFileOpen.bBusy)THEN IF(fbFileOpen.bError)THEN nErrId:=fbFileOpen.nErrId; bError:=TRUE; Step:=50; IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:=CONCAT(CONCAT(srcFileName,destFileName),'FileOpenError,ErrorId%d'),dintArg:=nErrId);END_IF ELSE hSrcFile:=fbFileOpen.hFile; IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='getsourcefilehandle,step%d',dintArg:=Step);END_IF Step:=Step+1; END_IF END_IF 3: (*opendestinationfile*) fbFileOpen(bExecute:=FALSE); fbFileOpen( sNetId:=destNetId, sPathName:=destFileName, nMode:=FOPEN_MODEWRITEORFOPEN_MODEBINARY, ePath:=PATH_GENERIC, tTimeout:=tAdsTimeout, bExecute:=TRUE); IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='opendestinationfile,step%d',dintArg:=Step);END_IF Step:=Step+1; 4: fbFileOpen(bExecute:=FALSE); IF(NOTfbFileOpen.bBusy)THEN IF(fbFileOpen.bError)THEN nErrId:=fbFileOpen.nErrId; bError:=TRUE; Step:=50; IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:=CONCAT(CONCAT(srcFileName,destFileName),'FileOpenError,ErrorId%d'),dintArg:=nErrId);END_IF ELSE hDestFile:=fbFileOpen.hFile; IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='getdestinationfilehandle,step%d',dintArg:=Step);END_IF Step:=Step+1; END_IF END_IF 5: (*readdatafromsourcefile*) cbReadLength:=0; fbFileRead(bExecute:=FALSE); fbFileRead( sNetId:=SrcNetId, hFile:=hSrcFile, pReadBuff:=ADR(buffRead), cbReadLen:=SIZEOF(buffRead), bExecute:=TRUE, tTimeout:=tAdsTimeOut); IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='readdatafromsourcefile,step%d',dintArg:=Step);END_IF Step:=Step+1; 6: fbFileRead(bExecute:=FALSE); IF(NOTfbFileRead.bBusy)THEN (*//fbFileRead.bEOF;*) IF(fbFileRead.bError)THEN nErrId:=fbFileRead.nErrId; bError:=TRUE; Step:=50; IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:=CONCAT(CONCAT(srcFileName,destFileName),'FileReadError,ErrorId%d'),dintArg:=nErrId);END_IF ELSE IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='getReadSize,step%d',dintArg:=Step);END_IF cbReadLength:=fbFileRead.cbRead; Step:=Step+1; END_IF END_IF 7: (*writedatatodestinationfile*) fbFileWrite(bExecute:=FALSE); fbFileWrite( sNetId:=DestNetId, hFile:=hDestFile, pWriteBuff:=ADR(buffRead), cbWriteLen:=cbReadLength, bExecute:=TRUE, tTimeout:=tAdsTimeOut); IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='writedatatodestinationfile,step%d',dintArg:=Step);END_IF Step:=Step+1; cnRWCounter:=cnRWCounter+1; 8: fbFileWrite(bExecute:=FALSE); IF(NOTfbFileWrite.bBusy)THEN cbWriteActLength:=fbFileWrite.cbWrite; IF(fbFileWrite.bError)THEN nErrId:=fbFileWrite.nErrId; bError:=TRUE; Step:=50; IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:=CONCAT(CONCAT(srcFileName,destFileName),'FileWriteError,ErrorId%d'),dintArg:=nErrId);END_IF ELSIF(cnRWCounter=1)AND(cbWriteActLength=0)THEN IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_ERROR,msgFmtStr:=CONCAT(CONCAT(CONCAT(CONCAT('Read:',UDINT_TO_STRING(cbReadLength)),'write:'),UDINT_TO_STRING(cbWriteActLength)),'_step%d'),dintArg:=Step);END_IF OnceMore:=TRUE; cnRetryCounter:=cnRetryCounter+1; IFcnRetryCounter>10THEN bError:=TRUE; OnceMore:=FALSE; nErrId:=FileIsEmpty; END_IF Step:=50;(*repeatreading*) ELSE IFfbFileRead.bEOFTHEN(*CheckiftheEOFflagistset*) Step:=50; (*cleanup:closethedestinationandsourcefiles*) IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='CheckiftheEOFflagistset,step%d',dintArg:=Step);END_IF ELSE Step:=5;(*repeatreading*) IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='repeatreading,step%d',dintArg:=Step);END_IF END_IF END_IF END_IF 30: (*closethedestinationfile*) fbFileClose(bExecute:=FALSE); fbFileClose( sNetId:=destNetId, hFile:=hDestFile, bExecute:=TRUE, tTimeout:=tAdsTimeOut); IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='closethedestinationfile,step%d',dintArg:=Step);END_IF Step:=Step+1; 31: fbFileClose(bExecute:=FALSE); IF(NOTfbFileClose.bBusy)THEN IF(fbFileClose.bError)THEN nErrId:=fbFileClose.nErrId; bError:=TRUE; IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:=CONCAT(CONCAT(srcFileName,destFileName),'FileCloseError,ErrorId%d'),dintArg:=nErrId);END_IF END_IF Step:=50; hDestFile:=0; END_IF 40:(*closesourcefile*) fbFileClose(bExecute:=FALSE); fbFileClose( sNetId:=srcNetId, hFile:=hSrcFile, bExecute:=TRUE, tTimeout:=tAdsTimeOut); IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='closesourcefile,step%d',dintArg:=Step);END_IF Step:=Step+1; 41: fbFileClose(bExecute:=FALSE); IF(NOTfbFileClose.bBusy)THEN IF(fbFileClose.bError)THEN nErrId:=fbFileClose.nErrId; bError:=TRUE; IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:=CONCAT(CONCAT(srcFileName,destFileName),'FileCloseError,ErrorId%d'),dintArg:=nErrId);END_IF END_IF Step:=50; hSrcFile:=0; END_IF 50:(*errororready=>cleanup*) IF(hDestFile<>0)THEN Step:=30;(*closethedestinationfile*) ELSIF(hSrcFile<>0)THEN Step:=40;(*closethesourcefile*) ELSE IFOnceMoreTHEN Step:=1; IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='OnceMore!,step%d',dintArg:=Step);END_IF ELSE Step:=0; (*ready*) IFbLogActiveTHENADSLOGDINT(msgCtrlMask:=ADSLOG_MSGTYPE_LOG,msgFmtStr:='Done!,step%d',dintArg:=Step);END_IF bBusy:=FALSE; END_IF END_IFEND_CASE功能块FB_CopeFileToFile源代码FUNCTION_BLOCKFB_CopeFileToFileVAR_INPUT bExecute: BOOL; sSourcePathName: STRING:='HardDisk\TwinCAT\Boot_4LED1s'; sDestinationPathName: STRING:='HardDisk\TwinCAT\boot'; bLogActive: BOOL:=FALSE;END_VARVAR_OUTPUT bBusy: BOOL; bError: BOOL; bDone: BOOL;END_VARVAR nState: INT; fbCreateDir: FB_CreateDir; bOldExecute: BOOL; nCount: INT; nCount2: INT; fileList: ARRAY[1..cnMaxNoOfFiles]OFST_FindFileEntry; fbFindFileList: FB_EnumFindFileList; fbCopyFiles: FB_FileCopy; TonDelay: TON;END_VARVARCONSTANT cnMaxNoOfFiles:INT:=50;END_VARCASEnStateOF0: IFbExecuteANDNOTbBusyTHEN IFNOTbOldExecuteTHEN bBusy:=TRUE; bError:=FALSE; bDone:=FALSE; nState:=30; nCount:=1; nCount2:=1; END_IF END_IF30: (*Updatefilelist *) IFnCount<=cnMaxNoOfFilesTHEN fbFindFileList ( sNetID:='', sPathName:=CONCAT(sSourcePathName,'\*.*'), eCmd:=eEnumCmd_First, pFindList:=ADR(fileList), cbFindList:=SIZEOF(fileList), tTimeout:=t#10s, bExecute:=TRUE ); IFfbFindFileList.bExecuteANDNOTfbFindFileList.bBusyTHEN fbFindFileList(bExecute:=FALSE); fbCopyFiles(srcNetId:='',destNetId:='', tAdsTimeOut:=t#10s); nCount2:=1; nState:=40; END_IF IFfbFindFileList.bErrorTHEN nState:=0; fbFindFileList(bExecute:=FALSE); bBusy:=FALSE; bError:=TRUE; END_IF END_IF40: (*copyeachfilefromsourcetodestinationfolder *) IFfileList[nCount2].sFileName<>''THEN fbCopyFiles.srcFileName:=CONCAT(CONCAT(sSourcePathName,'\'),fileList[nCount2].sFileName); fbCopyFiles.destFileName:=CONCAT(CONCAT(sDestinationPathName,'\'),fileList[nCount2].sFileName); fbCopyFiles(bExecute:=TR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商品监督员跨界整合模拟考核试卷含答案
- 光学数控磨工岗前工作合规考核试卷含答案
- 《数值分析》课程教学大纲
- 2026年中考二轮复习之选择题复习1:《实数》(学生版+教师版合并)
- 机器人关节密封材料:低摩擦、长寿命与小型化驱动机器人关节密封材料升级
- 2026年春招:中学教师题库及答案
- 2026年春招:中国联通面试题及答案
- 【应用方案】2026智慧农业基于作物生长模型的机器人智能管控方案
- 《小海蒂》测试题及答案
- 演唱《丰收之歌》教学设计-2026-2027学年新苏少版(简谱)小学音乐四年级上册
- 劳动课之收拾房间课件
- cnas体系文件考核试题及答案解析(2025版)
- 2025年全国工会系统经审业务技能大赛知识题库及答案
- 肝硬化临床诊治管理指南2025版解读
- 永临结合的专项施工方案与实施
- DB42∕T 1714-2021 湖北省海绵城市规划设计规程
- 颅脑损伤中医护理常规
- 铁路计量标准管理办法
- 财务公司办公室6s管理制度
- JC-T 1099-2023 硫铝酸钙改性硅酸盐水泥
- 财政违法行为处罚处分条例分析
评论
0/150
提交评论