--这个版本有个问题,第9号索引的配方不能被初始化.

_ENCRYPT_=0    --LUA脚本加密

--数据类型定义
VT_LW = 1    --变量地址
VT_RW = 2    --FLASH存储
VT_0x = 10   --线圈
VT_1x = 11   --输入点
VT_3x = 12   --输入寄存器
VT_4x = 13   --保持寄存器

local cur_screen ={                 --画面ID
    No0  = 0,
    No1  = 1,
}
local s_timer = 0  --初始化定时器计数变量
local timer_running = false  --记录定时器状态
local MAX_RECIPE_COUNT = 11  --总配方数量（0-9共10组）
local last_lw1008 = 0  --记录上一次LW1008的值，用于检测上升沿
local timer_20_running = false -- 定时器 20 是否运行
local last_auto_run_state = 0    -- 记录 D130 上一次的值
local cleared_flag = false       -- 标记：本次停止后是否已经清零过 RW3D

-- 合并定时器回调函数
function on_timer(timer_id)
--
	 if timer_id == 20 then
        local rw3d = get_uint32(VT_RW, 0x3D)
        set_uint32(VT_RW, 0x3D, rw3d + 1)
	end

--
	if timer_id == 15 then
		if get_bit(VT_0x,0x7D0)==1 then
			set_bit(VT_0x,0x7D0,0)
		end
	end

	if  timer_id== 9 then --1.5秒后如果702B还是1就复位
		set_uint16(VT_LW,0x702B,0)
	end



	----timer_id 6复位保存配方中间按钮LW1114值
	 if timer_id == 6 then
	 	if get_uint16(VT_LW,0x1114) >0 then
			set_uint16(VT_LW,0x1114,0)
		end
	end
	-----



    -- 定时器1：冷阱预冷完成逻辑
    if timer_id == 1 then
        if get_uint16(VT_LW, 0x900) == 1 then
            set_uint16(VT_LW, 0x901, 1)  --显示预冷完成，准备进料
        else
            set_uint16(VT_LW, 0x901, 0)  --不显示
        end
    end

    -- 定时器2：配方加载计数逻辑
    if timer_id == 2 then
        -- 确保不超过最大值
        if s_timer < MAX_RECIPE_COUNT then
            s_timer = s_timer + 1
            set_uint16(VT_RW, 0x28, s_timer)
        else
            -- 达到最大值时停止定时器
            stop_timer(2)
            timer_running = false
            set_uint16(VT_LW, 0x1008, 0)  --配方加载完成后，LW1008置0
        end
    end

end

--配方0参数设置
local function set_recipe_0()
	set_string(VT_RW,0X6000, "Chicken Diced")
    set_int16(VT_LW,	0x7001	,	-500 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7002	,	-250 	)	--	干燥温度1
	set_int16(VT_LW,	0x7003	,	-50 	)	--	干燥温度2
	set_int16(VT_LW,	0x7004	,	300 	)	--	干燥温度3
	set_int16(VT_LW,	0x7005	,	450 	)	--	干燥温度4
	set_int16(VT_LW,	0x7006	,	0 	)	--	干燥温度5
	set_int16(VT_LW,	0x7007	,	0 	)	--	干燥温度6
	set_int16(VT_LW,	0x7008	,	0 	)	--	干燥温度7
	set_int16(VT_LW,	0x7009	,	450 	)	--	保持段温度
	set_int16(VT_LW,	0x700A	,	0 	)	--	预冻斜坡时间
	set_int16(VT_LW,	0x700B	,	60 	)	--	干燥1斜坡时间
	set_int16(VT_LW,	0x700C	,	180 	)	--	干燥2斜坡时间
	set_int16(VT_LW,	0x700D	,	180 	)	--	干燥3斜坡时间
	set_int16(VT_LW,	0x700E	,	60 	)	--	干燥4斜坡时间
	set_int16(VT_LW,	0x700F	,	0 	)	--	干燥5斜坡时间
	set_int16(VT_LW,	0x7010	,	0 	)	--	干燥6斜坡时间
	set_int16(VT_LW,	0x7011	,	0 	)	--	干燥7斜坡时间
	set_int16(VT_LW,	0x7012	,	0 	)	--	保持段斜坡时间
	set_int16(VT_LW,	0x7013	,	300 	)	--	预冻保持时间
	set_int16(VT_LW,	0x7014	,	180 	)	--	干燥1保持时间
	set_int16(VT_LW,	0x7015	,	240 	)	--	干燥2保持时间
	set_int16(VT_LW,	0x7016	,	180 	)	--	干燥3保持时间
	set_int16(VT_LW,	0x7017	,	120 	)	--	干燥4保持时间
	set_int16(VT_LW,	0x7018	,	0 	)	--	干燥5保持时间
	set_int16(VT_LW,	0x7019	,	0 	)	--	干燥6保持时间
	set_int16(VT_LW,	0X701A	,	0 	)	--	干燥7保持时间
	set_int16(VT_LW,	0X701B	,	9999 	)	--	保持段保持时间
	set_int16(VT_LW,	0X701C	,	0 	)	--	预冻设定真空
	set_int16(VT_LW,	0X701D	,	800 	)	--	干燥1设定真空
	set_int16(VT_LW,	0X701E	,	800 	)	--	干燥2设定真空
	set_int16(VT_LW,	0X701F	,	800 	)	--	干燥3设定真空
	set_int16(VT_LW,	0X7020	,	800 	)	--	干燥4设定真空
	set_int16(VT_LW,	0X7021	,	800 	)	--	干燥5设定真空
	set_int16(VT_LW,	0X7022	,	800 	)	--	干燥6设定真空
	set_int16(VT_LW,	0X7023	,	800 	)	--	干燥7设定真空
	set_int16(VT_LW,	0X7024	,	800 	)	--	保持段设定真空
	set_int16(VT_LW,	0X7025	,	-300 	)	--	预冻完成温度
	set_int16(VT_LW,	0X7026	,	60 	)	--	预冻到达温度持续时间
	set_int16(VT_LW,	0X7028	,	1 	)	--	启用预冻完成温度功能
	set_int16(VT_LW,	0x7027	,	0 	)  --运行中的配方索引会写入到plc的0x292(d658)
	set_int16(VT_LW,	0X702B	,	2 	)	--	设定后保存配方
