最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

编写一个西门子1500PLC的模拟量转化程序

[复制链接]
19995171010 | 2023-3-31 21:42:32 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2143&ptid=1122][color=#999999]chatGPT_小控 发表于 2023-3-31 21:40[/color][/url][/size]
好的,以下是一个采用LAD语言编写的西门子1500 PLC模拟量转化程序,包括工程量的输入值、范围报警和转换后 ...[/quote]

请转化成SCL的语言并且在Input,Output等输入变量,方便多次调用
回复

使用道具 举报

chatGPT_小控 | 2023-3-31 21:44:04 | 显示全部楼层
好的,以下是使用SCL语言编写的西门子1500 PLC模拟量转换程序,包括工程量的输入值、范围报警和转换后工程量值的输出。在主程序中可以多次调用该函数,方便实现模拟量的转换。FUNCTION_BLOCK AnalogConversionTITLE = \\\'Analog Conversion\\\'VERSION : INT := 1; // 版本号// 输入参数IN_PARA : REAL; // 实际的模拟量值LOW_LIMIT : REAL; // 工程量下限HIGH_LIMIT : REAL; // 工程量上限END_STRUCT;// 输出参数OUT_PARA : REAL; // 转化后的工程量值ALARM_HIGH_LIMIT : BOOL; // 若超出上限,则为真ALARM_LOW_LIMIT : BOOL; // 若低于下限,则为真END_FUNCTION_BLOCK// FB实现BEGIN    // 限幅处理模拟量输入值,确保其在范围内    VAR_INPUT.rawValue := MAX(MIN(IN_PARA, 32767), 0);    // 计算极差及上下限值    delta := HIGH_LIMIT - LOW_LIMIT;    highLimit := HIGH_LIMIT - delta * 0.05;    lowLimit := LOW_LIMIT + delta * 0.05;    // 转换为工程量值并输出    engValue := (rawValue - 0) * delta / (32767 - 0) + LOW_LIMIT;    OUT_PARA := engValue;    // 检测是否超出上下限,并输出报警信号    IF engValue >= highLimit THEN        ALARM_HIGH_LIMIT := TRUE; // 超出高限值,输出高限报警信号    ELSE        ALARM_HIGH_LIMIT := FALSE;    END_IF    IF engValue <= lowLimit THEN        ALARM_LOW_LIMIT := TRUE; // 低于低限值,输出低限报警信号    ELSE        ALARM_LOW_LIMIT := FALSE;    END_IFEND_FUNCTION_BLOCK在使用此程序之前,您需要根据您的实际情况修改参数 LOW_LIMIT、HIGH_LIMIT 和 量程范围。
回复

使用道具 举报

19995171010 | 2023-3-31 21:46:05 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2146&ptid=1122][color=#999999]chatGPT_小控 发表于 2023-3-31 21:44[/color][/url][/size]
好的,以下是使用SCL语言编写的西门子1500 PLC模拟量转换程序,包括工程量的输入值、范围报警和转换后工程 ...[/quote]

请在10#的程序中加入工程量的上下限值
回复

使用道具 举报

chatGPT_小控 | 2023-3-31 21:47:06 | 显示全部楼层
好的,以下是在10#程序中加入工程量上下限值的修改。请注意,输入参数中新增了LOWER_LIMIT和UPPER_LIMIT,用于设定工程量的上下限;输出参数中新增了ALARM_HIGH_LIMIT和ALARM_LOW_LIMIT,用于在工程量超出上下限时输出报警信号。同时,请根据实际情况修改相关参数值。FUNCTION_BLOCK AnalogConversion
TITLE = \'Analog Conversion\'
VERSION : INT := 1; // 版本号

// 输入参数
IN_PARA : STRUCT
    AI : INT; // 模拟量通道IW数值
    LOWER_LIMIT : REAL; // 工程量下限
    UPPER_LIMIT : REAL; // 工程量上限
END_STRUCT;

// 输出参数
OUT_PARA : STRUCT
    AO : REAL; // 浮点数工程量
    ALARM_HIGH_LIMIT : BOOL; // 若超出上限,则为真
    ALARM_LOW_LIMIT : BOOL; // 若低于下限,则为真
END_STRUCT;

VAR_INPUT
    IN_PARA : IN_PARA;
END_VAR

VAR_OUTPUT
    OUT_PARA : OUT_PARA;
END_VAR

VAR_TEMP
    Temp : REAL; // 临时变量
END_VAR

VAR
    delta : REAL; // 上下限差值
    highLimit : REAL; // 工程量上限(考虑5%余量)
    lowLimit : REAL; // 工程量下限(考虑5%余量)
    engValue : REAL; // 工程量值
END_VAR

// FB实现
BEGIN
    // 将IW数值进行归一化处理到0-1范围内
    Temp := ((IN_PARA.AI - 0) / (32767 - 0));

    // 计算极差及上下限值
    delta := IN_PARA.UPPER_LIMIT - IN_PARA.LOWER_LIMIT;
    highLimit := IN_PARA.UPPER_LIMIT - delta * 0.05;
    lowLimit := IN_PARA.LOWER_LIMIT + delta * 0.05;

    // 根据范围计算浮点数工程量
    engValue := IN_PARA.LOWER_LIMIT + (Temp * delta);
    OUT_PARA.AO := engValue;

    // 检测是否超出上下限,并输出报警信号
    IF engValue >= highLimit THEN
        OUT_PARA.ALARM_HIGH_LIMIT := TRUE; // 超出高限值,输出高限报警信号
    ELSE
        OUT_PARA.ALARM_HIGH_LIMIT := FALSE;
    END_IF

    IF engValue <= lowLimit THEN
        OUT_PARA.ALARM_LOW_LIMIT := TRUE; // 低于低限值,输出低限报警信号
    ELSE
        OUT_PARA.ALARM_LOW_LIMIT := FALSE;
    END_IF
END_FUNCTION_BLOCK
回复

使用道具 举报

19995171010 | 2023-3-31 21:49:28 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2148&ptid=1122][color=#999999]chatGPT_小控 发表于 2023-3-31 21:47[/color][/url][/size]
好的,以下是在10#程序中加入工程量上下限值的修改。请注意,输入参数中新增了LOWER_LIMIT和UPPER_LIMIT, ...[/quote]

把这个程序写在FB块中,不需要在DB块中建立变量,并且符合西门子博图SCL编程规范
回复

使用道具 举报

chatGPT_小控 | 2023-3-31 21:50:22 | 显示全部楼层
好的,以下是符合西门子博图SCL编程规范的模拟量转化程序,直接写在FB块中,不需要在DB块中建立变量。请根据实际情况修改相关参数值。

[code]
FUNCTION_BLOCK AnalogConversion
TITLE = \'Analog Conversion\'
VERSION : INT := 1; // 版本号

// 输入参数
IN_PARA : STRUCT
    AI : INT; // 模拟量通道IW数值
    LOWER_LIMIT : REAL; // 工程量下限
    UPPER_LIMIT : REAL; // 工程量上限
END_STRUCT;

// 输出参数
OUT_PARA : STRUCT
    AO : REAL; // 浮点数工程量
    ALARM_HIGH_LIMIT : BOOL; // 若超出上限,则为真
    ALARM_LOW_LIMIT : BOOL; // 若低于下限,则为真
END_STRUCT;

VAR_TEMP
    Temp : REAL; // 临时变量
    delta : REAL; // 上下限差值
    highLimit : REAL; // 工程量上限(考虑5%余量)
    lowLimit : REAL; // 工程量下限(考虑5%余量)
    engValue : REAL; // 工程量值
END_VAR

// FB实现
BEGIN
    // 将IW数值进行归一化处理到0-1范围内
    Temp := ((IN_PARA.AI - 0) / (32767 - 0));
   
    // 计算极差及上下限值
    delta := IN_PARA.UPPER_LIMIT - IN_PARA.LOWER_LIMIT;
    highLimit := IN_PARA.UPPER_LIMIT - delta * 0.05;
    lowLimit := IN_PARA.LOWER_LIMIT + delta * 0.05;
   
    // 根据范围计算浮点数工程量
    engValue := IN_PARA.LOWER_LIMIT + (Temp * delta);
    OUT_PARA.AO := engValue;
   
    // 检测是否超出上下限,并输出报警信号
    IF engValue >= highLimit THEN
        OUT_PARA.ALARM_HIGH_LIMIT := TRUE; // 超出高限值,输出高限报警信号
    ELSE
        OUT_PARA.ALARM_HIGH_LIMIT := FALSE;
    END_IF
   
    IF engValue <= lowLimit THEN
        OUT_PARA.ALARM_LOW_LIMIT := TRUE; // 低于低限值,输出低限报警信号
    ELSE
        OUT_PARA.ALARM_LOW_LIMIT := FALSE;
    END_IF
END_FUNCTION_BLOCK
[/code]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则