19995171010 发表于 2023-4-1 16:07:05

chatGPT_小智 发表于 2023-4-1 16:00
不是。VAR块是在功能块(FC或FB)中使用的内部变量声明块,它可以用来定义输入、输出和中间变量。DB块(数 ...

VAR块怎么建立

chatGPT_小智 发表于 2023-4-1 16:07:28

要在西门子1500PLC中建立VAR块,您可以按照以下步骤操作:

1.打开TIA Portal编程软件,并创建一个新的项目。

2.在需要使用VAR块的功能块(FC或FB)内部或程序中,右键单击并选择“Insert Block”,然后选择“VAR Block”。

3.定义VAR块的名称和输入输出变量。可以按照需要添加相应的数据类型。您还可以设置默认值、最小值和最大值等其他属性。

4.保存VAR块并应用到您的程序中。

请注意,VAR块只能被用于FC或FB中,并且它最好被定义为私有(Private)以防止其他程序访问其中的变量。同时,需要注意确保变量在FB或FC中正确使用,避免出现变量重名、变量类型不匹配等错误。

19995171010 发表于 2023-4-1 16:12:04

chatGPT_小智 发表于 2023-4-1 16:07
要在西门子1500PLC中建立VAR块,您可以按照以下步骤操作:

1.打开TIA Portal编程软件,并创建一个新的项目 ...

在需要使用VAR块的功能块(FC或FB)内部或程序中,右键单击并选择“Insert Block”,然后选择“VAR Block”右键没有Insert Block

chatGPT_小智 发表于 2023-4-1 16:12:29

如果您在功能块(FC或FB)内部或程序中右键单击后没有看到“Insert Block”选项,那么您可以通过以下步骤来建立VAR块:1.在工程文件夹(Project Tree)中,右键单击您的PLC项目,并选择“Add New Object”>“Data Type”。2.在“Type Properties”窗口中,输入VAR块的名称和描述,并为其定义所需的输入和输出变量。3.在您的程序中使用VAR块时,在程序中声明VAR块并定义其变量。例如:

VAR
    MyVarBlock : MyVarBlockType; (* MyVar 是自定义的 VAR 块名称,MyVarBlockType 是自定义的数据类型名称 *)
END_VAR

4.请注意,VAR块只能在函数块(FC)或功能块(FB)中使用。如果需要,您可以将其定义为私有(Private),以防止其他程序访问其中的变量。

希望这些步骤可以帮助您建立VAR块,顺利完成您的PLC编程任务。

19995171010 发表于 2023-4-1 16:47:30

chatGPT_小智 发表于 2023-4-1 16:12
如果您在功能块(FC或FB)内部或程序中右键单击后没有看到“Insert Block”选项,那么您可以通过以下步骤来 ...

请给一份不需要VAR块的FB程序

chatGPT_小智 发表于 2023-4-1 16:48:06

以下是一份不需要VAR块的FB程序,可用于将模拟量通道IW数值转换为工程量浮点数:


FUNCTION_BLOCK AnalogConversion
TITLE = \'Analog to Engineering Conversion\'

// Input variables
VAR_INPUT
    iwValue    : INT;         // IW input value
    fMinValue: REAL;      // Engineering minimum value
    fMaxValue: REAL;      // Engineering maximum value
    iMinValue: INT;         // Raw minimum value
    iMaxValue: INT;         // Raw maximum value
END_VAR

// Output variables
VAR_OUTPUT
    fEngValue: REAL;      // Engineering output value
END_VAR

// Internal variables
slope      : REAL;      // Slope of the conversion linear equation
offset   : REAL;      // Offset of the conversion linear equation

// Implementation
BEGIN
    slope:= (fMaxValue - fMinValue) / REAL(iMaxValue - iMinValue);
    offset := fMinValue - slope * REAL(iMinValue);
   
    IF iwValue <= iMinValue THEN
      fEngValue := fMinValue;
    ELSIF iwValue >= iMaxValue THEN
      fEngValue := fMaxValue;
    ELSE
      fEngValue := slope * REAL(iwValue) + offset;
    END_IF;
END_FUNCTION_BLOCK


在这个程序中,我们仍然使用了“Input”和“Output”变量来声明输入和输出参数。与之前的程序不同的是,我们在程序内部直接定义了内部变量“slope”和“offset”,并且通过在计算过程中将“iMinValue”和“iMaxValue”强制转换为实数(float),以避免VAR块的使用。程序的实现方式与前面提到的程序相同,我们首先计算转换直线方程的斜率和偏移量,然后根据各个分支分别返回最小或最大工程量值或使用线性转换公式计算输出值。

19995171010 发表于 2023-4-1 16:57:31

chatGPT_小智 发表于 2023-4-1 16:48
以下是一份不需要VAR块的FB程序,可用于将模拟量通道IW数值转换为工程量浮点数:



请检查程序还是是用了VAR

chatGPT_小智 发表于 2023-4-1 16:57:55

非常抱歉,我犯了错误。在上一个程序中确实使用了VAR块。以下是一份没有VAR块的程序:

FUNCTION_BLOCK AnalogConversion
TITLE = \\\'Analog to Engineering Conversion\\\'

// Input variables
VAR_INPUT
    iwValue    : INT;         // IW input value
    fMinValue: REAL;      // Engineering minimum value
    fMaxValue: REAL;      // Engineering maximum value
    iMinValue: INT;         // Raw minimum value
    iMaxValue: INT;         // Raw maximum value
END_VAR

// Output variables
VAR_OUTPUT
    fEngValue: REAL;      // Engineering output value
END_VAR

// Implementation
slope      : REAL := (fMaxValue - fMinValue) / REAL(iMaxValue - iMinValue);
offset   : REAL := fMinValue - slope * REAL(iMinValue);

fEngValue := IF iwValue <= iMinValue THEN fMinValue
             ELSIF iwValue >= iMaxValue THEN fMaxValue
             ELSE slope * REAL(iwValue) + offset;
             END_IF;

END_FUNCTION_BLOCK

与之前的程序不同的是,在这个程序中,我们直接在代码的顶部(Implementation)声明了“slope”和“offset”变量,并给它们指定了初值。通过这种方式,可以省略VAR块。代码的其它部分与前面的程序相同。

19995171010 发表于 2023-4-1 17:27:42

chatGPT_小智 发表于 2023-4-1 16:57
非常抱歉,我犯了错误。在上一个程序中确实使用了VAR块。以下是一份没有VAR块的程序:

FUNCTION_BLOCK Ana ...

请给16#每段程序一个中文备注

chatGPT_小智 发表于 2023-4-1 17:28:54

以下是一份带有中文备注的16#每段程序:


// 主程序
PROGRAM MainProgram
VAR
    // 标志量
    bStart : BOOL := FALSE;   // 启动标志
    bStop: BOOL := TRUE;    // 停止标志

    // 输出变量
    iOut1: INT;             // 输出变量1
    rOut2: REAL;            // 输出变量2

    // FB实例
    fbAnalogConv1 : AnalogConversion;// 模拟量转化FB实例

END_VAR

// 程序扫描循环
CYCLIC
    // 程序主逻辑
    IF NOT bStop THEN
      IF bStart THEN
            // 调用模拟量转化FB
            fbAnalogConv1.iwValue   := iIn1;       // 将输入IW值传递给FB
            fbAnalogConv1.fMinValue := 0.0;      // 设置输出最小工程量
            fbAnalogConv1.fMaxValue := 100.0;      // 设置输出最大工程量
            fbAnalogConv1.iMinValue := 0;          // 设置原始量最小值
            fbAnalogConv1.iMaxValue := 32767;      // 设置原始量最大值
            iOut1 := fbAnalogConv1.fEngValue;   // 读取FB输出工程量

            rOut2 := rIn2 * 2.0;                  // 对输入变量进行简单的处理

      END_IF
    ELSE
      // 如果停止,则清空输出变量
      iOut1 := 0;
      rOut2 := 0.0;
    END_IF
END_PROGRAM

// 模拟量转化FB
FUNCTION_BLOCK AnalogConversion
TITLE = \\\'模拟量转化\\\'
VERSION : \'1.0\'
VAR_INPUT
    iwValue    : INT;         // IW输入数值
    fMinValue: REAL;      // 工程量最小值
    fMaxValue: REAL;      // 工程量最大值
    iMinValue: INT;         // 原始量最小值
    iMaxValue: INT;         // 原始量最大值
END_VAR
VAR_OUTPUT
    fEngValue: REAL;      // 工程量输出值
END_VAR
VAR_TEMP
    slope      : REAL;      // 转换直线斜率
    offset   : REAL;      // 转换直线偏移
END_VAR
IMPLEMENTATION
    slope:= (fMaxValue - fMinValue) / (iMaxValue - iMinValue);// 计算直线斜率
    offset := fMinValue - slope * iMinValue;                      // 计算直线偏移
    fEngValue := IF iwValue <= iMinValue THEN fMinValue          // 判断是否超出范围
                ELSIF iwValue >= iMaxValue THEN fMaxValue
                ELSE slope * iwValue + offset;
                END_IF;
END_FUNCTION_BLOCK


程序中有一些标志量和输入/输出变量,它们在程序的顶部定义。注意到我们使用了fbAnalogConv1来实例化模拟量转换功能块。在主程序的CYCLIC循环中,我们判断是否处于启动状态,然后调用模拟量转化FB,并将结果存储在iOut1变量中。此外,我们还对输入变量rIn2进行了简单的处理,把它乘以了一个常数。如果程序处于停止状态,则输出变量将被清除。

在程序的最后,我们定义了用于模拟量转换的函数块AnalogConversion。该函数块使用了VAR_INPUT和VAR_OUTPUT定义输入/输出变量,使用VAR_TEMP定义内部变量。在IMPLEMENTATION块中,我们计算了直线斜率和偏移,并使用IF语句判断输入值是否超出范围,最终计算输出工程量值。
页: 1 [2]
查看完整版本: 编写一个西门子1500PLC的模拟量转化程序