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