你现在位置:首页>技术论文>数据通讯>正文
西门子S7-200ModBus从站通讯程序
日期:2008-7-14 20:00:24 来源:本站整理  
点击: 作者:未知
点击【】放大字体.
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

说明:PLC从站,PC作主站,用ModBus协议进行通讯。PC机读取PLCVW区的数据;PC机还读取PLC内部I或者O地址的状态。
WWW_P※LCJS_COM-PLC-)技.术_网

WWW_PL※CJS_COM-PLC-技.术_网

///////////////////////////////////////
WWW_P※LCJS_CO※M-PLC-技-.术_网

WWW_P※LCJS_COM-PLC-)技.术_网

以下是PLC程序实现,方便贴出,已转换为STL
WWcW_PLCJS_COM-PLC-技.术_网

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

TITLE=程序注释
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

WWW_PLCJS@_COM%-PLC-技.术_网

Network 1 // 网络标题
WWW_PLCJS@_COM%-PLC-技.术_网

WW.W_PLC※JS_C,OM-PL,C-技.术_网

// 在第一个循环周期内初始化Modbus从站协议
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_PLCJS@_COM%-PLC-技.术_网

LD SM0.1
P.L.C.技.术.网——可编程控制器技术门户

WW.W_PLCJS_COM-PLC-技.术_网

CALL SBR3, 1, 12, 9600, 0, 0, 128, 32, 1000, &VB0, M10.1, MB11
W1WW_P4LCJS_COM-PLC-技.术_网

——可——编——程——控-制-器-技——术——门——户

Network 2
W1WW_P4LCJS_COM-PLC-技.术_网

WWW.PLCJS.COM——可编程控制器技术门户

// 在每个循环周期内执行Modbus 从站协议
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WWW_P※LCJS_CO※M-PLC-技-.术_网

LD SM0.0
WWW_PLCJS@_COM%-PLC-技.术_网

W1WW_P4LCJS_COM-PLC-技.术_网

CALL SBR1, M10.2, MB12
WWW_PL※CJS_COM-PLC-技.术_网

WWW_PLCJS_COM-PLC-技.术_网

Network 3
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

——可——编——程——控-制-器-技——术——门——户

LD SM0.0
WWW_PLCJS@_COM%-PLC-技.术_网

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

MOVW AIW0, VW100
——可——编——程——控-制-器-技——术——门——户

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

/I +54, VW100
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WWW_PLC※JS_COM-PmLC-技.术_网

MOVW AIW2, VW102
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

/I +54, VW102
plcjs.技.术_网

WW.W_PLCJS_COM-PLC-技.术_网

字串7
WWcW_PLCJS_COM-PLC-技.术_网

WWW_PLC※JS_COM-PmLC-技.术_网

MOVW AIW4, VW104
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

WWW.PLCJS.COM——可编程控制器技术门户

/I +54, VW104
WWW_P※LCJS_COM-PLC-)技.术_网

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

MOVW AIW6, VW106
WWW_PLC※JS_COM-PmLC-技.术_网

WW.W_PLCJS_COM-PLC-技.术_网

/I +54, VW106
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

Network 4
WWW_P※LCJS_CO※M-PLC-技-.术_网

WWW_P※LCJS_CO※M-PLC-技-.术_网

LD SM0.0
WWW_P※LCJS_CO※M-PLC-技-.术_网

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

= Q0.0
WWW_P※LCJS_COM-PLC-)技.术_网

WWcW_PLCJS_COM-PLC-技.术_网

Network 5
WWW_P※LCJS_COM-PLC-)技.术_网

WWW.PLCJS.COM——可编程控制器技术门户

LD I0.0
WWcW_PLCJS_COM-PLC-技.术_网

WWW_PL※CJS_COM-PLC-技.术_网

= Q0.1
WWW_PLCJS_COM-PLC-技.术_网

WWW_P※LCJS_CO※M-PLC-技-.术_网

Network 6
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

LD I0.1
——可——编——程——控-制-器-技——术——门——户

WWcW_PLCJS_COM-PLC-技.术_网

= Q0.2
WW.W_PLC※JS_C,OM-PL,C-技.术_网

P.L.C.技.术.网——可编程控制器技术门户

///////////////////////////////////
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

以下是VB源码
plcjs.技.术_网

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

Option Explicit
WWW_PLCJS_COM-PLC-技.术_网

P.L.C.技.术.网——可编程控制器技术门户

Private Declare Function GetTickCount Lib "kernel32" () As Long
WWW.PLCJS.COM——可编程控制器技术门户

WWW_P※LCJS_COM-PLC-)技.术_网

