PLC编程,置位优先SR和复位优先RS到底该怎么选
学习PLC都知道CPU的是从上至下逐级、循环扫描的,也就不存在两条指令同时执行。
所以线圈格式的置位、复位指令有优先级。SR 触发器与 RS 触发器的置位输入和复位输入在同一条指令里,置位和复位输入谁在指令输入端的下面谁后执行。
置位优先触发器SR
功能: 置位双稳态触发器,置位优先。 逻辑关系: Q1=(NOT RESET AND Q1) OR SET1PS:SET1为置位信号,RESET 为复位信号。
解析: 当 SET1 为“1”时,不论 RESET 是否为“1”,Q1 输出都为“1”;
当 SET1 为“0”
时,如果 Q1 输出为“1”,一旦 RESET 为“1”,Q1 输出立刻复位为“0”。如果 Q1 输出为
“0”,不论 RESET 为“1”或者“0”,Q1 输出保持为“0”。
时序图&状态表
示例: 某系统需要一个停机信号,并要求系统出现故障后要求马上停机,控制设备停机的
输出信号为 bStopMachine,如该变量被置位“1”,让需要让系统安全停机。否则可以正常运行。
设备的运行信号为 bRun,当系统中如出现任一故障 bError 会被置位“1”。
因为 bError 的优先权高于 bRun,故 bError 需要对应置位优先,
只有当没有故障时,bRun为 ON才有意义。
复位优先触发器RS
功能: 复位双稳态触发器,复位优先。
逻辑关系: Q1=NOT RESET1 AND (Q1 OR SET)
PS:SET 为置位信号,RESET1 为复位信号。
解析: 当 RESET1 为“1”时,不论 SET 是否为“1”,Q1 输出都为“0”;
当 RESET1 为“0”时,如果 Q1 输出为“0”,一旦 SET 为“1”,Q1 输出立刻置位为“1”。如果 Q1 输出为“1”,不论 SET为“1”或者“0”,Q1输出保持为“1”。
时序图&状态表
编者旨在与各位工控同学一起学习交流,欢迎关注转发留言收藏
新手西门子PLC编程技巧,就是简单快速好用
本文通过例程的方式总结一些常用的西门子PLC编程技巧,从简单到复杂,从梯形图到SCL,希望对大家有所帮助。
(一)PLC系统常闭点
PLC程序的绝对常闭点,可以作为逻辑支路断开、调试或检修的屏蔽开关,尽量使用比较独立的存储位。
(二)PLC系统常开点
PLC程序的绝对常开点,可以作为逻辑支路接通、调试或检修的接通开关,尽量使用比较独立的存储位。
(三)PLC系统上电脉冲
PLC程序的系统上电脉冲,可以作为系统初始化脉冲来复位、清零和设置系统重要参数,尽量使用比较独立的存储位。
(四)一键触发启停功能
用一个按钮实现启动和停止功能,可以作为操作按钮不够时的一个补救措施。
(五)模拟量输入标定功能
将整数的模拟量标定为实数的工程量,相当于博途中自带的SCALE_X ,但该子程序结合高低量程限制后,标定和调试都更加方便。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
IF (#Emin < #Emax) AND (#Dmin < #Dmax) THEN
IF #Raw < #Dmin THEN
#RawTemp := #Dmin;
END_IF;
IF #Raw > #Dmax THEN
#RawTemp := #Dmax;
END_IF;
IF (#Raw >= #Dmin) AND (#Raw <= #Dmax) THEN
#RawTemp := #Raw;
END_IF;
#OutReal := (INT_TO_REAL(#RawTemp - #Dmin) / INT_TO_REAL(#Dmax - #Dmin)) * (#Emax - #Emin) + #Emin;
#OutPercentage := (#OutReal / (#Emax - #Emin)) * 100.0;
ELSE
#OutReal := 0.0;
#OutPercentage := 0.0;
END_IF;
(六)模拟量输出标定功能
将实数的工程量标定为整数的数字量,相当于博途中自带的NORM_X ,但该子程序结合高低量程限制后,标定和调试都更加方便。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
IF (#Dmin < #Dmax) AND (#Emin < #Emax) THEN
IF #Raw < #Emin THEN
#RawTemp := #Emin;
END_IF;
IF #Raw > #Emax THEN
#RawTemp := #Emax;
END_IF;
IF (#Raw >= #Emin) AND (#Raw <= #Emax) THEN
#RawTemp := #Raw;
END_IF;
#OutInteger := REAL_TO_INT(((#RawTemp - #Emin) / (#Emax - #Emin)) * INT_TO_REAL(#Dmax - #Dmin) + INT_TO_REAL(#Dmin));
#OutPercentage := ((((#RawTemp - #Emin) / (#Emax - #Emin)) * INT_TO_REAL(#Dmax - #Dmin) + INT_TO_REAL(#Dmin)) / INT_TO_REAL((#Dmax - #Dmin))) * 100.0;
ELSE
#OutInteger := 0;
#OutPercentage := 0.0;
END_IF;
RETURN;
(七)冒泡法排序功能
通过冒泡法升序或降序模式排序数组。
(1)子程序调用
(2)子程序变量声明
(3)模式为1(升序)的运行结果如下图所示:
(4)模式为0(降序)的运行结果如下图所示:
(5)SCL代码
IF #Enable THEN
//获取数组上限
#L := LOWER_BOUND(ARR := #Array, DIM := 1);
//获取数组下限
#H := UPPER_BOUND(ARR := #Array, DIM := 1);
//冒泡法排序
FOR #i := #L TO #H-1 DO
FOR #j := #L TO #H-1-#i DO
IF #Mode THEN
//升序
IF #Array[#j] > #Array[#j + 1] THEN
#temp1 := #Array[#j];
#Array[#j] := #Array[#j + 1];
#Array[#j + 1] := #temp1;
END_IF;
ELSE
//降序
IF #Array[#j] < #Array[#j + 1] THEN
#temp1 := #Array[#j];
#Array[#j] := #Array[#j + 1];
#Array[#j + 1] := #temp1;
END_IF;
END_IF;
END_FOR;
END_FOR;
END_IF;
(八)斜坡函数功能
输出值按照指定斜率(单位/秒)跟随设定值,可以用来防止数值突变,这个功能可以在博途中添加扩展库函数(LGF)后直接调用Ramp函数。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
#rv1:= RD_SYS_T(#ActualTime);
IF #InitFB = true THEN
#LastTime := #ActualTime;
#AuxOut := #SetPoint;
#Out := #AuxOut;
END_IF;
#DeltaTime_T:= T_DIFF(IN1:=#ActualTime, IN2:=#LastTime);
#DeltaTime_DI:= TIME_TO_DINT(#DeltaTime_T);
#DeltaTime:= DINT_TO_REAL(#DeltaTime_DI);
#DeltaTime := #DeltaTime / 1000.0;
#LastTime := #ActualTime;
IF #SetPoint < #AuxOut THEN
#Out := #AuxOut;
#auxR := #AuxOut - (#Rate * #DeltaTime);
#Out := #AuxOut;
#AuxOut := MAX(IN1 := #auxR, IN2 := #SetPoint);
#Out := #AuxOut;
RETURN;
ELSE
IF #SetPoint > #AuxOut THEN
#Out := #AuxOut;
#auxR := (#Rate * #DeltaTime) + #AuxOut;
#Out := #AuxOut;
#AuxOut := MIN(IN1 := #auxR, IN2 := #SetPoint);
#Out := #AuxOut;
END_IF;
END_IF;
RETURN;
例程说明
以上例程均在博途V15.1环境下测试通过,大家有什么好的编程技巧,欢迎留言!
相关问答
PLC300冒泡排序法程序怎么写?
冒泡排序每一趟排序把最大的放在最右边。比如:871256457887和12交换:128756457887和56交换:5687457887和45交换:458778...
plc怎么实现优先级?
PLC可以通过设置不同的触发条件和时间延迟来实现优先级控制。例如,可以将紧急停机按钮设置为最高优先级触发条件,确保在任何情况下都能立即停机。同时,设定一...
plc的优先级顺序?
程序的执行顺序对顺控程序作“自上而下”,“自左向右”处理。当plc投入运行后,其工作过程一般分为三个阶段,即输入采样、用户程序执行和输出刷...(二)用户...
plc中步序号是什么?
plc中步序号是若干条指令中按顺序排列的序号。当PLC投入运行时,它首先执行系统程序和CPU自检等工作。在没有中断或跳转控制的情况下,CPU从第一条指令开始,顺序...
Plc输入端子排序与程序内端子的关系?
PLC模块的地址根网络设置有关(基本是生产厂商设置好的),每一个输入端子都有一个固定的地址,在程序里需要哪个输入端子的信号,相应的点就设置为那个地址PLC模...
plc数据排列指令实际应用?
常开触点I0.0常闭触点I0.1和传送指令MOV_B组成网络1,当MOV_B指令前的条件满足时,会将值1赋给QB0,也就是将Q0.0置1。这时你若按下常闭触点I0.1,虽然可以使MOV...
PLC冒泡算法怎么让排序的寄存器与输出点建立对应关系?
最简单的方式,建立临时变量,寄存器内的数据比较后先放入到临时变量里,每次循环结束,再使用MOV指令将排序好的数据放入到相应地址里。既然是冒泡排序,肯定不...
西门子plc五个信号先后排序?
西门子的PLC五个信号的先后排序是根据它们在控制过程中的重要性和优先级来决定的。常见的排序方式为输入信号、输出信号、中断信号、计时器和计数器信号。其...
学习西门子的PLC编程,需要哪方面的理论知识?
你好,很荣幸能回答你的问题,希望我的回答对你有帮助。你遇到的问题我在学习PLC过程中也遇到过。这应该是大家的必经之路吧。学习任何一个品牌PLC都需要一定的...
某plc控制系统?
CPU226,或CN;EM231模块;EM235模块,4模拟量输入,1模拟量输出;EM232模块,2模拟量输出;模块位置就按这个顺序排列,DC5V电源够用的。CPU226,或CN;EM231模块;E...