在变电站用交流配电盘上S7—200PLC得到的运用

出处:qianlong30 发布于:2011-08-24 15:24:13

贵阳市南供电局110kV观水变电站是贵阳市南明区的主要供电站,变电站用配电盘运行的稳定可靠性直接影响到向整个区大部分的生产、生活供电,原用的配电盘系统功能简单、自动化程度不高、控制方式落后,对供电局实现无人值守变电站和配网自动化带来很多不变,也不能时刻保证城区电网供电的电源质量。

设备改造中使用了西门子公司的224XP-CPUTP270人机界面EM221数字量输入模块、EM222数字量输出模块和CP243-1以太网通讯模块。

 图1 企业照片

1 企业照片

 图2系统结构图

2系统结构图

 

 

名 称

型 号

数 量

备 注

PLC

224XP

1

AC/DC/R/Port×2

DI

EM221×8

4

DC24V

DO

EM222×8

2

DC24V

CP

243-1

1

 

HMI

TP270

1

10

电压监测模块

GKR-02

2

 

多功能监测模块

DIRIS AP

1

 

馈线开关状态监测模块

OF

40

DC24V

隔离开关

CD630A

2

 

ATS

MICRO

1

 

电动操作馈电开关

NS200A

2

 

馈电开关

NS125A

6

 

馈电开关

C65/63A

28

 

电源模块

24V/2.5A

1

 

编程软件

MicroWin4.0

1

 

编程软件

ProTools/Pro6.0

1

 

 

 

 

 

1 系统配置表

 

图3应用中的画面


3应用中的画面

在设计过程中的问题就是如何将智能仪表的数据通过S7-200PLC读到TP270上。本系统中的智能仪表用的是MODBUS_RUT协议,只能做从站使用,也就是说S7-200PLC必须做主站去读取仪表的数据,在现行的资料中只有S7--200PLCMODBUS从站的资料,要S7-200PLC做主站就只有自己编写用自由口做MODBUS主站的程序,由于仪表提供的数据较多且数据地,,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306,

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

    地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                 ,;&n,bsp;   设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

, red; mso-bidi-font-size: 10.5pt">OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306,

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

    地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB &,nb,sp; 16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                 ,;    设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

, " class=MsoNormal 2.0? mso-char-indent-count: char; LAYOUT-GRID-MODE: 21pt; TEXT-INDENT: 150%; LINE-HEIGHT:>OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306,

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

    地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                 ,;&n,bsp;   设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

, red; mso-bidi-font-size: 10.5pt">OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306,

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

    地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB &,nbsp; 16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                 ,;    设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

, " class=MsoNormal 2.0? mso-char-indent-count: char; LAYOUT-GRID-MODE: 21pt; TEXT-INDENT: 150%; LINE-HEIGHT:>OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306,

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

    地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                 ,;&n,bsp;   设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

, red; mso-bidi-font-size: 10.5pt">OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306,

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

    地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB &,nb,sp; 16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                 ,;    设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

, " class=MsoNormal 2.0? mso-char-indent-count: char; LAYOUT-GRID-MODE: 21pt; TEXT-INDENT: 150%; LINE-HEIGHT:>OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306,

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

    地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                 ,;&n,bsp;   设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

, red; mso-bidi-font-size: 10.5pt">OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306,

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

    地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB &,nbsp; 16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                 ,;    设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。

,,,,H-CN>主站的程序,由于仪表提供的数据较多且数据地址分散,再加上要求每秒刷新,还要做数据的CRC校验,编写这样的通讯程序是有一定难度的,如果逐一地址的编写程序,那么程序就会过长,会影响总循环时间,不但做不到1秒钟刷新,可能还会引起端口发送、接收冲突和CRC校验出错,经过反复的研究实验,在程序中采用了用计数器来轮询地址的方法,从而减少了程序量和总循环时间。部分程序如下:(OB1主要功能为初始化端口为自由口,初始化发送和接收的数据格式,设定轮询时间,轮询和中断连接;SBR5SBR6做发送和接收数据的CRC校验,CRC检验主要通过字节异或循环,移位循环和公式异或做发送数据的CRC校验;中断1为接收数据;中断2对接收CRC校验结果验证)

OB1

LD     SM0.1                       初始化端口

MOVB   16#09, SMB30

MOVB   16#9C, SMB87

MOVW   +150, SMW92

MOVW   +0, SMW90

MOVB   50, SMB94

LD     SM0.1                     初始化发送数据

MOVB   16#08, VB2100

MOVB   16#05, VB2101

MOVB   16#03, VB2102

MOVB   16#03, VB2103

MOVB   16#0, VB2104                                                         

MOVB   16#0, VB2105

MOVB   16#02, VB2106

LD     SM0.1                   初始化接收数据

MOVB   16#09, VB1200

MOVB   16#05, VB1201

MOVB   16#03, VB1202

MOVB   16#04, VB1203

LD     SM0.0                     设定轮询时间

AN     T96

TON    T32, +150

LD     SM0.0

A      T32

TON    T96, +150

LD     T32

EU

LD     C1

CTU    C1, 16#10

LD     SM0.0

AW=    16#0, C1

EU

MOVW   16#0300, VW2103            发送轮询数据

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#1, C1

EU

MOVW   16#0302, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

LD     SM0.0

AW=    16#02, C1

EU

MOVW   16#0304, VW2103

CALL   CRC:SBR5

XMT    VB2100, 0

…… ……

LD     SM0.7                      中断连接

ATCH   INT_0:INT0, 9

ATCH   INT_1:INT1, 23

ENI

 

SRB6(SBR5SBR6)

LD     Always_On:SM0.0       读出数据长度 ,初始化CRC

MOVB   VB1200, VB1301

MOVW   VW1300, VW1302

-I     16#02, VW1302

MOVW   16#FFFF, VW1306

MOVD   &VB1200, VD1400

FOR    VW1304, 16#1, VW1302

LD     Always_On:SM0.0           字节异或循环

+D     16#1, VD1400

MOVB   *VD1400, VB1410

XORB   VB1410, VB1307

FOR    VW1310, 16#1, 16#08

LD     Always_On:SM0.0           移位循环

MOVW   VW1306, VW1420

SRW    VW1306, 1

LD     SM1.1                     公式异或

XORW   16#A001, VW1306

NEXT

NEXT

LD     Always_On:SM0.0          CRC16字传递

MOVB   VB1307, VB1100

MOVB   VB1306, VB1101

 

INT1

LD     Always_On:SM0.0

RCV    VB2200, 0

 

INT2

LD     SM86.7

O      SM86.6

O      SM86.0

CRETI

LD     Always_On:SM0.0

MOVD   VD2204, VD1204

LD     Always_On:SM0.0

CALL   CRC16:SBR6

LDW<>  VW1100, VW2208

CRETI

LDW=   16#0, C1

MOVD   VD2204, VD2500

LDW=   16#1, C1

MOVD   VD2204, VD2504

…… ……

 

经过改造的设备自20057月运行以来,系统稳定、功能强大、操作简单,赢得了用户的一致好评,为变电站的无人值守和变电站的安全运行提供了有利保障。


  
关键词:PLC

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:
技术客服:

0571-85317607

网站技术支持

13606545031

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!