久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2439|回復: 31
收起左側

怎么樣在同樣的條件下,實現兩種不同的程序語句?

  [復制鏈接]
ID:1104510 發表于 2023-12-15 20:21 來自觸屏版 | 顯示全部樓層 |閱讀模式
如題,在if()條件相同的情況下,實現兩種不同的{}語句,使之實現兩種不同的功能?求大神指點!
回復

使用道具 舉報

ID:401564 發表于 2023-12-15 23:12 | 顯示全部樓層
不知道你要求是什么?
if如果為真,那就是唯一選擇執行呀!
回復

使用道具 舉報

ID:1104510 發表于 2023-12-16 06:56 來自觸屏版 | 顯示全部樓層
Y_G_G 發表于 2023-12-15 23:12
不知道你要求是什么?
if如果為真,那就是唯一選擇執行呀!

我做了一套自動化小設備,就是用4個接近開關控制一個小直流電機的正反轉,就是在同樣的一個條件下,需要實現停止跟反轉這兩個功能,我現在正轉跟停止已經實現了,就是無法實現反轉,整個流程是:反轉~停止~正轉~停止~反轉~停止,我已經實現了前面四個動作,就差后面兩個動作了,就差最后兩個動作,因為第五個反轉的條件跟第三個正轉的條件一樣,所以導致第五個反轉無法實現,求指導一下,應該怎么處理,才能實現反轉

回復

使用道具 舉報

ID:895440 發表于 2023-12-16 09:52 | 顯示全部樓層
不可能,一個條件必定對于一個動作
沒有這種東西,人也做不到
回復

使用道具 舉報

ID:213173 發表于 2023-12-16 11:23 | 顯示全部樓層
鄭效桂 發表于 2023-12-16 06:56
我做了一套自動化小設備,就是用4個接近開關控制一個小直流電機的正反轉,就是在同樣的一個條件下,需要 ...

相同判斷條件不可能做出截然相反且都正確的結果,否則不就亂套了。必須創造可以識別的條件。既然有4個接近開關就能判斷機械位置,不同的機械位置就是判斷條件。比如再設置一個變量x,初始為0,正轉后停止x=1,反轉后停止x=2來記憶運行經歷。當不知道下一步是正還是反轉,x就是判斷條件。
回復

使用道具 舉報

ID:341045 發表于 2023-12-16 13:20 | 顯示全部樓層
多加一個以前電機正反轉的標志一起帶進來判斷.  如果不能處理, 就多弄一個標志, 碰到這條件標志取反, 由標志控制電機正反轉(比如標志為0正轉, 不為0反轉)
回復

使用道具 舉報

ID:384109 發表于 2023-12-16 13:28 | 顯示全部樓層
鄭效桂 發表于 2023-12-16 06:56
我做了一套自動化小設備,就是用4個接近開關控制一個小直流電機的正反轉,就是在同樣的一個條件下,需要 ...

增加標志吧
回復

使用道具 舉報

ID:883242 發表于 2023-12-16 23:28 | 顯示全部樓層
鄭效桂 發表于 2023-12-16 06:56
我做了一套自動化小設備,就是用4個接近開關控制一個小直流電機的正反轉,就是在同樣的一個條件下,需要 ...

狀態機,加個狀態變量,反轉~停止~正轉~停止~反轉~停止分別對應狀態0、1、2、3、4、5……
回復

使用道具 舉報

9#
無效樓層,該帖已經被刪除
10#
無效樓層,該帖已經被刪除
ID:1104510 發表于 2023-12-17 07:21 | 顯示全部樓層
lzts88 發表于 2023-12-16 13:20
多加一個以前電機正反轉的標志一起帶進來判斷.  如果不能處理, 就多弄一個標志, 碰到這條件標志取反, 由標 ...


