W1WW_P4LCJS_COM-PLC-技.术_网
Visual Basic的以其实用和开发周期短等特点受到广大程序员的欢迎,许多用过像VC++这些软件的程序员也开始加入VB的行列,因为它太实用了,特别在小软件的开发上。VB在工业监控方面的应用也非常广泛。今天我给大家分享一下我在做台达变频器和PC通信的经验:WWW_PL※CJS_COM-PLC-技.术_网
WWW.PLCJS.COM——可编程控制器技术门户
串口初始化:WWW_P※LCJS_COM-PLC-)技.术_网
WWW_PL※CJS_COM-PLC-技.术_网
On Error GoTo errStrWW.W_PLCJS_COM-PLC-技.术_网
MSComm1.CommPort = 1W1WW_P4LCJS_COM-PLC-技.术_网
MSComm1.Settings = "9600,o,8,1"WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
MSComm1.InputMode = comInputModeBinaryWWW_PLC※JS_COM-PmLC-技.术_网
MSComm1.Handshaking = comNoneWWW_PLC※JS_COM-PmLC-技.术_网
MSComm1.OutBufferSize = 1024plcjs.技.术_网
MSComm1.InBufferSize = 512WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
MSComm1.InputLen = 0WWW_PLC※JS_COM-PmLC-技.术_网
MSComm1.SThreshold = 1WWW_P※LCJS_CO※M-PLC-技-.术_网
MSComm1.RThreshold = 1P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
MSComm1.PortOpen = TrueWW.W_PLC※JS_C,OM-PL,C-技.术_网
Exit SubWWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
errStr:WW.W_PLC※JS_C,OM-PL,C-技.术_网
If Err.Number = 8002 ThenP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
MsgBox "串口不存在!", vbOKOnly Or vbInformationplcjs.技.术_网
ElseIf Err.Number = 8005 ThenWWW_P※LCJS_COM-PLC-)技.术_网
MsgBox "串口已被占用!", vbOKOnly Or vbInformationWWW_PLC※JS_COM-PmLC-技.术_网
End IfWW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW.PLCJS.COM——可编程控制器技术门户
请根据串口初始化的代码来设置变频器的设置。(参考VFD-M说明书)WWW_PLCJS@_COM%-PLC-技.术_网
W1WW_P4LCJS_COM-PLC-技.术_网
读变频器的当前频率:WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
WWW_PLC※JS_COM-PmLC-技.术_网
发送到串口的数据:01 03 21 02 00 02 6F F7WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
其中01为设备地址;03为写命令;21 02为当前频率寄存器地址;00 02资料数(word);6F F7为检验码WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
plcjs.技.术_网
在编写代码之前,可以先用串调试软件(EasyPort)调试一下,这可以确保接线没和变频器设置方面没有问题。——可——编——程——控-制-器-技——术——门——户
WWcW_PLCJS_COM-PLC-技.术_网
EasyPort使用:设定好串口波特率9600、数据位8位、校验位O、停止位1;选中Modbus协议,复选附加检验码;在发送框内直接写入01 03 21 02 00 02,点击发送即可。WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
在接收到的文报中,读者可以前4位和后两位都去掉,留下的数据把十六进制转换成十进制,把计算出来的结果和变频器数码管的显示是不是相符,如果不是,请检查一下变频器的设置后,再做实验。P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WW.W_PLCJS_COM-PLC-技.术_网
如果在串口调试软件中得到了理想的效果后,就可着手写代码了。——可——编——程——控-制-器-技——术——门——户
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
发送数据:Mscomm.Output=要送的数据P.L.C.技.术.网——可编程控制器技术门户
WWW_PL※CJS_COM-PLC-技.术_网
接收数据:Mscomm_OnComm() 来接收WWW_PLCJS_COM-PLC-技.术_网
——可——编——程——控-制-器-技——术——门——户
具体的代码大家自己实现啦P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
以下为检验代码CRC16部分:WWcW_PLCJS_COM-PLC-技.术_网
WWW_P※LCJS_COM-PLC-)技.术_网
Function CRC16(data() As Byte) As StringWWW_P※LCJS_COM-PLC-)技.术_网
Dim CRC16Lo As Byte, CRC16Hi As Byte CRC寄存器WWW_P※LCJS_COM-PLC-)技.术_网
Dim CL As Byte, CH As Byte 多项式码&HA001WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
Dim SaveHi As Byte, SaveLo As ByteWWW_PL※CJS_COM-PLC-技.术_网
Dim i As IntegerWW.W_PLCJS_COM-PLC-技.术_网
Dim Flag As IntegerWWW_PL※CJS_COM-PLC-技.术_网
CRC16Lo = &HFFP.L.C.技.术.网——可编程控制器技术门户
CRC16Hi = &HFFWW.W_PLCJS_COM-PLC-技.术_网
CL = &H1WWW.PLCJS.COM——可编程控制器技术门户
CH = &HA0WWW_PLCJS@_COM%-PLC-技.术_网
For i = 0 To UBound(data)WWW_P※LCJS_COM-PLC-)技.术_网
CRC16Lo = CRC16Lo Xor data(i) 每一个数据与CRC寄存器进行异或WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
For Flag = 0 To 7W1WW_P4LCJS_COM-PLC-技.术_网
SaveHi = CRC16HiWWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
SaveLo = CRC16LoWW.W_PLCJS_COM-PLC-技.术_网
CRC16Hi = CRC16Hi \ 2 高位右移一位plcjs.技.术_网
CRC16Lo = CRC16Lo \ 2 低位右移一位WWW_P※LCJS_CO※M-PLC-技-.术_网
If ((SaveHi And &H1) = &H1) Then 如果高位字节最后一位为1WWcW_PLCJS_COM-PLC-技.术_网
CRC16Lo = CRC16Lo Or &H80 则低位字节右移后前面补1W1WW_P4LCJS_COM-PLC-技.术_网
End If 否则自动补0WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)