⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tip028.ob1

📁 实用工具西门子s7-200最新手册,jjasdfasdfafdasdf
💻 OB1
📖 第 1 页 / 共 2 页
字号:
MOVB   VB217, VB109			// 为RUN设置STW 
MOVB   16#7F, VB110			// 
MOVW   VW200, VW111			// 设置频率

NETWORK 22	// 
LD     M0.1				// 检查状态,看是否允许改变电机旋转方向
JMP    0				// 只有在STOP后才允许,否则不允许
                                      //保存以前的电机旋转方向
NETWORK 23	// 
LD     I1.0				// 根据输入I1.0的状态,设置电机旋转方向。
=      V109.3				// set V109.3 to indicate counterclockwise
					// direction.
NOT					// If input I1.0 is not on,
=      V109.4				// set V109.4 to indicate clockwise
					// direction.

NETWORK 24	// Label LBL0
// This network is the destination for the Jump to Label 0 instruction.
// The program jumps to this label if M0.1 in Network 22 is on (has
// a signal state of 1)  to calculate the BCC and initiate the
// Transmit time-out timer.
LBL    0				// Call the routines to calculate
					// the BCC and initiate the Transmit
					// time-out timer.

NETWORK 25	// Calculate the BCC and Initiate the Transmit Time-Out Timer
// Load special memory bit SM0.0 to process this network every scan
// cycle.
LD     "Always_On"			// Load SM0.0.
CALL   6				// 计算BBC 
CALL   7				// 初始化XMT及XMT定时器

NETWORK 26	// 子程序2结束
RET					// End SBR2.

NETWORK 27	//  子程序3
// 增加电机频率的处理子程序,频率增量存于VW202.若I0.5为1,则倍增;
//若上溢出,则设为32767;
SBR    3				// 增加频率

NETWORK 28	// 
LD     "Always_On"			// Load SM0.0.
+I     VW202, VW200			// 增加因子

NETWORK 29
LD     I0.5				// 倍增吗?
+I     VW202, VW200			// 

NETWORK 30	// 
LDW>=  VW200, +16384			// 判是否上溢出
MOVW   +16384, VW200			// 若上溢出,则设为最大值(16384)

NETWORK 31	// 
LD     M0.1				// 若M0.1=1,则
CALL   2				// 发送信息,增加频率
NETWORK 32	// 子程序3结束
RET					// End SBR3.

NETWORK 33	// 子程序4
//降低电机频率子程序,频率减量存于VW202,若I0.5为(ON),则倍减;若下溢出,则为0
SBR    4				// 降低频率.

NETWORK 34	// 
LD     "Always_On"			// 
-I     VW202, VW200			// 降低因子

NETWORK 35	// 
LD     I0.5				// 倍减?
-I     VW202, VW200			// 

NETWORK 36	// 
LD     "Neg_Result"			// 判是否下溢出
MOVW   +0, VW200			// 若下溢出,则设为0。

NETWORK 37	// 
LD     M0.1				// 若M0.1=1,则
CALL   2				// 发送信息,降低频率

NETWORK 38	// 子程序4结束
RET					// End SBR4.

NETWORK 39	// 子程序5
//停止电机的子程序
SBR    5				// 停止电机

NETWORK 40	// 
LD     "Always_On"			// Load SM0.0.
MOVB   16#C, VB109			// 为STOP设置STW 
MOVB   16#7E, VB110			// 
CALL   6				// 计算BCC.
CALL   7				// 初始化XMT及XMT定时器
					
NETWORK 41	// 子程序5结束
RET					// End SBR5.

NETWORK 42	// 子程序6
//用XOR(异或)计算信息的检查和,并存入缓冲区。
SBR    6				// 计算USS5的BCC

NETWORK 43	//
//十六进制信息为:02,0C,ADR,BYTE1,...,BYTE10,BCC
//本程序入口时,AC1指向信息LEN字节(OC)位置。
//本程序出口时,AC1指向BCC字节位置。
//将BCC存入信息缓冲区
//AC2含有BCC
LD     "Always_On"			// 
MOVD   &VB101, AC1			// 设置缓冲区地址指针
MOVD   16#E, AC2			// 2*OR12,信息的头两字节
FOR    AC3, +1, +11			// 计算剩余11个字符的BCC
XORW   *AC1, AC2			// 
INCD   AC1				// 地址指针加1

NETWORK 44	// 
NEXT					// 

NETWORK 45	// 
LD     "Always_On"			// 
INCD   AC1				// 指针加1指向BBC位置。
MOVB   AC2, *AC1			// 把BCC存到信息缓冲区中。

NETWORK 46	// 子程序6结束
RET					.

NETWORK 47	// 子程序7
//初始化XMT及XMT定时器
SBR    7				// 初始化XMT,捕捉XMT中断。

NETWORK 48	// 
LD     "Always_On"			// 
XMT    VB99, 0			// 发送
ATCH   0, 9				// 捕捉XMT中断(事件9),并调用中断程序0
MOVB   255, "Time_0_Intrvl"		// 设置XMT定时器,255ms,实际只用约7ms(19.2kb)
ATCH   1, 10				// 捕捉XMT定时器中断(事件10),并调用中断程序1