end

--配方1参数设置
local function set_recipe_1()
	set_string(VT_RW,0X6008, "Beef Lerky")
    set_int16(VT_LW,	0x7001	,	-510 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7002	,	-250 	)	--	干燥温度1
	set_int16(VT_LW,	0x7003	,	-50 	)	--	干燥温度2
	set_int16(VT_LW,	0x7004	,	300 	)	--	干燥温度3
	set_int16(VT_LW,	0x7005	,	450 	)	--	干燥温度4
	set_int16(VT_LW,	0x7006	,	0 	)	--	干燥温度5
	set_int16(VT_LW,	0x7007	,	0 	)	--	干燥温度6
	set_int16(VT_LW,	0x7008	,	0 	)	--	干燥温度7
	set_int16(VT_LW,	0x7009	,	450 	)	--	保持段温度
	set_int16(VT_LW,	0x700A	,	0 	)	--	预冻斜坡时间
	set_int16(VT_LW,	0x700B	,	60 	)	--	干燥1斜坡时间
	set_int16(VT_LW,	0x700C	,	180 	)	--	干燥2斜坡时间
	set_int16(VT_LW,	0x700D	,	180 	)	--	干燥3斜坡时间
	set_int16(VT_LW,	0x700E	,	60 	)	--	干燥4斜坡时间
	set_int16(VT_LW,	0x700F	,	0 	)	--	干燥5斜坡时间
	set_int16(VT_LW,	0x7010	,	0 	)	--	干燥6斜坡时间
	set_int16(VT_LW,	0x7011	,	0 	)	--	干燥7斜坡时间
	set_int16(VT_LW,	0x7012	,	0 	)	--	保持段斜坡时间
	set_int16(VT_LW,	0x7013	,	300 	)	--	预冻保持时间
	set_int16(VT_LW,	0x7014	,	180 	)	--	干燥1保持时间
	set_int16(VT_LW,	0x7015	,	240 	)	--	干燥2保持时间
	set_int16(VT_LW,	0x7016	,	180 	)	--	干燥3保持时间
	set_int16(VT_LW,	0x7017	,	120 	)	--	干燥4保持时间
	set_int16(VT_LW,	0x7018	,	0 	)	--	干燥5保持时间
	set_int16(VT_LW,	0x7019	,	0 	)	--	干燥6保持时间
	set_int16(VT_LW,	0X701A	,	0 	)	--	干燥7保持时间
	set_int16(VT_LW,	0X701B	,	9999 	)	--	保持段保持时间
	set_int16(VT_LW,	0X701C	,	0 	)	--	预冻设定真空
	set_int16(VT_LW,	0X701D	,	800 	)	--	干燥1设定真空
	set_int16(VT_LW,	0X701E	,	800 	)	--	干燥2设定真空
	set_int16(VT_LW,	0X701F	,	800 	)	--	干燥3设定真空
	set_int16(VT_LW,	0X7020	,	800 	)	--	干燥4设定真空
	set_int16(VT_LW,	0X7021	,	800 	)	--	干燥5设定真空
	set_int16(VT_LW,	0X7022	,	800 	)	--	干燥6设定真空
	set_int16(VT_LW,	0X7023	,	800 	)	--	干燥7设定真空
	set_int16(VT_LW,	0X7024	,	800 	)	--	保持段设定真空
	set_int16(VT_LW,	0X7025	,	-300 	)	--	预冻完成温度
	set_int16(VT_LW,	0X7026	,	60 	)	--	预冻到达温度持续时间
	set_int16(VT_LW,	0X7028	,	1 	)	--	启用预冻完成温度功能
	set_int16(VT_LW,	0x7027	,	1 	)  --运行中的配方索引会写入到plc的0x292(d658)
	set_int16(VT_LW,	0X702B	,	2 	)	--	设定后保存配方
end

--配方2参数设置
local function set_recipe_2()
	set_string(VT_RW,0X6010, "Grilled Fish")
    set_int16(VT_LW,	0x7001	,	-520 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7002	,	-250 	)	--	干燥温度1
	set_int16(VT_LW,	0x7003	,	-50 	)	--	干燥温度2
	set_int16(VT_LW,	0x7004	,	300 	)	--	干燥温度3
	set_int16(VT_LW,	0x7005	,	450 	)	--	干燥温度4
	set_int16(VT_LW,	0x7006	,	0 	)	--	干燥温度5
	set_int16(VT_LW,	0x7007	,	0 	)	--	干燥温度6
	set_int16(VT_LW,	0x7008	,	0 	)	--	干燥温度7
	set_int16(VT_LW,	0x7009	,	450 	)	--	保持段温度
	set_int16(VT_LW,	0x700A	,	0 	)	--	预冻斜坡时间
	set_int16(VT_LW,	0x700B	,	60 	)	--	干燥1斜坡时间
	set_int16(VT_LW,	0x700C	,	180 	)	--	干燥2斜坡时间
	set_int16(VT_LW,	0x700D	,	180 	)	--	干燥3斜坡时间
	set_int16(VT_LW,	0x700E	,	60 	)	--	干燥4斜坡时间
	set_int16(VT_LW,	0x700F	,	0 	)	--	干燥5斜坡时间
	set_int16(VT_LW,	0x7010	,	0 	)	--	干燥6斜坡时间
	set_int16(VT_LW,	0x7011	,	0 	)	--	干燥7斜坡时间
	set_int16(VT_LW,	0x7012	,	0 	)	--	保持段斜坡时间
	set_int16(VT_LW,	0x7013	,	300 	)	--	预冻保持时间
	set_int16(VT_LW,	0x7014	,	180 	)	--	干燥1保持时间
	set_int16(VT_LW,	0x7015	,	240 	)	--	干燥2保持时间
	set_int16(VT_LW,	0x7016	,	180 	)	--	干燥3保持时间
	set_int16(VT_LW,	0x7017	,	120 	)	--	干燥4保持时间
	set_int16(VT_LW,	0x7018	,	0 	)	--	干燥5保持时间
	set_int16(VT_LW,	0x7019	,	0 	)	--	干燥6保持时间
	set_int16(VT_LW,	0X701A	,	0 	)	--	干燥7保持时间
	set_int16(VT_LW,	0X701B	,	9999 	)	--	保持段保持时间
	set_int16(VT_LW,	0X701C	,	0 	)	--	预冻设定真空
	set_int16(VT_LW,	0X701D	,	800 	)	--	干燥1设定真空
	set_int16(VT_LW,	0X701E	,	800 	)	--	干燥2设定真空
	set_int16(VT_LW,	0X701F	,	800 	)	--	干燥3设定真空
	set_int16(VT_LW,	0X7020	,	800 	)	--	干燥4设定真空
	set_int16(VT_LW,	0X7021	,	800 	)	--	干燥5设定真空
	set_int16(VT_LW,	0X7022	,	800 	)	--	干燥6设定真空
	set_int16(VT_LW,	0X7023	,	800 	)	--	干燥7设定真空
	set_int16(VT_LW,	0X7024	,	800 	)	--	保持段设定真空
	set_int16(VT_LW,	0X7025	,	-300 	)	--	预冻完成温度
	set_int16(VT_LW,	0X7026	,	60 	)	--	预冻到达温度持续时间
	set_int16(VT_LW,	0X7028	,	1 	)	--	启用预冻完成温度功能
	set_int16(VT_LW,	0x7027	,	2 	)  --运行中的配方索引会写入到plc的0x292(d658)
	set_int16(VT_LW,	0X702B	,	2 	)	--	设定后保存配方
