发送 接收指令
发送指令 (XMT) 激活发送数据缓冲区 (TBL) 中的数据 数据缓
冲区的第一个数据指明了要发送的字节数 PORT 指定了用于
发送的端口
XMT指令用于自由端口模式 由通讯端口发送数据
接收指令 (RCV) 激活初始化或结束接收信息的服务 通过指定
端口 (PORT) 接收的信息存储于数据缓冲区 (TBL) 数据缓冲区
的第一个数据指明了接收的字节数
Transmit: 使 ENO = 0 的错误条件是
SM4.3 (运行时间) 0006 (间接寻址)
0009 (在端口 0 同时 XMT/RCV)
000B (在端口 1 同时 XMT/RCV)
Receive: 使 ENO = 0 的错误条件是 SM86.6 和 SM186.6 (RCV
参数错误) SM4.3 (运行时间) 0006 (间接寻址) 0009 (在端口
0 同时 XMT/RCV) 000B (在端口 1 同时 XMT/RCV)
输入/输出 操 作 数 数据类型
TABLE VB, IB, QB, MB, SB, SMB, *VD, *AC, *LD BYTE
PORT 常数 (CPU 221 CPU 222 和 CPU 224 为 0 CPU 226 为 0或1) BYTE
对自由端口模式的理解
CPU 的串行通讯口可由用户程序控制 这种操作模式称为自由端口模式 当选择了自由端口模式
梯形图程序可以使用接收中断 发送中断 发送指令 (XMT) 和接收指令 (RCV) 来控制通讯操作
在自由端口模式下 通讯
完全由梯形图程序控制 SMB30 (用于端口 0) 和 SMB31 (如果 CPU
有两个端口 则用于端口 1) 用于选择波特率和奇偶校验
当 CPU 处于 STOP 模式 自由端口模式被禁止 重新建立正常的通讯(如可编程设备的访问)
简单的情况下 可以只用发送指令 (XMT) 向打印机或显示器发送信息 其他例子包括同条码阅读
器 重量计和焊机连接 每种情况下 都必须编写程序 以支持自由端口模式下设备同 CPU 通讯
的协议
只有 CPU 处于 RUN 模式时 才能进行自由端口通讯 通过向 SMB30 (端口 0) 或 SMB130 (端口
1) 的协议选择区置 1 可以允许自由端口模式 处于自由端口模式时 不能与可编程设备通讯
注意
可以用反映 CPU 工作方式的模式开关当前位置的特殊存储器位 SM0.7 控制自由端口模式的进入
当 SM0.7为 0 时 模式开关处于 TREM 位置 当 SM0.7 为 1 时 模式开关处于 RUN 位置 只有模
式开关位于 RUN 位置 才允许自由端口模式 为使用可编程设备监视或控制 CPU 操作 可以把模
式开关改变到任何其它位置
自由端口的初始化
SMB30 和 SMB130 分别配置通讯端口 0 和 1 为自由端口通讯选择波特率 奇偶校验和数据位
数 自由端口的控制字节描述如
9-25 所示
表 9-25 特殊存储器位 SMB30 和 SMB130
端口 0 端口 1 描 述
MSB LSB
7 0
p p d b b b m m
SMB30
格式
SMB130
格式
自由口模式控制字节
SM30.6
和
SM30.7
SM130.6 和
SM130.7
pp 奇偶选择
00 = 无奇偶校验
01 = 偶校验
10 = 无奇偶校验
11 = 奇校验
SM30.5 SM130.5 d 每个字符的数据位
0 = 每个字符8位
1 = 每个字符7位
SM30.2
到
SM30.4
SM130.2 到
SM130.4
bbb 自由口波特率
000 = 38,400 波特
001 = 19,200 波特
010 = 9,600 波特
011 = 4,800 波特
100 = 2,400 波特
101 = 1,200 波特
110 = 600 波特
111 = 300 波特
SM30.0
和
SM30.1
SM130.0 和
SM130.1
mm 协议选择
00 = 点到点接口协议 (PPI/ 从站模式)
01 = 自由口协议
10 = PPI/ 主站模式
11 = 保留 (缺省设置为 PPI/ 从站模式)
注 每个配置都有一个停止位
用XMT指令发送数据
可以用 XMT 指令方便地发送数据 XMT 指令发送一个或多个字符 最多有 255个字符的缓冲区
如果有一个中断程序连接到发送结束事件上 在发完缓冲区中的最后一个字符时 则会产生一个
中断 (对端口 0 为中断事件 9 对端口 1 为中断事件 26) 可以监视发送完成状态位 SM4.5 或 SM4.6
的变化 而不是用中断进行发送 (如向打印机发送信息)
通过把字符数设置为 0 然后执行 XMT 指令 可以产生一个 BREAK 条件 以当前的波特率在线
上产生一个 16 位的 BREAK 条件 发送任何其他信息时 和发送其他信息一样发送 BREAK 当
BREAK 完成时 产生一个XMT中断 SM4.5 或 SM4.6 反映XMT的当前状态
XMT 缓冲区的格式如图 9–72 所示
其中 对要发送的字节进行计数 (字节区)
M E ... 信息字符串
计数 EM S S EA G
图
9-72 XMT 缓冲区格式
用 RCV 指令接收数据
可以用 RCV 指令方便地接收信息 RCV 指令可以接收一个或多个字符 最多有 255 个字符 这些
字符存储在缓冲区中 如果有一个中断程序连接到接收完成事件上 在接收到缓冲区中的最后一个
字符时 则会产生一个中断 (对端口 0 为中断事件 23 对端口 1 为中断事件 24)
可以监视 SMB86 或 SMB186 状态的变化 而不是用中断进行信息接收 当 RCV 邮箱不启动或已
经接收结束时 SMB86 或 SMB186 不为 0 当正在接收时 它们为 0
RCV 指令允许选择信息开始和信息结束条件 信息开始和结束条件的描述如表 9-26 所示 (SM86 至
SM94 用于端口 0 SM186 至 SM194 用于端口1 ) RCV 缓冲区的格式如图 9–73所示
注意
当超界或奇偶校验错时 接收信息功能自动终止 必须为接收信息功能操作定义一个启动条件 (x
或 z) 和一个结束条件 (y t 或最大字符数)
起始
字符字符数
结束
字符EM S S EA G
图 9-
73 RCV 缓冲区格式
表 9-26 特殊存储器字节SMB86到 SMB94 SMB186到SMB194
端口 0 端口 1 描 述
MSB LSB
7 0
n r e 0 0 t c p
接收信息状态字节
SMB86 SMB186
n:1=用户通过禁止命令结束接收信息
r: 1=接收信息结束 输入参数错误或缺少起始和结束条件
e:1=收到结束字符
t: 1=接收信息结束 超时
c:1=接收信息结束 字符数超长
p:1=接收信息结束 奇偶校验错误
表 9-26 特殊存储器字节 SMB86到 SMB94 SMB186到SMB194 (续)
端口 0 端口 1 描 述
MSB LSB
7 0
en sc ec il c/m tmr bk 0 接收信息状态字节
SMB87 SMB187
en: 0=禁止接收信息功能
1=允许接收信息功能
每次执行 RCV 指令时检查允许/禁止接收信息位
sc: 0=忽略 SMB88 或 SMB188
1=使用 SMB88 或 SMB188 的值检测起始信息
ec: 0=忽略 SMB89 或 SMB189
1=使用 SMB89 或 SMB189 的值检测结束信息
il: 0=忽略 SMB90 或 SMB190
1=使用 SMB90 值检测空闲状态
c/m: 0=定时器是内部字符定时器
1=定时器是信息定时器
tmr: 0=忽略 SMW92 或 SMW192
1=当执行 SMW92 或 SMW192 时终止接收
bk: 0=忽略中断条件
1=使用中断条件来检测起始信息
信息的中断控制字节位用来定义识别信息的
信息的起始和结
束均需定义
起始信息 =il*sc+bk*sc
结束信息=ec+tmr+最大字符数
起始信息编程
1.空闲检测 il=1,sc=0,bk=0,SMW90>0
2.起始字符检测: il=0,sc=1,bk=0,SMW90
is a don’t care
3.中断检测: il=0,sc=1,bk=1,SMW90
is a don’t care
4.对一个信息的响应: il=1,sc=0,bk=0,SMW90=0
(信息定时器用来终止没有响应的接收)
5.中断一个起始字符: il=0,sc=1,bk=1,SMW90
is a don’t care
6.空闲和一个起始字符: il=1,sc=1,bk=0,SMW90>0
7.空闲和起始字符(非法): il=1,sc=1,bk=0,SMW90=0
注意 通过超时和奇偶校验错误(如果允许) 可以自动结束接收过
程
SMB88 SMB188 信息字符的开始
SMB89 SMB189 信息字符的结束
端口 0 端口 1 描 述
SMB90
SMB91
SMB190
SMB191
空闲线时间段按毫秒设定 空闲线时间溢出后接收的第一个字符是
新的信息的开始字符 SM90 (或SM190) 是最高有效字节 SM91
(或 SM191) 是最低有效字节
SMB92
SMB93
SMB192
SMB193
中间字符/信息定时器溢出值按毫秒设定 如果超过这个时间段
则终止接收信息 SM92 (或SM192) 是最高有效字节 SM93 (或
SM193) 是最低有效字节
SMB94 SMB194 要接收的最大字符数 (1 到255 字节)
注 这个范围必须设置到所希望的最大缓冲区大小 即使信息的字
符数终止用不到
使用字符中断控制接收数据
由协议支持所允许的完全柔性 可以使用字符中断控制来接收数据 每接收一个字符会产生一个中
断 在执行连接到接收字符中断事件上的中断程序前 接收到的字符存储在 SMB2 中 奇偶状态
(如果允许) 存储在 SM3.0 中
l SMB2 是自由端口接收数据的缓冲区 自由端口模式下接收到的每个字符被存储在这个单
元 以方便用户程序访问 .
l SMB3 用于自由端口模式 并包含一个在检测到接收字符奇偶校验错时接通的奇偶校验错误
位 该字节的所有其他位被保留 用该位丢弃本信息或产生对本信息的否定确认
注意
端口 0 和端口 1 共用 SMB2 和 SMB3 当在端口 0 接收字符时 端口 0 的接收启动和该事件 (中断
事件 8) 相连接的中断程序 SMB2 中包含端口 0 接收的字符 SMB3 中包含字符的校验状态 当在
端口 1 接收字符时 端口 1的接收启动和该事件 (中断事件 25) 相连接的中断程序 SMB2 中包含
端口 1接收的字符 SMB3 中包含字符的校验状态
接收和发送举例
本程序展示了接收和发送的使用 它将接收一串字符 直到接收到回车符 信息又发回到发送方
LAD STL
SMB30
SM0.1 MOV_B
EN
IN16#9 OUT
Network 1
LD SM0.1
MOVB 16#9, SMB30
MOVB 16#B0, SMB87
MOVB 16#0A, SMB89
MOVW +5, SMW90
MOVB 100, SMB94
ATCH 0, 23
ATCH 1, 9
ENI
RCV VB100, 0
首次扫描时
- 初始化自由口
- 选择 9600波特率
- 选择 8位数据
- 选择无校验
RCV
TBLVB100
EN
SMB87
MOV_B
EN
IN16#B0 OUT
Network 1
PORT0
初始化RCV信息控制信息
- RCV 允许
- 检测信息结束字符
- 检测空闲线信息条件
SMB89
MOV_B
EN
IN16#A OUT
SMW90
MOV_W
EN
IN+5 OUT
SMB94
MOV_B
EN
IN100 OUT
ATCH
INT0
EN
EVNT23
ATCH
INT1
EN
EVNT9
设定信息结束信息为 16
进值 0A 回车
设置空闲线超时为 5ms
设定最大字符数为 100
接收完成事件连接到中断
发送完成事件连接到中断
ENI 允许用户中断
端口 0 的接收信箱缓冲区
指向VB100
ENO
ENO
ENO
ENO
ENO
ENO
ENO
ENO
MAIN (OB1)
图 9-
74 传送指令举例
接收完成中断
如果接收完成 然后启
动一个新的接收
定时器中断
nterrupt.
Network 1
LDB= SMB86, 16#20
MOVB 10, SMB34
ATCH 2, 10
CRETI
NOT
RCV VB100, 0
Network 1
LD SM0.0
DTCH 10
XMT VB100, 0
MOV_B
IN
SMB86
10
EN
RETI
Network 1
TBL
PORT
VB100
0
ENNOT
断开定时器中断
DTCH
EVNT
SM0.0
10
EN
XMT
TBL
PORT
VB100
0
EN
Network 1
==
B16#20
如果接收状态显示接收到
结束字符 连接一个 10
ms 定时器触发发送 然
后返回
在端口 0向用户回送信息
ATCH
INT
EVNT
1
10
EN
OUT SMB34
INTERRUPT 0
INTERRUPT 1
ENO
ENO
ENO
RCV
ENO
ENO
Network 10
LD SM0.0
RCV VB100, 0发送结束中断
允许另一个接收
RCV
TBL
PORT
VB100
0
EN
SM0.0
Network 10
INTERRUPT 2
ENO
图 9-
74 发送指令举例 (续)
B
定 时 器 中 断
断开定时器中断
16#20
IN
SM0.1
16#9
MOV_B
EN
IN OUT
ENO
RCV
TBL
PORT
VB100
0
EN
Network 1
FBD
MOV_B
EN
OUT
MOV_W
EN
IN+5 OUT
ENO
ENO
SMB30 SMB8716#B0 SMB8916#A
MOV_B
EN
IN OUT
ENO
MOV_B
EN
IN OUT
ENO
SMW90 SMB94100
ATCH
INT
EVNT
0
23
EN ENO
ATCH
INT
EVNT
2
9
EN ENO
ENO
ENI
INTERRUPT 0
Network 1
==B
16#20
SMB86
MOV_B
EN
IN OUT
ENO
10 SMB34 1
10
ATCH
INT
EVNT
EN ENO RETI
RCV
TBL
PORT
VB100
0
EN ENO
INTERRUPT 1
DTCH
EVNT10
EN
XMT
TBL
PORT
VB100
0
ENENO ENOSM0.0
INTERRUPT 2
RCV
TBL
PORT
VB100
0
EN ENOSM0.0
图 9-
74 发送指令举例 (续)
获取口地址
获取口地址 (GPA) 指令读取 PORT 指定的 CPU 口的站地址 将
数值放入 ADDR 指定的地址中
GPA: 使 ENO = 0 的错误条件 : SM4.3 (运行时间), 0006 (间接寻址)
输入/输出 操 作 数 数据类型
ADDR VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD BYTE
PORT 常数 BYTE
设定口地址
设定口地址 (SPA) 指令将口的站地址 (PORT) 设置为ADDR 指
定的数值
SPA: 使 ENO = 0 的错误条件: SM4.3 (运行时间), 0006 (间接寻址)
新地址不能永久保存 上电后 口地址将返回到上次的地址值
(用系统块下载的地址)
输入/输出 操 作 数 数据类型
ADDR VB, IB, QB, MB, SB, SMB, LB, AC, 常数, *VD, *AC, *LD BYTE
PORT 常数 BYTE