我刚接触西门子200PLC,公司要求用编码器在触摸屏上显示位置
最佳答案
给你一个网上的例子看看——
用编码器输入,显示转速的程序,采用的编码器是增量型,1024线。
编程思路:
1,用PLS输出脉冲串来仿真编码器的输入。
2,定义高速计数器,
3,采用定时中断100MS采集一下高速计数器的当前值。
4,计算速度((当前值)-(前一值)) *600 /1024
5,清除计数器当前值(防止计数值溢出)
ORGANIZATION_BLOCK MAIN:OB1
TITLE=PROGRAM COMMENTS
BEGIN
Network 1 // Network Title
// 定义脉冲串输出(仿真编码器输出)
LD SM0.1
R Q0.0, 1
MOVB 16#8F, SMB67
MOVW +5, SMW68
MOVD +30000000, SMD72
PLS 0
MOVR 0.0, VD204
CALL SBR_0
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=SUBROUTINE COMMENTS
BEGIN
Network 1
// 定义高速计数器HSC0
LD SM0.0
MOVB 16#F8, SMB37
HDEF 0, 0
MOVD +0, SMD38
MOVD +5000, SMD42
ATCH INT_1, 12
HSC 0
ENI
Network 2
// 定时中断,100MS采集一下HC0的值
LD SM0.0
MOVB 100, SMB34
ATCH INT_0, 10
ENI
Network 3 // Network Title
// Network Comment
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=INTERRUPT ROUTINE COMMENTS
BEGIN
Network 1 // Network Title
// 计算速度,VD208显示每分钟转速。
LD SM0.0
MOVD HC0, VD100
DTR VD100, VD200
MOVR VD200, VD300
-R VD204, VD300
MOVR 600.0, VD304
*R VD300, VD304
MOVR VD304, VD208
/R 1024.0, VD208
MOVR VD200, VD204
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK INT_1:INT1
TITLE=INTERRUPT ROUTINE COMMENTS
BEGIN
Network 1 // Network Title
// 清除编码器当前植
LD SM0.0
MOVD +0, SMD38
HSC 0
MOVR 0.0, VD204
-R VD300, VD204
END_INTERRUPT_BLOCK
提问者对于答案的评价:
谢谢
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc254905.html