end

--配方3参数设置
local function set_recipe_3()
	set_string(VT_RW,0X6018, "steak")
    set_int16(VT_LW,	0x7001	,	-530 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7002	,	-250 	)	--	干燥温度1
	set_int16(VT_LW,	0x7003	,	-50 	)	--	干燥温度2
	set_int16(VT_LW,	0x7004	,	300 	)	--	干燥温度3
	set_int16(VT_LW,	0x7005	,	450 	)	--	干燥温度4
	set_int16(VT_LW,	0x7006	,	0 	)	--	干燥温度5
	set_int16(VT_LW,	0x7007	,	0 	)	--	干燥温度6
	set_int16(VT_LW,	0x7008	,	0 	)	--	干燥温度7
	set_int16(VT_LW,	0x7009	,	450 	)	--	保持段温度
	set_int16(VT_LW,	0x700A	,	0 	)	--	预冻斜坡时间
	set_int16(VT_LW,	0x700B	,	60 	)	--	干燥1斜坡时间
	set_int16(VT_LW,	0x700C	,	180 	)	--	干燥2斜坡时间
	set_int16(VT_LW,	0x700D	,	180 	)	--	干燥3斜坡时间
	set_int16(VT_LW,	0x700E	,	60 	)	--	干燥4斜坡时间
	set_int16(VT_LW,	0x700F	,	0 	)	--	干燥5斜坡时间
	set_int16(VT_LW,	0x7010	,	0 	)	--	干燥6斜坡时间
	set_int16(VT_LW,	0x7011	,	0 	)	--	干燥7斜坡时间
	set_int16(VT_LW,	0x7012	,	0 	)	--	保持段斜坡时间
	set_int16(VT_LW,	0x7013	,	300 	)	--	预冻保持时间
	set_int16(VT_LW,	0x7014	,	180 	)	--	干燥1保持时间
	set_int16(VT_LW,	0x7015	,	240 	)	--	干燥2保持时间
	set_int16(VT_LW,	0x7016	,	180 	)	--	干燥3保持时间
	set_int16(VT_LW,	0x7017	,	120 	)	--	干燥4保持时间
	set_int16(VT_LW,	0x7018	,	0 	)	--	干燥5保持时间
	set_int16(VT_LW,	0x7019	,	0 	)	--	干燥6保持时间
	set_int16(VT_LW,	0X701A	,	0 	)	--	干燥7保持时间
	set_int16(VT_LW,	0X701B	,	9999 	)	--	保持段保持时间
	set_int16(VT_LW,	0X701C	,	0 	)	--	预冻设定真空
	set_int16(VT_LW,	0X701D	,	800 	)	--	干燥1设定真空
	set_int16(VT_LW,	0X701E	,	800 	)	--	干燥2设定真空
	set_int16(VT_LW,	0X701F	,	800 	)	--	干燥3设定真空
	set_int16(VT_LW,	0X7020	,	800 	)	--	干燥4设定真空
	set_int16(VT_LW,	0X7021	,	800 	)	--	干燥5设定真空
	set_int16(VT_LW,	0X7022	,	800 	)	--	干燥6设定真空
	set_int16(VT_LW,	0X7023	,	800 	)	--	干燥7设定真空
	set_int16(VT_LW,	0X7024	,	800 	)	--	保持段设定真空
	set_int16(VT_LW,	0X7025	,	-300 	)	--	预冻完成温度
	set_int16(VT_LW,	0X7026	,	60 	)	--	预冻到达温度持续时间
	set_int16(VT_LW,	0X7028	,	1 	)	--	启用预冻完成温度功能
	set_int16(VT_LW,	0x7027	,	3 	)  --运行中的配方索引会写入到plc的0x292(d658)
	set_int16(VT_LW,	0X702B	,	2 	)	--	设定后保存配方
end

