plc单片机工作原理,plc做主站和从站区别
chanong
|本节我们主要完成PLC作为主站,51单片机作为从站,使用ModBus协议进行通信。 PLC从单片机的保持寄存器区域读取数据。 S7-200PLC程序主要是通过调用Modubs RTU主站指令库来完成。
1、调用Modbus RTU主站初始化及控制子程序。
使用SM0.0调用MBUS_CTRL来完成主站的初始化并开始控制其功能。
各参数含义如下:
A。
J.P
启用:
必须在每个扫描周期启用(使用SM0.0)
b.
模式
模型:
值为1 启用Modbus 协议功能;值为0 则恢复系统PPI 协议。
C。
波特率
波特率:
支持的通讯波特率有1200、2400、4800、9600、19200、38400、57600、115200。
d.
平价
查看:
选择验证方法
0=不验证
1=奇数测试
2=均匀比较测试
e.
暂停
暂停:
主站等待从站响应的时间量(以毫秒为单位),典型设置为1000 毫秒(1 秒),允许的范围为1 到32767。
注意:该值必须设置得足够大,以便从机有时间响应。
F。
结尾
完成位:
初始化完成后,该位自动设置为1。该位可用于启动MBUS_MSG 上的读写操作(参见例程)
G。
错误
初始化错误代码(仅当Done 位为1 时有效):
0=无错误
1=无效的检查选择
2=波特率选择无效
3=模式选择无效
2、调用Modbus RTU主站读写子程序MBUS_MSG发送Modbus请求。
各参数含义如下:
A。
J.P
启用:
一次只能启用一个读写功能(即MBUS_MSG)
注意:为确保所有读写指令循环执行,建议使用前一个MBUS_MSG 指令(例程)的Done 完成位来激活每个读写功能(即MBUS_MSG)。
b.
开始
读写请求位:
每个新的读或写请求都必须使用脉冲触发器
C。
奴隶
从机地址:
设置范围1 至247
d.
RW
从机地址:
0=读,1=写
消息:
1.开关量输出和保持寄存器支持读写功能
2. 开关量输入和模拟量输入仅支持读取功能。
e.
地址
读写从站数据地址:
选择要读写的数据类型
00001 至0xxxx - 开关输出
10001 至1xxxx - 数字输入
30001 至3xxxx - 模拟输入
40001 至4xxxx - 保持寄存器
F。
数数
数据数量
要通信的数据数量(位数或字数)
注意:Modbus 主站可以读取/写入的最大数据量为120 个字(请参阅每个MBUS_MSG 指令)
G。
数据指针
数据指针:
1. 对于读命令,读取的数据放置在该数据区。
2. 对于写指令,要写入的数据放置在该数据区。
H。
结尾
完成位
读写功能完成位
我。
错误
错误代码:
仅当Done 位为1 时,该错误代码才有效。
0=无错误
1=响应校验和错误
2=未使用
3=接收超时(从机没有响应)
4=请求参数错误(从站地址、Modbus 地址、计数、RW)
5=Modbus/自由端口未启用
6=Modbus 正忙于处理其他请求
7=响应错误(响应不是请求的操作)
8=响应CRC 校验和错误
-
101=从站不支持请求的功能
102=从机不支持数据地址
103=从机不支持此数据类型
104=从设备故障
105=从机接受消息,但响应延迟
106=消息被拒绝,因为从站正忙。
107=从机拒绝消息
108=从存储器奇偶校验错误
常见错误:
如果同时使能多条MBUS_MSG指令,则第6错误库存储区可能会在程序的其他地方被复用,从而产生第6错误从站。主站错误No.3 主站错误No.3 由于从站断电或网络故障而发生。
3、从站必须支持的功能及Modbus保持寄存器地址映射
为了支持读写上面列出的Modbus 地址,Modbus 主站协议库要求从站支持以下功能:
从站必须支持的功能
Modbus地址
读写
Modbus 从站必须支持的功能
00001-09999
数字输出
读
功能1
写
功能5:写指令输出点
特性15:写入多个输出点
10001-19999
数字输入
读
功能2
写
-
30001-39999
输入寄存器
读
功能4
写
-
40001-49999
持有登记册
读
功能3
写
特性6:单寄存器写入
功能16:写入多个寄存器单元
Modbus 保持寄存器地址映射示例:
4、S7-200PLC程序
5、单片机程序;STC11F04E单片机,9600波特率
START: MOV TMOD,#21H ;定时器1为8位重载,定时器0为16位定时器
MOV TH1,#0FDH;预设初始值(按照波特率9600BPS预设初始值)
MOV TL1,#0FDH;0FDH=9600=11.0592
MOV TH0, #0DCH;88H ;8800=12t,7000=stc1t
MOV TL0,#00H
ORL IE,#92H ;EA=1,ES=1;ET0=1
SETB PS;串口中断优先级
SETB TR1;启动定时器1
MOV 98H,#50H ;scon
MOV P1M0,#01000000b ; P1M0=0 P1M1=0 双向端口P1M0=1 P1M1=0 输入端口P1M0=0 P1M1=1 推挽输出20ma
MOV P1M1,#10000000b
MOV WDT_CONTR ,#27H 看门狗设置使能
QL0: MOV A,#00H
MOV R0,#10H
MOV R2,#9BH ;10-ABH 清零
CLEAR: MOV @R0,A
INC R0
DJNZ R2,透明
清除标志
CLR 标志_0
SETB TR0;启动定时器0
;ANL AUX,#07FH ;p3.0p3.1 作为串口
ORL AUX, #80H ;p1.7, p1.6 作为串口
CLR P3.7;485芯片接收使能
WA1:MOV WDT_CONTR ,#37H;喂狗;SETB CW
JNB FLAG_0,WA1;FLAG_0=1表示收到上位机数据
清除TR0
MOV A,2CH; 假设本地地址码为1,验证设备地址是否为01h码。
MOV R2,A
高铁A,#01H
JNZ QL0
ACALL FSZJ ;FH: DB 01H, 03H, 16, 00H, 01H, 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H, 10H, 11H, 12H, 0DH, 0EH, 0FH, 10H, 11H, 12H, 13小时, 14H, 15H, 16H, 17H, 18H, 19H, 1AH, 1BH, 1CH, 1DH, 1EH, 1FH;18
通话延迟
致电福之杰
AJMP QL0
FZJ: MOV R0,#2cH ;向主机发送数据子程序
FZJ0: MOV R2,#10H
FZJ1: CLR EA
ANL AUX, #07FH ; p3.0p3.1 作为串行端口
FZL1: MOV A,@R0
MOV SBUF,A
JNBTI,$
CLRTI
INC R0
DJNZ R2、FZL1
集结EA
视网膜色素变性
FSZJ: MOV DPTR,#FH
MOV R2,#19;
奥尔辅助,#80H
SETB P3.7;发送数据
MOV R0,#40H
FSZJA: MOV A,#0H
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ R2、FSZJA
MOV R0,#40H
MOV CRCCD,#19
LCALLCRC1
MOV R2,#21
MOV R0,#40H
FSZJ2: MOV A,@R0
MOV SBUF,A
JNBTI,$
CLRTI
INC R0
DJNZ R2、FSZJ2
集结EA
视网膜色素变性
FH:DB 01H、03H、16、00H、01H、02H、03H、04H、05H、06H、07H、08H、09H、10H、11H、12H、0DH、0EH、0FH、10H、11H、12H、13H、14小时,15小时、16H、17H、18H、19H、1AH、1BH、1CH、1DH、1EH、1FH;18
以下是使用串口助手找到的数据:








