当前位置: 主页 > PLC控制

SCL程序问题请教师傅

写了个变频器频率输入转化为模拟量输出控制SCL控制由于刚开始写SCL语言编译老错误不知道问题在哪哪位师傅帮忙看看。

问题补充:
感谢各为帮助现在编译没错误了但有个问题,我现在编译的也没用BEGIN和结束FC返回,有了反而编译错误,现在是按照我心飞翔工程师的方法写的

图片说明:

SCL程序问题请教师傅665c17f08edfb1633f2a198c5f11ba99 SCL程序问题请教师傅SCL程序问题请教师傅 SCL程序问题请教师傅SCL程序问题请教师傅

最佳答案

SCL语言中,FC返回值不为VOID时,要求FC必须返回一个值,你可以在最后ENDFUNCTioN前加个FC30:=0;
第二,END_VAR下一行,加个BEGIN
第三,你程序中DB30.DBW0*10*27648肯定超过了65535,也就是超过整形的表示范围,建议在计算时,AI1采用浮点数,避免四舍五入。
第四,:在SCL中DB30.DBW30应该用DB30.DW30来表示
所以你的程序可以这样来编

FUNCTIONFC30:INT
VAR_TEMP
AI1:REAL;
END_VAR
BEGIN
AI1:=INT_TO_REAL(WORD_TO_INT(DB30.DW0))*10.0*27648.0/50.0;
PQW26:=INT_TO_WORD(REAL_TO_INT(AI1));
FC30:=0;
END_FUNCTION


你程序截图,编译是没有问题的,但是运行时可能出错
第一,标准SCL程序是以BEGIN开始的,没有错误我也不知道为什么了。
第二,DB30.DBW0的值如果大于2,你的运算就会出错,INT类型的数据最大为32767,建议你用双整形或者符点数。
第三,FC默认的是有返回值,你原来的程序中
FC的定义是FUNCTIONFC30:INT,表明必须返回一个值给调用者,所以在最后必须返回一个值
FC30:=x;这个语句就是FC返回值,赋值语句X为任意的INT类型数据,
你新的程序中为什么不要类似FC30:=0;这样的语句了,因为你在定义FC时,声明了FC不需要返回之前,就以关键字VOID来表示,则FC的声明就是
FUNCTIONFC30:VOID了,说了这么多希望你明白些。

提问者对于答案的评价:
感谢我心飞翔工程师的详细解答

专家置评

已阅,最佳答案正确。

  • 关注微信

猜你喜欢

微信公众号