--配方4参数设置
local function set_recipe_4()
	set_string(VT_RW,0X6020, "milk")
   set_int16(VT_LW,	0x7001	,	-540 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7002	,	-250 	)	--	干燥温度1
	set_int16(VT_LW,	0x7003	,	-50 	)	--	干燥温度2
	set_int16(VT_LW,	0x7004	,	300 	)	--	干燥温度3
	set_int16(VT_LW,	0x7005	,	450 	)	--	干燥温度4
	set_int16(VT_LW,	0x7006	,	0 	)	--	干燥温度5
	set_int16(VT_LW,	0x7007	,	0 	)	--	干燥温度6
	set_int16(VT_LW,	0x7008	,	0 	)	--	干燥温度7
	set_int16(VT_LW,	0x7009	,	450 	)	--	保持段温度
	set_int16(VT_LW,	0x700A	,	0 	)	--	预冻斜坡时间
	set_int16(VT_LW,	0x700B	,	60 	)	--	干燥1斜坡时间
	set_int16(VT_LW,	0x700C	,	180 	)	--	干燥2斜坡时间
	set_int16(VT_LW,	0x700D	,	180 	)	--	干燥3斜坡时间
	set_int16(VT_LW,	0x700E	,	60 	)	--	干燥4斜坡时间
	set_int16(VT_LW,	0x700F	,	0 	)	--	干燥5斜坡时间
	set_int16(VT_LW,	0x7010	,	0 	)	--	干燥6斜坡时间
	set_int16(VT_LW,	0x7011	,	0 	)	--	干燥7斜坡时间
	set_int16(VT_LW,	0x7012	,	0 	)	--	保持段斜坡时间
	set_int16(VT_LW,	0x7013	,	300 	)	--	预冻保持时间
	set_int16(VT_LW,	0x7014	,	180 	)	--	干燥1保持时间
	set_int16(VT_LW,	0x7015	,	240 	)	--	干燥2保持时间
	set_int16(VT_LW,	0x7016	,	180 	)	--	干燥3保持时间
	set_int16(VT_LW,	0x7017	,	120 	)	--	干燥4保持时间
	set_int16(VT_LW,	0x7018	,	0 	)	--	干燥5保持时间
	set_int16(VT_LW,	0x7019	,	0 	)	--	干燥6保持时间
	set_int16(VT_LW,	0X701A	,	0 	)	--	干燥7保持时间
	set_int16(VT_LW,	0X701B	,	9999 	)	--	保持段保持时间
	set_int16(VT_LW,	0X701C	,	0 	)	--	预冻设定真空
	set_int16(VT_LW,	0X701D	,	800 	)	--	干燥1设定真空
	set_int16(VT_LW,	0X701E	,	800 	)	--	干燥2设定真空
	set_int16(VT_LW,	0X701F	,	800 	)	--	干燥3设定真空
	set_int16(VT_LW,	0X7020	,	800 	)	--	干燥4设定真空
	set_int16(VT_LW,	0X7021	,	800 	)	--	干燥5设定真空
	set_int16(VT_LW,	0X7022	,	800 	)	--	干燥6设定真空
	set_int16(VT_LW,	0X7023	,	800 	)	--	干燥7设定真空
	set_int16(VT_LW,	0X7024	,	800 	)	--	保持段设定真空
	set_int16(VT_LW,	0X7025	,	-300 	)	--	预冻完成温度
	set_int16(VT_LW,	0X7026	,	60 	)	--	预冻到达温度持续时间
	set_int16(VT_LW,	0X7028	,	1 	)	--	启用预冻完成温度功能
	set_int16(VT_LW,	0x7027	,	4 	)  --运行中的配方索引会写入到plc的0x292(d658)
	set_int16(VT_LW,	0X702B	,	2 	)	--	设定后保存配方
end

--配方5参数设置
local function set_recipe_5()
	set_string(VT_RW,0X6028, "Strawberry")
    set_int16(VT_LW,	0x7001	,	-550 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7002	,	-180 	)	--	干燥温度1
	set_int16(VT_LW,	0x7003	,	-50 	)	--	干燥温度2
	set_int16(VT_LW,	0x7004	,	450 	)	--	干燥温度3
	set_int16(VT_LW,	0x7005	,	450 	)	--	干燥温度4
	set_int16(VT_LW,	0x7006	,	0 	)	--	干燥温度5
	set_int16(VT_LW,	0x7007	,	0 	)	--	干燥温度6
	set_int16(VT_LW,	0x7008	,	0 	)	--	干燥温度7
	set_int16(VT_LW,	0x7009	,	450 	)	--	保持段温度
	set_int16(VT_LW,	0x700A	,	0 	)	--	预冻斜坡时间
	set_int16(VT_LW,	0x700B	,	120 	)	--	干燥1斜坡时间
	set_int16(VT_LW,	0x700C	,	120 	)	--	干燥2斜坡时间
	set_int16(VT_LW,	0x700D	,	180 	)	--	干燥3斜坡时间
	set_int16(VT_LW,	0x700E	,	0 	)	--	干燥4斜坡时间
	set_int16(VT_LW,	0x700F	,	0 	)	--	干燥5斜坡时间
	set_int16(VT_LW,	0x7010	,	0 	)	--	干燥6斜坡时间
	set_int16(VT_LW,	0x7011	,	0 	)	--	干燥7斜坡时间
	set_int16(VT_LW,	0x7012	,	0 	)	--	保持段斜坡时间
	set_int16(VT_LW,	0x7013	,	360 	)	--	预冻保持时间
	set_int16(VT_LW,	0x7014	,	600 	)	--	干燥1保持时间
	set_int16(VT_LW,	0x7015	,	480 	)	--	干燥2保持时间
	set_int16(VT_LW,	0x7016	,	360 	)	--	干燥3保持时间
	set_int16(VT_LW,	0x7017	,	0 	)	--	干燥4保持时间
	set_int16(VT_LW,	0x7018	,	0 	)	--	干燥5保持时间
	set_int16(VT_LW,	0x7019	,	0 	)	--	干燥6保持时间
	set_int16(VT_LW,	0X701A	,	0 	)	--	干燥7保持时间
	set_int16(VT_LW,	0X701B	,	9999 	)	--	保持段保持时间
	set_int16(VT_LW,	0X701C	,	0 	)	--	预冻设定真空
	set_int16(VT_LW,	0X701D	,	1200 	)	--	干燥1设定真空
	set_int16(VT_LW,	0X701E	,	1200 	)	--	干燥2设定真空
	set_int16(VT_LW,	0X701F	,	1200 	)	--	干燥3设定真空
	set_int16(VT_LW,	0X7020	,	1200 	)	--	干燥4设定真空
	set_int16(VT_LW,	0X7021	,	1200 	)	--	干燥5设定真空
	set_int16(VT_LW,	0X7022	,	1200 	)	--	干燥6设定真空
	set_int16(VT_LW,	0X7023	,	1200 	)	--	干燥7设定真空
	set_int16(VT_LW,	0X7024	,	1200 	)	--	保持段设定真空
	set_int16(VT_LW,	0X7025	,	-300 	)	--	预冻完成温度
	set_int16(VT_LW,	0X7026	,	60 	)	--	预冻到达温度持续时间
	set_int16(VT_LW,	0X7028	,	1 	)	--	启用预冻完成温度功能
	set_int16(VT_LW,	0x7027	,	5 	)  --运行中的配方索引会写入到plc的0x292(d658)
	set_int16(VT_LW,	0X702B	,	2 	)	--	设定后保存配方
