📄 tip028.ob1
字号:
// Tip028B
// 题目:
// S7-214与SIMOVERT 电机驱动器之间的自由通信口通信接口
//***概述***
//S7-214通过与一台SIMOVERT微型主电机驱动器通信来起动和停止电机,以及改变输出
//到电机的频率。通信是通过S7-200自由通信口模式进行,使用USS5字协议。输入仿真
//器用来初始化发给电机驱动器的命令。
//***硬件要求***
//这个程序假定使用者已正确地将电机和微型主电机驱动器接好线,并且所有的电机和
//微型主机驱动器的参数已通过人工设定了。必须把微型主电机驱动器设置在遥控方式
//(P910=1),波特率19.2kb(P920=7),地址 1(P91=1).
//
//要求用一根带9针阳性插头的通信电缆接在S7-214的1,3,8端上,电缆另一端是无插
//头的,以便接到微型主电机驱动器的13,14,15端子上(1接15,3接13,8接14)。
//***程序结构***
//
// Main 主程序:监视用于自由通信口/PPI通信切换的RUN/TERM开关,寻找输入
信号上升沿作业电机命令。
// SBR0 设置自由通信口通信:首次扫描时设置自由通信口模式的参数。
// SBR1 RUN子程序:设定电机恒速运转
// SBR2 PAMP子程序:设定电机变速运转。
// SBR3 增加频率倍率的子程序:增加微型主电机驱动器的输出频率
// SBR4 降低频率倍率的子程序:降低微型主电机驱动器的输出频率
// SBR5 Stop子程序:停止电机。
// SBR6 计算输出信息的BBC
// SBR7 发送信息,初始化发送定时器。
// INT0 发送结束的中断处理程序,打开接收器。
// INT1 发送超时的中断处理程序,再试发送,最多试发三次
// INT2 接收字符的中断程序,结束后进行有效性检验。
// INT3 接收超时的中断处理程序,再试接收最多试收3次。
//
//
//***程序和注释***
//
//S7-214通过与一台SIMOVERT微型主电机驱动器通信来起动和停止电机,以及改变输出到电机的
//频率,通信是通过S7-200自由通信口模式进行,使用USS5字协议。输入仿真器用来初始化发给
//电机驱动器的命令,程序监视RUM/TERM开关,并选择相应的协议来设置自由通信口模式的控制
//字节(SMB30)。程序监视如下的电机命令的输入点:
//
// I0.0 上升沿 使电机以上次命令的恒定频率运转。
//
// I0.2 上升沿 使电机以上次命令的频率开始变频运转。
// 频率可使用I0.6和I0.7升高或降低。
// I0.4 上升沿 停止电机。
//
// I0.5 电平 以1*或2*倍率改变频率。
// I0.5: 0——1*, 1——2*。
// I0.6 上升沿 以1*或2*频率增量(此例中为50)增加电机频率。
//
// I0.7 上升沿 以1*或2*频率增量(此例中为50)降低电机频率。
//
// I1.0 电平 电机旋转方向: I1.0: 0——CW,1——CCW
//
// 程序检测并报告通信错误。首先对微型主电动机驱动器的发送要计时,如果失败,允许
//再次发送,最多可试发送3次。然后对来自微型主电动机驱动器的接收亦要计时,在退出发
//送接收操作之前可重试多达3次。对来自微型主电动机驱动器的响应信息要进行有效校验
//(STX,LEN,ADR和BCC),任何被检验到的错误都要由QB0显示,直到下一次操作结束,QB0的
//显示含义如下:
// 0 无错误
// 1 非法的响应
// 2 坏的BCC
// 3 发送超时
// 4 接收超时
//
// 尽管这个示例程序只与一台微型主电机驱动器通信,可把它扩展用于另外的输入点,选择
// 多站通信线路上的某一台微型主电机驱动器的地址,向它发送命令。另外,这个程序的基
//本通信结构还可以用来发送别的信息给微型主电机驱动器,如监视电流,转矩等。
//
//这个程序是S7-200自由通信口通信接口与SIMOVERT微型主电机驱动器通信的示例
//两者间通信用USS5字协议。
//S7-200作为主设备,使用USS协议地址0,而微型主电机驱动器则是地址1。
//为了正确地应用此例,你需要:
//1台带输入仿真器的SIMATIC S7-212或S7-214.
//1根RS485电缆,其一端为阳性插头,另一端无插头,已接到微型主电机驱动器上。
//1台微型主电机驱动器和电机
//这个例子使用Herb Taylor, SE&A的示例单元(驱动器和电机)
//你要确保正确地设置微型主电机驱动器的参数,并保证将它置于遥控方式
//(P910=1),波特率设置正确(P092),从地址设置正确(P091)。这个例子的波特率位19.2kb,
//从地址为1。
//微型主电机驱动器使用的USS串行通信5字协议有如下14字节结构:
//
// 02 开始信息(STX)
// 12 微型主电机驱动器的信息从AA到BCC长度为12字节。
// ADR device number address. (In this example, the drive is
// 1 for a single slave station, or 32 for broadcast mode.)
// PKE 参数控制高字节
// PKE 参数控制低字节
// IND 陈列序引字的高字节
// IND 陈列序引字的低字节
// PWE 参数值和错误代码的高字节
// PWE 参数值和错误代码的低字节
// PZD1 控制/状态字高字节
// PZD1 控制/状态字低字节
// PZD2 主设定2点和返回值的高字节。
// PZD2 主设定2点和返回值的低字节。
// BCC 块校验和
//
// ***注意例中对于 开/关/速度改变只使用数据字:PZD1和PZD2.***
//
//
// 内存单元分配:
//
// VB99 发送信息的长度
// VB100 to VB113 发送缓冲区
// VB114 to VB127 接收缓冲区
// VW200 缺省频率倍率,初始值=5461,频率=(5461/16384)*P094
// VW202 频率倍率增/减量,初始值=50。
// VW204 发送再试次数,初始值为3次,每发一次减1。
// VW206 发送再试次数,初始值为3次,每收一次减1。
// VW208 信息中接收字符数,USS 10=14
// VB210 最后一次试操作的状态(也在输出QB0显示),其值含义如下:
// 0 操作正确。
// 1 来自微型主电机驱动器的非法响应(除去坏的BCC)
// 2 坏的BCC
// 3 发送超时
// 4 接收超时
// VD211 接收缓冲区的地址指针
// VW215 累积接收信息为BCC,存于最低字节。
// VB217 to VB218 暂时存储区
//
//
NETWORK 1 // //***主程序***
首次扫描执行的程序
LD "First_Scan_On" //首次扫描时 SM0.1=1
CALL 0 // 调用子程序0
NETWORK 2 //用RUN/TERM开关选择自由通信口/PPI通信
LD "Mode_Switch" // RUN/TERM开关位置:1——RUN,0——TERM
= "P0_Config_0" // SM30.0=1为自由通信口协议,SM30.0=0为
//PPI协议。
NETWORK 3 // 检查命令
LD I0.4 // 停止电机
EU // 且上升沿
CALL 5 // 则往微型主电机驱动器发送信息
S M0.0, 1 // 使后续的RUN或RAMP命令有效(M0.1=1)
R M0.1, 1 // M.01=0
NETWORK 4 // .
LD I0.0 // 运行电机,且
EU // 上升沿,则
A M0.0 // M0.0=1,则
CALL 1 // 往微型主电机驱动器发送信息
R M0.0, 2 // 使后续的RUN命令无效(M0.0=0,M0.1=0)
NETWORK 5 //
LD I0.2 // RAMP命令,且
EU // 上升沿
A M0.0 // M0.0=1,则
R M0.0, 1 // 使后续的RUN命令无效。
CALL 2 // 往微型主电动机驱动器发送信息
S M0.1, 1 // 显示现在的状态(M0.1=1)
NETWORK 6 //
LD I0.6 // 若增加频率
EU // 且上升沿
CALL 3 // 增加速度
NETWORK 7 //
LD I0.7 // 减少频率
EU // 且上升沿,则
CALL 4 // 减速
NETWORK 8 // 主程序结束
MEND
//
//
NETWORK 9 ////***子程序0***
// 初始化子程序——仅在第一次扫描时执行。
SBR 0 // 初始化XMT缓冲区,设置通信参数
NETWORK 10
LD "Always_On" //
MOVB 16#45, "P0_Config" // 19.2kb,每字符8位,偶校验
MOVB 16#E, VB99 // XMT长度
MOVB 16#2, VB100 // (STX)
//
MOVB 16#C, VB101 // (LEN)
MOVB 16#1, VB102 // (ADR) 微型主电机驱动器地址为1
//
FILL 0, VW103, 5 // 清除所有5个数据字(VW103至VW111)以后还
//可以改变
MOVW 16#1500, VW200 // 1/3最大的频率倍率
MOVW 16#32, VW202 // 频率倍率以50增/减
MOVD 16#30003, VD204 // 设定发送和接收重试次数为3
MOVB 0, VB210 // 清除操作状态指示
MOVB 0, QB0 // QB0=0
MOVB 0, VB219 // S7-200地址。
S M0.0, 1 // 允许RUN或RAMP或RAMP(方向改变)
ENI // 允许用户中断
NETWORK 11 // 子程序0结束
RET
NETWORK 12 // 子程序1
// 运行电机子程序,旋转方向取决于输入I1.0的状态。
SBR 1 // 运行电机
NETWORK 13 //
LD "Always_On" //
MOVB 16#5, VB109 // 为CW设置STW
MOVB 16#7F, VB110 // clockwise inching.
MOVW VW200, VW111 // 设置频率.
NETWORK 14 //
LD I1.0 // 设定旋转方向,若I1.0=0,则为CW;若I1.0=1
// 则为CCW
= 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 15
LD "Always_On" //
CALL 6 // 计算BCC.
CALL 7 // 初始化。XMT及XMT定时器
NETWORK 16 // 子程序1结束
RET
NETWORK 17 // 子程序2
//RAMP电机的处理子程序,电机运行时,根据输入I0.2的上升沿脉冲,对电机频率进行
//+/-RAMP修正,电机旋转方向取决于输入I1.0的状态。
SBR 2 // 运行电机
NETWORK 18 //
LD "Always_On" //
MOVB 16#4, VB217 // 设置命令字符
NETWORK 19 //
LD V109.3 //保存以前的电机旋转方向
= V217.3 // direction indicator for
// counterclockwise.
NETWORK 20 // Preserve Previous Motor Direction Indicator for Clockwise
// Load variable memory bit V109.4.
// If V109.4 is on (has a signal state of 1),
// indicating that the motor is running clockwise),
// turn on variable memory bit V217.4
// to preserve the previous motor direction indicator for clockwise.
LD V109.4 // Preserve the previous motor
= V217.4 // direction indicator for
// clockwise.
NETWORK 21 // Set Up the Status Word (STW) for RUN and Set the Frequency
// Load special memory bit SM0.0 to process this network every scan cycle.
// Move the contents of variable memory byte VB217 (the setup for
// command byte) into VB109
// and move the hexadecimal value 7F (binary 0111 1111) into variable
// memory byte VB110 to set up STW for RUN.
// Move the contents of variable memory word VW200 into VW111
// to set the frequency.
LD "Always_On" // SM0.0总是1.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -