从q0.0到q0.7之间循环输出。我用的是SHRB移位寄存器。后来要求在每个输出点跳转之间加一个时间间隔。是不是这样就不能用移位指令了。
有没有什么更好的方法。谢谢,最好用梯形图描述。
时间间隔之间没有输出。
西门子s7-200的移位指令能否在移位之间加时间间隔
答案:2 悬赏:30 手机版
解决时间 2021-03-24 01:01
- 提问者网友:精神病院里
- 2021-03-23 04:12
最佳答案
- 五星知识达人网友:逐風
- 2021-03-23 05:30
好办,你把循环移位的值由QB0换为MB0,在移位的中间间隔时就给QB0赋0,移位时就把MB0赋给QB0。
全部回答
- 1楼网友:空山清雨
- 2021-03-23 05:46
你好好学习一下 200 的脉冲指令
多段pto操作的轮廓表格式
距离轮廓表起始位置的 字节偏移量 轮廓段数目 表格条目说明
0 段数(1至255);数值0生成非严重错误,生成无pto输出
1 #1 初始周期(2至65535个单位)
3 每次脉冲的周期模ù诺闹担?32768至32767个单位)
5 脉冲计数(1至4294967295)
9 #2 初始周期(2至65535个单位时间基准)
11 每个脉冲的周期模ù诺氖担?32768至32767个单位时间基准)
13 脉冲计数(1至4294967295)
:
: #3 :
:
计算轮廓表数值
pto/pwm发生器的多段管线作业功能在许多应用程序中都很有用,特别是步进电机控制中。
例如,您可以通过简单加速、运行和减速顺序或更复杂的顺序使用配备脉冲轮廓的pto,控制步进电机,方法是定义一个最多包含255个段的脉冲轮廓,每个段与一个加速、运行或减速操作相对应。
下图显示生成加速步进电机(#1段)、按恒速操作电机(#2段)、随后减低电机速度(#3段)的输出信号波形所要求的轮廓表数值样本。
简单步进电机应用程序的频率与时序图举例
在本例中:起始和终止脉冲频率为2 khz,最大脉冲频率为10 khz ,要求4000次脉冲才能达到所需的电机转动次数。因为用阶段(周期)表示轮廓表值,而不使用频率,需要将给定频率数值转换成周期数值。因此,起始(最初)和终止(结束)周期为500 ms,与最大频率对应的周期为100 ms。在输出轮廓的加速部分,应在约400次脉冲时达到最大脉冲频率。轮廓减速部分应在约400次脉冲时完成。
您可以用以下公式确定pto/pwm发生器用于调节某一特定段每次脉冲周期的闹芷谥担?
利用该公式,计算出的加速部分(或#1段)的闹芷谖?2。与此相似,减速部分(或#3段)的闹芷谖?。因为#2段是输出信号波形的恒速部分,该段的闹芷谖恪?
假定轮廓表位于从v500开始的v内存中,以下显示用于生成所需信号波形的表值。您可以在程序中包括指令,将这些数值载入v内存,或者您可以在数据块中定义轮廓数值。
轮廓表数值举例
v内存地址 数值 说明
vb500 3 总段数
vw501 500 初始周期 #1段
vw503 -2 初始闹芷?
vd505 200 脉冲数
vw509 100 初始周期
#2段
vw511 0 闹芷?
vd513 3400 脉冲数
vw517 100 初始周期
#3段
vw519 1 闹芷?
vd521 400 脉冲数
利用程序中的指令可将这些表值置于v内存中。另一种方法是定义数据块中的轮廓值。本标题结尾部分举例说明使用多段pto操作的程序指令
为了确定信号波形段之间的转换是否可接受,您需要确定段中最后一次脉冲的周期。除非闹芷谑?,您必须计算段最后一次脉冲的周期,因为该数值未在轮廓中指定。使用以下公式计算最后一次脉冲的周期:
上例是简化的情况,用于介绍目的,实际应用程序可能要求更复杂的信号波形轮廓。请记住:
?闹芷谥荒苤付ㄎ⒚牖蚝撩?
?可对每次脉冲执行周期修改
这两个项目产生的效果是计算某个特定段的闹芷谑悼赡芤笠桓鲅贩桨浮<扑隳掣鎏囟ǘ蔚慕崾芷诨蚵龀迨渴笨赡芤笠欢ǖ牧榛钚浴?
特定轮廓段期限对确定正确的轮廓表值程序有用。可利用以下公式计算完成特定轮廓段的时间长度:
pto/pwm控制寄存器
pls指令读取存储在指定的sm内存位置的数据,并以此为pto/pwm发生器编程。smb67控制pto 0或pwm 0,smb77控制pto 1或pwm 1。pto/ pwm控制寄存器表描述用于控制pto/pwm操作的寄存器。您可以将下表用作快速参考,帮助确定放置在pto/pwm控制寄存器中用于激活所需操作的数值。
您可以改变pto或pwm信号波形的特征,方法是修改sm区(包括控制字节)中的位置,然后执行pls指令。您可以在任何时间禁止pto或pwm信号波形的生成,方法是向控制字节(sm67.7或sm77.7)的pto/pwm启用位写入0,然后执行pls指令。
状态字节中的pto空闲位(sm66.7或sm76.7)表示编程脉冲串已完成。此外,可在脉冲串完成时激活中断例行程序。(请参阅中断指令说明和"通讯"指令。)如果您在使用多段操作,在轮廓表完成时激活中断例行程序。
以下条件设置sm66.4(或sm76.4)和sm66.5(或sm76.5):
?指定一个在数次脉冲后导致非法周期的周期氖瞪梢桓鍪б绯鎏跫锰跫嶂罩笔to功能,并将"募扑愦砦?位(sm66.4或sm76.4)设为1。输出回复为映像寄存器控制。
?以手动方式异常中止(禁用)正在执行的pto轮廓会将"用户异常中止"位(sm66.5或sm76.5)设为1。
?尝试在管线已满的情况下载入会将pto溢出位(sm66.6或sm76.6)设为1。如果您希望检测随后的溢出,您必须在检测到溢出后以手动方式清除该位。转换至run(运行)模式可将该位初始化为0。
注释:当您载入新脉冲计数(smd72或smd82)、脉宽(smw70或smw80)或周期(smw68或smw78)时,在执行pls指令之前,还需要在控制寄存器中设置适当的更新位。对于多段脉冲串操作,在执行pls指令之前,您还必须载入轮廓表的起始偏移量(smw168或smw178)和轮廓表数值。
pto/pwm控制寄存器
q0.0 q0.1 状态位
sm66.4 sm76.4 pto轮廓由于募扑愦砦笠斐v兄? 0 = 无错: 1 = 异常中止
sm66.5 sm76.5 pto轮廓由于用户命令异常中止
0 = 无错: 1 = 异常中止
sm66.6 sm76.6 pto管线溢出/下溢
0 = 无溢出; 1 = 溢出/下溢
sm66.7 sm76.7 pto空闲 0 = 进行中; 1 = pto空闲
q0.0 q0.1 控制位
sm67.0 sm77.0 pto/pwm更新周期值 0 = 无更新; 1 = 更新周期
sm67.1 sm77.1 pwm更新脉宽时间值 0 = 无更新; 1 = 更新脉宽
sm67.2 sm77.2 pto更新脉冲计值 0 = 无更新; 1 = 更新脉冲计数
sm67.3 sm77.3 pto/pwm选择 0 = 1 祍/tick; 1 = 1ms/tick
sm67.4 sm77.4 pwm更新方法: 0 = 异步更新; 1 = 同步更新
sm67.5 sm77.5 pto操作: 0 = 单段操作; 1 = 多段操作
sm67.6 sm77.6 pto/pwm模式选择 0 = 选择pto; 1 = 选择pwm
sm67.7 sm77.7 pto/pwm启用 0 = 禁用pto/pwm; 1 = 启用pto/pwm
q0.0 q0.1 其他pto/pwm寄存器
smw68 smw78 pto/pwm周期值(范围:2至 65535)
smw70 smw80 pwm脉宽值(范围:0至65535)
smd72 smd82 pto脉冲计值(范围:1至4294967295)
smb166 smb176 进行中的段数(仅用于多段pto操作)
smw168 smw178 轮廓表起始位置,用距离v0的字节偏移量表示(仅用于多段pto操作)
smb170 smb180 线性轮廓状态字节
smb171 smb181 线性轮廓结果寄存器
smb172 smb182 手动模式频率寄存器
pto/pwm控制字节参考
控制寄存器(十六进制值) 执行pls指令的结果
启用 选择模式 pto段操作 pwm更新方法 脉冲计数 脉宽 周期
16#81 是 pto 单段 1 祍/循环 载入
16#84 是 pto 单段 1 祍/循环 载入
16#85 是 pto 单段 1 祍/循环 载入 载入
16#89 是 pto 单段 1 ms/循环 载入
16#8c 是 pto 单段 1 ms/循环 载入
16#8d 是 pto 单段 1 ms/循环 载入 载入
16#a0 是 pto 多段 1 祍/循环
16#a8 是 pto 多段 1 ms/循环
16#d1 是 pwm 同步 1 祍/循环 载入
16#d2 是 pwm 同步 1 祍/循环 载入
16#d3 是 pwm 同步 1 祍/循环 载入 载入
16#d9 是 pwm 同步 1 ms/循环 载入
16#da 是 pwm 同步 1 ms/循环 载入
16#db 是 pwm 同步 1 ms/循环 载入 载入
pto/pwm初始化和操作顺序
以下是初始化和操作顺序说明,能够帮助您更好地识别pto和pwm功能操作。在整个顺序说明过程中一直使用脉冲输出q0.0。初始化说明假定s7-200刚刚置入run(运行)模式,因此首次扫描内存位为真实。如果不是如此或者如果必须对pto/pwm功能重新初始化,您可以利用除首次扫描内存位之外的一个条件调用初始化例行程序。
pwm初始化
以下pwm初始化和操作顺序说明建议使用"首次扫描"位(sm0.1)初始化脉冲输出。使用"首次扫描"位调用初始化子程序可降低扫描时间,因为随后的扫描无须调用该子程序。(仅需在转换为run(运行)模式后的首次扫描时设置"首次扫描"位。)但是,您的应用程序可能有其他限制,要求您初始化(或重新初始化)脉冲输出。在此种情况下,您可以使用另一个条件调用初始化例行程序。
通常,您用一个子程序为脉冲输出初始化pwm。您从主程序调用初始化子程序。使用首次扫描内存位(sm0.1)将脉冲输出初始化为0,并调用子程序,执行初始化操作。当您使用子程序调用时,随后的扫描不再调用该子程序,这样会降低扫描时间执行,并提供结构更严谨的程序。
从主程序建立初始化子程序调用后,用以下步骤建立控制逻辑,用于在初始化子程序中配置脉冲输出q0.0:
1. 通过将以下一个值载入smb67: 16#d3(选择微秒递增)或16#db(选择毫秒递增)的方法配置控制字节。
两个数值均可启用pto/pwm功能、选择pwm操作、设置更新脉宽和周期值、以及选择(微秒或毫秒)。
2. 在smw68中载入一个周期的字尺寸值。
3. 在smw70中载入脉宽的字尺寸值。
4. 执行pls指令(以便s7-200为pto/pwm发生器编程)。
5. 欲为随后的脉宽变化预载一个新控制字节数值(选项),在smb67: 16#d2(微秒)或16#da(毫秒)中载入下列数值之一。
6. 退出子程序。
为pwm输出更改脉宽
如果您用16#d2或16#da预载smb67(请参阅以上第5步),您可以使用一个将脉宽改变为脉冲输出(q0.0)的子程序。建立对该子程序的调用后,使用以下步骤建立改变脉宽的控制逻辑:
1. 在smw70中载入新脉宽的字尺寸值。
2. 执行pls指令,使s7-200为pto/pwm发生器编程。
3. 退出子程序。
pto初始化-单段操作
以下pwm初始化和操作顺序说明建议使用"首次扫描"位(sm0.1)初始化脉冲输出。使用"首次扫描"位调用初始化子程序可降低扫描时间,因为随后的扫描无须调用该子程序。(仅需在转换为run(运行)模式后的首次扫描时设置"首次扫描"位。)但是,您的应用程序可能有其他限制,要求您初始化(或重新初始化)脉冲输出。在此种情况下,您可以使用另一个条件调用初始化例行程序。
通常,您用一个子程序为脉冲输出初始化pwm。您从主程序调用初始化子程序。使用首次扫描内存位(sm0.1)将脉冲输出初始化为0,并调用子程序,执行初始化操作。当您使用子程序调用时,随后的扫描不再调用该子程序,这样会降低扫描时间执行,并提供结构更严谨的程序。
从主程序建立初始化子程序调用后,用以下步骤建立控制逻辑,用于在初始化子程序中配置脉冲输出q0.0:
1. 通过将以下一个值载入smb67: 16#85(选择微秒增加)或16#8d(选择毫秒增加)的方法配置控制字节。
2. 两个值均可启用pto/pwm功能、选择pwm操作、设置更新脉宽和周期值、以及选择(微秒或毫秒)。
在smw68中载入一个周期的字尺寸值。
3. 在smd72中载入脉冲计数的双字尺寸值。
4. (选项)如果您希望在脉冲串输出完成后立即执行相关功能,您可以将脉冲串完成事件(中断类别19)附加于中断子程序,为中断编程,使用atch指令并执行全局中断启用指令eni。
5. 执行pls指令,使s7-200为pto/pwm发生器编程。
6. 退出子程序。
改变pto周期-单段操作
对于单段pto操作,您可以使用中断例行程序或子程序改变周期。欲使用单段pto操作更改中断例行程序或子程序中的pto周期,请遵循下列步骤:
?设置控制字节(启用pto/pwm功能、选择pto操作、选择、设置更新周期值),方法是在smb67: 16#81(用于微秒)或16#89(用于毫秒)中载入下列一个值。
?在smw68中,载入新周期的一个字尺寸值。
?执行pls指令,使s7-200为pto/pwm发生器编程。更新脉冲计数信号波形输出开始之前,cpu必须完成所有进行中的pto。
?退出中断例行程序或子程序。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