//IN1 IN2 IN3 IN4分別對應4個接近開關
//COM1 對應正轉繼電器,
//COM2對應反轉繼電器,
//COM3對應警報繼電器
void csh(){COM1 =1;COM2 =0;C0M3 =1;} //開機初始化,電機反轉
void zz(){COM1 =0;COM2 =1;COM3 =1;}//正轉
void fz(){COM1 =1;COM2 =0;COM3 =0;}//反轉,并發出警報
void jb(){COM1 =1;COM2 =1;COM3 =0;}//反轉到達限位,警報繼續
void tz(){COM1 =1;COM2 =1;COM3 =1;}//正轉或者反轉到達限位后,電機停止
void main()                                  
        {
                 while(1)
                        {
                                if((IN1 ==1)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){csh();}
                                  //開機初始化,電機反轉
                                if((IN1 ==1)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){tz();}
                                  //I電機停止
                                if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){zz();}
                                 //電機正轉
                                if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){zz();}
                                 //電機正轉
                                if((IN1 ==0)&&(IN2 ==0)&&(IN3 ==1)&&(IN4 ==1)){tz();}
                                 //電機停止
                                if((IN1 ==0)&&(IN2 ==0)&&(IN3 ==0)&&(IN4 ==1)){tz();}
                     //電機停止
                                if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==0)&&(IN4 ==1)){fz();}
                     //電機反轉
                                if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){fz();}
                        //電機反轉
                                if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){tz();}
                                   //電機停止

                   }

                       
        }
這是我寫的代碼,應該怎么添加標志呢
回復

使用道具 舉報

ID:1104510 發表于 2023-12-17 07:22 | 顯示全部樓層
wulin 發表于 2023-12-16 11:23
相同判斷條件不可能做出截然相反且都正確的結果,否則不就亂套了。必須創造可以識別的條件。既然有4個接 ...

//IN1 IN2 IN3 IN4分別對應4個接近開關
//COM1 對應正轉繼電器,
//COM2對應反轉繼電器,
//COM3對應警報繼電器
void csh(){COM1 =1;COM2 =0;C0M3 =1;} //開機初始化,電機反轉
void zz(){COM1 =0;COM2 =1;COM3 =1;}//正轉
void fz(){COM1 =1;COM2 =0;COM3 =0;}//反轉,并發出警報
void jb(){COM1 =1;COM2 =1;COM3 =0;}//反轉到達限位,警報繼續
void tz(){COM1 =1;COM2 =1;COM3 =1;}//正轉或者反轉到達限位后,電機停止
void main()                                  
        {
                 while(1)
                        {
                                if((IN1 ==1)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){csh();}
                                  //開機初始化,電機反轉
                                if((IN1 ==1)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){tz();}
                                  //I電機停止
                                if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){zz();}
                                 //電機正轉
                                if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){zz();}
                                 //電機正轉
                                if((IN1 ==0)&&(IN2 ==0)&&(IN3 ==1)&&(IN4 ==1)){tz();}
                                 //電機停止
                                if((IN1 ==0)&&(IN2 ==0)&&(IN3 ==0)&&(IN4 ==1)){tz();}
                     //電機停止
                                if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==0)&&(IN4 ==1)){fz();}
                     //電機反轉
                                if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){fz();}
                        //電機反轉
                                if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){tz();}
                                   //電機停止

                   }

                       
        }
這是我寫的代碼,應該怎么添加條件呢
回復

使用道具 舉報

ID:161164 發表于 2023-12-17 14:38 | 顯示全部樓層
  1. uchar Step = 0;
  2. void main()
  3. {
  4.         while(1)
  5.         {
  6.                 switch(Step)
  7.                 {
  8.                         case 0:
  9.                                 if((IN1 ==1)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1))
  10.                                 {
  11.                                         csh();
  12.                                         Step++;
  13.                                 }
  14.                                 break;
  15.                         //開機初始化,電機反轉
  16.                         case 1:
  17.                                 if((IN1 ==1)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0))
  18.                                 {
  19.                                         tz();
  20.                                         Step++;
  21.                                 }
  22.                                 break;
  23.                         //I電機停止
  24.                         case 2:
  25.                                 if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0))
  26.                                 {
  27.                                         zz();
  28.                                         Step++;
  29.                                 }
  30.                                 break;
  31.                         //電機正轉
  32.                         case 3:
  33.                                 if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1))
  34.                                 {
  35.                                         zz();
  36.                                         Step++;
  37.                                 }
  38.                                 break;
  39.                         //電機正轉
  40.                         case 4:
  41.                                 if((IN1 ==0)&&(IN2 ==0)&&(IN3 ==1)&&(IN4 ==1))
  42.                                 {
  43.                                         tz();
  44.                                         Step++;
  45.                                 }
  46.                                 break;
  47.                         //電機停止
  48.                         case 5:
  49.                                 if((IN1 ==0)&&(IN2 ==0)&&(IN3 ==0)&&(IN4 ==1))
  50.                                 {
  51.                                         tz();
  52.                                         Step++;
  53.                                 }
  54.                                 break;
  55.                         //電機停止
  56.                         case 6:
  57.                                 if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==0)&&(IN4 ==1))
  58.                                 {
  59.                                         fz();
  60.                                         Step++;
  61.                                 }
  62.                                 break;
  63.                         //電機反轉
  64.                         case 7:
  65.                                 if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1))
  66.                                 {
  67.                                         fz();
  68.                                         Step++;
  69.                                 }
  70.                                 break;
  71.                         //電機反轉
  72.                         case 8:
  73.                                 if((IN1 ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0))
  74.                                 {
  75.                                         tz();
  76.                                         Step=0;
  77.                                 }
  78.                                 break;
  79.                                 //電機停止
  80.                 }
  81.         }
  82. }