Dim x1
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

Dim p11, p12, p13, p14, p15, p16, p17, p18
WWW_PLC※JS_COM-PmLC-技.术_网

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

Function CRC16(data() As Byte) As String
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WW.W_PLC※JS_C,OM-PL,C-技.术_网

Dim CRC16Lo As Byte, CRC16Hi As Byte CRC寄存器
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

W1WW_P4LCJS_COM-PLC-技.术_网

Dim CL As Byte, CH As Byte 多项式码&HA001
WWW_P※LCJS_CO※M-PLC-技-.术_网

WWW_PLCJS@_COM%-PLC-技.术_网

Dim SaveHi As Byte, SaveLo As Byte
WWW_P※LCJS_COM-PLC-)技.术_网

plcjs.技.术_网

Dim i As Integer
WWW_P※LCJS_COM-PLC-)技.术_网

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

Dim Flag As Integer
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

plcjs.技.术_网

CRC16Lo = &HFF
P.L.C.技.术.网——可编程控制器技术门户

WWcW_PLCJS_COM-PLC-技.术_网

CRC16Hi = &HFF
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

WWW_PLC※JS_COM-PmLC-技.术_网

CL = &H1
WWW.PLCJS.COM——可编程控制器技术门户

plcjs.技.术_网

CH = &HA0
WWW_PLC※JS_COM-PmLC-技.术_网

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

For i = 0 To UBound(data)
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

WWW_PLC※JS_COM-PmLC-技.术_网

CRC16Lo = CRC16Lo Xor data(i) 每一个数据与CRC寄存器进行异或 字串1
——可——编——程——控-制-器-技——术——门——户

WW.W_PLC※JS_C,OM-PL,C-技.术_网

For Flag = 0 To 7
WWW_PLCJS_COM-PLC-技.术_网

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

SaveHi = CRC16Hi
WW.W_PLCJS_COM-PLC-技.术_网

WW.W_PLCJS_COM-PLC-技.术_网

SaveLo = CRC16Lo
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

WW.W_PLC※JS_C,OM-PL,C-技.术_网

CRC16Hi = CRC16Hi \ 2 高位右移一位
WWW_PL※CJS_COM-PLC-技.术_网

WWW_PLCJS@_COM%-PLC-技.术_网

CRC16Lo = CRC16Lo \ 2 低位右移一位
WWW_PLC※JS_COM-PmLC-技.术_网

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

If ((SaveHi And &H1) = &H1) Then 如果高位字节最后一位为1
plcjs.技.术_网

——可——编——程——控-制-器-技——术——门——户

CRC16Lo = CRC16Lo Or &H80 则低位字节右移后前面补1
plcjs.技.术_网

WWW.PLCJS.COM——可编程控制器技术门户

End If 否则自动补0
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

WWW_P※LCJS_CO※M-PLC-技-.术_网

If ((SaveLo And &H1) = &H1) Then 如果LSB为1,则与多项式码进行异或
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

W1WW_P4LCJS_COM-PLC-技.术_网

CRC16Hi = CRC16Hi Xor CH
WWW_PLCJS_COM-PLC-技.术_网

WWW_PLCJS_COM-PLC-技.术_网

CRC16Lo = CRC16Lo Xor CL
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

plcjs.技.术_网

End If
——可——编——程——控-制-器-技——术——门——户

P.L.C.技.术.网——可编程控制器技术门户

Next Flag
W1WW_P4LCJS_COM-PLC-技.术_网

WWW_P※LCJS_CO※M-PLC-技-.术_网

Next i
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

WWW_PLC※JS_COM-PmLC-技.术_网

Dim ReturnData(1) As Byte
P.L.C.技.术.网——可编程控制器技术门户

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

ReturnData(0) = CRC16Hi CRC高位
WWW_PL※CJS_COM-PLC-技.术_网

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

ReturnData(1) = CRC16Lo CRC低位
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_PLC※JS_COM-PmLC-技.术_网

CRC16 = ReturnData
WW.W_PLCJS_COM-PLC-技.术_网

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

End Function
WWW.PLCJS.COM——可编程控制器技术门户

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

Private Sub About_Click()
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WWW.PLCJS.COM——可编程控制器技术门户

frmAbout.Show
WWW_PLC※JS_COM-PmLC-技.术_网

WWW_P※LCJS_COM-PLC-)技.术_网

End Sub
——可——编——程——控-制-器-技——术——门——户

WWW_PLCJS@_COM%-PLC-技.术_网

Private Sub Form_Load() 初始化
——可——编——程——控-制-器-技——术——门——户

WWW_P※LCJS_COM-PLC-)技.术_网

