Size: a a a

2020 April 14

В

Витька Корнеев in ru_ASUTP
соответственно имеет смысл накопить буфер, а потом его скидывать в файл
источник

АБ

Александр Бурмистров in ru_ASUTP
Konstantin Wilhelm
Господа наСИльники, а посоветуйте сишный тулчейн для венды. Я поставил себе ПлатформИО и пописываю для МК, но так как в сях не гуру, а не в каждом семействе МК есть полноценная отладка, хотелось бы иметь возможность проверять алгоритм на консольной проге под вендой, там отладчиком побегать или просто значения а консоль вывести
https://codeblocks.org/
Использую много лет, одновременно и на Винде, и на Линуксе. Чудесная программа.
источник

АБ

Александр Бурмистров in ru_ASUTP
codeblocks-20.03mingw-setup.exe - установщик вместе с компилятором MinGW
источник

NV

Nikita Vasilevsky in ru_ASUTP
Z-Vladimir
Функция открытия файла выполняется асинхронно. Пока она вернет какой-то результат, основная программа выполнит несколько циклов. Нужно это учитывать.
а если использовать синхронную SysDir и SisFile?
они - я так понимаю - синхронные, как раз таки.
источник

АБ

Александр Бурмистров in ru_ASUTP
источник

KW

Konstantin Wilhelm in ru_ASUTP
Да я уже поженил VS Code из венды и GCC под дебианом в WSL. Мне пока за глаза хватает
источник

NV

Nikita Vasilevsky in ru_ASUTP
спасибо, изучу.
пока непонятно, что это)
источник

Z

Z-Vladimir in ru_ASUTP
Nikita Vasilevsky
а если использовать синхронную SysDir и SisFile?
они - я так понимаю - синхронные, как раз таки.
Работа с файлами не может быть синхронной, это остановит выполнение программы. А для плк это критично, вылетит с ошибкой по сторожевому таймеру.
источник

АБ

Александр Бурмистров in ru_ASUTP
Nikita Vasilevsky
спасибо, изучу.
пока непонятно, что это)
источник

NV

Nikita Vasilevsky in ru_ASUTP
Z-Vladimir
Работа с файлами не может быть синхронной, это остановит выполнение программы. А для плк это критично, вылетит с ошибкой по сторожевому таймеру.
я сначала сделал копирование файла из одной директории в другую в виде функции при помощи SysFile.Copy.
и всё работало. файл копировался.

но так как нужна была сигнализация того, что, например, копирование удалось или нет,
то пришлось отказаться от SysFile и вообще от формирования в виде функции.

теперь пришлось сделать в виде программы.

вот я и думаю, как теперь всё это организовать.

и вроде все уже примеры просмотрел.
один в один сделал.

но видимо задачу не так нужно оформлять, не по событию.
источник

Z

Z-Vladimir in ru_ASUTP
Nikita Vasilevsky
я сначала сделал копирование файла из одной директории в другую в виде функции при помощи SysFile.Copy.
и всё работало. файл копировался.

но так как нужна была сигнализация того, что, например, копирование удалось или нет,
то пришлось отказаться от SysFile и вообще от формирования в виде функции.

теперь пришлось сделать в виде программы.

вот я и думаю, как теперь всё это организовать.

и вроде все уже примеры просмотрел.
один в один сделал.

но видимо задачу не так нужно оформлять, не по событию.
Каким образом обнуляется переменная, по которой запускается функциональный блок?
источник

Z

Z-Vladimir in ru_ASUTP
Если в нее записывается TRUE с кнопки, а переход в состояние FALSE от чего происходит?
источник

NV

Nikita Vasilevsky in ru_ASUTP
true с кнопки записывается в переменную, которая запускает вообще всю программу.

а переменная, которая запускает функциональный блок по открытию директории обнуляется при условии, что он открылся.