復制代碼
回復

使用道具 舉報

ID:1056324 發表于 2023-12-17 18:14 | 顯示全部樓層
鄭效桂 發表于 2023-12-17 07:22
//IN1 IN2 IN3 IN4分別對應4個接近開關
//COM1 對應正轉繼電器,
//COM2對應反轉繼電器,

這邏輯?命令1111開機初始化,電機反轉,命令1110反轉到達限位后,電機停止,給命令0110電機正轉,然后如果這里沒有正轉到初始位置,電機停止,為什么再給命令0111電機正轉,
命令0011正轉到達限位后,電機停止,為什么再給命令0001電機停止,后面也是,

用狀態機,switch case 語句,比if簡單,
if的話,反轉1111~停止1110~正轉0000~停止1100~反轉1000~停止1010,這樣不行嗎
回復

使用道具 舉報

ID:61140 發表于 2023-12-17 23:09 | 顯示全部樓層
雷歐庫珀 發表于 2023-12-16 09:52
不可能,一個條件必定對于一個動作
沒有這種東西,人也做不到

可能的,現在有多核51單片機,網上查一下
回復

使用道具 舉報

ID:1104510 發表于 2023-12-18 06:31 來自觸屏版 | 顯示全部樓層
白畫求兮 發表于 2023-12-17 18:14
這邏輯?命令1111開機初始化,電機反轉,命令1110反轉到達限位后,電機停止,給命令0110電機正轉,然后如 ...

不會出現0000這個情況
回復

使用道具 舉報

ID:1104510 發表于 2023-12-18 06:31 來自觸屏版 | 顯示全部樓層
白畫求兮 發表于 2023-12-17 18:14
這邏輯?命令1111開機初始化,電機反轉,命令1110反轉到達限位后,電機停止,給命令0110電機正轉,然后如 ...

3跟4不可能同時為0
回復

使用道具 舉報

ID:1104510 發表于 2023-12-18 06:44 來自觸屏版 | 顯示全部樓層
白畫求兮 發表于 2023-12-17 18:14
這邏輯?命令1111開機初始化,電機反轉,命令1110反轉到達限位后,電機停止,給命令0110電機正轉,然后如 ...

樓上的switch  case語句昨天我試了,不行。狀態機我還不知道怎么寫
回復

使用道具 舉報

ID:1104510 發表于 2023-12-18 07:10 | 顯示全部樓層
白畫求兮 發表于 2023-12-17 18:14
這邏輯?命令1111開機初始化,電機反轉,命令1110反轉到達限位后,電機停止,給命令0110電機正轉,然后如 ...

4個接近開關處在同一條直線上的不同位置,3是正轉的限位,4是反轉的限位,他們的關系要么是01要么是10要么是11,永遠不會是00
回復

使用道具 舉報

ID:958310 發表于 2023-12-18 11:40 | 顯示全部樓層
這都不會,,,是剛入行的嗎?標記法、狀態機 直接秒了
回復

使用道具 舉報

ID:1104510 發表于 2023-12-18 13:34 | 顯示全部樓層
bigbigcong 發表于 2023-12-18 11:40
這都不會,,,是剛入行的嗎?標記法、狀態機 直接秒了

