您的位置:控制工程论坛网论坛 » PLC与PAC » 西门子S7-200自由口与上位机通讯实例

马军成

马军成   |   当前状态:在线

总积分:13914  2024年可用积分:0

注册时间: 2006-12-01

最后登录时间: 2022-06-28

空间 发短消息加为好友

西门子S7-200自由口与上位机通讯实例

马军成  发表于 2008/1/11 5:50:48      6673 查看 6 回复  [上一主题]  [下一主题]

手机阅读

西门子S7-200自由口与上位机通讯实例

S7-200自由口与上位机通讯读取温度值的程序

PLC主程序
网络1
// 设置控制方式为自由口通信方式,启动接收字符中断 //
    PLC首次扫描
    自由口通信,波特率为9600,数据位8,停止位1,无校验
    初始化RCV,允许RCV,有结束符,检查空闲时间
    结束符为 A
    空闲时间为5MS
    一次接收的最大字符为6个
    启动通信口,接收完成中断
    全局允许中断
    接收数据
LD     SM0.1
MOVB   16#09, SMB30
MOVB   16#B0, SMB87
MOVB   16#0A, SMB89
MOVB   6, SMB94
ATCH   INT_0, 23
ENI
RCV    VB199, 0
网络2
// 检测温度送VW0 //
    转换成实际温度值
    从工作站编号送到输出缓冲区
    检测温度送输出缓冲区
LD     SM0.0
MOVW   AIW0, VW0
/I     +54, VW0
MOVW   AIW2, VW2
/I     +54, VW2
MOVW   1, VW300
MOVW   VW0, VW302
MOVW   VW2, VW304
网络3
// 设置温度控制上限和下限//
LD     SM0.0
MOVW   +350, VW4
MOVW   +450, VW6
网络4
// 检测温度低于下限,则输出加温 //
LDW<   VW0, VW4
A      SM0.5
S      Q0.0, 1
网络5
// 检测温度高于上限,则输出降温 //
LDW>   VW0, VW6
A      SM0.5
R      Q0.0, 1
网络6
//准备传送参数 //
   发送字节数据,送VB99
   发送检测温度数据,送VW100
   发送工作站编号数据,送VW102
LD     SM0.0
MOVB   6, VB99
MOVW   VW300, VW100
MOVW   VW302, VW102
MOVW   VW304, VW104
网络7
// 传送数据 //
LD     SM0.5
XMT    VB99, 0


中断程序


网络1
//通信口接收数据完成后的中断 //
// SMB86 等于16#20,表示PLC收到结速符 //
    收到结束符,把收到的数据传到VB400
    中断有条件返回 
    否则继续接收
LDB=   SMB86, 16#20
MOVB   VB200, VB400
CRETI
NOT
RCV    VB199, 0

\\*******************************\\

VB源程序

Dim x1, k1, k2
Dim p11, p22                             '定义变量
Dim aa() As Byte                         '定义数组
Private Sub Command1_Click()             '开始监控,定时器1有效
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()             '退事程序,定时器1无效
Timer1.Enabled = False
Cls                                       '清屏
Unload Me
End Sub
Private Sub Form_Load()                   '初始化
Timer1.Enabled = False                    '定时器1无效
Timer1.Interval = 100                     '定时器1时间为0.1S
Timer2.Enabled = True                     '定时器2有效
Timer2.Interval = 1000                    '定时器2时间为1S
Picture1.ScaleMode = 0                    '定义纵横坐标
MSComm1.CommPort = 1                      '设定端口号
MSComm1.Settings = "9600,n,8,1"           '设定通讯波特率
MSComm1.InputLen = 6                      '输入缓冲区为6个字符
MSComm1.InBufferSize = 256                '接收缓冲器大小

