编写程序时为什么要在scanf后加_s

编写程序时为什么要在scanf后加_s,第1张

scanf函数第二值必须是地址,这样编译器才知道把你输入的值赋值给谁。

int

num;

scanf("%d",

&num)

//num是个变量,取地址了,编译器才知道你输入的值该赋值给谁。

char

str[9]

=

"testing"

printf("str:[%c]

str

address:[%p]

pstr:[%p]\n",

*str,

str,

&(*str))

//看明白了这个你就理解了数组的含义。

scanf("%s",

str)

//str是一个字符数组,它本身就是字符串的首地址。既然是地址编译器就能识别。

应该是s0.0,西门子plc调用子程序指令前边加S0.0指的是顺控继电器。

STEP7-Micro/Win在程序编辑器窗口中为每个POU提供单独的页面。主程序总共是第1页,后面是子程序或中断程序。

由于每个程序在编辑器窗口中是分开的,所以编译时会在程序末尾自动添加无条件结束指令或无条件返回指令,用户程序只能使用条件结束指令和条件返回指令。

西门子plc调用子程序

通常,具有特定功能和多种用途的程序段被视为子程序。子程序可以多次调用、嵌套(最多8层)或递归调用(自己调用)。有两种指令,子程序调用和子程序返回。

子程序返回分为条件返回和无条件返回。子程序调用指令用于主程序或其他调用子程序的程序,子程序的无条件返回指令在子程序的最后一个网段。梯形图指令系统可以自动生成子程序的无条件返回指令,无需用户输入。

子程序的调用是有条件的,不调用时子程序中的指令不会被执行,因此使用子程序可以减少扫描时间,使整个程序功能清晰,易于检查和维护,减少存储空间。为了移植子程序,应避免使用全局符号和变量,如V存储区的绝对地址。

PLC一般是先把输入点读到缓存里面,然后程序扫描时间到,再去执行程序,执行完程序后,再对内存里的内容更新,最后输出到输出点上。所以,如果你的程序开始位置Set一个点(比如M0点),在程序的结尾处又Reset M0,那么程序真正执行时,M0为1的生命周期只存在于Set和Reset之间,实际的输出M0是不会为1的。

时间继电器其实是靠PLC内部的时钟在工作的,与扫描周期无关。只是在程序中应用Timer的输出应用要注意一下扫描顺序。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12136502.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存