我将家里的基础控制设备换成了plc

前面我使用服务器带nodered控制modbus设备去驱动家里的灯具等设备,结果发现一个大问题就是停电来电的时候服务器启动时间太长,简直是煎熬,后来我用plc来替换,使用米家的继电器模组接入米家。


因为没有把plc关于modbus学懂,所以就没有使用以前的模块。



主程序

双开复用_厨房开关(开关1:= X0 ,开关2:= X1 ,状态1:= M100 ,状态2:= M101 ,状态3:= M102 );
双开复用_主卧开关(开关1:= X4 ,开关2:= X5 ,状态1:= M103 ,状态2:= M104 ,状态3:= M105 );

远程联动_厨房主灯(远程按钮:= Y10 ,远程执行:= X10 ,本地按钮:= M100 ,本地执行:= Y0 );
远程联动_露台主灯(远程按钮:= Y11 ,远程执行:= X11 ,本地按钮:= M101 ,本地执行:= Y1 );
远程联动_阳台主灯(远程按钮:= Y12 ,远程执行:= X12 ,本地按钮:= X002 ,本地执行:= Y2 );
远程联动_次卧主灯(远程按钮:= Y13 ,远程执行:= X13 ,本地按钮:= X003 ,本地执行:= Y3 );
远程联动_主卧主灯(远程按钮:= Y14 ,远程执行:= X14 ,本地按钮:= M103 ,本地执行:= Y4 );
远程联动_主卧廊灯(远程按钮:= Y15 ,远程执行:= X15 ,本地按钮:= M105 ,本地执行:= Y5 );
远程联动_主卧筒灯(远程按钮:= Y16 ,远程执行:= X16 ,本地按钮:= M104 ,本地执行:= Y6 );
双开复用_入户开关(开关1:= X0 ,开关2:= X1 ,状态1:= M100 ,状态2:= M101 ,状态3:= M102 );
四开复用_客厅开关(开关1:= X2 ,开关2:= X3 ,开关3:= X4 ,开关4:= X5 ,状态1:= M103,状态2:= M104,状态3:= M105,状态4:= M106,状态5:= M107,状态6:= M108,状态7:= M109);
双开复用_餐厅开关(开关1:= X6 ,开关2:= X7 ,状态1:= M110 ,状态2:= M111 ,状态3:= M112 );
四开复用_浴室开关(开关1:= X10 ,开关2:= X11 ,开关3:= X12 ,开关4:= X13 ,状态1:= M113 ,状态2:= M114 ,状态3:= M115 ,状态4:= M116 ,状态5:= M117 ,状态6:=M118,状态7:=M119);

远程联动_门厅廊灯(远程按钮:= Y20 ,远程执行:= X20 ,本地按钮:= M100 ,本地执行:= Y0 );
远程联动_客厅主灯(远程按钮:= Y21 ,远程执行:= X21 ,本地按钮:= M106 ,本地执行:= Y1 );
灯带逻辑_客厅灯带(远程执行01:= X22 ,远程执行02:= X23 ,远程按钮01:= Y22 ,远程按钮02:= Y23 , 按键:= M105 ,灯带01:= Y2 ,灯带02:= Y3 );
远程联动_客厅筒灯(远程按钮:= Y24 ,远程执行:= X24 ,本地按钮:= M104 ,本地执行:= Y4 );
远程联动_客厅筒灯(远程按钮:= Y24 ,远程执行:= X24 ,本地按钮:= M101 ,本地执行:= Y4 );
远程联动_餐厅主灯(远程按钮:= Y25 ,远程执行:= X25 ,本地按钮:= M110 ,本地执行:= Y5 );
灯带逻辑_餐厅灯带(远程执行01:= X26 ,远程执行02:= X27 ,远程按钮01:= Y26 ,远程按钮02:= Y27 ,按键:= M112 ,灯带01:= Y6 ,灯带02:= Y7 );
远程联动_餐厅筒灯(远程按钮:= Y30 ,远程执行:= X30 ,本地按钮:= M111 ,本地执行:= Y10 );
远程联动_走道廊灯(远程按钮:= Y31 ,远程执行:= X31 ,本地按钮:= M113 ,本地执行:= Y11 );
远程联动_浴室主灯(远程按钮:= Y32 ,远程执行:= X32 ,本地按钮:= M116 ,本地执行:= Y12 );
远程联动_浴室排风(远程按钮:= Y33 ,远程执行:= X33 ,本地按钮:= M115 ,本地执行:= Y13 );
浴霸逻辑_浴室暖风(远程执行01:= X34 ,远程执行02:= X35 ,远程执行03:= X36 ,远程按钮01:= Y34 ,远程按钮02:= Y35 ,
	远程按钮03:= Y36 ,按键:= M114 ,风机:= Y14 ,加热01:= Y15 ,加热02:= Y16 );

