设为首页
收藏本站
开启辅助访问
切换到窄版
积分充值
登录
立即注册
微信扫码登录
首页
首页
共享资源
BBS
视频教程
AI聊天机器人
VIP充值
论坛
搜索
搜索
程序分享
文库分享
软件下载
变频手册
干货教程
成套课件
使用必看
GPT3.5免费体验版
万能程序翻译
WinCC脚本编程机器人(VIP免费)
GPT3.5完整版(VIP免费)
自控工程师3.5(VIP免费)
GPT4.0完整版-线路1(VIP免费)
自控工程师4.0版-线路1(VIP免费)
GPT更多线路及版本
最新提现记录
恭喜
admin
于 2023-6-6 15:17 成功提现
500元
恭喜
admin
于 2023-5-3 09:45 成功提现
400元
本版
用户
智控联盟
»
共享资源
›
精选专区
›
ChatGPT专区
›
编程序专区
›
me:用博图FB块的编写一个模拟量转换程序 ...
返回列表
发新帖
me:用博图FB块的编写一个模拟量转换程序
[复制链接]
1891
|
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免费)
万能程序翻译
编程序专区