PDA

Просмотр полной версии : Товарищи Знатоки нужна Ваша помощь



BSA
18.02.2015, 11:38
Не как не могу совладать с библиотекой записи и чтения файлов с ПЛК 100
Решить подкорректировать старый код

PROGRAM HMI_Scada

VAR

Tools_Bathers : Bathers_Tools; (* TYPE STRUCT *)

END_VAR

CASE Number_Current_Screen OF (*Если на шестом экране вызываем прграмму записи в файл,по нажатию Cmd_1.0 записываем данные из панели в Tools_Bathers *)

6,7:
IF Cmd_1.0 (* Кнопка записи настроек на панели*) THEN
Tools_Bathers.Time_Mixing:=Take_Real_For_HMI(Var_o ut:=HMI_Time_Mixing,Discr:=1);
Tools_Bathers.Time_Unloading_Mixer:=Take_Real_For_ HMI(Var_out:=HMI_Time_Unloading_Mixer,Discr:=1);
Tools_Bathers .Volume_Mixer:=Take_Real_For_HMI(Var_out:=HMI_Max_ Volume_Mixer,Discr:=1);
Tools_Bathers.Rest_Inert_Before_Unloading:=Take_Re al_For_HMI(Var_out:=HMI_Rest_Inert_Before_Unloadin g, Discr :=1);
State_Write_Tools_Bather :=TRUE;
END_IF
Write_Tools_Bathers ( Tools_Bathers:= Tools_Bathers);

END_CASE



PROGRAM Write_Tools_Bathers
VAR_INPUT
Tools_Bathers : Bathers_Tools;
END_VAR

VAR
hFile_Tools_Bathers: DWORD; (* Дескриптор файла*)

Adr_File_Tools_Bathers: DWORD; (*возвращает адресс начала файла в байтах.*)

File_Size_Tools_Bathers: DWORD; (* возвращает размер файла в байтах. *)
Write_File_Tools_Bathers : DWORD;
END_VAR

VAR CONSTANT
Name_Tools_Bathers : STRING := 'Tools_Bathers.bin';
END_VAR


IF State_Write_Tools_Bather THEN Status_Writing_Tools_Bathers :=1;
State_Write_Tools_Bather :=FALSE;
END_IF

CASE Status_Writing_Tools_Bathers OF (* Разносимоткрытие запись закрытие по разным циклам*)

1: hFile_Tools_Bathers :=SysFileOpen(Name_Tools_Bathers ,'w'); (* Открываем файл для запси, прверяем дескриптор*)


IF hFile_Tools_Bathers =0 THEN File_Opened_Tools_Bathers :=FALSE;
Error_FIle_Write_Tools_Bathers :=TRUE;
RETURN;
ELSE
File_Opened_Tools_Bathers := TRUE;
Error_FIle_Write_Tools_Bathers :=FALSE;
Adr_File_Tools_Bathers :=ADR( Tools_Bathers);
File_Size_Tools_Bathers :=SIZEOF(Tools_Bathers);
Status_Writing_Tools_Bathers :=Status_Writing_Tools_Bathers +1;
END_IF

2: (* Пишем в Файл*)
Write_File_Tools_Bathers:=SysFileWrite(hFile_Tools _Bathers,Adr_File_Tools_Bathers,File_Size_Tools_Ba thers);

IF Write_File_Tools_Bathers <> SIZEOF(Tools_Bathers) THEN Error_FIle_Write_Tools_Bathers :=TRUE;
ELSE
Error_FIle_Write_Tools_Bathers :=FALSE;
END_IF (* Проверяем запись*)
Status_Writing_Tools_Bathers :=Status_Writing_Tools_Bathers +1;

3: (* Закрываем файл*)
Error_FIle_Write_Tools_Bathers:= Error_FIle_Write_Tools_Bathers OR SysFileClose(hFile_Tools_Bathers);

Status_Writing_Tools_Bathers :=Status_Writing_Tools_Bathers +1;
END_CASE


