निम्नलिखित ठीक काम करता है:

PROGRAM PLC_PRG:
    VAR
        MyArray : ARRAY[0..1,0..5]OF USINT := [1,2,3,4,5,6,7,8,9,10,11,12];
        i : INT;
        j : INT;
    END_VAR

    // change to random values
    FOR i:=0 TO 1 DO
        FOR j:=0 TO 5 DO
            MyArray[i,j] := i+j;
        END_FOR
    END_FOR

    // Or individualy set numbers
    MyArray[0,1] := 56;
    MyArray[0,4] := 156;
END_PROGRAM

लेकिन क्या होगा यदि मैं कोड की एक पंक्ति में सभी मानों को संशोधित करना चाहता हूं?

यानी मैं जो करना चाहता हूं उसका छद्म कोड निम्नलिखित है। (ध्यान दें, यह वास्तव में काम नहीं करता है)

PROGRAM PLC_PRG:
    VAR
        MyArray : ARRAY[0..1,0..5]OF USINT := [1,2,3,4,5,6,7,8,9,10,11,12];
        bChange : BOOL;
    END_VAR

    IF bChange THEN
        MyArray := [1,58,3,53,5,6,128,8,9,10,20,12];
    END_IF
END_PROGRAM
2
tomatoeshift 8 अप्रैल 2020, 12:07

2 जवाब

सरणी-मानों के असाइनमेंट को सरल बनाने के लिए आपको एक फ़ंक्शन प्रोग्राम करने की आवश्यकता है।

कार्य घोषणा:

FUNCTION F_SetArrayValues : ARRAY[0..1,0..5]OF USINT
VAR_INPUT
     v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12 : USINT;    
END_VAR

कार्य कार्यान्वयन:

F_SetArrayValues[0,0] := v1;
F_SetArrayValues[0,1] := v2;
F_SetArrayValues[0,2] := v3;
F_SetArrayValues[0,3] := v4;
F_SetArrayValues[0,4] := v5;
F_SetArrayValues[0,5] := v6;
F_SetArrayValues[1,0] := v7;
F_SetArrayValues[1,1] := v8;
F_SetArrayValues[1,2] := v9;
F_SetArrayValues[1,3] := v10;
F_SetArrayValues[1,4] := v11;
F_SetArrayValues[1,5] := v12;

आप फ़ंक्शन को इस तरह कहते हैं:

IF bChange THEN
    MyArray := F_SetArrayValues(2,3,4,5,6,7,8,9,10,11,12,13);
END_IF
1
Filippo Boido 8 अप्रैल 2020, 12:47
ठीक है, मैं उम्मीद कर रहा था कि एक आसान तरीका था। मैंने सोचा था कि मेरे प्रदान किए गए उदाहरण में मुझे कुछ वाक्यविन्यास त्रुटि थी। सौभाग्य से, मुझे कोड में कई बार सरणी को फिर से लिखना नहीं पड़ता है, इसलिए मुझे लगता है कि मैं इसके लिए एक स्वयं के फ़ंक्शन को लागू करना छोड़ दूंगा।
 – 
tomatoeshift
8 अप्रैल 2020, 15:22

केवल आरंभीकरण के दौरान।

PROGRAM PLC_PRG:
    VAR
        MyArray : ARRAY[0..1,0..5]OF USINT := [
            [1,2,3,4,5,6],
            [1,2,3,4,5,6]
        ];
    END_VAR
END_PROGRAM

इसकी अनुमति नहीं दी जाएगी

IF bChange THEN
    (* еhis will fial *)
    MyArray := [
            [1,2,3,4,5,6],
            [1,2,3,4,5,6]
        ];
END_IF
0
Sergey Romanov 9 अप्रैल 2020, 13:25
मैंने देखा कि इसकी अनुमति नहीं थी। मैं उम्मीद कर रहा था कि इसके लिए एक आसान समाधान था, लेकिन ऐसा लगता है कि ए) इसके लिए दूसरे उत्तर में एक फ़ंक्शन बनाएं या बी) व्यक्तिगत रूप से सभी वांछित तत्वों को सेट करें।
 – 
tomatoeshift
9 अप्रैल 2020, 14:26
FYI करें, आपका सिंटैक्स MyArray : ARRAY[0..1,0..5]OF USINT := [[1,2,3,4,5,6],[1,2,3,4,5,6]]; मेरी IDE में एक त्रुटि देगा। मैं B&R के AutomatioStudio का उपयोग कर रहा हूं, इसलिए इसके कंपाइलर के अनुसार एकमात्र सही सिंटैक्स MyArray : ARRAY[0..1,0..5]OF USINT := [1,2,3,4,5,6,7,8,9,10,11,12]; है
 – 
tomatoeshift
9 अप्रैल 2020, 14:32
ठीक है, ST का क्रियान्वयन IDE से IDE में भिन्न है। मैंने CoDeSys 3.5 का उल्लेख किया है। क्या आपने एसटी कोड के लिए मेरे वीएस कोड एक्सटेंशन का उपयोग किया था? लोग कहते हैं कि यह बी एंड आर के लिए अच्छा है।
 – 
Sergey Romanov
10 अप्रैल 2020, 13:43
मुझे यकीन नहीं है कि मैं आपका प्रश्न समझ गया हूं, लेकिन मैं मानता हूं कि आपका यही मतलब है। ए>। मैं विजुअल स्टूडियो का उपयोग नहीं कर रहा हूं। क्या मुझे इसका इस्तेमाल शुरू कर देना चाहिए?
 – 
tomatoeshift
11 अप्रैल 2020, 08:57
1
दिलचस्प लगता है! लेकिन बहुत काम करने की भी जरूरत है :)। आप के लिए शुभकामनाएं।
 – 
tomatoeshift
14 अप्रैल 2020, 09:36