恭喜,你发布的帖子
发布于 2024-04-07 21:57:55
7楼
(*首先需要考虑你的数学参数。
幅值:是在某一特定频率下的最大振幅
振幅: 是振动过程中振动的最大偏离平衡位置的距离。
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; // 正旋输出
END_VAR
VAR
// Static Variables
angle_data:REAL; //角度
DATA1:REAL;
radian_data:REAL; //弧度
END_VAR
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秒.
附两张图片,但请清楚,这些都是离散的数序,也就是阶跃变化的,真实图形类似与台阶
请填写推广理由:
分享
只看
楼主