對啊,就是剛學這個
回復

使用道具 舉報

ID:1088099 發表于 2023-12-18 14:22 | 顯示全部樓層
鄭效桂 發表于 2023-12-18 07:10
4個接近開關處在同一條直線上的不同位置,3是正轉的限位,4是反轉的限位,他們的關系要么是01要么是10要 ...

那1和2呢,在哪個位置
回復

使用道具 舉報

ID:1104510 發表于 2023-12-18 14:49 | 顯示全部樓層
金玉之食 發表于 2023-12-18 14:22
那1和2呢,在哪個位置

IN1 判斷氣脹管是否在機器上,IN2 判斷是否接觸到圖片中的白色物體,IN3是電機的正轉限位,IN4 是電機的反轉限位
5.jpg
回復

使用道具 舉報

ID:104825 發表于 2023-12-18 15:06 來自觸屏版 | 顯示全部樓層
畫個草圖,標記出接近開關位置,描述一下工作流程,讓大家更好的幫助你。
回復

使用道具 舉報

ID:1104510 發表于 2023-12-18 15:46 | 顯示全部樓層
s1gm 發表于 2023-12-18 15:06
畫個草圖,標記出接近開關位置,描述一下工作流程,讓大家更好的幫助你。

如圖所示:
IN1用于檢測氣脹管是否在機器上;
IN2用于檢測白色的膜(這個膜是隨著氣脹管的轉動而(厚度)逐漸變薄的)的側面是否到達指定位置;
IN2是隨著電機運動的,電機往哪動它就往哪動;
IN3用于電機正轉限位;
IN4用于反轉限位;
COM1用于電機正轉;
COM2用于電機反轉;
COM3用于發出警報;
當氣脹管不在機器上時,反轉,警報不響;(1111)
到達IN4位置時,停止;(1110)
當氣脹管被放到機器上時,IN1觸發,電機正轉(0110)(此時IN4處于觸發狀態,隨著電機的轉動,IN4逐漸丟失信號,(0111)此時持續正轉);
當IN2接觸到白色膜時,IN2被觸發,此時,電機停止轉動;(0011)
隨著膜逐漸變薄,直到IN2丟失信號,此時,電機反轉,并發出警報;(0111)
當反轉到IN4位置時,電機停止,警報持續;(0110)


7.jpg
6.jpg
回復

使用道具 舉報