(*全关*)
IF LDP(1,M102 OR M103) THEN
	K4Y000 := 0;
END_IF;

(*浴室吹风和排风互斥*)
IF LDP(1,Y14) THEN
	Y13 :=0;
END_IF;
IF LDP(1,Y13) THEN
	Y14 :=0;
END_IF;

(*确保吹风未开,加热不运行*)
IF NOT Y14 THEN
	Y15 :=0;
	Y16 :=0;
END_IF;

与米家的联动

IF LDP(1,本地按钮) OR LDF(1,本地按钮) THEN
	本地执行 := 本地按钮;
END_IF;

IF LDP(1,远程执行) OR LDF(1,远程执行) THEN
	IF 本地执行 <> 远程执行 THEN
		本地执行 := 远程执行;
	END_IF;
END_IF;

IF LDP(1,本地执行) OR LDF(1,本地执行) THEN
	IF 本地执行 <> 远程执行 THEN
		远程按钮 := 1;
	END_IF;
END_IF;

TON_1(IN:= 远程按钮 ,PT:= T#200ms ,Q:= 计时结束 );

IF 计时结束 THEN
	远程按钮 := 0;
END_IF;

灯带逻辑

IF LDP(1,灯带01 OR 灯带02) OR LDF(1,灯带01 OR 灯带02) THEN
	状态1:=灯带01 AND (NOT 灯带02);
	状态2:=灯带02 AND (NOT 灯带01);
	状态3:=灯带01 AND 灯带02;
END_IF;

按键复用_1(按键:=按键 ,状态1:= 状态1 ,状态2:= 状态2 ,状态3:= 状态3);

远程联动_常开常闭_1(远程按钮:= 远程按钮01 ,远程执行:= 远程执行01 ,本地按钮:= 状态1 OR 状态3 ,本地执行:= 灯带01);

远程联动_常开常闭_2(远程按钮:= 远程按钮02 ,远程执行:= 远程执行02 ,本地按钮:= 状态2 OR 状态3 ,本地执行:= 灯带02);

浴霸控制

IF LDP(1,风机 OR 加热01 OR 加热02) OR LDF(1,风机 OR 加热01 OR 加热02) THEN
	状态1:=风机 AND NOT (加热01 AND 加热02);
	状态2:=风机 AND 加热01 XOR 加热02;
	状态3:=风机 AND 加热01 AND 加热02;
END_IF;

按键复用_1(按键:=按键 ,状态1:= 状态1 ,状态2:= 状态2 ,状态3:= 状态3 );

远程联动_常开常闭_1(远程按钮:= 远程按钮01 ,远程执行:= 远程执行01 ,本地按钮:= 状态1 ,本地执行:= 风机);
远程联动_常开常闭_2(远程按钮:= 远程按钮02 ,远程执行:= 远程执行02 ,本地按钮:= 状态2 ,本地执行:= 加热01 );
远程联动_常开常闭_3(远程按钮:= 远程按钮03 ,远程执行:= 远程执行03 ,本地按钮:= 状态3 ,本地执行:= 加热02 );