让找料更便捷
电子元器件
采购信息平台
生意随身带
随时随地找货
一站式电子元器件
采购平台
半导体行业观察第一站
标签:
摘要: 1 前言 s7-226是西门子公司生产的具有很高性能价格比的微型可编程序控制器,它有多种通讯协议,如ppi协议,mpi协议,profibus协议和用户自定义协议(自由口)。本课题就是利用siemens plc226的自由口通信协议(自定义通信协议),用delphi(使用spcomm控件)开发的上位机与plc间的通信。 2 siemens plc的自由口通信协议 目前,随着plc的快速发
1 前言
s7-226是西门子公司生产的具有很高性能价格比的微型可编程序控制器,它有多种通讯协议,如ppi协议,mpi协议,profibus协议和用户自定义协议(自由口)。本课题就是利用siemens plc226的自由口通信协议(自定义通信协议),用delphi(使用spcomm控件)开发的上位机与plc间的通信。
2 siemens plc的自由口通信协议
目前,随着plc的快速发展,越来越多的plc生产厂商开发了它与计算机的通信功能(主要是利用计算机串口进行通信),本文是以s7-226 plc为例,作详细阐述,本文的通信协议采用的是自由口通信协议,自由口通讯协议是用户可以通过程序来控制s7 200 cpu通讯口的操作模式,利用自由口通讯模式,可以实现用户自定义的通讯协议连接多种智能设备。通过使用接收中断、发送中断、发送指令和接受指令用户程序控制通讯口的操作,在自由通讯模式下,通讯协议完全有用户控制。
smb30(用于端口0)和smb31(用于端口1)用于选择波特率和奇偶校验。当cpu处于stop模式,自由端口被禁止。只有的cpu处于run模式 时,才能进行自由端口通讯。
3 plc的中断处理
要使用plc的通讯功能,必须要对中断有所了解,因为一般的通讯程序都使用中断程序来完成。中断连接指令(atch)用于把一个中断事件和一个中断程序联 系起来,并允许这个事件。部分中断事件如表1所示。
从表1可以看出,通讯事件是处于最高优先级别的,也就是说当又中断事件来时,cpu最先处理通讯事件。
4 程序说明
4.1 主程序说明
ld sm0.1
movb 16#09, smb30 ; 首次扫描时,初始化自由口,选择 9600波特率,选择8位数据,无校验位
movb 16#b0, smb87 ; rcv允许,检测信息结束字符,检 测空闲信息条件
movb 16#0a, smb89 ; 设定信息结束信息为16进制值0a(回车)
movw +5, smw90 ; 设置空闲线超时时间为5s
movb 100, smb94 ; 设定最大字符数为100
atch int_3, 23 ; 接收完成连接到中断3
atch int_4, 9 ; 发送完成连接到中断4
eni ; 允许用户中断
rcv vb100, 0 ; 端口0的接收信箱缓冲区指向vb100
4.2 接收和处理信号的plc程序(int_0)。
network 1 input ; 用于存放串口的输入值
ld sm0.0
dtch 10
xmt vb100, 0
movb vb101, #input
network 2 ; 如果input的值大于100,q0.0输出
ldb> #input, 100
= q0.0
network 3 ; 如果input的值小于100大于50,q0.1输出
ldb<= #input, 100
ab> #input, 50
= q0.1
network 4 ; 如果input的值小于50大于0,q0.2输出
ldb<= #input, 50
ab> #input, 0
= q0.2
network 5 ; 中断返回
ld sm0.0
creti
5 用spcomm组件编写串行通信程序
5.1 spcomm组件通讯设置如表2所示。
5.2 通讯协议说明
其中指令1到指令4可以用于控制cpu的特殊寄存器的值(由于篇幅限制,读者可以阅读相关特殊寄存器书籍),本文实验只用到了指令1,通过 指令1的值就可以控制i0.0,i0.1,i0.2三个输出端(可以根据需要进行任意控制和修改)。
5.3 上位机程序说明
(1) 发送内容定义如下
sbuf[1]:=byte(strtoint(edit1。text)); file://我们正是通过一个编辑框来实现对i0.0,i0.1,i0.2三个输出端的控制
sbuf[2]:=byte($01); file://命令号
sbuf[3]:=byte($ff);
sbuf[4]:=byte($ff);
sbuf[5]:=byte($01);
sbuf[6]:=byte($0a); file://帧尾
senddata;//调用发送函数
(2) senddata函数说明
procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:=``;
commflg:=true;
for i:=1 to 6 do
begin
if not form1、comm1、writecommdata(@sbuf[i],1) then
file://注意,根据上面的协议说明,每次向plc发送数据时这里只改变了sbuf[1] 的值,可以根据需要改变任何数组的值
begin
commflg:=false;
break;
end;
sleep(2); file://发送时字节间的延时
viewstring:=viewstring+inttohex(sbuf[i],2)+` `;
end;
viewstring:=`发送`+viewstring;
form1。memo1。lines.add(viewstring);
form1。memo1。lines.add(``);
if not commflg then messagedlg(`发送失败 !` ,mterror,[mbyes],0);
end;
6 结束语
按照类似的方法,选择不同的地址和单元区,可以编写出其它命令的控制指令,以上的程序已在我所在的武汉大学建模与控制实验室得到验证。
型号 | 厂商 | 价格 |
---|---|---|
EPCOS | 爱普科斯 | / |
STM32F103RCT6 | ST | ¥461.23 |
STM32F103C8T6 | ST | ¥84 |
STM32F103VET6 | ST | ¥426.57 |
STM32F103RET6 | ST | ¥780.82 |
STM8S003F3P6 | ST | ¥10.62 |
STM32F103VCT6 | ST | ¥275.84 |
STM32F103CBT6 | ST | ¥130.66 |
STM32F030C8T6 | ST | ¥18.11 |
N76E003AT20 | NUVOTON | ¥9.67 |