最好的控制
級別: 家園?
![]() |
前提條件:三個讀碼器呈360度環形讀機器人抓取物料二維碼,間隔120度左右,機器人讀碼期間帶物料旋轉120°,碼數量不固定,1-4個碼,在兩個讀碼器同時讀到碼的情況下去重,或者兩個讀碼器分別讀了不同碼去重 個人能力有限,想半天想不出程序怎么寫,寫一點就卡殼,想著問下AI看看,結果如下,分兩次提問豆包 提問一:給我實現在12個變量里面,選擇不為0的變量進行比較,將其中不相等的變量輸出,使用PLC的ST語言進行編程 回答:PROGRAM CompareNonZeroVariables VAR // 定義12個輸入變量 var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12: INT := 0; // 數組用于存儲12個變量的值和索引 variables: ARRAY[1..12] OF INT; indices: ARRAY[1..12] OF INT := [1,2,3,4,5,6,7,8,9,10,11,12]; // 存儲非零變量 nonZeroValues: ARRAY[1..12] OF INT; nonZeroIndices: ARRAY[1..12] OF INT; nonZeroCount: INT := 0; // 存儲不相等的變量索引 unequalIndices: ARRAY[1..12] OF INT; unequalCount: INT := 0; // 循環計數器和輔助變量 i, j: INT; hasEqual: BOOL; END_VAR // 將12個變量的值存入數組 variables[1] := var1; variables[2] := var2; variables[3] := var3; variables[4] := var4; variables[5] := var5; variables[6] := var6; variables[7] := var7; variables[8] := var8; variables[9] := var9; variables[10] := var10; variables[11] := var11; variables[12] := var12; // 第一步:篩選出所有非零變量 nonZeroCount := 0; FOR i := 1 TO 12 DO IF variables <> 0 THEN nonZeroCount := nonZeroCount + 1; nonZeroValues[nonZeroCount] := variables; nonZeroIndices[nonZeroCount] := indices; END_IF; END_FOR; // 第二步:比較非零變量,找出不相等的變量 unequalCount := 0; IF nonZeroCount > 0 THEN FOR i := 1 TO nonZeroCount DO hasEqual := FALSE; // 與其他非零變量比較 FOR j := 1 TO nonZeroCount DO IF i <> j AND nonZeroValues = nonZeroValues[j] THEN hasEqual := TRUE; EXIT; // 找到相等值,退出內循環 END_IF; END_FOR; // 如果沒有找到相等的值,則記錄為不相等變量 IF NOT hasEqual THEN unequalCount := unequalCount + 1; unequalIndices[unequalCount] := nonZeroIndices; END_IF; END_FOR; END_IF; // 輸出結果處理(此處根據實際需求修改輸出方式) // unequalIndices數組中存儲了不相等變量的索引(1-12) // unequalCount為不相等變量的數量 提問二:在上述程序中修改條件,將同樣的變量也需要輸出一個 回答:PROGRAM CompareNonZeroVariables VAR // 定義12個輸入變量 var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12: INT := 0; // 數組用于存儲12個變量的值和索引 variables: ARRAY[1..12] OF INT; indices: ARRAY[1..12] OF INT := [1,2,3,4,5,6,7,8,9,10,11,12]; // 存儲非零變量 nonZeroValues: ARRAY[1..12] OF INT; nonZeroIndices: ARRAY[1..12] OF INT; nonZeroCount: INT := 0; // 存儲結果變量(每個不同值保留一個) resultIndices: ARRAY[1..12] OF INT; resultCount: INT := 0; // 輔助變量:記錄值是否已被添加到結果中 valueAdded: ARRAY[1..12] OF BOOL; // 對應nonZeroValues的標記數組 // 循環計數器和輔助變量 i, j: INT; isDuplicate: BOOL; END_VAR // 將12個變量的值存入數組 variables[1] := var1; variables[2] := var2; variables[3] := var3; variables[4] := var4; variables[5] := var5; variables[6] := var6; variables[7] := var7; variables[8] := var8; variables[9] := var9; variables[10] := var10; variables[11] := var11; variables[12] := var12; // 第一步:篩選出所有非零變量 nonZeroCount := 0; FOR i := 1 TO 12 DO IF variables <> 0 THEN nonZeroCount := nonZeroCount + 1; nonZeroValues[nonZeroCount] := variables; nonZeroIndices[nonZeroCount] := indices; END_IF; END_FOR; // 第二步:為每個不同的非零值保留一個實例 resultCount := 0; // 初始化標記數組 FOR i := 1 TO 12 DO valueAdded := FALSE; END_FOR; IF nonZeroCount > 0 THEN FOR i := 1 TO nonZeroCount DO // 如果當前值未被處理過 IF NOT valueAdded THEN isDuplicate := FALSE; // 檢查之前的結果中是否已有相同值 FOR j := 1 TO resultCount DO IF nonZeroValues = nonZeroValues[resultIndices[j]] THEN isDuplicate := TRUE; EXIT; END_IF; END_FOR; // 如果是新值,添加到結果并標記所有相同值 IF NOT isDuplicate THEN resultCount := resultCount + 1; resultIndices[resultCount] := nonZeroIndices; // 標記所有相同值,避免重復添加 FOR j := 1 TO nonZeroCount DO IF nonZeroValues[j] = nonZeroValues THEN valueAdded[j] := TRUE; END_IF; END_FOR; END_IF; END_IF; END_FOR; END_IF; // 輸出結果處理 // resultIndices數組中存儲了每個不同非零值的一個實例索引(1-12) // resultCount為不同非零值的數量 我在程序中將需要的變量改成字符串類型,然后將重復利用的I,J在for循環后面重新賦值為1,測試可行,感覺AI能方便純邏輯編程,但是搞完后自己照抄又對個人能力沒什么成長,但是確實極大縮減了編程時間。不知道未來會發展成什么樣,最后是不是只需要錄入工藝,程序一套都能寫出來,只需要人去調試硬件了。 話說字節是真的卷,豆包更新頻率是我用過的幾個AI里面最頻繁的,有時候甚至一天一更新,太夸張。 |
---|---|
|