end

--配方6参数设置
local function set_recipe_6()
	set_string(VT_RW,0X6030, "Mango Slices")
    set_int16(VT_LW,	0x7001	,	-560 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7002	,	-250 	)	--	干燥温度1
	set_int16(VT_LW,	0x7003	,	-50 	)	--	干燥温度2
	set_int16(VT_LW,	0x7004	,	300 	)	--	干燥温度3
	set_int16(VT_LW,	0x7005	,	450 	)	--	干燥温度4
	set_int16(VT_LW,	0x7006	,	0 	)	--	干燥温度5
	set_int16(VT_LW,	0x7007	,	0 	)	--	干燥温度6
	set_int16(VT_LW,	0x7008	,	0 	)	--	干燥温度7
	set_int16(VT_LW,	0x7009	,	450 	)	--	保持段温度
	set_int16(VT_LW,	0x700A	,	0 	)	--	预冻斜坡时间
	set_int16(VT_LW,	0x700B	,	60 	)	--	干燥1斜坡时间
	set_int16(VT_LW,	0x700C	,	180 	)	--	干燥2斜坡时间
	set_int16(VT_LW,	0x700D	,	180 	)	--	干燥3斜坡时间
	set_int16(VT_LW,	0x700E	,	60 	)	--	干燥4斜坡时间
	set_int16(VT_LW,	0x700F	,	0 	)	--	干燥5斜坡时间
	set_int16(VT_LW,	0x7010	,	0 	)	--	干燥6斜坡时间
	set_int16(VT_LW,	0x7011	,	0 	)	--	干燥7斜坡时间
	set_int16(VT_LW,	0x7012	,	0 	)	--	保持段斜坡时间
	set_int16(VT_LW,	0x7013	,	300 	)	--	预冻保持时间
	set_int16(VT_LW,	0x7014	,	180 	)	--	干燥1保持时间
	set_int16(VT_LW,	0x7015	,	240 	)	--	干燥2保持时间
	set_int16(VT_LW,	0x7016	,	180 	)	--	干燥3保持时间
	set_int16(VT_LW,	0x7017	,	120 	)	--	干燥4保持时间
	set_int16(VT_LW,	0x7018	,	0 	)	--	干燥5保持时间
	set_int16(VT_LW,	0x7019	,	0 	)	--	干燥6保持时间
	set_int16(VT_LW,	0X701A	,	0 	)	--	干燥7保持时间
	set_int16(VT_LW,	0X701B	,	9999 	)	--	保持段保持时间
	set_int16(VT_LW,	0X701C	,	0 	)	--	预冻设定真空
	set_int16(VT_LW,	0X701D	,	800 	)	--	干燥1设定真空
	set_int16(VT_LW,	0X701E	,	800 	)	--	干燥2设定真空
	set_int16(VT_LW,	0X701F	,	800 	)	--	干燥3设定真空
	set_int16(VT_LW,	0X7020	,	800 	)	--	干燥4设定真空
	set_int16(VT_LW,	0X7021	,	800 	)	--	干燥5设定真空
	set_int16(VT_LW,	0X7022	,	800 	)	--	干燥6设定真空
	set_int16(VT_LW,	0X7023	,	800 	)	--	干燥7设定真空
	set_int16(VT_LW,	0X7024	,	800 	)	--	保持段设定真空
	set_int16(VT_LW,	0X7025	,	-300 	)	--	预冻完成温度
	set_int16(VT_LW,	0X7026	,	60 	)	--	预冻到达温度持续时间
	set_int16(VT_LW,	0X7028	,	1 	)	--	启用预冻完成温度功能
	set_int16(VT_LW,	0x7027	,	6 	)  --运行中的配方索引会写入到plc的0x292(d658)
	set_int16(VT_LW,	0X702B	,	2 	)	--	设定后保存配方
end

--配方7参数设置
local function set_recipe_7()
	set_string(VT_RW,0X6038, "Cubilose")
    set_int16(VT_LW,	0x7001	,	-570 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7002	,	-250 	)	--	干燥温度1
	set_int16(VT_LW,	0x7003	,	-50 	)	--	干燥温度2
	set_int16(VT_LW,	0x7004	,	300 	)	--	干燥温度3
	set_int16(VT_LW,	0x7005	,	450 	)	--	干燥温度4
	set_int16(VT_LW,	0x7006	,	0 	)	--	干燥温度5
	set_int16(VT_LW,	0x7007	,	0 	)	--	干燥温度6
	set_int16(VT_LW,	0x7008	,	0 	)	--	干燥温度7
	set_int16(VT_LW,	0x7009	,	450 	)	--	保持段温度
	set_int16(VT_LW,	0x700A	,	0 	)	--	预冻斜坡时间
	set_int16(VT_LW,	0x700B	,	60 	)	--	干燥1斜坡时间
	set_int16(VT_LW,	0x700C	,	180 	)	--	干燥2斜坡时间
	set_int16(VT_LW,	0x700D	,	180 	)	--	干燥3斜坡时间
	set_int16(VT_LW,	0x700E	,	60 	)	--	干燥4斜坡时间
	set_int16(VT_LW,	0x700F	,	0 	)	--	干燥5斜坡时间
	set_int16(VT_LW,	0x7010	,	0 	)	--	干燥6斜坡时间
	set_int16(VT_LW,	0x7011	,	0 	)	--	干燥7斜坡时间
	set_int16(VT_LW,	0x7012	,	0 	)	--	保持段斜坡时间
	set_int16(VT_LW,	0x7013	,	300 	)	--	预冻保持时间
	set_int16(VT_LW,	0x7014	,	180 	)	--	干燥1保持时间
	set_int16(VT_LW,	0x7015	,	240 	)	--	干燥2保持时间
	set_int16(VT_LW,	0x7016	,	180 	)	--	干燥3保持时间
	set_int16(VT_LW,	0x7017	,	120 	)	--	干燥4保持时间
	set_int16(VT_LW,	0x7018	,	0 	)	--	干燥5保持时间
	set_int16(VT_LW,	0x7019	,	0 	)	--	干燥6保持时间
	set_int16(VT_LW,	0X701A	,	0 	)	--	干燥7保持时间
	set_int16(VT_LW,	0X701B	,	9999 	)	--	保持段保持时间
	set_int16(VT_LW,	0X701C	,	0 	)	--	预冻设定真空
	set_int16(VT_LW,	0X701D	,	800 	)	--	干燥1设定真空
	set_int16(VT_LW,	0X701E	,	800 	)	--	干燥2设定真空
	set_int16(VT_LW,	0X701F	,	800 	)	--	干燥3设定真空
	set_int16(VT_LW,	0X7020	,	800 	)	--	干燥4设定真空
	set_int16(VT_LW,	0X7021	,	800 	)	--	干燥5设定真空
	set_int16(VT_LW,	0X7022	,	800 	)	--	干燥6设定真空
	set_int16(VT_LW,	0X7023	,	800 	)	--	干燥7设定真空
	set_int16(VT_LW,	0X7024	,	800 	)	--	保持段设定真空
	set_int16(VT_LW,	0X7025	,	-300 	)	--	预冻完成温度
	set_int16(VT_LW,	0X7026	,	60 	)	--	预冻到达温度持续时间
	set_int16(VT_LW,	0X7028	,	1 	)	--	启用预冻完成温度功能
	set_int16(VT_LW,	0x7027	,	7	)  --运行中的配方索引会写入到plc的0x292(d658)
	set_int16(VT_LW,	0X702B	,	2 	)	--	设定后保存配方