Почему данные в файл не записываются при нажатии CMD1.0 на панели ИП 320 (кнопка мгновенного действия нажал TRUE отпустил FALSE )
CASE выполняеться Status_Writing_Tools_Bathers принимает значение
4, а Write_File_Tools_Bather всегда 0 не хрена понять не могу уже как не извращался уже думаю может ПЛК 100 глючит уже и прошивку менял Люди добрые скажите что не так !?? блин
вечно у меня с этой библиотекой какие то траблы

Scream
18.02.2015, 14:04
"Почему при нажатии CMD1.0 на панели ИП 320 кнопка мгновенного действия нажал TRUE отпустил FALSE ..."
не совсем так, нажал сработал триггер, а когда отпустил там ее уже не имеет значения.

BSA
18.02.2015, 14:47
Т.е если переменную Cmd_1.0 заменить передним фронтом триггера это решит проблему записи в файл? .Не получается!

Scream
18.02.2015, 15:29
Т.е если переменную Cmd_1.0 заменить передним фронтом триггера это решит проблему записи в файл? .Не получается!

Не знаю, я код не читал уж много его, просто уточнил как работает ип320. Ни одного комментария.
Тем более что за библиотека, что за код, что за программа, что делает...... магия. А правильно поставленный вопрос.......


"File_Size_Tools_Bathers :=SIZEOF(Tools_Bathers); (" что за скобка и что делает?

BSA
18.02.2015, 19:04
Да я уже сам не знаю в чем сомневаться я понимаю опыт сын ошибок трудных....... но это издевательство просто
задача то в принципе не сложная записать данные с панели в файл посредством библиотеки SysLibFile где ошибка ума не приложу!!!! может ПЛК поменять??????

Валенок
18.02.2015, 22:12
Да-да. На семена. Вот у них всегда по кнопке пишется в файл без проблем.

Scream
18.02.2015, 22:34
Сделайте заводской сброс и повторите попытку создания и записи файла./
А лучше смените имя файлу и расширение на txt еще попробуйте.

Sergey666
18.02.2015, 23:55
Сделайте заводской сброс и повторите попытку создания и записи файла./
А лучше смените имя файлу и расширение на txt еще попробуйте.

Че за бред!

Т.С по ходу конкурент.
Т.С : Уася, при записи необходимо указывать адрес буфера ... В вашем коде видно только объявление .

capzap
19.02.2015, 05:33
дичайший код, зачем эта приблуда в каждом кейсе статус плюс один, просто обычное присвоение на какой кейс уйти не достаточно? зачем совершать бесмысленные арифметические операции. и что за страсть запускать программу в программе,да еще и с входными пеоеменными
и послеэпрошивки таргеты переустанавливали?

Scream
19.02.2015, 10:18
Че за бред!

Т.С по ходу конкурент.
Т.С : Уася, при записи необходимо указывать адрес буфера ... В вашем коде видно только объявление .

Давайка серёжка, обоснуйте своё "Че". С какого момента вы поняли что это бред? Аргументы?

