签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
自己编程写:0-10V的模拟量如何输出正旋波信号,频率、振幅可调?
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=4&a_id=1885553&s_id=23&num=7
ao输出0~27648,那么振幅就是输出的最大值,如果输出27648,那么实际就是10v,如果是输出13824就是5v,频率是波峰之间(或者波谷)的时间的倒数,那么假设你的程序时10ms扫描一次,那么那么之要更改每一个扫描周期的变化量的大小就行了。
y=Asin(x*t),A就是振幅,改变x就改变了频率。
程序代码如图
LGF库里有这个块LGF_Sin
一楼资料干货
sin是不是要转换成弧度?
学习了,谢谢
(*首先需要考虑你的数学参数。
幅值:是在某一特定频率下的最大振幅
振幅: 是振动过程中振动的最大偏离平衡位置的距离。
y=Asin(wt+q) : 其中 A :幅值, w: 角频率 w=2πf f:频率 q: 初相角。
所以针对你给定的信号,一个连续的模拟量值(连续的时间函数),希望输出为一个正弦波(周期函数)。
所以幅值 -10 V : -27647 +10v : 27647
考虑采样频率 例如选用OB38 则t= 10ms 每隔10ms中断一次 f= 100HZ (最高采样频率 )
那么我们设定的频率 0<Fset<= 100HZ
*)
FUNCTION_BLOCK FB101
TITLE = 'Block Title'
//
// 三角函数输出
VERSION: '1.0'
AUTHOR: baikai
NAME: out
FAMILY: use_group
know_how_protect
VAR_INPUT
amplitude_IN:REAL; // 幅值输入
frequency_IN:REAL; // 频率输入
END_VAR
VAR_OUTPUT
Sine:REAL; // 正旋输出
VAR
// Static Variables
angle_data:REAL; //角度
DATA1:REAL;
radian_data:REAL; //弧度
angle_data:= 360.0* 100.0/(1000.0/frequency_IN); //1000=1000ms 我在OB35调用,则
此数据为100ms一次的角度叠加量
DATA1:= angle_data + DATA1; //角度积分
IF DATA1 >= 360.0 THEN // 角度复位
DATA1:= 0.0;
END_IF;
radian_data:= DATA1 / 180.0 * 3.1415926; //角度转化为弧度
Sine:= amplitude_IN* SIN( radian_data); // 这个放大系数,如果要做在画面上看,则任意,幅值根据你的要求来定,如果输出到模拟量AO 则为-27647 27647
END_FUNCTION_BLOCK
DATA_BLOCK DB101 FB101
// Block Comment...
BEGIN
END_DATA_BLOCK
//结论: 我测试是放在OB35 t=100ms f= 10HZ(最大采样周期) 给定频率为了看清数据为 0.05HZ 周期为20秒.
附两张图片,但请清楚,这些都是离散的数序,也就是阶跃变化的,真实图形类似与台阶
那么我们设定的频率 0*)FUNCTION_BLOCK FB101TITLE = 'Block Title'//// 三角函数输出//VERSION: '1.0'AUTHOR: baikaiNAME: outFAMILY: use_groupknow_how_protectVAR_INPUTamplitude_IN:REAL; // 幅值输入 frequency_IN:REAL; // 频率输入END_VARVAR_OUTPUT Sine:REAL; // 正旋输出END_VARVAR // Static Variablesangle_data:REAL; //角度DATA1:REAL;radian_data:REAL; //弧度END_VARangle_data:= 360.0* 100.0/(1000.0/frequency_IN); //1000=1000ms 我在OB35调用,则 此数据为100ms一次的角度叠加量DATA1:= angle_data + DATA1; //角度积分IF DATA1 >= 360.0 THEN // 角度复位 DATA1:= 0.0;END_IF; radian_data:= DATA1 / 180.0 * 3.1415926; //角度转化为弧度 Sine:= amplitude_IN* SIN( radian_data); // 这个放大系数,如果要做在画面上看,则任意,幅值根据你的要求来定,如果输出到模拟量AO 则为-27647 27647 END_FUNCTION_BLOCKDATA_BLOCK DB101 FB101//// Block Comment...//BEGINEND_DATA_BLOCK//结论: 我测试是放在OB35 t=100ms f= 10HZ(最大采样周期) 给定频率为了看清数据为 0.05HZ 周期为20秒.附两张图片,但请清楚,这些都是离散的数序,也就是阶跃变化的,真实图形类似与台阶
辛苦了!感谢!
一楼的解释通俗易懂,并且程序还简洁并实现了功能,超级棒
这段程序放到哪个OB里面运行比较合适?如果扫描时间不固定,出来的波形是不是有畸变?
sin的弧度值也是一个实数呀!,这有什么问题吗?2Π=3.1415925*2=6.2831852,这不也是一个实数吗?
引用2楼详细内容:
放到循环中断(ob35等)中调用
楼上几位的程序我感觉有点问题, 没考虑累计以后大数吃小数的问题。
7楼的程序考虑了。
程序还简洁并实现了功能
7楼程序不错
言简意赅,赞!
感谢 感谢 ,很有用
是不是任意波形都可以呢?
分享
扫码分享好友 任选多种好礼
收藏
有帮助
1. 文件大小:上传文件的大小请限制在2M以内。
2. 文件格式:请不要上传.exe文件,系统支持的格式有:.avi,.wmv,.mp3,.rar,.zip,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.wma,.asf,.txt,.7z
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录