end

--配方8参数设置
local function set_recipe_8()
	set_string(VT_RW,0X6040, "Euphorbiaceae")
    set_int16(VT_LW,	0x7001	,	-580 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7001	,	-515 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7002	,	-250 	)	--	干燥温度1
	set_int16(VT_LW,	0x7003	,	-50 	)	--	干燥温度2
	set_int16(VT_LW,	0x7004	,	300 	)	--	干燥温度3
	set_int16(VT_LW,	0x7005	,	450 	)	--	干燥温度4
	set_int16(VT_LW,	0x7006	,	0 	)	--	干燥温度5
	set_int16(VT_LW,	0x7007	,	0 	)	--	干燥温度6
	set_int16(VT_LW,	0x7008	,	0 	)	--	干燥温度7
	set_int16(VT_LW,	0x7009	,	450 	)	--	保持段温度
	set_int16(VT_LW,	0x700A	,	0 	)	--	预冻斜坡时间
	set_int16(VT_LW,	0x700B	,	60 	)	--	干燥1斜坡时间
	set_int16(VT_LW,	0x700C	,	180 	)	--	干燥2斜坡时间
	set_int16(VT_LW,	0x700D	,	180 	)	--	干燥3斜坡时间
	set_int16(VT_LW,	0x700E	,	60 	)	--	干燥4斜坡时间
	set_int16(VT_LW,	0x700F	,	0 	)	--	干燥5斜坡时间
	set_int16(VT_LW,	0x7010	,	0 	)	--	干燥6斜坡时间
	set_int16(VT_LW,	0x7011	,	0 	)	--	干燥7斜坡时间
	set_int16(VT_LW,	0x7012	,	0 	)	--	保持段斜坡时间
	set_int16(VT_LW,	0x7013	,	300 	)	--	预冻保持时间
	set_int16(VT_LW,	0x7014	,	180 	)	--	干燥1保持时间
	set_int16(VT_LW,	0x7015	,	240 	)	--	干燥2保持时间
	set_int16(VT_LW,	0x7016	,	180 	)	--	干燥3保持时间
	set_int16(VT_LW,	0x7017	,	120 	)	--	干燥4保持时间
	set_int16(VT_LW,	0x7018	,	0 	)	--	干燥5保持时间
	set_int16(VT_LW,	0x7019	,	0 	)	--	干燥6保持时间
	set_int16(VT_LW,	0X701A	,	0 	)	--	干燥7保持时间
	set_int16(VT_LW,	0X701B	,	9999 	)	--	保持段保持时间
	set_int16(VT_LW,	0X701C	,	0 	)	--	预冻设定真空
	set_int16(VT_LW,	0X701D	,	800 	)	--	干燥1设定真空
	set_int16(VT_LW,	0X701E	,	800 	)	--	干燥2设定真空
	set_int16(VT_LW,	0X701F	,	800 	)	--	干燥3设定真空
	set_int16(VT_LW,	0X7020	,	800 	)	--	干燥4设定真空
	set_int16(VT_LW,	0X7021	,	800 	)	--	干燥5设定真空
	set_int16(VT_LW,	0X7022	,	800 	)	--	干燥6设定真空
	set_int16(VT_LW,	0X7023	,	800 	)	--	干燥7设定真空
	set_int16(VT_LW,	0X7024	,	800 	)	--	保持段设定真空
	set_int16(VT_LW,	0X7025	,	-300 	)	--	预冻完成温度
	set_int16(VT_LW,	0X7026	,	60 	)	--	预冻到达温度持续时间
	set_int16(VT_LW,	0X7028	,	1 	)	--	启用预冻完成温度功能
	set_int16(VT_LW,	0x7027	,	8	)  --运行中的配方索引会写入到plc的0x292(d658)
	set_int16(VT_LW,	0X702B	,	2 	)	--	设定后保存配方
end

