Как уже упоминалось в комментарии, вам необходимо установить смещение в FUB FileWrite соответственно.
Я обычно делаю это с помощью Guid FileInfo FUB 6eaf42f0-4ce5-44b7-95cb-275ae1c2fac5 в справке AS.Он сообщит вам, если файл уже существует, а также его размер.
Если он существует, следующим шагом будет FileOpen, в противном случае FileCreate.
Недавно я создал небольшой проект наGitLab, который, помимо прочего, также добавляет строку в файл: https://gitlab.com/kirni/bur_robotic_sample/blob/master/bur_robotic_sample/Logical/Libraries/TeachLib/Teach.c
Код написан на C, но я уверен, что вы поняли.
case stTEACH_INFO:
/*setup fub*/
this->fbInfo.enable = 1;
this->fbInfo.pDevice = (UDINT)inst->szDevice;
this->fbInfo.pName = (UDINT)inst->szFile;
this->fbInfo.pInfo = &this->Info;
//call fub
FileInfo(&this->fbInfo);
//fub is done..
if(this->fbInfo.status != ERR_FUB_BUSY)
{
//file exists -> open it and append code
if(this->fbInfo.status == ERR_OK)
{
//start writing to the end of the file
this->Offset = this->Info.size;
//open existing file
this->Step = stTEACH_OPEN;
}
//file does not exist -> create it and insert code
else if(this->fbInfo.status == fiERR_FILE_NOT_FOUND)
{
//start writing at the beginning of the file
this->Offset = this->Info.size;
//crete new file
this->Step = stTEACH_CREATE;
}
//error
else
{
//set error status and goto error state
inst->Status = this->fbInfo.status;
this->Step = stTEACH_ERROR;
}
//disable fub
this->fbInfo.enable = 0;
FileInfo(&this->fbInfo);
}
break;
case stTEACH_CREATE:
/*setup fub*/
this->fbCreate.enable = 1;
this->fbCreate.pDevice = (UDINT)inst->szDevice;
this->fbCreate.pFile = (UDINT)inst->szFile;
//call fub
FileCreate(&this->fbCreate);
//fub is done..
if(this->fbCreate.status != ERR_FUB_BUSY)
{
//success
if(this->fbCreate.status == ERR_OK)
{
this->Ident = this->fbCreate.ident;
//open existing file
this->Step = stTEACH_WRITE;
}
//error
else
{
//set error status and goto error state
inst->Status = this->fbCreate.status;
this->Step = stTEACH_ERROR;
}
//disable fub
this->fbCreate.enable = 0;
FileCreate(&this->fbCreate);
}
break;
case stTEACH_OPEN:
/*setup fub*/
this->fbOpen.enable = 1;
this->fbOpen.pDevice = (UDINT)inst->szDevice;
this->fbOpen.pFile = (UDINT)inst->szFile;
this->fbOpen.mode = fiREAD_WRITE;
//call fub
FileOpen(&this->fbOpen);
//fub is done..
if(this->fbOpen.status != ERR_FUB_BUSY)
{
//success
if(this->fbOpen.status == ERR_OK)
{
this->Ident = this->fbOpen.ident;
//open existing file
this->Step = stTEACH_WRITE;
}
//error
else
{
//set error status and goto error state
inst->Status = this->fbOpen.status;
this->Step = stTEACH_ERROR;
}
//disable fub
this->fbOpen.enable = 0;
FileOpen(&this->fbOpen);
}
break;
case stTEACH_WRITE:
/*setup fub*/
this->fbWrite.enable = 1;
this->fbWrite.ident = this->Ident;
this->fbWrite.offset = this->Offset;
this->fbWrite.pSrc = this->szLine;
this->fbWrite.len = this->Lenght;
//call fub
FileWrite(&this->fbWrite);
//fub is done..
if(this->fbWrite.status != ERR_FUB_BUSY)
{
//success
if(this->fbWrite.status == ERR_OK)
{
this->Ident = this->fbWrite.ident;
//Write existing file
this->Step = stTEACH_CLOSE;
}
//error
else
{
//set error status and goto error state
inst->Status = this->fbWrite.status;
this->Step = stTEACH_ERROR;
}
//disable fub
this->fbWrite.enable = 0;
FileWrite(&this->fbWrite);
}
break;
Однакоэто также должно работать с выводом filelen FileOpen FUB - так, как вы это сделали.Я бы посоветовал установить точку торможения непосредственно перед записью и проверить, правильно ли установлено смещение на FUB.
Я также рекомендовал бы, чтобы вы вызывали каждый FUB после того, как это было сделано, снова с enable: = 0 (как я сделал в моем примере), т.е. отключив его.Некоторые FUB обновляют свои входные параметры только на положительном фронте команды ввода enable, execute, start, и т. Д.
Надеюсь, это поможет!