展开查看
以下是引用翼飞凌在2014-11-11 21:33:38的发言 >3楼:用STL形式就可以复制上来了。
多谢提醒。
整个程序如下:
主程序:
Network 1
LD SM0.1
CALL SBR0
Network 2 // 若PLC处于RUN模式,则设置通讯协议为Freeport(自由通讯口)协议;否则设置成PPI(点到点接口协议)。
LD SM0.7
= SM30.0
Network 3 // 发送完缓冲区最后一个字符则触发中断事件9;接收到最后一个字符则触发中断事件23.
LD SM0.0
ATCH INT0, 9
ATCH INT2, 23
ENI
Network 4 // 对接收到的字符串进行解析,得到温度数据,每4s采集一次。
LD SM0.0
CALL SBR1
Network 5 // 根据输出灯亮情况检测通讯状况
LD SM0.0
AR>= VD20, 5.0
AR<= VD20, 18.0
S Q0.0, 1
R Q0.1, 1
R Q0.2, 1
Network 6
LD SM0.0
AR> VD20, 18.0
AR<= VD20, 24.0
S Q0.1, 1
R Q0.0, 1
R Q0.2, 1
Network 7
LD SM0.0
AB>= VB210, 1
S Q0.4, 1
Network 8
LD SM0.0
AR> VD20, 24.0
S Q0.2, 1
R Q0.0, 1
R Q0.1, 1
SBR0:
Network 1 // 由SMB30设定为偶校验,波特率9600,自由口模式;SMB87设定允许接收字符,使用SMB88检测起始状态;使用SMB89检测结束状态,忽略检测空闲状态;SMB89设置接收字符串起始字符"T"(ASCII值16#54)/结束字符换行符ASCII值16#0A);最大接收字符数量SMB94设置为26。在VB200中设定接收数据字节的个数(为26),接收的数据依次存放于VB201/VB202/VB203/...地址区中。
LD SM0.0
MOVB 16#09, SMB30
MOVB 16#E0, SMB87
MOVB 16#54, SMB88
MOVB 16#0A, SMB89
MOVB 16#1A, SMB94
MOVB 16#1A, VB200
Network 2 // 设定发送的数据信息,VB100中存放发送字节数,VB101/.../VB105为发送数据的存放地址区。
// 网络注释
LD SM0.0
MOVB 16#05, VB100
MOVB 16#EE, VB101
MOVB 16#F0, VB102
MOVB 16#F0, VB103
MOVB 16#04, VB104
MOVB 16#55, VB105
Network 3
LD SM0.0
S M10.3, 1
MOVB 0, QB0
XMT VB100, 0
SBR1:
Network 1
LD M10.1
S M10.2, 1
MOVB 0, QB0
Network 2 // 返回的数据是"T E M P 01 = +0 2 3 4 7 O K ID = = 0 0 0 ! /R /N "的ASCII码值,其中温度信息为从第10个字节数据地址开始的连续4个字节的数据。 FILL_N指令清空接收数据缓存区VB201-VB226.
LD M10.1
LPS
BTI VB210, VW300
AENO
MOVW VW300, VW400
-I +48, VW400
LRD
BTI VB211, VW302
AENO
MOVW VW302, VW402
-I +48, VW402
LRD
BTI VB212, VW304
AENO
MOVW VW304, VW404
AENO
-I +48, VW404
AENO
ITD VW404, VD410
LRD
BTI VB213, VW306
AENO
MOVW VW306, VW406
AENO
-I +48, VW406
AENO
ITD VW406, VD414
LRD
FILL 0, VW201, 13
AENO
R M10.1, 1
LPP
AW> VW300, 0
S Q0.3, 1
Network 3
LD M10.2
TOF T37, 40
Network 4 // 进一步处理还原。
LD M10.2
LPS
MOVW VW400, VW418
AENO
DTR VD422, VD430
LRD
ITD VW402, VD426
AENO
DTR VD426, VD434
LRD
MOVR VD410, VD438
*R 0.1, VD438
LPP
MOVR VD414, VD442
*R 0.01, VD442
Network 5 // 根据以上结果,合成实际温度值。
LD M10.2
MOVR VD430, VD446
AENO
+R VD434, VD446
AENO
+R VD438, VD446
AENO
MOVR VD446, VD20
+R VD442, VD20
Network 6 // 网络标题
LD T37
R M10.2, 1
S M10.1, 1
INT0:
Network 1 // 发送字符完毕,等待300ms再接收温度数据。
// 网络注释
LD M10.3
TON T38, 5
Network 2
LD T38
RCV VB200, 0
R M10.3, 1
CRETI
INT2:
Network 1 // 接收完毕,重新发送请求。
// 网络注释
LD SM0.0
XMT VB100, 0
S M10.3, 1
S Q0.5, 1
CRETI