请教西门子通信协议

[复制链接]
查看3156 | 回复9 | 2006-11-10 15:10:00 | 显示全部楼层 |阅读模式

小弟最近在做一个控制系统。需要实现PLC的串口与单片机(或ARM)的串口实时通讯,请问能否实现?

听说西门子PLC有协议保护防止随意的串口连接,是否是这样?

1、如果是,请问有没有办法实现上述串口连接?

2、如果不是,请问上述连接的可行性高否?

小弟刚接触西门子PLC不久,望老鸟、高手不吝赐教。感谢万分.

timmyway | 2006-11-10 15:11:00 | 显示全部楼层

希望在帖子解决前不要沉底,自顶一个先

timmyway | 2006-11-10 15:15:00 | 显示全部楼层

高手快来啊,我等的花儿也谢了

[em01]
gkboy | 2006-11-10 22:42:00 | 显示全部楼层

S7-200的通信方式与通信参数的设置
S7-200的通信功能很强大,有多种通信方式可供用户选择,包括单主站方式、多主站方式、使用调制解调器的远程通信方式等。本工程选择STEP7- Micro/WIN32支持的通信硬件PC/PPI电缆,它所支持的波特率有9.6Kbps和19.2Kbps,支持的协议为PPI协议,即点对点接口协议,基于开放系统互联模型OSI。PPI是主/从协议,网络上的S7-200CPU均为从站,其他CPU、SIMATIC编程器或TD200为主站。S7 -200 CPU的通信端口采用RS-485信号标准的连接口,PC/PPI电缆把S7-200 计算机连接起来,通过使用接收中断、发送中断和字符中断等指令,自由端口通信可以控制S7-200CPU通信口的操作模式。本工程使用的是自由端口模式,允许在CPU处于RUN模式时通信口0使用自由端口模式,通过设定SMB30的值,我们可以选择波特率、奇偶校验、每个字符的数据位和协议。CPU处于 STOP模式时,停止自由端口通信,通信口强制转换成PPI协议模式,此时,就可以向CPU中输入PLC程序,实现编程软件对PLC的编程和控制功能。在这里的通讯过程采用主从方式,即计算机为主机,PLC为从机,只有主机计算机发送请求报文后,从机PLC才向PC返回发送缓冲区中的数据。

自由端口模式下PLC的通信
由于本工程使用的是PC/PPI电缆,所以要在PLC的程序中考虑电缆的切换时间。PLC接收到请求报文到它返回发送缓冲区的数据的延迟时间必须不小于电缆的切换时间。波特率为9600bps时,电缆的切换时间是2ms。在本工程的程序中是用定时中断实现切换延时的。
定时中断子程序:
Network Title ’定时中断程序INT_2
LD SM0.0
DTCH 10
XMT VB200, 0

当程序运行到“启动定时中断”(即ATCH INT_2, 10)的语句时,就会跳到如上所示的中断子程序中,SM0.0是特殊存储器,该位始终为1,即只要PLC处于RUN状态,这一开关即是接通的。XMT VB200, 0语句是用来发送数据到串口的,此时发送的是存储在以VB200为首地址的连续的存储空间中的数据,是通过端口0发送的。

另外为了提高通信的可靠性,我们需要使用到异或校验,即在通信的双方都将每一帧的每一个字符作异或校验,将两者进行对比,如果不相同则可以判定通信有误。

Network1 Network Title ’求异或校验码的子程序FCS
LD SM0.0
MOVB 0, #XORC
BTI #NUMB, #NUMI
FOR #TEMP1, +1, #NUMI
MOVB 0, #XORC ’用来把异或校验码
清零, 用BTI#NUMB,
#NUMI将字节数
转换为整数
Network2
LD SM0.0
XORB *#PNT, #XORC
INCD #PNT
Network3
NEXT

FOR到NEXT语句指明了一个循环,从这一帧的第一个字符开始(不包括起始字符)到该帧中最后一个字符作异或运算。通过调用这个子程序可以计算所指定的数据存储空间内的字符的异或校验码,如果在上位机中的VB程序中也有计算校验码的子程序,那么就可以比较这两次计算的校验码是否相同。可以使用语句 (CALL FCS, &VB102, VB99, VB90)来调用该子程序,其中&VB102是指出子程序FCS进行校验的起始地址,VB99是用来存储需要异或的字节数,而VB90是用来存储计算出来的校验和。假设把从上位机接收到的校验码存储在VB91中,比较VB90和VB91中的数据就可以检验这次通信是否正确。同样,我们可以使用这个子程序计算从PLC中发送的数据的校验码,把它送到上位机中某一特定的地址中,在上位机中比较两个数据是否正确(在上位机的计算异或校验码的VB程序将在后面给出)。

因为报文的起始字符和结束字符只有8位,接收的报文数据区内出现与起始字符和结束字符相同的字符的几率很大,这就可能会是数据区字符与起始字符或结束字符发生混淆,为了避免这种情况,可以在发送数据前对数据作一下处理,把数据字符转换为BCD码,在S7-200中专门提供了整数与BCD码的转换指令,可以使用语句(IBCD VW200)就把输入的整数转换为BCD码,结果送入了VW200中。上位机接收到后需要将其转换回整数。

另外,在初始化时要注意自由端口通信协议的设定,一定要使通信过程中的波特率,数据位,奇偶校验及停止位与上位机VB以及通信线上中设定的参数相同,否则将不能实现通信过程,要么接收不到数据,要么会出现“下标越界”的错误。

timmyway | 2006-11-11 09:21:00 | 显示全部楼层

gkboy,非常感谢你的回答,我的邮箱是tommywiler@sohu.com

希望以后常联系。

timmyway | 2006-11-11 09:23:00 | 显示全部楼层

你所说的这个自由口通信是否是通过自定义通讯协议可实现PLC与单片机的串口通讯?

再次感谢你的回答,这个帖子给了我很大帮助。

ajc123 | 2006-11-11 13:15:00 | 显示全部楼层
[em07][em07][em07]
w505wh | 2006-12-13 10:39:00 | 显示全部楼层
不错的回答,,也很有耐心,,
zhaoyouyu | 2006-12-22 11:57:00 | 显示全部楼层
但愿这样的人多一些
CHRIST998 | 2007-12-24 15:49:00 | 显示全部楼层
[em05]
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则