Timer1.Enabled = False 定时器1无效
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

WWcW_PLCJS_COM-PLC-技.术_网

Timer1.Interval = 1000 定时器1时间为1S
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

——可——编——程——控-制-器-技——术——门——户

Timer2.Enabled = True 定时器2有效
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_PL※CJS_COM-PLC-技.术_网

Timer2.Interval = 1000 定时器2时间为1S
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

字串4
W1WW_P4LCJS_COM-PLC-技.术_网

WWW.PLCJS.COM——可编程控制器技术门户

 
WWW_PL※CJS_COM-PLC-技.术_网

W1WW_P4LCJS_COM-PLC-技.术_网

Text1.Text = ""
WWcW_PLCJS_COM-PLC-技.术_网

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

Text2.Text = ""
P.L.C.技.术.网——可编程控制器技术门户

WW.W_PLCJS_COM-PLC-技.术_网

Text3.Text = ""
WWW_PL※CJS_COM-PLC-技.术_网

WWcW_PLCJS_COM-PLC-技.术_网

Text4.Text = ""
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

plcjs.技.术_网

Text5.Text = ""
P.L.C.技.术.网——可编程控制器技术门户

WWW_PLCJS@_COM%-PLC-技.术_网

Text6.Text = ""
WWW_P※LCJS_COM-PLC-)技.术_网

WWW.PLCJS.COM——可编程控制器技术门户

Text8.Text = ""
WWW_PLC※JS_COM-PmLC-技.术_网

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

Text10.Text = ""
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

MSComm1.CommPort = 1 设定端口号
WW.W_PLCJS_COM-PLC-技.术_网

WWW.PLCJS.COM——可编程控制器技术门户

MSComm1.Settings = "9600,n,8,1" 设定通讯波特率
WWW.PLCJS.COM——可编程控制器技术门户

——可——编——程——控-制-器-技——术——门——户

MSComm1.InBufferSize = 1024 接收缓冲器大小
WW.W_PLCJS_COM-PLC-技.术_网

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

MSComm1.OutBufferSize = 1024 输出缓冲器大小
plcjs.技.术_网

WW.W_PLCJS_COM-PLC-技.术_网

MSComm1.InputMode = comInputModeBinary 以二进制传输
WWW_PLCJS@_COM%-PLC-技.术_网

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

MSComm1.RThreshold = 1
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_PLC※JS_COM-PmLC-技.术_网

MSComm1.SThreshold = 0
——可——编——程——控-制-器-技——术——门——户

WWW.PLCJS.COM——可编程控制器技术门户

MSComm1.InputLen = 0 读取接收缓冲器所有字符
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_PLCJS@_COM%-PLC-技.术_网

MSComm1.OutBufferCount = 0 清空发送缓冲区
plcjs.技.术_网

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

MSComm1.InBufferCount = 0 清空接收缓冲区
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

WW.W_PLC※JS_C,OM-PL,C-技.术_网

If MSComm1.PortOpen = False Then
plcjs.技.术_网

WWcW_PLCJS_COM-PLC-技.术_网

Command3.Caption = "打开串口"
WW.W_PLC※JS_C,OM-PL,C-技.术_网

plcjs.技.术_网

Else
WWW_PL※CJS_COM-PLC-技.术_网

WWW_P※LCJS_COM-PLC-)技.术_网

Command3.Caption = "关闭串口"
WW.W_PLCJS_COM-PLC-技.术_网

WW.W_PLCJS_COM-PLC-技.术_网

End If
P.L.C.技.术.网——可编程控制器技术门户

P.L.C.技.术.网——可编程控制器技术门户

End Sub
W1WW_P4LCJS_COM-PLC-技.术_网

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

Private Sub Command1_Click() 字串8
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

WWcW_PLCJS_COM-PLC-技.术_网

Timer1.Enabled = True
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

WWcW_PLCJS_COM-PLC-技.术_网

End Sub
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

WW.W_PLCJS_COM-PLC-技.术_网

Private Sub Command2_Click() 退出程序,定时器1无效
W1WW_P4LCJS_COM-PLC-技.术_网

WW.W_PLCJS_COM-PLC-技.术_网

Timer1.Enabled = False
WWW.PLCJS.COM——可编程控制器技术门户

plcjs.技.术_网

Cls
WWcW_PLCJS_COM-PLC-技.术_网

WWW_PL※CJS_COM-PLC-技.术_网

Unload Me
WWW_P※LCJS_CO※M-PLC-技-.术_网

W1WW_P4LCJS_COM-PLC-技.术_网

End Sub
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

Private Sub Command3_Click()
WWW_PLCJS_COM-PLC-技.术_网

P.L.C.技.术.网——可编程控制器技术门户

On Error Resume Next
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WW.W_PLC※JS_C,OM-PL,C-技.术_网

If MSComm1.PortOpen = False Then
WWW_PLCJS_COM-PLC-技.术_网

WWW_PLCJS_COM-PLC-技.术_网

MSComm1.PortOpen = True
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

WWW_PL※CJS_COM-PLC-技.术_网

Else
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_P※LCJS_COM-PLC-)技.术_网

MSComm1.PortOpen = False
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

WWW_PLCJS@_COM%-PLC-技.术_网

End If
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

P.L.C.技.术.网——可编程控制器技术门户

If MSComm1.PortOpen Then 打开关闭按钮显示文字
WWW.PLCJS.COM——可编程控制器技术门户

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

Command3.Caption = "关闭串口"
WWW_P※LCJS_COM-PLC-)技.术_网

W1WW_P4LCJS_COM-PLC-技.术_网

Else
W1WW_P4LCJS_COM-PLC-技.术_网

WWcW_PLCJS_COM-PLC-技.术_网

Command3.Caption = "打开串口"
WWW_PLCJS@_COM%-PLC-技.术_网

WW.W_PLC※JS_C,OM-PL,C-技.术_网

End If
——可——编——程——控-制-器-技——术——门——户

WW.W_PLC※JS_C,OM-PL,C-技.术_网

If Err Then 打开串口失败,则显示出错信息
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

WWW_PL※CJS_COM-PLC-技.术_网

MsgBox Error$, 48, "错误信息"
plcjs.技.术_网

WWW_PL※CJS_COM-PLC-技.术_网

Exit Sub
W1WW_P4LCJS_COM-PLC-技.术_网

WWW_PLCJS@_COM%-PLC-技.术_网

End If
WWW_PLC※JS_COM-PmLC-技.术_网

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

End Sub
WWW_PL※CJS_COM-PLC-技.术_网

P.L.C.技.术.网——可编程控制器技术门户

Private Sub Timer1_Timer() 读V存储区数据
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WWW_P※LCJS_COM-PLC-)技.术_网

Dim CRC() As Byte
WWW_PL※CJS_COM-PLC-技.术_网

WWW_P※LCJS_CO※M-PLC-技-.术_网

Dim FGetData As String
WWW_P※LCJS_COM-PLC-)技.术_网

WWcW_PLCJS_COM-PLC-技.术_网

Dim aa() As Byte
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

Dim s As String
WWW_PLCJS@_COM%-PLC-技.术_网

WWW_PLCJS@_COM%-PLC-技.术_网

Dim str As String
WW.W_PLC※JS_C,OM-PL,C-技.术_网

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

Dim i As Integer
WWW_PLCJS@_COM%-PLC-技.术_网

P.L.C.技.术.网——可编程控制器技术门户

Dim bb, cc As String
WW.W_PLCJS_COM-PLC-技.术_网

W1WW_P4LCJS_COM-PLC-技.术_网

ReDim aa(5) As Byte 定义动态数组
——可——编——程——控-制-器-技——术——门——户

W1WW_P4LCJS_COM-PLC-技.术_网

aa(0) = &HC
WWW.PLCJS.COM——可编程控制器技术门户

WW.W_PLC※JS_C,OM-PL,C-技.术_网

aa(1) = &H3
WWW_P※LCJS_CO※M-PLC-技-.术_网

WWW_PLCJS@_COM%-PLC-技.术_网

aa(2) = &H0
W1WW_P4LCJS_COM-PLC-技.术_网

WWW_PL※CJS_COM-PLC-技.术_网

aa(3) = &H32
WWW_PLCJS_COM-PLC-技.术_网

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

aa(4) = &H0
——可——编——程——控-制-器-技——术——门——户

WWW_PLCJS@_COM%-PLC-技.术_网

aa(5) = &H4
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

——可——编——程——控-制-器-技——术——门——户

CRC = CRC16(aa)
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WW.W_PLC※JS_C,OM-PL,C-技.术_网

str = CRC
WWW_PLC※JS_COM-PmLC-技.术_网

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

s = ""
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

plcjs.技.术_网

For i = 1 To LenB(str)
WW.W_PLCJS_COM-PLC-技.术_网

WWcW_PLCJS_COM-PLC-技.术_网

s = s + Hex(AscB(MidB(str, i, 1)))

本新闻共3页,当前在第11 2  3  
WWW_PLC※JS_COM-PmLC-技.术_网

评论内容
载入中...
载入中...
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
·栏目热门排行
·站内热门排行