【SCL】for循环指令的应用&三层电梯模拟控制

使用scl编写三层电梯模拟控制,并学习for循环指令的应用。

文章目录

目录

文章目录

前言

1.指令学习

 2.循环传值

3.嵌套调用

4.冒泡排序

1.排序

 2.优化

二、三层电梯模拟控制

1.控制要求

2.编写思路

3.功能块部分编程

1.开门关门块

 2.去1层2层3层的块

 3.主程序部分

4.for循环部分(优先级) 

1.上升优先 

 2.下降优先

 3.等于楼层时

5. 完善程序

 1.上升下降互锁

 2.楼层限位判断

 3.启动停止

6.主程序(完整)

总结





前言

本章我们一起来完成12个小项目试验中的最后一个——三层电梯模拟控制;并通过本章来学习一下for循环指令的应用,其中包括:循环传值,嵌套调用,冒泡排序,和编写电梯的思路和方法。好的,下面我们进入今天的内容!


一、for循环指令

在前面的指令篇中,我们有提到过,但具体的使用没有说,这里我们来学习一下。 

1.指令学习

 关于for循环,它需要有明确的循环次数,下面第一个参数是一个变量的起始值,第2个是结束值,第3个是步宽(不使用默认是1,一次走一个,如果是2就是一次走两个),for循环中是执行内容。

 下面是博图中关于for循环的说明:


 2.循环传值

 这里简单使用for通过一个数组来对另一个数组进行传值:

建立两个数组和整型变量,在for循环中先确定变量的初始值,这里从0开始到5结束和数组的个数相同(如果变量超过数组个数,会导致溢出报错);by是1,一次一个(这里不用by也可以,默认是1);内容执行程序就是获取两个数组的下标然后进行传值。 

 效果:


3.嵌套调用

 for循环也可以嵌套调用,简单示范的话,这里我们可以给一个二维数组进行传值;二维数组有两个参数或者叫坐标,可以看下图:

这里我们给二维数组传参数,就建立两个二维数组 ,中间用,号隔开;建立两个整型变量。

 这里循环内部就是将变量w和t放在数组中,让他们不断变化,例:第一次的w为0,进入第2个for循环中,t从0循环到5,然后跳出,再走到第1个循环w为2,然后再次进入第2个循环;这样就将二维数组0到5,1到5,2到5,3到5等,全部走一遍。

 
效果:


4.冒泡排序

1.排序

知道for循环如何使用后,这里我们可以来看一下冒泡排序;它是一个排序方法,可以看下360百科中的解释

 算法原理:


知道原理后,我们来用SCL中for循环来实现一下: 

 我们建立1个数组,来存放排序过的排序值;再建立一些变量;这里我们初始变量为0;

len是我们的总个数(像0..5,就有6个数),总个数-1就是下标的值;进入循环后,将第1个数据和第2个数据进行比较,如果第1个数据大于第2个数据,就将它们两个交换一下,然后一直循环直到结束,那么排序就完成了。

这里我们提前写好数组里面的起始值,然后再执行; 

 效果:

 2.优化

上面我们是提前写好起始值,然后进行排序的,我们这里也可以做两个数组,一个在运行时让我们输入初始值,另一个在运行时输出排序值;另外第2个循环也可以优化一下,每次让它-j,因为排序是有重复比较的,我们每次-j可以优化掉这一点;

在这个前面使用了一个peek指令,读取存储地址,然后放入到排序数组进行排序;注意:使用peek要取消块的优化,下面的np_temp是获取偏移地址的。

 效果:









二、三层电梯模拟控制

前面简单学习回顾一下for循环指令,接下来我们一起来看三层电梯的控制。

1.控制要求

 控制要求可以简单看一下,主要就是三个楼层来回切换上升或下降;

 电梯参考:

 


2.编写思路

编写思路这里大家可以想一想平时的电梯都是如何工作的,其实简单的上升下降是比较好控制的,再加一个开门关门就差不多可以实现简单功能了,但是SCL写的话要用比较多的if来判断,这里我们的 上升,下降,开门关门,还有每个楼层外的按钮和电梯内的按钮这些可以都做成一个块,在使用时多次调用就可以,那么一个简单的电梯控制就差不多了,后面我们要根据电梯实际运行时的一个状态,再加一些控制,像简单的优先级,先去2层再去3层等等。


3.功能块部分编程