1:  file.DirOpen(
 sDirName := source_dir,
 xExecute := TRUE);
 
 IF file.DirOpen.xDone THEN
   hDir := file.DirOpen.hDir;
   file.DirOpen.xExecute := FALSE;
   iState := 2;
 ELSIF file.DirOpen.xError THEN
   iState := 6;  
 END_IF
источник

Z

Z-Vladimir in ru_ASUTP
Nikita Vasilevsky
true с кнопки записывается в переменную, которая запускает вообще всю программу.

а переменная, которая запускает функциональный блок по открытию директории обнуляется при условии, что он открылся.

1:  file.DirOpen(
 sDirName := source_dir,
 xExecute := TRUE);
 
 IF file.DirOpen.xDone THEN
   hDir := file.DirOpen.hDir;
   file.DirOpen.xExecute := FALSE;
   iState := 2;
 ELSIF file.DirOpen.xError THEN
   iState := 6;  
 END_IF
Ладно, а переменная которая запускает всю программу как сбрасывается?
источник

NV

Nikita Vasilevsky in ru_ASUTP
в самом последнем шаге CASE OF.
источник

Z

Z-Vladimir in ru_ASUTP
Nikita Vasilevsky
в самом последнем шаге CASE OF.
Программа выполняет последний шаг только когда копирование даст результат? Понятнее было бы если скриншоты запуска и программы приложите
источник

NV

Nikita Vasilevsky in ru_ASUTP
источник

Z

Z-Vladimir in ru_ASUTP
startPrg.Q только в 9й строчке в FALSE переходит?
источник

NV

Nikita Vasilevsky in ru_ASUTP
вообще в последнем шаге CASE OF тоже переходит в false
источник

NV

Nikita Vasilevsky in ru_ASUTP
IF taskSaveTrendsToUSB THEN
 dirstat.xExecute := FALSE;
 filecp.xExecute := FALSE;
 diropn.xExecute := FALSE;
 dircls.xExecute := FALSE;
 startPrg(CLK := taskSaveTrendsToUSB);
END_IF

IF startPrg.Q THEN
 iState:=1;
ELSE
 taskSaveTrendsToUSB := FALSE;
 startPrg(CLK:=FALSE);
 iState:=0;
end_if

CASE iState OF
0: // waiting

1:  diropn(
 sDirName := source_dir,
 xExecute := TRUE);
 
 IF diropn.xDone THEN
   hDir := diropn.hDir;
   diropn.xExecute := FALSE;
   iState := 2;
 ELSIF diropn.xError THEN
   iState := 6;  
 END_IF
 
2:  dirstat(
   hDir := hDir,
   xExecute := TRUE);
 
 IF dirstat.xDone AND dirstat.eError = file.ERROR.NO_ERROR THEN
   iState := 3;
 ELSIF dirstat.xError THEN
   iState := 6;  
 END_IF
 
3:  filecp(
   sFileNameDest := SD_path,
   sFileNameSource := source_path,
   xOverWrite := TRUE );
   filecp.xExecute := TRUE;

  IF filecp.xDone THEN
      dircls(
     hDir := hDir,
     xExecute:=TRUE);
   IF dircls.xDone THEN
     iState := 4;
   ELSIF dircls.xError THEN
     iState := 5;  
   END_IF
   filecp(xExecute := FALSE);
 ELSIF filecp.xError THEN
   iState := 5;
 END_IF

4:  GVL.save_done := TRUE;
 GVL.flash_err := FALSE;
 GVL.copy_err := FALSE;
 umount();
 iState:= 7;
 
5:  GVL.copy_err := TRUE;
 GVL.flash_err := FALSE;
 GVL.save_done := FALSE;
 iState:= 7;
 
6:  GVL.flash_err := TRUE;
 GVL.save_done := FALSE;
 GVL.copy_err := FALSE;
 iState:= 7;

7: taskSaveTrendsToUSB := FALSE;
  startPrg(CLK:= FALSE);
  iState:=0;
  filecp(xExecute := FALSE);

end_case;
источник