--配方9参数设置
local function set_recipe_9()
	set_string(VT_RW,0X6048, "Candy")
    set_int16(VT_LW,	0x7001	,	-590 	)	--	预冻干设定温度
	set_int16(VT_LW,	0x7002	,	-250 	)	--	干燥温度1
	set_int16(VT_LW,	0x7003	,	-50 	)	--	干燥温度2
	set_int16(VT_LW,	0x7004	,	300 	)	--	干燥温度3
	set_int16(VT_LW,	0x7005	,	450 	)	--	干燥温度4
	set_int16(VT_LW,	0x7006	,	0 	)	--	干燥温度5
	set_int16(VT_LW,	0x7007	,	0 	)	--	干燥温度6
	set_int16(VT_LW,	0x7008	,	0 	)	--	干燥温度7
	set_int16(VT_LW,	0x7009	,	450 	)	--	保持段温度
	set_int16(VT_LW,	0x700A	,	0 	)	--	预冻斜坡时间
	set_int16(VT_LW,	0x700B	,	60 	)	--	干燥1斜坡时间
	set_int16(VT_LW,	0x700C	,	180 	)	--	干燥2斜坡时间
	set_int16(VT_LW,	0x700D	,	180 	)	--	干燥3斜坡时间
	set_int16(VT_LW,	0x700E	,	60 	)	--	干燥4斜坡时间
	set_int16(VT_LW,	0x700F	,	0 	)	--	干燥5斜坡时间
	set_int16(VT_LW,	0x7010	,	0 	)	--	干燥6斜坡时间
	set_int16(VT_LW,	0x7011	,	0 	)	--	干燥7斜坡时间
	set_int16(VT_LW,	0x7012	,	0 	)	--	保持段斜坡时间
	set_int16(VT_LW,	0x7013	,	15 	)	--	预冻保持时间
	set_int16(VT_LW,	0x7014	,	180 	)	--	干燥1保持时间
	set_int16(VT_LW,	0x7015	,	240 	)	--	干燥2保持时间
	set_int16(VT_LW,	0x7016	,	180 	)	--	干燥3保持时间
	set_int16(VT_LW,	0x7017	,	120 	)	--	干燥4保持时间
	set_int16(VT_LW,	0x7018	,	0 	)	--	干燥5保持时间
	set_int16(VT_LW,	0x7019	,	0 	)	--	干燥6保持时间
	set_int16(VT_LW,	0X701A	,	0 	)	--	干燥7保持时间
	set_int16(VT_LW,	0X701B	,	9999 	)	--	保持段保持时间
	set_int16(VT_LW,	0X701C	,	0 	)	--	预冻设定真空
	set_int16(VT_LW,	0X701D	,	800 	)	--	干燥1设定真空
	set_int16(VT_LW,	0X701E	,	800 	)	--	干燥2设定真空
	set_int16(VT_LW,	0X701F	,	800 	)	--	干燥3设定真空
	set_int16(VT_LW,	0X7020	,	800 	)	--	干燥4设定真空
	set_int16(VT_LW,	0X7021	,	800 	)	--	干燥5设定真空
	set_int16(VT_LW,	0X7022	,	800 	)	--	干燥6设定真空
	set_int16(VT_LW,	0X7023	,	800 	)	--	干燥7设定真空
	set_int16(VT_LW,	0X7024	,	800 	)	--	保持段设定真空
	set_int16(VT_LW,	0X7025	,	-50 	)	--	预冻完成温度
	set_int16(VT_LW,	0X7026	,	10 	)	--	预冻到达温度持续时间
	set_int16(VT_LW,	0X7028	,	1 	)	--	启用预冻完成温度功能
	set_int16(VT_LW,	0x7027	,	9 	)  --运行中的配方索引会写入到plc的0x292(d658)
	set_int16(VT_LW,	0X702B	,	2 	)	--	设定后保存配方
end

--配方索引与函数的映射表
local recipe_functions = {
    [0] = set_recipe_0, [1] = set_recipe_1, [2] = set_recipe_2,
    [3] = set_recipe_3, [4] = set_recipe_4, [5] = set_recipe_5,
    [6] = set_recipe_6, [7] = set_recipe_7, [8] = set_recipe_8, [9] = set_recipe_9
}

function on_init()
	last_auto_run_state = get_uint16(VT_3x, 0x82) or 0
	 cleared_flag = false

    set_uint16(VT_LW,0x119,get_uint16(VT_RW,0x18))
    

    -- 配方名称初始化
    if get_uint16(VT_RW,0x18)==0 then--默认中文名
        set_string(VT_RW,0X6000, "鸡肉粒");set_string(VT_RW,0X6008, "牛肉粒")
        set_string(VT_RW,0X6010, "鱼肉粒");set_string(VT_RW,0X6018, "牛排")
        set_string(VT_RW,0X6020, "牛奶");set_string(VT_RW,0X6028, "草莓")
        set_string(VT_RW,0X6030, "芒果片");set_string(VT_RW,0X6038, "燕窝")
        set_string(VT_RW,0X6040, "蓖麻");set_string(VT_RW,0X6048, "糖果")
    end
    if get_uint16(VT_RW,0x18)==1 then--默认english
        set_string(VT_RW,0X6000, "Chicken Diced");set_string(VT_RW,0X6008, "Beef Lerky")
        set_string(VT_RW,0X6010, "Grilled Fish");set_string(VT_RW,0X6018, "steak")
        set_string(VT_RW,0X6020, "milk");set_string(VT_RW,0X6028, "Strawberry")
        set_string(VT_RW,0X6030, "Mango Slices");set_string(VT_RW,0X6038, "Cubilose")
        set_string(VT_RW,0X6040, "Euphorbiaceae");set_string(VT_RW,0X6048, "Candy")
    end
    
    -- 初始化时同步RW28的值到内部变量
    s_timer = get_uint16(VT_RW, 0x28) or 0
    last_lw1008 = get_uint16(VT_LW, 0x1008) or 0

end

function on_run(screen)
    local pfsuoyin= get_uint16(VT_LW,0x7000)
    local pfname_num = get_uint16(VT_LW,0X7000)*8
    local pfcontrol = get_uint16(VT_LW,0X702B)
	local m10state=get_bit(VT_0x,0x7da)
	local ch= get_uint16(VT_RW,0x30)
	local	baudrate=get_uint32(VT_RW,0x32)
	local databits=get_uint16(VT_RW,0x34)
	local stopbit=get_uint16(VT_RW,0x35)
	local parity=get_uint16(VT_RW,0x36)
	local auto_run_state = get_uint16(VT_3x, 0x82)   -- D130
	local run_step       = get_uint16(VT_4x, 0x456)  -- 当前段号
    local conti_run      = get_uint16(VT_LW, 0x1122) -- 连续运行标志（你原来就有）
    local ui_clear       = get_uint16(VT_LW, 0x1120) -- 画面上的“清零”按钮


	--frozen模式程序完整

    set_uint16(VT_LW,0x119,get_uint16(VT_RW,0x18))	  
	set_uint16(VT_LW,0x01D0,get_uint16(VT_LW,0x7000)*8) ---选中的配方索引01D0
	set_uint16(VT_LW,0x1D1,get_uint16(VT_RW,0x39)*8)--运行的配方名索引=运行的配方号*8
	--set_uint16(VT_4x,0x1A4,get_uint16(VT_RW,0x39))--把运行的配方索引发送给plc D420（方便物联网读取）
	
	
	if  get_uint16(VT_LW,0x100A)==1 then --当按下加载配方的中间值100a时候；
		--set_uint16(VT_LW,0x1d1,get_uint16(VT_LW,0x1D0))
		set_uint16(VT_LW,0x702B,1)--执行配方加载
		set_uint16(VT_RW,0x38,get_uint16(VT_LW,0x1D0))--运行配方名字索引
		set_uint16(VT_RW,0x39,get_uint16(VT_LW,0x7000))--rx39是运行的配方号
		start_timer(9,1500,0,1)
	else
		stop_timer(9)


	end
	
	if   m10state==0 then
		start_timer(7,1500,0,1)
	else
		stop_timer(7)
	end


	---if 保存配方中间值LW1114==1，then 配方控制地址LW702B=2 且 把配方索引LW7000 赋值给LW7027；
	if get_uint16(VT_LW,0x1114)== 1 then
		set_uint16(VT_LW,0x7027,get_uint16(VT_LW,0x7000))
		set_uint16(VT_LW,0x702B,2)
		start_timer(6,1500,0,1)
	else
		stop_timer(6)
	end


