技术论坛

 回复:请教一个模拟电位器的示例程序

返回主题列表
作者 主题
翼龙
新手

经验值:34
发帖数:34
精华帖:0
楼主    2005-09-01 18:03:05
主题:请教一个模拟电位器的示例程序
以下是西门子S7-200 PLC 六十例中的一个示例程序,其中有一处理解不了,请各位大侠指教:

--- SRW MW0, 3 // 将电位器新值除8 ----

SRW是字右移指令,上述应该为字MW0向右移三位,但为什么示例中说是 除8 呢?


---------------------------------------------------------------------
ORGANIZATION_BLOCK MAIN:OB1
TITLE= Tip021B
// 题目:灯泡亮度控制
// ***概述***
// 这个示例解释了一个使用S7-200的集成高速脉冲输出指令来控制灯泡(24V/1W)
// 亮度的例子,模拟电位器0的设置值影响输出端Q0.0方波信号的脉冲宽度,也就
// 是灯泡的亮度。调整电位器时需要一把(2.5mm)螺丝刀。
// ***程序和注释***
// 在程序的每次扫描过程中,模拟电位器0的值,通过特殊存储字节SMB28被拷贝到内存
// 字MW0的低字节MB1。电位器的值除以8作为脉宽,脉宽和脉冲周期的比率大致决定了灯
// 泡的亮度(相对于最大亮度)。除以8会带来这样一个额外的好处,即丢弃了SMB28所存
// 值的3个最低有效位,从而使程序更稳定。如果电位器值变化了,那么将重新初始化
// 输出端Q0.0的脉宽调制,借此电位器的新值将被变换成脉宽的毫秒值。
// 例:SMB28=80 (电位器0的值)
// 80/8=10
// 10/25(=脉宽/周期)=40%(电压时间比)=40%最大亮度
// 标题:用电位器调灯泡亮度
//
BEGIN
Network 1 // ***主程序***
LD SM0.1 // 第一次扫描SM0.1=1
MOVW +0, MW0 // 标志字MW0清零

Network 2
LD SM0.0 //设置栈顶(SM0.0总是1)
MOVW MW0, MW2 // 保存电位器的旧值
MOVB SMB28, MB1 // 在MW0的低字节(MB1)保存模拟电位器新值
SRW MW0, 3 // 将电位器新值除8

Network 3
LDW= MW0, MW2 // 判电位器新值(MW0)是否等于旧值(MW2)
NOT // 若不等
MOVB 16#CB, SMB67 // 设置PMW的控制字节(激活PWM,时基1毫秒,
//可更新脉宽和周期)
MOVW +25, SMW68 //设置脉冲周期为25毫秒
MOVW MW0, SMW70 // 根据电位器值设置脉宽。
PLS 0 // 在输出端Q0.0输出脉宽

Network 4 // 主程序结束
// MEND
//
END_ORGANIZATION_BLOCK
GW
侠客

经验值:603
发帖数:506
精华帖:5
    2005-09-02 20:08:21
精华帖  主题:回复:请教一个模拟电位器的示例程序
中断程序与子程序最大的不同是,中断服务程序不能由用户程序调用,而只能由特定的事件触发执行。 无法准确预测何时执行中断服务程序。
子程序可以把整个用户程序按照功能进行结构化的组织。一个“好”的程序总是把全部的控制功能分为几个符合工艺控制规律的子功能块,每个子功能块可以由一个或多个子程序组成。这样的结构也非常有利于分步调试,以免许多功能综合在一起无法判断问题的所在;

子程序和中断程序不能互相替代.
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。