BSA
19.02.2015, 12:52
зачем эта приблуда в каждом кейсе статус плюс один, просто обычное присвоение на какой кейс уйти не достаточно?
Полностью с Вами согласен код писался года полтора назад и это уже модернизированная версия в старой было значительно дичайше все было как то прикручено так на время но был реализован и SFC и работал причем со многими странностями. Но
есть стремление к правильному коду чтоб через полтора года смотря на старый свой код не задаваться мыслями как это может вообще работать Исходя из этого решил код перебрать больше нравиться ST
Замечание учтено и в статусе чисто присваиваю значение +1.Хотя
и даже при лишних манипуляциях при данном алгоритме данные в файл писаться должны.
И так начилась ночь с оккультными танцами с бубном и дальнейшей модернизации кода и вот результат на утро:
При вставленном кабеле прошивки со стороны разъема Debug 232 и не подключенном со второго конца ( при танцах с бубном просто запарился и не вынул и 232 разъема) ПЛК напрочь нечего не хотел писать в файл.
Результат выложенный в ST код так и не заработал
Переписанный SFC код дал результат от что было сделано:
От CASE отказался , в первом шаге SFC открываем файл проверяем дескриптор если <>0 переходим на шаг вниз иначе RETURN.
Во втором шаге при входе State_Write_Tools_Bather сбрасываем в FALSE в самом шаге получаем адрес начала файла в байтах и размер файла в байтах.
пишем данные файл на всякий пожарный даем время для записи находясь в данном шаге Status_Writing_Tools_Bathers :=Status_Writing_Tools_Bathers +1 пока Status_Writing_Tools_Bathers не станет =10
как только Status_Writing_Tools_Bathers =10 переходим на шаг ниже.
В третьем шаге входным действием Status_Writing_Tools_Bathers =0
в самом шаге закрываем файл находясь в данном шаге Status_Writing_Tools_Bathers :=Status_Writing_Tools_Bathers +1 пока Status_Writing_Tools_Bathers не станет =10 все равно каке -то уловие перехода нужно
как только Status_Writing_Tools_Bathers =10 возращаемся на начальный шаг сбрасываем Status_Writing_Tools_Bathers =0 стоим тут пока State_Write_Tools_Bather не станет TRUE и переходим на шаг ниже и т.д
В общем результат есть получалось сделать две независимые идентичные программы записи данных в разные файлы и две независимые идентичные программы чтения их них
И то чтоб был результат после каждого создания программ чтения записи в файл приходилось прошивать ПЛК результат появлялся только после прошивки . Точно магия какая то и это пугает!! Наверное что-то не доброе с ПЛК. Таргеты не переустанавливал.
Все же вопрос почему ????? аналогичный код за исключением того что он разнесен по шагам в SFC работает а в ST нет , и данный вопрос не дает покоя не откатываться же от ST и писать только в SFC если в нем код работает а в ST нет.
Многие шарахаются от ПЛК Овен , многие говорят зачем тебе эти танцы с бубном. Мое мнение что большей степени
основным признаком является правильность и грамотность кода к чему и стремлюсь чем странности оборудование.


P.S Но все равно плк Овен я не брошу для меня он в принципе хороший.
А еще есть действительно хороший а главное рабочий форум где есть хорошие и отзывчивые люди готовы дать дельный совет !

BSA
19.02.2015, 12:58
и что за страсть запускать программу в программе,да еще и с входными переменными
Программу записи и чтения планирую объявить в менеджере задач но не знаю пока чем это лучше ,
и почему входные переменные это плохо?
Дичайш-сть обусловлено только инкрементом Status_Writing_Tools_Bathers и запускать программу в программе,да еще и с входными переменными ?
Интересна Ваше мнение !

capzap
19.02.2015, 18:12
дичайший, потому что на запись у меня уходит вот сколько строчек текста
IF save<>0 THEN (* если пришла команда записать данные *)
hFile:=SysFileOpen('rcpt.bin', 'w'); (* получение дескриптора файла *)
IF hFile>0 THEN (* если файл существует *)
IF SysFileWrite(hFile, ADR(reception), 224) <> 0 THEN (* записать в файл данные *)
SysFileClose(hFile);
END_IF;
END_IF;
save:=0;
END_IF;
а что такое rcpt.bin это вот отсюда http://www.owen.ru/forum/showthread.php?t=14918&p=109415&viewfull=1#post109415

BSA
19.02.2015, 19:02
Лаконично... и даже можно не вычислять размер файла для записи можно указать просто числом, тогда как угадать размер не узнав его через SIZEOF ?

capzap
19.02.2015, 19:18
Лаконично... и даже можно не вычислять размер файла для записи можно указать просто числом, тогда как угадать размер не узнав его через SIZEOF ?
я сам написал структуру рецептов, так почему мне не знать сколько она занимает места, для этого один раз во время отладки можно выполнить sizeof чтоб узнать сколько будет всего байт
PS я же дал ссылку, где этот бин читаю и ложу в структуру, в которую во время работы с панели можно внести изменения и по событию записать в этот же файл, значение переменных на размер структуры не влияет