--plc的触发加载配方m0启动后，启用定时器11
	if get_bit(VT_0x,0x7D0)==1 then
		start_timer(15,2000,0,1)

	else
		stop_timer(15)
	end




    -- 核心修改：当RW28=10（配方初始化完成）时，LW7000强制取自4x1F7(D503)
    local rw28_val = get_uint16(VT_RW, 0x28)
    if rw28_val == 11 then
        -- 直接从保持寄存器4x1F7读取值并赋值给LW7000
        local val_4x1F7 = get_uint16(VT_4x, 0x1F7)
        set_uint16(VT_LW, 0x7000, val_4x1F7)

		--以下当M502=1的时候，m0触发配方加载。
		if get_bit(VT_0x,0x9C6)==1 then
			if get_bit(VT_0x,0x7D0)==1 then
				set_uint16(VT_LW,0x702B,1)
			else
				set_uint16(VT_LW,0x702B,0)
			end

		end


    end
    
    -- 冷阱预冷逻辑
    if get_uint16(VT_4x,0x1F4)==1 and get_bit(VT_0x,0x0,0)==1 then 
        set_uint16(VT_LW,0x900,1)-- 900冷阱预冷
    else
        set_uint16(VT_LW,0x900,0)
    end
    
    -- 配方加载逻辑（屏幕0）
    if screen == cur_screen.No0 then 
        local lw1008_val = get_uint16(VT_LW, 0x1008)
        local lw1003_val = 0
        local recipe_index = 0
    
        -- 检测RW28是否被手动重置为0，如果是则同步重置内部变量
        if rw28_val == 0 and s_timer ~= 0 then
            s_timer = 0
            if timer_running then
                stop_timer(2)
                timer_running = false
            end
        end
    
        -- 执行配方设置（仅在RW28<10时执行，确保初始化完成后不干扰）
        if rw28_val >= 1 and rw28_val < 11 then
            recipe_index = rw28_val - 1
            lw1003_val = rw28_val
            set_uint16(VT_LW, 0x1003, lw1003_val)
            -- 只有在配方初始化过程中才设置LW7000为配方索引
            set_uint16(VT_LW, 0x7000, recipe_index)
    
            local set_recipe = recipe_functions[recipe_index]
            if set_recipe then set_recipe() end
        end
    
        -- 检测LW1008的上升沿（从0变为1）
        if lw1008_val == 1 and last_lw1008 == 0 then
            -- 确保RW28在有效范围内
            if rw28_val < MAX_RECIPE_COUNT then
                -- 如果定时器未运行，则启动
                if not timer_running then
                    start_timer(2, 2000, 0, 0)  --每2秒触发一次
                    timer_running = true
                end
            else
                -- 如果已达最大值，强制重置
                set_uint16(VT_RW, 0x28, 0)
                s_timer = 0
                set_uint16(VT_LW, 0x1008, 0)
            end
        elseif lw1008_val == 0 and last_lw1008 == 1 then
            -- 检测LW1008的下降沿（从1变为0），停止定时器
            if timer_running then
                stop_timer(2)
                timer_running = false
            end
        end
    
        -- 更新上一次LW1008的值
        last_lw1008 = lw1008_val
    else 
        -- 非屏幕0时停止定时器
        if timer_running then
            stop_timer(2)
            timer_running = false
        end
        -- 同步last_lw1008值
        last_lw1008 = get_uint16(VT_LW, 0x1008) or 0
    end
----
	if auto_run_state == 0 and cleared_flag == false then
	    set_uint32(VT_RW, 0x3D, 0)
	    set_uint16(VT_LW, 0x1122, 0)
	    cleared_flag = true
	end


	-- 一旦开始运行 → 下次允许再清零
	if auto_run_state == 1 then
	    cleared_flag = false
	end
---

---aa
    local run_condition = (auto_run_state == 1) and (run_step < 9)

    if run_condition then
        -- 开始运行：启动定时器20
        if not timer_20_running then
            -- 如果你要“按分钟计数”，这里周期就用 60000 ms
            -- 如果 HMI 的单位不是 ms，就按你原工程来改
            start_timer(20, 60000, 0, 0)  -- 每分钟 RW3D 加 1
            timer_20_running = true
        end

        -- 只要进入运行状态，就说明已经是新一批次了，允许下次停机再清零
        cleared_flag = false
    else
        -- 不满足运行条件 → 停止定时器20（但不在这里清零 RW3D）
        if timer_20_running then
            stop_timer(20)
            timer_20_running = false
        end
    end
	last_auto_run_state = auto_run_state
    ----------------------------------------------------
   -- ④ 结束段弹窗逻辑：保持你原来的习惯，用 8 段提示
    --    D130=1 且 段号=8 且还没点“继续运行” → 弹出窗口 3
    ----------------------------------------------------
    if (auto_run_state == 1) and (run_step == 9) and (conti_run == 0) then
        show_dialog(3, 184, 108, 0)
	--else 
	--	show_dialog(-1, 184, 108, 0)
    end
	if get_uint16(VT_LW,0x1123)==1 then
		show_dialog(-1, 184, 108, 0)
	end
 
--aaa



end


function on_update(slave, vtype, addr)
end

function on_draw(screen_id, control_id)
end