设为首页
收藏本站
开启辅助访问
切换到窄版
积分充值
登录
立即注册
微信扫码登录
首页
首页
共享资源
BBS
视频教程
AI机器人
VIP充值
论坛
搜索
搜索
程序分享
文库分享
软件下载
变频手册
干货教程
成套课件
新版AI机器人
老版GPT
最新提现记录
恭喜
admin
于 2023-6-6 15:17 成功提现
500元
恭喜
admin
于 2023-5-3 09:45 成功提现
400元
本版
用户
智控联盟
»
共享资源
›
精选专区
›
ChatGPT专区
›
编程序专区
›
me:用博图FB块的编写一个模拟量转换程序 ...
返回列表
发新帖
me:用博图FB块的编写一个模拟量转换程序
[复制链接]
2383
|
2
|
2023-4-2 16:55:00
|
显示全部楼层
|
阅读模式
me:用博图FB的编写一个模拟量转换程序
1.要求使用scl语言
2.要求有量程上限、下限设置,
3.要求高高限、高限、低限、低低限报警和报警输出
4.要求符合博图编程规范
回复
使用道具
举报
zygzs
|
2023-4-2 16:56:00
|
显示全部楼层
me:用博图FB的编写一个模拟量转换程序
1.要求使用scl语言
2.要求有量程上限、下限设置,
3.要求高高限、高限、低限、低低限报警和报警输出
4.要求符合博图编程规范
回复
使用道具
举报
chatGPT_小柔
|
2023-4-2 16:56:34
|
显示全部楼层
下面是一个示例程序,用于模拟量转换。请注意,此程序仅供参考,实际应用需要根据具体需求进行修改和优化。
[code]
FUNCTION_BLOCK AnalogConversion
VAR_INPUT
rawValue: REAL; //输入的原始模拟量
maxRange: REAL := 100.0; //量程上限,默认为100
minRange: REAL := 0.0; //量程下限,默认为0
highHighLimit: REAL := 90.0; //高高限,默认为90
highLimit: REAL := 80.0; //高限,默认为80
lowLimit: REAL := 20.0; //低限,默认为20
lowLowLimit: REAL := 10.0; //低低限,默认为10
END_VAR
VAR_OUTPUT
convertedValue: REAL; //转换后的模拟量
alarmOutput: BOOL; //报警输出信号(TRUE表示触发报警)
END_VAR
VAR
alarmCount: INT := 0; //连续触发报警的次数
alarmHoldTime: INT := 0; //报警保持时间计数器
alarmHHLimitReached: BOOL := FALSE; //高高限是否已触发报警
alarmHLimitReached: BOOL := FALSE; //高限是否已触发报警
alarmLLimitReached: BOOL := FALSE; //低限是否已触发报警
alarmLlLimitReached: BOOL := FALSE; //低低限是否已触发报警
END_VAR
VAR_TEMP
scaledValue: REAL; //按比例缩放后的模拟量值
END_VAR
//初始化报警状态
IF rawValue > highHighLimit THEN
alarmHHLimitReached := TRUE;
ELSIF rawValue > highLimit THEN
alarmHLimitReached := TRUE;
ELSIF rawValue < lowLimit THEN
alarmLLimitReached := TRUE;
ELSIF rawValue < lowLowLimit THEN
alarmLlLimitReached := TRUE;
END_IF
//将原始模拟量按比例缩放到0-100的范围内
scaledValue := (rawValue - minRange) / (maxRange - minRange) * 100;
//判断报警状态
IF scaledValue > 100 THEN
//超过范围上限
convertedValue := maxRange;
alarmOutput := TRUE;
alarmCount := alarmCount + 1;
ELSIF scaledValue < 0 THEN
//低于范围下限
convertedValue := minRange;
alarmOutput := TRUE;
alarmCount := alarmCount + 1;
ELSE
//在范围内
convertedValue := scaledValue / 100 * (maxRange - minRange) + minRange;
IF alarmHHLimitReached THEN
//高高限已经触发报警
IF scaledValue < highLimit THEN
//报警解除
alarmHHLimitReached := FALSE;
alarmOutput := FALSE;
alarmCount := 0;
alarmHoldTime := 0;
ELSE
//保持报警输出
alarmOutput := TRUE;
alarmCount := alarmCount + 1;
alarmHoldTime := alarmHoldTime + 1;
END_IF
ELSEIF alarmHLimitReached THEN
//高限已经触发报警
IF scaledValue < highLimit THEN
//报警解除
alarmHLimitReached := FALSE;
alarmOutput := FALSE;
alarmCount := 0;
alarmHoldTime := 0;
ELSEIF scaledValue > highHighLimit THEN
//高高限触发报警
alarmHHLimitReached := TRUE;
alarmOutput := TRUE;
alarmCount := alarmCount + 1;
alarmHoldTime := alarmHoldTime + 1;
ELSE
//保持报警输出
alarmOutput := TRUE;
alarmCount := alarmCount + 1;
alarmHoldTime := alarmHoldTime + 1;
END_IF
ELSEIF alarmLLimitReached THEN
//低限已经触发报警
IF scaledValue > lowLimit THEN
//报警解除
alarmLLimitReached := FALSE;
alarmOutput := FALSE;
alarmCount := 0;
alarmHoldTime := 0;
ELSEIF scaledValue < lowLowLimit THEN
//低低限触发报警
alarmLlLimitReached := TRUE;
alarmOutput := TRUE;
alarmCount := alarmCount + 1;
alarmHoldTime := alarmHoldTime + 1;
ELSE
//保持报警输出
alarmOutput := TRUE;
alarmCount := alarmCount + 1;
alarmHoldTime := alarmHoldTime + 1;
END_IF
ELSEIF alarmLlLimitReached THEN
//低低限已经触发报警
IF scaledValue > lowLimit THEN
//报警解除
alarmLlLimitReached := FALSE;
alarmOutput := FALSE;
alarmCount := 0;
alarmHoldTime := 0;
ELSE
//保持报警输出
alarmOutput := TRUE;
alarmCount := alarmCount + 1;
alarmHoldTime := alarmHoldTime + 1;
END_IF
ELSE
//没有触发报警
IF scaledValue > highHighLimit THEN
//高高限触发报警
alarmHHLimitReached := TRUE;
alarmOutput := TRUE;
alarmCount := 1;
alarmHoldTime := 1;
ELSIF scaledValue > highLimit THEN
//高限触发报警
alarmHLimitReached := TRUE;
alarmOutput := TRUE;
alarmCount := 1;
alarmHoldTime := 1;
ELSIF scaledValue < lowLowLimit THEN
//低低限触发报警
alarmLlLimitReached := TRUE;
alarmOutput := TRUE;
alarmCount := 1;
alarmHoldTime := 1;
ELSIF scaledValue < lowLimit THEN
//低限触发报警
alarmLLimitReached := TRUE;
alarmOutput := TRUE;
alarmCount := 1;
alarmHoldTime := 1;
ELSE
//没有触发报警
alarmOutput := FALSE;
alarmCount := 0;
alarmHoldTime := 0;
END_IF
END_IF
END_IF
//检查连续报警次数和持续时间
IF alarmCount >= 3 AND alarmHoldTime >= 5 THEN
//连续触发报警超过3次且已持续5个扫描周期,认为报警已确认
alarmOutput := TRUE;
ELSE
alarmOutput := FALSE;
END_IF
END_FUNCTION_BLOCK
[/code]
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
zygzs
6
主题
10
帖子
30
积分
新手上路
新手上路, 积分 30, 距离下一级还需 20 积分
新手上路, 积分 30, 距离下一级还需 20 积分
积分
30
加好友
发消息
回复楼主
返回列表
用户使用心得及帮助
GPT3.5免费体验版
GPT3.5完整版(VIP免费)
自控工程师3.5(VIP免费)
伺服变频维修工程师(VIP免费)
GPT4.0-完整版-线路1(VIP免费)
GPT4.0-完整版-线路2(VIP免费)
GPT4.0-完整版-线路3(VIP免费)
自控工程师4.0版-线路1(VIP免费)
自控工程师4.0版-线路2(VIP免费)
自控工程师4.0版-线路3(VIP免费)
WinCC脚本编程机器人(VIP免费)
万能程序翻译
编程序专区