1楼 0 0 回复
  • 马军成

    马军成   |   当前状态:在线

    总积分:13914  2024年可用积分:0

    注册时间: 2006-12-01

    最后登录时间: 2022-06-28

    空间 发短消息加为好友

    马军成   发表于 2007/12/21 22:44:07

    MSComm1.OutBufferSize = 256               '输出缓冲器大小
    MSComm1.InputMode = comInputModeBinary    '以二进制传输
    MSComm1.OutBufferCount = 0                '清空发送缓冲区
    MSComm1.InBufferCount = 0                 '清空接收缓冲区
    End Sub
    Private Sub Timer1_Timer()                               '定时器1有效,触发接收事件
    MSComm1.PortOpen = True                                  '打开端口
    ReDim aa(0 To 5)                                         '定义动态数组
    k1 = 0                                                   '识别PLC站号,为1
    If k1 = 0 Then MSComm1.Output = "1" + Chr(10) + Chr(13)  '发送
    Do While MSComm1.InBufferCount = 0                       '准备接收数据
    Loop
    aa = MSComm1.Input                                        '接收数据存入数组
    If aa(0) > 64 Then GoTo xxx:
    k2 = Int(aa(0) * 255 + aa(1) * 1)
    Select Case k2
    Case 1
    p11 = Int(aa(2) * 255 + aa(3) * 1)
    p22 = Int(aa(4) * 255 + aa(5) * 1)
    Case Else
    End Select
    k1 = k1 + 1
    If k1 > 2 Then k1 = 0
    xxx:
    MSComm1.PortOpen = False
    End Sub
    Private Sub Timer2_Timer()                      '绘制各中频炉的温度曲线
    x1 = x1 + 1                                     '时间增加为1S
    Picture1.PSet (x1, p11), vbRed                  '绘制1#炉的温度曲线,为红色
    Picture1.PSet (x1, p22), vbBlue                 '绘制2#炉的温度曲线,为黄色
    Text1.Text = Str(p11)                           '输出1#炉温度值
    Text2.Text = Str(p22)                           '输出2#炉温度值
    Text3.Text = Str(x1)                             '输出监控时间
    2楼 回复本楼

    引用 马军成 2007/12/21 22:44:07 发表于2楼的内容

  • shengjinli

    shengjinli   |   当前状态:离线

    总积分:259  2024年可用积分:0

    注册时间: 2007-12-07

    最后登录时间: 2009-01-05

    空间 发短消息加为好友

    shengjinli   发表于 2007/12/22 14:51:39

    3楼 回复本楼

    引用 shengjinli 2007/12/22 14:51:39 发表于3楼的内容

  • bjmonsoon

    bjmonsoon   |   当前状态:在线

    总积分:1206  2024年可用积分:0

    注册时间: 2007-05-16

    最后登录时间: 2011-06-13

    空间 发短消息加为好友

    bjmonsoon   发表于 2007/12/27 12:23:05

    支持
    4楼 回复本楼

    引用 bjmonsoon 2007/12/27 12:23:05 发表于4楼的内容

  • 匿名

    匿名   |   当前状态:离线

    总积分:0  2024年可用积分:0

    注册时间: 0001-01-01

    最后登录时间: 0001-01-01

    空间 发短消息加为好友

    匿名   发表于 2008/1/11 5:47:44

    现象:1  RS485口通讯死机,查看程序运行状态,发现XMT指令变为红色。


    2                                关闭下面单片机电源后在上电,系统通讯不能恢复,只有关闭PLC电源再上电,通讯才恢复。


    3                                此现象出现的几率很小。我们的此设备在全国有近200台在运行,每台机器有两套系统。每年大约出现5次通讯中断的故障。不定机器,不定时间的出现。


    工作环境:S7-200-226 PLC. PORT1口通过RS485隔离卡和3751单片机的RS485口连接 PLCS7-200)是自由口方式,主动点名下面单片机,下面单片机再发出数据相应。


    此机器已经出口美国,韩国,巴西等。所以希望能够在根本上解决此通讯死机的问题。


    程序采取过的措施:


    1         隔段时间重新设置此通讯口的通讯方式一次,无效果后(试验了4年)才去掉此处。


    2         在调用XMT(发送数据指令)RCV(接收数据指令)前都加上此口“空闲”的继电器


    防止过于频繁地调用此指令而产生指令的死机,也无效果(有5个月的时间)


    请问在启动发送指令后,有无终止发送的办法?


      请问在启动接收指令后,有无终止接收的办法?


      XMT 指令变成红色,有无从程序上处理的办法?或者防止此发送指令错误的办法?


    谁能解决上面问题的,我有重谢。

    5楼 回复本楼

    引用 匿名 2008/1/11 5:47:44 发表于5楼的内容

  • 匿名

    匿名   |   当前状态:离线

    总积分:0  2024年可用积分:0

    注册时间: 0001-01-01

    最后登录时间: 0001-01-01

    空间 发短消息加为好友

    匿名   发表于 2008/1/11 5:50:48

    现象:1  RS485口通讯死机,查看程序运行状态,发现XMT指令变为红色。


    2                                关闭下面单片机电源后在上电,系统通讯不能恢复,只有关闭PLC电源再上电,通讯才恢复。


    3                                此现象出现的几率很小。我们的此设备在全国有近200台在运行,每台机器有两套系统。每年大约出现5次通讯中断的故障。不定机器,不定时间的出现。


    工作环境:S7-200-226 PLC. PORT1口通过RS485隔离卡和3751单片机的RS485口连接 PLCS7-200)是自由口方式,主动点名下面单片机,下面单片机再发出数据相应。


    此机器已经出口美国,韩国,巴西等。所以希望能够在根本上解决此通讯死机的问题。


    程序采取过的措施:


    1         隔段时间重新设置此通讯口的通讯方式一次,无效果后(试验了4年)才去掉此处。


    2         在调用XMT(发送数据指令)RCV(接收数据指令)前都加上此口“空闲”的继电器


    防止过于频繁地调用此指令而产生指令的死机,也无效果(有5个月的时间)


    请问在启动发送指令后,有无终止发送的办法?


      请问在启动接收指令后,有无终止接收的办法?


      XMT 指令变成红色,有无从程序上处理的办法?或者防止此发送指令错误的办法?


    13901699306, 有重谢,姚, YDTMAIL@126.COM

    6楼 回复本楼

    引用 匿名 2008/1/11 5:50:48 发表于6楼的内容

总共 , 当前 /