编程思路确定后,下面来编写具体的程序,这里我们先将多次需要使用的功能写在一个块里,将开关门做一个块,去1层2层3层做成块,最后在一个主的程序中将它们联系起来,来完成控制要求。

这里是用的FB块,建立的形参 ;

1.开门关门块

这里的要求就是,延时1s开门,延时2s关门,我们来编写一下:

变量m不等于0是触发条件,我们要执行开关门时只要让m不等0就可以了;变量HH是正在开门关门的一个标志位,开关门时不能进行其他操作; 

#T[0].TON(IN := #BZ1,PT := t#1s);
#T[1].TON(IN := #BZ2,PT := t#2s);
#T[2].TON(IN := #BZ3,PT := T#2s);

IF "电梯_DB".M <> 0 THEN
    #HH := 1;
    #BZ1 := 1;
    //"电梯_DB".CLOSE := 0;
    IF #T[0].Q THEN
        "电梯_DB".OPEN := 1;
        #BZ2 := 1;
    END_IF;
    IF #T[1].Q THEN
        "电梯_DB".OPEN := 0;
        "电梯_DB".CLOSE := 1;
        #BZ3 := 1;
    END_IF;
    IF #T[2].Q THEN
        "电梯_DB".CLOSE := 0;
        #BZ1 := 0;
        #BZ2 := 0;
        #BZ3 := 0;
        "电梯_DB".M := 0;
   
        RESET_TIMER(#T[0]);
        RESET_TIMER(#T[1]);
        RESET_TIMER(#T[2]);
        #HH := 0;
        "数据块_1"."SZ"["数据块_1".T] := 0;
        "数据块_1".T := 0;
        "数据块_1".W := 0;
        "电梯_DB".I := 0;
        "电梯_DB".Q := 0;
        "电梯_DB".O := 0;
 
    END_IF;
END_IF;

 2.去1层2层3层的块

这里我将这个块,分成了3个来写,方便后面调试或者完善; 

 去1层:(在2层或3层按下1层按钮时会触发)

这里就很简单了,A=1的时候,电梯下降 ,到达1层后给m赋值,执行开门关门,这里&上了一个开关门的一个标志位,代表开关门时无法执行去1层(后面的2层3层也一样)

//电梯去1层
#P[0](CLK := "电梯_DB".SQ1);
IF "电梯_DB".A = 1 & NOT "电梯_DB".BZ1 & NOT "开关门_DB".HH  & "电梯_DB".C = 0 THEN
    "电梯_DB".DOWN := 1;
    IF #P[0].Q THEN
        "电梯_DB".DOWN := 0;
        "电梯_DB".M := 4;
        "电梯_DB".A := 0;
    END_IF;
END_IF;

去2层:(去2层有两种情况,在3层会下降,在1层会上升)

 当b=1执行上升,当b1=2执行下降,到达楼层后停止;

//电梯去往2层
#P[1](CLK := "电梯_DB".SQ2);
IF "电梯_DB".B = 1 & NOT "电梯_DB".BZ2 & NOT "开关门_DB".HH THEN
    "电梯_DB".UP := 1;
ELSIF "电梯_DB".B1 = 2 & NOT "电梯_DB".BZ1 & NOT "开关门_DB".HH THEN
    "电梯_DB".DOWN := 1;
END_IF;
IF #P[1].Q & "电梯_DB".B = 1 THEN
    "电梯_DB".UP := 0;
    "电梯_DB".K := 1;
    "电梯_DB".B := 0;
    "电梯_DB".M := 2;
 
ELSIF #P[1].Q & "电梯_DB".B1 = 2 THEN
    "电梯_DB".DOWN := 0;
    "电梯_DB".K := 1;
    "电梯_DB".B1 := 0;
    "电梯_DB".M := 3;

END_IF;

 去3层:(去3层是上升,不管是1层还是2层呼叫,都会上升)

 这里和去1层基本相同;

//电梯去3层
#P[0](CLK := "电梯_DB".SQ3);
IF "电梯_DB".C = 1 & NOT "电梯_DB".BZ2 & NOT "开关门_DB".HH & "电梯_DB".O=0 THEN
    "电梯_DB".UP := 1;
    IF #P[0].Q THEN
        "电梯_DB".UP := 0;
        "电梯_DB".M := 3;
        "电梯_DB".C := 0;
    END_IF;
END_IF;

 3.主程序部分

 前面两个块好后,我们可以在主程序块中编写一下,让它们执行相应的动作:

 开始先调用一下我们的函数块,后面用3个楼层限位来触发3个楼层标志,再根据楼层标志来触发条件执行相应的的楼层;


    
    "开关门_DB"();   //开关门函数块
 
        "去1层_DB"();//楼层函数块
        "去2层_DB"();
        "去3层_DB"();
    
    // 用3个楼层限位的通和断,来接通或断开中继和楼层指示灯;
    // 是对三个楼层的限位进行控制。
    IF #SQ1 THEN
        #ZJ[1] := 1;
        #ZJ[2] := 0;
        #ZJ[3] := 0;
        #L1 := 1;
        "数据块_1".U := 1;
    ELSE
        #ZJ[1] := 0;
        #L1 := 0;
    END_IF;
    IF #SQ2 THEN
        #ZJ[2] := 1;
        #ZJ[3] := 0;
        #ZJ[1] := 0;
        #L2 := 1;
        "数据块_1".U := 2;
    ELSE
        #ZJ[2] := 0;
        #L2 := 0;
    END_IF;
    IF #SQ3 THEN
        #ZJ[3] := 1;
        #ZJ[2] := 0;
        #ZJ[1] := 0;
        #L3 := 1;
        "数据块_1".U := 3;
    ELSE
        #ZJ[3] := 0;
        #L3 := 0;
    END_IF;
    
    //在运行时进行互锁,上升时不能下降,下降时不能上升
    IF #UP = 1 THEN
        #BZ1 := 1;
    ELSE
        #BZ1 := 0;
    END_IF;
    IF #DOWN = 1 THEN
        #BZ2 := 1;
    ELSE
        #BZ2 := 0;
    END_IF;
    //获取按钮上升沿
    #P[0](CLK := #SQ1);
    #P[1](CLK := #SQ2);
    #P[2](CLK := #SQ3);
    
    #PR[0](CLK := #S1);
    #PR[1](CLK := #S2);
    #PR[2](CLK := #S3);
    #PR[3](CLK := #SU1);
    #PR[4](CLK := #SU2);
    #PR[5](CLK := #SD2);
    #PR[6](CLK := #SD3);





 这里就是楼层执行部分,在1层按下1楼按钮后,执行开门关门,如果按下2层3层按钮就执行我们的去2层去3层的块。

//一层执行
    IF #ZJ[1] THEN
        IF "数据块_1".T = 1 THEN
            #M := 1;
        END_IF;
        IF "数据块_1".T = 2 THEN
            #O := 1;
            #B := 1;
        END_IF;
        IF "数据块_1".T = 3 THEN
            #C := 1;
        END_IF;
        
    END_IF;
    //二层执行
    IF #ZJ[2] THEN
        IF "数据块_1".T = 2 THEN
            #M := 1;
        END_IF;
        IF "数据块_1".T = 1 THEN
            #A := 1;
        END_IF;
        IF "数据块_1".T = 3 THEN
            #C := 1;
        END_IF;
    END_IF;
    //三层执行
    IF #ZJ[3] THEN
        IF "数据块_1".T = 3 THEN
            #M := 1;
        END_IF;
        IF "数据块_1".T = 1 THEN
            #A := 1;
        END_IF;
        IF "数据块_1".T = 2 THEN
            #B1 := 2;
        END_IF;
    END_IF;

4.for循环部分(优先级) 

1.上升优先 

 在电梯执行时,如果在1层按下3 2 1 内部按钮,那么要优先执行距离1层最近的楼层,这里就用到for循环:在循环数组时,执行3,2,1,进行循环,如果按下3再按下2,那么2会将3覆盖掉;我们再判断一下它是否大于当前楼层,如果是就将找到的最小楼层给变量T,然后再执行楼层;

 //上升优先级(后按下的按钮会覆盖掉前面的)
    FOR "数据块_1".W := 3 TO 1 BY -1 DO
        IF "数据块_1".SZ["数据块_1".W] = TRUE THEN
            IF "数据块_1".W > "数据块_1".U THEN
                "数据块_1".T := "数据块_1".W;
            END_IF;
        END_IF;
    END_FOR;

 2.下降优先

 这里和上升优先相反,是从1到3,依次执行,然后判断是否小于当前楼层,如果是就执行;

 //下降优先级
    FOR "数据块_1".W := 1 TO 3 BY 1 DO
        IF "数据块_1".SZ["数据块_1".W] = TRUE THEN
            IF "数据块_1".W < "数据块_1".U THEN
                "数据块_1".T := "数据块_1".W;
            END_IF;
        END_IF;
    END_FOR;

 3.等于楼层时

在等于楼层时,再执行这一种情况; 

 //等于当前楼层时进行判断
        FOR "数据块_1".W := 1 TO 3 BY 1 DO
            IF "数据块_1".SZ["数据块_1".W] = TRUE THEN
                IF "数据块_1".W = "数据块_1".U THEN
                    "数据块_1".T := "数据块_1".W;
                END_IF;
            END_IF;
        END_FOR;

5. 完善程序

这里基本功能和简单优先级都可以实现了,我们再将各部分程序完善一下 ;

 1.上升下降互锁

在上面的楼层部分加上BZ1或BZ2的常闭,就可以了。 

 //在运行时进行互锁,上升时不能下降,下降时不能上升
    IF #UP = 1 THEN
        #BZ1 := 1;
    ELSE
        #BZ1 := 0;
    END_IF;
    IF #DOWN = 1 THEN
        #BZ2 := 1;
    ELSE
        #BZ2 := 0;
    END_IF;

 2.楼层限位判断

 判断是否有多个限位被触发,如果有就停止所有动作;

//判断是否有两个或两个以上的限位被触发,如果有就停止当前所有动作
IF (#SQ1 & #SQ2) OR (#SQ1 & #SQ3) OR (#SQ2 & #SQ3 OR #SQ1 & #SQ2 & #SQ3) THEN
    #BJ100 := 1;
    #L1 := 0;
    #L2 := 0;
    #L3 := 0;
ELSE
    #BJ100 := 0;
END_IF;

 3.启动停止

//停止,按下后运行完当前楼层后停止,按下停止后再按楼层呼叫按钮就无效了
IF #OFF THEN
    #TZ100 := 1;
END_IF;
//按下启动后,按钮恢复初始状态
IF #ON THEN
    #TZ100 := 0;
END_IF;

6.主程序(完整)

 这里还加了一个按下按钮后延时2s后再执行的定时器,主要是在多个按钮按下时有足够的时间来进行一个优先级判断,然后执行。

//判断是否有两个或两个以上的限位被触发,如果有就停止当前所有动作
IF (#SQ1 & #SQ2) OR (#SQ1 & #SQ3) OR (#SQ2 & #SQ3 OR #SQ1 & #SQ2 & #SQ3) THEN
    #BJ100 := 1;
    #L1 := 0;
    #L2 := 0;
    #L3 := 0;
ELSE
    #BJ100 := 0;
END_IF;
//停止,按下后运行完当前楼层后停止,按下停止后再按楼层呼叫按钮就无效了
IF #OFF THEN
    #TZ100 := 1;
END_IF;
//按下启动后,按钮恢复初始状态
IF #ON THEN
    #TZ100 := 0;
END_IF;

IF NOT #BJ100 THEN//多个限位按下就停止
    
    "开关门_DB"();   //开关门函数块
    IF #T[5].Q THEN  //启动延时时间
        "去1层_DB"();//楼层函数块
        "去2层_DB"();
        "去3层_DB"();
    END_IF;
    //启动延时
    #T[5].TON(IN := #BZ5,PT := T#2s);
    //当按钮全部复位后,标志位清零
    IF "数据块_1".SZ[1] = "数据块_1".SZ[2] & "数据块_1".SZ[2] = "数据块_1".SZ[3] & "数据块_1".SZ[3] = 0 THEN
        #BZ5 := 0;
    END_IF;
    
    // 用3个楼层限位的通和断,来接通或断开中继和楼层指示灯;
    // 是对三个楼层的限位进行控制。
    IF #SQ1 THEN
        #ZJ[1] := 1;
        #ZJ[2] := 0;
        #ZJ[3] := 0;
        #L1 := 1;
        "数据块_1".U := 1;
    ELSE
        #ZJ[1] := 0;
        #L1 := 0;
    END_IF;
    IF #SQ2 THEN
        #ZJ[2] := 1;
        #ZJ[3] := 0;
        #ZJ[1] := 0;
        #L2 := 1;
        "数据块_1".U := 2;
    ELSE
        #ZJ[2] := 0;
        #L2 := 0;
    END_IF;
    IF #SQ3 THEN
        #ZJ[3] := 1;
        #ZJ[2] := 0;
        #ZJ[1] := 0;
        #L3 := 1;
        "数据块_1".U := 3;
    ELSE
        #ZJ[3] := 0;
        #L3 := 0;
    END_IF;
    
    //在运行时进行互锁,上升时不能下降,下降时不能上升
    IF #UP = 1 THEN
        #BZ1 := 1;
    ELSE
        #BZ1 := 0;
    END_IF;
    IF #DOWN = 1 THEN
        #BZ2 := 1;
    ELSE
        #BZ2 := 0;
    END_IF;
    //获取按钮上升沿
    #P[0](CLK := #SQ1);
    #P[1](CLK := #SQ2);
    #P[2](CLK := #SQ3);
    
    #PR[0](CLK := #S1);
    #PR[1](CLK := #S2);
    #PR[2](CLK := #S3);
    #PR[3](CLK := #SU1);
    #PR[4](CLK := #SU2);
    #PR[5](CLK := #SD2);
    #PR[6](CLK := #SD3);
    IF NOT #TZ100 THEN //按下停止后按钮无效
        //根据按下的按钮传入相应的数值,然后启动bz5进行延时(目的是判断是否还有其它按钮按下,如果有在延时时间
        //内进行排序,走离自己比较近的楼层
        IF #PR[0].Q OR #PR[3].Q THEN
            "数据块_1".#"SZ"[1] := 1;
            #BZ5 := 1;
        ELSIF #PR[1].Q OR #PR[4].Q OR #PR[5].Q THEN
            "数据块_1".#"SZ"[2] := 1;
            #BZ5 := 1;
        ELSIF #PR[2].Q OR #PR[6].Q THEN
            "数据块_1".#"SZ"[3] := 1;
            #BZ5 := 1;
        END_IF;
    END_IF;
    //获取数组中的按钮值,进行判断
    //上升优先级(后按下的按钮会覆盖掉前面的)
    FOR "数据块_1".W := 3 TO 1 BY -1 DO
        IF "数据块_1".SZ["数据块_1".W] = TRUE THEN
            IF "数据块_1".W > "数据块_1".U THEN
                "数据块_1".T := "数据块_1".W;
            END_IF;
        END_IF;
    END_FOR;
    //下降优先级
    FOR "数据块_1".W := 1 TO 3 BY 1 DO
        IF "数据块_1".SZ["数据块_1".W] = TRUE THEN
            IF "数据块_1".W < "数据块_1".U THEN
                "数据块_1".T := "数据块_1".W;
            END_IF;
        END_IF;
    END_FOR;
    //等于当前楼层时进行判断
    IF NOT #BZ1 & NOT #BZ2 THEN
        FOR "数据块_1".W := 1 TO 3 BY 1 DO
            IF "数据块_1".SZ["数据块_1".W] = TRUE THEN
                IF "数据块_1".W = "数据块_1".U THEN
                    "数据块_1".T := "数据块_1".W;
                END_IF;
            END_IF;
        END_FOR;
    END_IF;
    
    //一层执行
    IF #ZJ[1] THEN
        IF "数据块_1".T = 1 THEN
            #M := 1;
        END_IF;
        IF "数据块_1".T = 2 THEN
            #O := 1;
            #B := 1;
        END_IF;
        IF "数据块_1".T = 3 THEN
            #C := 1;
        END_IF;
        
    END_IF;
    //二层执行
    IF #ZJ[2] THEN
        IF "数据块_1".T = 2 THEN
            #M := 1;
        END_IF;
        IF "数据块_1".T = 1 THEN
            #A := 1;
        END_IF;
        IF "数据块_1".T = 3 THEN
            #C := 1;
        END_IF;
    END_IF;
    //三层执行
    IF #ZJ[3] THEN
        IF "数据块_1".T = 3 THEN
            #M := 1;
        END_IF;
        IF "数据块_1".T = 1 THEN
            #A := 1;
        END_IF;
        IF "数据块_1".T = 2 THEN
            #B1 := 2;
        END_IF;
    END_IF;
END_IF;





总结

上面就是for循环和最后一个项目三层电梯的所有内容了!

原文地址:https://blog.csdn.net/weixin_67913271/article/details/129474952

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读2.2k次,点赞6次,收藏20次。在我们平时办公工作中,很多时候我们经常会使用到虚拟机来进行环境的测试,我们平时在虚拟机上接触的最多的莫过于Linux和Winwdos。不过虚拟机环境和物理机环境是无法直接传输的,那么有的时候呢,同学们又想要在两者之间相互传输文件,可能就会使用QQ邮箱等形式来传输,这样的效率又慢而且繁琐,今天我就为大家带来一种非常便捷的传输方式。通过XFTP工具来进行文件传输。_xftp连接windows
文章浏览阅读1k次。解决 Windows make command not found 和 安装 GCC 环境_windows下载gcc
文章浏览阅读3.2k次,点赞2次,收藏6次。2、鼠标依次点击“计算机配置“ - ”管理模板“ - ”网络“ - ”Lanman工作站”,点击右侧的“启用不安全的来宾登录”策略。Windows访问samba共享时,提示“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问”1、键盘按下window+R键,输入gpedit.msc,启动本地组策略编辑器。首先在终端中输入sudo ufw status查看当前防火墙状态。默认状态是“未配置”,修改为“已启用”。示例:创建一个narada的目录在/home下。1.更新apt储存库列表。_ubuntu samba 目标文件夹访问被拒绝
文章浏览阅读1.3w次。蓝光版属于高清版的一种。BD英文全名是Blu-ray Disc,一种高清的电影版本,这种电影十分清晰但是数据量巨大,占数十G甚至上百G的容量,只有蓝光光碟才能装得下,所以这种高清电影被称为BD版。一般的高清电影多半是从蓝光电影、国外的高清电视频道上压制而来的,可以通过网络下载,多数都经过二次压缩,画质要逊于原视频,不过压缩后的容量从蓝光的25G-50G会减少成4G-8G等(15G-20G不等)。众所周知,视频有两种常见的清晰度,BD和HD,在看电影的时候最常出现这两个标志,那么BD和HD具体指的是什么呢?_bd hd
文章浏览阅读974次,点赞7次,收藏8次。提供了更强大的功能,因为它允许直接访问当前元素,而不需要类型转换。接口,它可以提供一个迭代器,用于按顺序访问集合中的元素。接口是只读的,它只能支持前向迭代,不能修改集合中的元素。类型的集合实例,并向其中添加了几个元素。接口,可以创建一个能够迭代访问泛型集合中元素的迭代器。接口,我们可以在 C# 中实现可迭代的集合,并使用。循环和迭代器手动遍历集合,并输出每个元素的值。接口表示一个可枚举的集合,它定义了一个方法。属性,用于获取集合中当前位置的元素。存储集合中的元素,并实现了。的泛型集合类,它实现了。
文章浏览阅读1.4w次,点赞5次,收藏22次。如果使用iterator的remove方法则会正常,因为iterator的remove方法会在内部调用List的remove方法,但是会修改excepedModCount的值,因此会正常运行。因为遍历过程中进行remove 操作时,该位置后面的元素会挤到前面来,这时候会发生一种情况就是原来元素的位置会被他后面的元素取代,而该位置已经遍历过了,所以该元素不会背遍历。当我们倒序遍历元素的时候,无论删除元素之后的元素怎么移动,之前的元素对应的索引(index)是不会发生变化的,所以在删除元素的时候不会发生问题。_list删除某个元素
文章浏览阅读2.9w次,点赞45次,收藏192次。Windows下配置Visual Studio _vs2022环境变量配置
文章浏览阅读7w次,点赞162次,收藏778次。pip 是Python包管理工具,提供了对 Python 包的查找、下载、安装、卸载的功能,目前Python 3.4 和 2.7 及以上版本都有配套安装,一般pip的位置在...pythonScripts文件夹里面,而在其他版本需要自行下载。_python pip install安装
文章浏览阅读5.8k次,点赞2次,收藏12次。①此电脑右击----->选择属性----->高级系统设置----->环境变量----->path----->编辑----->新建。第一个选项意思就是将安装路径填入到系统环境变量中,这里勾选,后面使用可能会出现问题,建议不要勾选,安装好之后手动添加环境变量。注意:如果提示conda不是内部或外部命令,原因是Anaconda的环境变量没配置好。如果不想立即打开anaconda,不勾选直接finish就好。②输入 conda --version ,查看conda环境。②直接按win键,搜索“环境变量”_windows安装anaconda
文章浏览阅读5.1k次,点赞8次,收藏55次。Windows 系统从零配置 Python 环境,安装CUDA、CUDNN、PyTorch 详细教程_windows cuda cudnn配置
文章浏览阅读1.5w次,点赞54次,收藏68次。macOS系统自带有VNC远程桌面,我们可以在控制端上安装配置VNC客户端,以此来实现远程控制macOS。但通常需要在不同网络下进行远程控制,为此,我们可以在macOS被控端上使用cpolar做内网穿透,映射VNC默认端口5900,通过所生成的公网地址,来实现在公网环境下远程控制VNC。_vnc mac
文章浏览阅读2.4k次,点赞5次,收藏11次。进入后根据自己的电脑系统下载,这是python 3.10版本下载地址,如果想要下载其它版本可进入此链接(下载完成后点击进行安装点击下一步,到这一步时,可以选择将Anaconda添加我的PATH环境变量中,这样就不用自己手动配置和环境变量。安装完成后,打开终端,输出 python 命令可查看是否安装成功。如果显示自己刚才安装的版本号说明安装成功。查看conda版本命令:conda info。_paddlespeech下载
文章浏览阅读3.3k次。所以如果要删除之前新增的课程编译原理,只需输入命令del Course:8:Cname,同时还应该把本课程的学分删除del Course:8:Ccredit,如下图所示;Redis并没有修改数据的命令,所以如果在Redis中要修改一条数据,只能在使用set命令时,使用同样的键值,然后用新的value值来覆盖旧的数据。先调用get命令,输出原先的值,然后set新的值,最后再get得到新值,所以修改成功。输入命令后没有报错,表示成功了,刷新windows的服务,多了一个redis服务。_redis windows服务
文章浏览阅读2.1w次,点赞9次,收藏56次。​​接着在【工作负荷】中,选择【使用C++桌面开发】 ,右边【安装详细信息】去除其它可选项,只勾选【MSVCv142 】和 【Windows 10 SDK】,按图示修改,然后右下角点击安装,之后会有提示让你重启电脑。重启电脑之后,再进行pip安装。报错原因是pip所安装的包需要使用C++编译后才能够正常安装,但是当前安装环境中缺少完整的C++编译环境,因此安装失败。3.安装Microsoft Visual C++ Build Tool离线安装包(1个多G),CSDN资源很多,需要积分下载,_error: microsoft visual c++ 14.0 or greater is required. get it with "micros
文章浏览阅读1.1w次,点赞3次,收藏7次。Step 3: 在右侧窗口中找到名称为“LongPathsEnabled”的“DWORD (32 位) 值”条目,并双击它。通过注册表方法或组策略方法启用长路径支持后,您将能够在 Windows 中使用长路径,并能够访问和处理长路径下的文件和文件夹。Step 2: 依次选择“计算机配置” > “管理模板” > “系统” > “文件资源管理器”。Step 3: 找到“启用 Win32 长路径”设置,双击它。Step 4: 选择“已启用”选项按钮,然后选择“应用”按钮。_windows长路径支持
文章浏览阅读2.5k次,点赞81次,收藏86次。
文章浏览阅读1.3k次,点赞65次,收藏50次。顺序表,链表,栈,队列,ArrayList,LinkedList,Stack,Queue
文章浏览阅读2.3k次,点赞2次,收藏2次。AnyTXTSearcher是一款能够帮助我们对文档以及文本内容进行快速搜索和管理的工具,通过该软件能够搜索各种Office文档,文本文件,代码,PDF文档等,顶级的全文搜索引擎1秒钟之内即可完成搜索。_anytxt searcher
文章浏览阅读8.8k次,点赞73次,收藏70次。有时,在删除/移动/重命名文件夹/文件时,会遇到如下警告,即使将打开的程序关闭了,后台也可能会有没关干净的相关进程。_解除占用
文章浏览阅读4.3w次,点赞91次,收藏102次。JDK(Java Development Kit)是Java开发工具包的缩写,包含了Java编译器、Java虚拟机、Java类库等众多组件,是Java开发的基石,提供了编写、编译和运行Java程序所必需的工具。同时,为了让系统能够正确识别Java环境,在开始使用JDK进行Java开发之前,需要先把JDK安装到本地计算机,并配置好相应的环境变量。本文将介绍JDK安装与环境变量配置的方法。_windows安装jdk并配置环境变量