ID:161164 發表于 2023-12-18 16:54 | 顯示全部樓層
鄭效桂 發表于 2023-12-18 15:46
如圖所示:
IN1用于檢測氣脹管是否在機器上;
IN2用于檢測白色的膜(這個膜是隨著氣脹管的轉動而(厚度 ...

看11樓我的回復
回復

使用道具 舉報

ID:1104510 發表于 2023-12-18 19:21 來自觸屏版 | 顯示全部樓層
bigbigcong 發表于 2023-12-18 11:40
這都不會,,,是剛入行的嗎?標記法、狀態機 直接秒了

能教教我嗎
回復

使用道具 舉報

ID:1104510 發表于 2023-12-18 20:54 來自觸屏版 | 顯示全部樓層
lkc8210 發表于 2023-12-18 16:54
看11樓我的回復

你的程序我試過了,沒達到我的預期效果
回復

使用道具 舉報

ID:1088099 發表于 2023-12-19 09:01 | 顯示全部樓層
鄭效桂 發表于 2023-12-18 20:54
你的程序我試過了,沒達到我的預期效果

有問題,我先修改一下
回復

使用道具 舉報

ID:1088099 發表于 2023-12-19 14:36 來自觸屏版 | 顯示全部樓層

//IN1 IN2 IN3 IN44
//COM1
//COM2
//COM3
void csh(){COM1 =1;COM2 =0;C0M3 =1;} //
void zz(){COM1 =0;COM2 =1;COM3 =1;}//
void fz(){COM1 =1;COM2 =0;COM3 =0;}//
void jb(){COM1 =1;COM2 =1;COM3 =0;}//λ
void tz(){COM1 =1;COM2 =1;COM3 =1;}//λ
void main()                                 
{
        int Flag=0;
  while(1){
          if(IN1 ==1){
                  if((IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){csh();} //
                  if((IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){tz();Flag=0;}  //
                }
          if(IN1 ==0){
                  if((Flag ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){zz();}         //
                  if((Flag ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){zz();}         //
                  if((IN2 ==0)&&(IN3 ==1)&&(IN4 ==1)){tz();Flag=1;}                     //
                        if((Flag ==1)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){fz();}              //
                        if((Flag ==1)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){tz();jb();Flag=0;}  //
                }                        
        }
}
回復

使用道具 舉報

ID:1104510 發表于 2023-12-19 15:17 | 顯示全部樓層
金玉之食 發表于 2023-12-19 14:36
//IN1 IN2 IN3 IN44
//COM1
//COM2

最后一步不對,最后一步應該是COM1 =1,COM2 =1,COM3 =0,現在運行出來的結果是,COM1 =0;COM2 =1;COM3 =1;
回復

使用道具 舉報

ID:1088099 發表于 2023-12-19 15:27 | 顯示全部樓層
鄭效桂 發表于 2023-12-19 15:17
最后一步不對,最后一步應該是COM1 =1,COM2 =1,COM3 =0,現在運行出來的結果是,COM1 =0;COM2 =1;COM3 =1 ...

說一下實驗現象,也有可能是又重新進入循環導致的,判斷之間間隔時間短被忽略了
回復

使用道具 舉報

33#
無效樓層,該帖已經被刪除
ID:1104510 發表于 2023-12-19 15:46 | 顯示全部樓層
好了     我改了一下  又加了點新功能  謝謝了
void csh(){COM1 =1;COM2 =0;COM3 =1;}
void tz(){COM1 =1;COM2 =1;COM3 =1;}
void zz(){COM1 =0;COM2 =1;COM3 =1;}
void fz(){COM1 =1;COM2 =0;COM3 =0;}
void jb(){COM1 =1;COM2 =1;COM3 =0;}
void main()                                 
    {
        int Flag=0;
          while(1)
            {
                  if(IN1 ==1)
                    {
                          if((IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){csh();} //
                          if((IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){tz();Flag=0;}  //
                    }
                  if(IN1 ==0)
                    {
                          if((Flag ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){zz();}         //
                          if((Flag ==0)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){zz();}         //
                          if((IN2 ==0)&&(IN3 ==1)&&(IN4 ==1)){tz();Flag=1;}                     //
                          if((Flag ==1)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==1)){fz();}              //
                          if((Flag ==1)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){jb();}  //
                        if((Flag ==1)&&(IN2 ==1)&&(IN3 ==0)&&(IN4 ==0)){tz();Flag=2;}
                        if((Flag ==2)&&(IN2 ==1)&&(IN3 ==1)&&(IN4 ==0)){tz();}
                    }                        
            }
    }
現在已經達到我的預期效果了   多謝多謝

回復

使用道具 舉報

ID:1104510 發表于 2023-12-19 16:02 | 顯示全部樓層

這就是標記法吧
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品在线看 | 日韩在线一区二区三区 | 久久精选| 一区二区三区欧美 | 亚洲成人久久久 | 精品久久中文字幕 | 亚洲天堂一区 | 日韩有码在线观看 | 日韩精品一区在线观看 | 成人在线观看免费 | 999国产视频| 亚洲美女在线一区 | 亚洲一区二区视频在线观看 | 伊人看片 | 男人天堂色| 国外成人在线视频网站 | www.色综合 | 成人在线免费网站 | 免费国产网站 | 午夜精品久久久久久久久久久久久 | 久久久久久国产免费视网址 | 丝袜一区二区三区 | 狠狠色综合欧美激情 | 欧美国产一区二区 | 懂色中文一区二区在线播放 | 欧美一区二区在线播放 | 国产清纯白嫩初高生视频在线观看 | 国产一区二区三区久久久久久久久 | 91在线一区二区 | 午夜在线免费观看视频 | 亚洲精品自在在线观看 | 国产成人短视频在线观看 | 久久精品国产亚洲一区二区三区 | 久久久www成人免费无遮挡大片 | 久久久久国产精品www | 成人亚洲精品 | 国产免费一区二区三区 | 成人在线中文字幕 | 国产一级一级毛片 | 国产美女免费视频 | 九色 在线|