NETWORK 49	// 子程序7结束
RET					

//
/
//

NETWORK 50	 //***中断程序0***

// XMT(发送)中断处理,关掉XMT定时器,起动接收从设备响应

INT    0				// 中断程序0,XMT中断处理

NETWORK 51	
LD     "Always_On"			//
DTCH   10				// 退出XMT定时器
DTCH   9				// 中止XMT事件
MOVW   +3, VW204			// 刷新XMT重试次数(3次)
MOVW   +14, VW208			// 响应信息中接收字符数(14个)
MOVW   +0, VW215			// 清除BCC累加器
MOVD   &VB114, VD211			// 设置接收缓冲区指针
ATCH   2, 8				// 捕捉RCV(接收)中断,并调用中断程序2
ATCH   3, 10				// 捕捉接收定时器中断(事件10),并调用中断程序3

NETWORK 52	// 中断程序0结束
RETI					// End INT0.

NETWORK 53	//中断程序1

// 若XMT(发送)定时器时间到,这段程序取得控制权,XMT操作会重试,直到可重试次数减到0
INT    1				// 定时器中断0处理——发送

NETWORK 54	//
LD     "Always_On"			// 
DTCH   9				// 停止XMT发送
DTCH   10				// 退出定时器
DECW   VW204				// 重试次数减1,若为0,则

NETWORK 55	// 
LD     "Result_0"			// SM1.0=1
MOVB   3, VB210			// .
MOVB   3, QB0				// 用QB0指示发送器超时
MOVW   +3, VW204			// 刷新发送重试计数(3次)
S      M0.0, 1			// 使RUN,RAMP有效(M0.0=1)
CRETI					// 
NOT					// 重试
XMT    VB99, 0			// 发送
ATCH   0, 9				// 捕捉XMT中断,并调用中断程序0
MOVB   255, "Time_0_Intrvl"		// S设置XMT定时器为255ms,实际只用约7ms(19.2kb)
ATCH   1, 10				// 捕捉定时器中断,并调用中断程序1

NETWORK 56	// 中断程序1结束
RETI					

NETWORK 57	// 中断程序2
// 这段处理程序计算接收字符数,并校验错误
//若检验到错误,则再试接收,直至可重试次数减到0
INT    2				//接收字符处理

NETWORK 58	//
LD     "Always_On"			// 
MOVB   "Receive_Char", AC0		//得到接收字符
XORW   AC0, VW215			// 累积BCC,即用XOR(异或)计算BCC
MOVB   AC0, *VD211			// 把接收到的字符送入缓冲区
INCD   VD211				// 缓冲区指针加1
DECW   VW208				// 有待接收的字符减1

NETWORK 59	// 
LDN    "Result_0"			// 检验是否结束
CRETI					// 
NOT					// 
DTCH   10				// 退出接收定时器
DTCH   8				// 关掉接收
AB=    0, VB216			// 检验已算好的BCC是否为0
NOT					// 
MOVB   2, VB210			// 坏的BCC操作码
MOVB   2, QB0				// 
JMP    0				// BCC正确,检验信息的其他部分

NETWORK 60	// 
LDB=   VB114, 16#2			// STX第一个字符吗?
AB=    VB115, 16#C			// 长度=12吗
AB=    VB116, VB102			// 将信息发往同一从设备吗
// 任何其他校验都会因相应响应而经过这一段
MOVB   0, VB210			// 操作正确
MOVB   0, QB0				// 
JMP    0				// 
					

NETWORK 61	// 
LD     "Always_On"			// 
MOVB   1, VB210			// 信息中有不对的地方
MOVB   1, QB0				// 

NETWORK 62	//
LBL    0				

NETWORK 63	// 
MOVW   +3, VW206			// 刷新接收可重试次数(3次)

NETWORK 64	// 中断程序2结束
RETI				

NETWORK 65	// 中断程序3
//若响应的接收时间已到,这段程序取得控制权,再试发送信息,再试接收。
//在超时时操作重试,直至可重试次数减为0
INT    3				// 定时器中断0处理——接收

NETWORK 66	
LD     "Always_On"			//
DTCH   8				// 关掉接收中断
DTCH   10				// 退出接收定时器
DECW   VW206				// 检查可重试次数,重试次数减1,若为0,
                                    //  则

NETWORK 67	// 
LD     "Result_0"			// SM1.0=1
MOVB   4, VB210			// 
MOVB   4, QB0				// 用QB0指示接收超时,
MOVW   +3, VW206			// 刷新接收重试次数
S      M0.0, 1			// 使RUN,PARM有效
CRETI					// 条件返回
NOT					// 
MOVD   &VB114, VD211			// 设置接收缓冲区的指针
MOVW   +0, VW215			// 清除BCC累加器,再重试发送
XMT    VB99, 0			// 发送
ATCH   0, 9				// 捕捉XMT(发送)中断,并调用中断程序0
MOVB   255, "Time_0_Intrvl"		// 设定XMT(发送)定时器为255ms
ATCH   1, 10				// 捕捉定时器中断(事件10),并调用中断程序1

NETWORK 68	// 中断程序3结束
RETI					

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -