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程序实现,方便贴出,已转换为STLWWcW_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.1P.L.C.技.术.网——可编程控制器技术门户
WW.W_PLCJS_COM-PLC-技.术_网
CALL SBR3, 1, 12, 9600, 0, 0, 128, 32, 1000, &VB0, M10.1, MB11W1WW_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.0WWW_PLCJS@_COM%-PLC-技.术_网
W1WW_P4LCJS_COM-PLC-技.术_网
CALL SBR1, M10.2, MB12WWW_PL※CJS_COM-PLC-技.术_网
WWW_PLCJS_COM-PLC-技.术_网
Network 3 WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
——可——编——程——控-制-器-技——术——门——户
LD SM0.0WWW_PLCJS@_COM%-PLC-技.术_网
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
MOVW AIW0, VW100——可——编——程——控-制-器-技——术——门——户
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
/I +54, VW100WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW_PLC※JS_COM-PmLC-技.术_网
MOVW AIW2, VW102WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
/I +54, VW102plcjs.技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
字串7WWcW_PLCJS_COM-PLC-技.术_网
WWW_PLC※JS_COM-PmLC-技.术_网
MOVW AIW4, VW104WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WWW.PLCJS.COM——可编程控制器技术门户
/I +54, VW104WWW_P※LCJS_COM-PLC-)技.术_网
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
MOVW AIW6, VW106WWW_PLC※JS_COM-PmLC-技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
/I +54, VW106P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
Network 4 WWW_P※LCJS_CO※M-PLC-技-.术_网
WWW_P※LCJS_CO※M-PLC-技-.术_网
LD SM0.0WWW_P※LCJS_CO※M-PLC-技-.术_网
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
= Q0.0WWW_P※LCJS_COM-PLC-)技.术_网
WWcW_PLCJS_COM-PLC-技.术_网
Network 5 WWW_P※LCJS_COM-PLC-)技.术_网
WWW.PLCJS.COM——可编程控制器技术门户
LD I0.0WWcW_PLCJS_COM-PLC-技.术_网
WWW_PL※CJS_COM-PLC-技.术_网
= Q0.1WWW_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.2WW.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 ExplicitWWW_PLCJS_COM-PLC-技.术_网
P.L.C.技.术.网——可编程控制器技术门户
Private Declare Function GetTickCount Lib "kernel32" () As LongWWW.PLCJS.COM——可编程控制器技术门户
WWW_P※LCJS_COM-PLC-)技.术_网
Dim x1WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
Dim p11, p12, p13, p14, p15, p16, p17, p18WWW_PLC※JS_COM-PmLC-技.术_网
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
Function CRC16(data() As Byte) As StringWW.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 多项式码&HA001WWW_P※LCJS_CO※M-PLC-技-.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
Dim SaveHi As Byte, SaveLo As ByteWWW_P※LCJS_COM-PLC-)技.术_网
plcjs.技.术_网
Dim i As IntegerWWW_P※LCJS_COM-PLC-)技.术_网
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
Dim Flag As IntegerWWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
plcjs.技.术_网
CRC16Lo = &HFFP.L.C.技.术.网——可编程控制器技术门户
WWcW_PLCJS_COM-PLC-技.术_网
CRC16Hi = &HFFWWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WWW_PLC※JS_COM-PmLC-技.术_网
CL = &H1WWW.PLCJS.COM——可编程控制器技术门户
plcjs.技.术_网
CH = &HA0WWW_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 7WWW_PLCJS_COM-PLC-技.术_网
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
SaveHi = CRC16HiWW.W_PLCJS_COM-PLC-技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
SaveLo = CRC16LoWWW_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 如果高位字节最后一位为1plcjs.技.术_网
——可——编——程——控-制-器-技——术——门——户
CRC16Lo = CRC16Lo Or &H80 则低位字节右移后前面补1plcjs.技.术_网
WWW.PLCJS.COM——可编程控制器技术门户
End If 否则自动补0WWW_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 CHWWW_PLCJS_COM-PLC-技.术_网
WWW_PLCJS_COM-PLC-技.术_网
CRC16Lo = CRC16Lo Xor CLP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
plcjs.技.术_网
End If——可——编——程——控-制-器-技——术——门——户
P.L.C.技.术.网——可编程控制器技术门户
Next FlagW1WW_P4LCJS_COM-PLC-技.术_网
WWW_P※LCJS_CO※M-PLC-技-.术_网
Next iWWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
WWW_PLC※JS_COM-PmLC-技.术_网
Dim ReturnData(1) As ByteP.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 = ReturnDataWW.W_PLCJS_COM-PLC-技.术_网
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
End FunctionWWW.PLCJS.COM——可编程控制器技术门户
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
Private Sub About_Click()WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
WWW.PLCJS.COM——可编程控制器技术门户
frmAbout.ShowWWW_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时间为1SWWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
——可——编——程——控-制-器-技——术——门——户
Timer2.Enabled = True 定时器2有效P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW_PL※CJS_COM-PLC-技.术_网
Timer2.Interval = 1000 定时器2时间为1S P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
字串4W1WW_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 Thenplcjs.技.术_网
WWcW_PLCJS_COM-PLC-技.术_网
Command3.Caption = "打开串口"WW.W_PLC※JS_C,OM-PL,C-技.术_网
plcjs.技.术_网
ElseWWW_PL※CJS_COM-PLC-技.术_网
WWW_P※LCJS_COM-PLC-)技.术_网
Command3.Caption = "关闭串口"WW.W_PLCJS_COM-PLC-技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
End IfP.L.C.技.术.网——可编程控制器技术门户
P.L.C.技.术.网——可编程控制器技术门户
End SubW1WW_P4LCJS_COM-PLC-技.术_网
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
Private Sub Command1_Click() 字串8 WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
WWcW_PLCJS_COM-PLC-技.术_网
Timer1.Enabled = TrueWWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WWcW_PLCJS_COM-PLC-技.术_网
End SubWWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WW.W_PLCJS_COM-PLC-技.术_网
Private Sub Command2_Click() 退出程序,定时器1无效W1WW_P4LCJS_COM-PLC-技.术_网
WW.W_PLCJS_COM-PLC-技.术_网
Timer1.Enabled = FalseWWW.PLCJS.COM——可编程控制器技术门户
plcjs.技.术_网
ClsWWcW_PLCJS_COM-PLC-技.术_网
WWW_PL※CJS_COM-PLC-技.术_网
Unload MeWWW_P※LCJS_CO※M-PLC-技-.术_网
W1WW_P4LCJS_COM-PLC-技.术_网
End SubWWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
Private Sub Command3_Click()WWW_PLCJS_COM-PLC-技.术_网
P.L.C.技.术.网——可编程控制器技术门户
On Error Resume NextWW.W_PLC※JS_C,OM-PL,C-技.术_网
WW.W_PLC※JS_C,OM-PL,C-技.术_网
If MSComm1.PortOpen = False ThenWWW_PLCJS_COM-PLC-技.术_网
WWW_PLCJS_COM-PLC-技.术_网
MSComm1.PortOpen = TrueWWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
WWW_PL※CJS_COM-PLC-技.术_网
ElseP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW_P※LCJS_COM-PLC-)技.术_网
MSComm1.PortOpen = FalseWWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WWW_PLCJS@_COM%-PLC-技.术_网
End IfWWW_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-技.术_网
ElseW1WW_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 SubW1WW_P4LCJS_COM-PLC-技.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
End IfWWW_PLC※JS_COM-PmLC-技.术_网
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
End SubWWW_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 ByteWWW_PL※CJS_COM-PLC-技.术_网
WWW_P※LCJS_CO※M-PLC-技-.术_网
Dim FGetData As StringWWW_P※LCJS_COM-PLC-)技.术_网
WWcW_PLCJS_COM-PLC-技.术_网
Dim aa() As ByteWWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
Dim s As StringWWW_PLCJS@_COM%-PLC-技.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
Dim str As StringWW.W_PLC※JS_C,OM-PL,C-技.术_网
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
Dim i As IntegerWWW_PLCJS@_COM%-PLC-技.术_网
P.L.C.技.术.网——可编程控制器技术门户
Dim bb, cc As StringWW.W_PLCJS_COM-PLC-技.术_网
W1WW_P4LCJS_COM-PLC-技.术_网
ReDim aa(5) As Byte 定义动态数组——可——编——程——控-制-器-技——术——门——户
W1WW_P4LCJS_COM-PLC-技.术_网
aa(0) = &HCWWW.PLCJS.COM——可编程控制器技术门户
WW.W_PLC※JS_C,OM-PL,C-技.术_网
aa(1) = &H3WWW_P※LCJS_CO※M-PLC-技-.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
aa(2) = &H0W1WW_P4LCJS_COM-PLC-技.术_网
WWW_PL※CJS_COM-PLC-技.术_网
aa(3) = &H32WWW_PLCJS_COM-PLC-技.术_网
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
aa(4) = &H0——可——编——程——控-制-器-技——术——门——户
WWW_PLCJS@_COM%-PLC-技.术_网
aa(5) = &H4P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
——可——编——程——控-制-器-技——术——门——户
CRC = CRC16(aa)P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WW.W_PLC※JS_C,OM-PL,C-技.术_网
str = CRCWWW_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)))WWW_PLC※JS_COM-PmLC-技.术_网