=1000 THEN FORCE_WRITE:=TRUE; END_IF (* MBMaster.WriteRegs( UnitID:= 1, Quantity:= 18, MBAddr:= 16#401, cbLength:= SIZEOF(FFU_AO_SPEED_SV), pMemoryAddr:= ADR(FFU_AO_SPEED_SV), Execute:= TEST6,//TRUE, Timeout:= T#2000MS, ); TEST6:=FALSE; MBMaster.BUSY; MBMaster.Error; MBMaster.ErrorId; *) (* MBMaster.ReadRegs( UnitID:= 1, Quantity:= 18, MBAddr:= 257, cbLength:= SIZEOF(FFU_AI_STATUS), pMemoryAddr:= ADR(FFU_AI_STATUS), Execute:= TEST1,//TRUE, Timeout:= T#200MS, ); ERRID:= MBMaster.ErrorId; IF NOT MBMaster.BUSY THEN TEST1:=FALSE; //MBMaster.ReadRegs(Execute:=FALSE,); //FORCE_WRITE_TIMES:=FORCE_WRITE_TIMES+1; STAGE:=2; END_IF *) CASE STAGE OF 0://首次通讯 STAGE:=1; 1://读状态 MBMaster.ReadRegs( UnitID:= 1, Quantity:= 18, MBAddr:= 257, cbLength:= SIZEOF(FFU_AI_STATUS), pMemoryAddr:= ADR(FFU_AI_STATUS), Execute:= TRUE, Timeout:= T#200MS, ); IF NOT MBMaster.BUSY THEN //TEST1:=FALSE; MBMaster.ReadRegs(Execute:=FALSE,); FORCE_WRITE_TIMES:=FORCE_WRITE_TIMES+1; STAGE:=2; END_IF 2://读转速 MBMaster.ReadRegs( UnitID:= 1, Quantity:= 18, MBAddr:= 513, cbLength:= SIZEOF(FFU_AI_SPEED_PV), pMemoryAddr:= ADR(FFU_AI_SPEED_PV), Execute:= TRUE, Timeout:= T#200MS, ); IF NOT MBMaster.BUSY THEN //TEST2:=FALSE; MBMaster.ReadRegs(Execute:=FALSE,); FORCE_WRITE_TIMES:=FORCE_WRITE_TIMES+1; STAGE:=3; END_IF 3://数值变更判断 IF WRITE_EN1<>0 OR FORCE_WRITE THEN STAGE:=4; ELSIF WRITE_EN2<>0 THEN STAGE:=5; ELSIF WRITE_EN3<>0 THEN STAGE:=6; ELSIF WRITE_EN4<>0 THEN STAGE:=7; ELSIF WRITE_EN5<>0 THEN STAGE:=8; ELSE STAGE:=1; END_IF 4://写控制字 MBMaster.WriteRegs( UnitID:= 1, Quantity:= 3, MBAddr:= 2, cbLength:= SIZEOF(FFU_AO_CTRLWORD), pMemoryAddr:= ADR(FFU_AO_CTRLWORD), Execute:= TRUE, Timeout:= T#200MS, ); IF NOT MBMaster.BUSY THEN //TEST4:=FALSE; MBMaster.WriteRegs(Execute:=FALSE,); MEMCPY(destAddr:= ADR(FFU_CTRLWORD_BUFFER), srcAddr:= ADR(FFU_AO_CTRLWORD), n:= SIZEOF(FFU_AO_CTRLWORD)); IF NOT FORCE_WRITE THEN STAGE:=1; ELSE STAGE:=5; END_IF END_IF 5://写启停 MBMaster.WriteRegs( UnitID:= 1, Quantity:= 18, MBAddr:= 769, cbLength:= SIZEOF(FFU_AO_POWER_ON), pMemoryAddr:= ADR(FFU_AO_POWER_ON), Execute:= TRUE, Timeout:= T#200MS, ); IF NOT MBMaster.BUSY THEN //TEST5:=FALSE; MBMaster.WriteRegs(Execute:=FALSE,); MEMCPY(destAddr:= ADR(FFU_POWER_ON_BUFFER), srcAddr:= ADR(FFU_AO_POWER_ON), n:= SIZEOF(FFU_AO_POWER_ON)); IF NOT FORCE_WRITE THEN STAGE:=1; ELSE STAGE:=6; END_IF END_IF 6://写转速 MBMaster.WriteRegs( UnitID:= 1, Quantity:= 18, MBAddr:= 1025, cbLength:= SIZEOF(FFU_AO_SPEED_SV), pMemoryAddr:= ADR(FFU_AO_SPEED_SV), Execute:= TRUE, Timeout:= T#200MS, ); IF NOT MBMaster.BUSY THEN //TEST6:=FALSE; MBMaster.WriteRegs(Execute:=FALSE,); MEMCPY(destAddr:= ADR(FFU_SPEED_SV_BUFFER), srcAddr:= ADR(FFU_AO_SPEED_SV), n:= SIZEOF(FFU_AO_SPEED_SV)); IF NOT FORCE_WRITE THEN STAGE:=1; ELSE STAGE:=7; END_IF END_IF 7://写使能 MBMaster.WriteRegs( UnitID:= 1, Quantity:= 18, MBAddr:= 1281, cbLength:= SIZEOF(FFU_AO_EN), pMemoryAddr:= ADR(FFU_AO_EN), Execute:= TRUE, Timeout:= T#200MS, ); IF NOT MBMaster.BUSY THEN //TEST7:=FALSE; MBMaster.WriteRegs(Execute:=FALSE,); MEMCPY(destAddr:= ADR(FFU_EN_BUFFER), srcAddr:= ADR(FFU_AO_EN), n:= SIZEOF(FFU_AO_EN)); STAGE:=1; IF FORCE_WRITE THEN FORCE_WRITE_TIMES:=0; FORCE_WRITE:=FALSE; END_IF END_IF END_CASE ]]>