VB-与三菱FX-PLC通信_第1页
VB-与三菱FX-PLC通信_第2页
VB-与三菱FX-PLC通信_第3页
VB-与三菱FX-PLC通信_第4页
VB-与三菱FX-PLC通信_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、利用 VB6.0 实现 PC 与三菱 PLC 的通信 哈尔滨李松颖 本文介绍的 PC 与三菱 FX 系列 PLC 通信,是通过 PLC 的编程口与 PC 机的串口进行的,采用 SC-09 编程电缆作为计算机与 PLC 通信的连线。电缆的 9 芯 D 形插头连接在计算机串口上,另一端连接 PLC 的 RS-422 编程口。 编写 PC 的通信程序可采用汇编语言、各种高级语言,也可以采用工控组态软件或直接采用 PLC 厂家的通信软件。本文采用 VB6 0 软件,它必须依据所连接 PLC 的通信规程来编写通信协议,所以先简单介绍 FX 系列 PLC 的通信协议。 一、 FX 系列 PLC 的通讯协议

2、 1 数据传输格式 FX 系列 PLC 采用异步格式,由 1 位起始位、 7 位数据位、 l 位偶校验位及 l 位停止位组成,波特率为 9600bps ,字符为 ASCi 码。 2 通信命令 FX 系列 PLC 有 4 条通信命令,即读命令、写命令、强制通命令、强制断命令。表 1 中, X 为输入继电器; Y 为输出继电器; M 为辅助继电器; S 为状态元件; T 为定时器; C 为计数器; D 为数据寄存器。 3 通信控制字符 FZ 系列 PLC 采用面向字符的传输规程,用到 5 个通信控制字符,如表 2 所示。 4 报文格式 PC 机向 PLC 发送的报文格式如表 3 所示。其中, ST

3、X 为开始标志; ETS 为结束标志; CMD 为命令的 ASC 码: SUMH 、 SUML 为从 CMD 到 ETX 按字节求累加和,溢出不计。由于每字节十六进制数变为两字节 ASC 代码,故校验和为 SUMH 与 SUMI 。 PLC 向 PC 机发送的应答报文格式如表 4 所示。 二、 PC 通信程序的编写 1 通信口初始化 , MSComm 控件简介: VB 带有专门管理串行通讯的 MSComm 控件。只需设置几个主要参数就可以实现 PLC 与 PC 间的串行通讯。要完成通信必须设置 MSComm 的相关属性值,即通信口初始化,其步骤如下: (1)CoinmPort :设置或传回通信

4、连接端口代号。 (2)Settings :设置初始化参数。以字 - 符串的形式设置或传回连接速度、奇偶校验、数据位、停止位等 4 个参数。 (3)PortOpen :设置或传回通信连接端口的状态。 (4)Input :从输入寄存器传回并移除字符。 (5)Output :将一个字符串写入输出寄存器。 (6)InputLen :指定由串行端口读入的字符串长度。 (7)InBufferCount :传回在接收寄存器中的字符数。 2 通讯程序举例 首先,在窗体开始设计之前,添加 MSComm 控件和按钮、文本框、标签等。 (1)PC 从 PLC 中读取数据 假设 PC 要从 PLC 中读入从 D123

5、 开始的 4 个字节的数据 ( 占用两个数据寄存器: D123 、 D124) ,其报文如表 5 所示。 根据三菱 FX 系列 PLC 编程口通信协议,地址算法为 address=address×2+1000h 将地址 123 转换成十六进制为 7Bh ,因此首地址为: address=addressx2+1000h=7Bhx2+1000h= 10F 6h 再转换成 ASCII 码为 31h,30h,46h,36h 校验和 SUM=30H+31H+30H+46H+36H+30H+34H+03H=174H ,溢出部分不计,故 SUMH 为 "7" , SUML 为

6、"4" ,相应的 ASC 码为“ 37H ”和“ 34H ”。 PLC 的应答报文格式如表 6 所示。 (2) 把数据写入 PLC 例如,向 PLC 的 D123 数据寄存器写入数据“ 1234ABCD ”的报文格式如表 7 所示 三菱FX系列PLC编程口通信协议总览 三菱FX系列PLC编程口通信协议总览该协议实际上适用于PLC编程端口以及 FX-232AW 模块的通信。通讯格式:命令 命令码 目标设备DEVICE READ CMD "0" X,Y,M,S,T,C,

7、DDEVICE WRITE CMD "1"  X,Y,M,S,T,C,DFORCE ON CMD " 7" X,Y,M,S,T,CFORCE OFF CMD  "8"  X,Y,M,S,T,C传输格式: RS232C波特率: 9600bps奇偶: even校验: 累加方式(和校验)字符: ASCII16进制代码: EN

8、Q 05H 请求ACK 06H PLC正确响应NAK 15H PLC错误响应STX 02H 报文开始ETX 03H 报文结束 帧格式:STX CMD DATA . DATA ETX SUM(upper) SUM(lower)例子:STX ,CMD ,ADDRESS, BYTES, ETX, SUM02H, 30H, 31H,30H,46H,36H, 

9、;30H,34H, 03H, 37H,34HSUM=CMD+.+ETX;30h+31h+30h+46h+36h+30h+34h+03h=74h;累加和超过两位取低两位1、DEVICE READ(读出软设备状态值)计算机向PLC发送:始 命令 首地址 位数 终 和校验STX CMD GROUP ADDRESS BYTES ETX SUM例子:从D123开始读取4个字节数据02h 30h 31h,30h,46h,36h 30h,3

10、4h 03h 37h,34h地址算法:address=address*2+1000h再转换成ASCII31h,30h,46h,36hPLC返回STX 1ST DATA 2ND DATA . LAST DATA ETX SUM注:最多可以读取64个字节的数据例子:从指定的存储器单元读到3584这个数据02h 33h 35h 38h 34h 03h 44h,36h 2、DEVICE WRITE(向PLC软设备写

11、入值)始 命令 首地址 位数 数据 终 和校验STX CMD GROUP ADDRESS BYTES 1ST DATA 2ND DATA . LAST DATA ETX SUM例子:向D123开始的两个存储器中写入1234,ABCD02h 31h 31h,30h,46h,36h 30h,34h 33h,34h,31h,32h,33h,34h,41h,42h,43h,4

12、4h 03h 34h,39hPLC返回ACK (06H) 接受正确NAK (15H) 接受错误 3、位设备强制置位/复位FORCE ON置位始 命令 地址 终 和校验STX CMD ADDRESS ETX SUM02h 37h address 03h sumFORCE OFF复位始 命令 地址 终 和校验STX CMD ADDR

13、ESS ETX SUM02h 38h address 03h sum PLC返回ACK(06H) 接受正确NAK(15H) 接受错误设备强制中的地址公式:Address=Address/8+100h 说明:1.帧中的BYTES表示需要读取或者写入的字节数。2.地址算法上有说明。3.累加和是从STX后面一个字节开始累加到ETX的和。三菱FX系列PLC编程口通信源代码fx_comm.h FX系列PLC四种通信模式的特性首先讲讲FX系列PLC的通信方式。FX系列PLC根据使用的通信模块与协议

14、不同,分为以下四种通信模式:1、PLC的N:N通信方式2、PLC双机并联通信方式3、PLC与计算机专有协议通信方式(无须梯形图,电脑直接读写操纵PLC) 4、PLC与计算机无协议通信方式(梯形图RS指令方式,可自定义通信协议) 以下将详细列出各通信模式的特性: N:N网络 PLC并联 专用协议计算机连接 无协议通信传输标准 RS485 RS485/RS422 RS485/RS422或RS232传输距离 500m RS485/RS422:500mRS232:15m连接数量 8站

15、 1:1 1:N(N<=16) 1:1通信方式 半双工 FX,FX2c,FXon:半双工FX2n: 全双工数据长度 固定 7bit/8bit校验  无/奇/偶停止位  1bit/2bit波特率 38400bps 19200bps 300/600/1200/2400/4800/9600/19200头字符 固定 无有效尾字符  控制线 - 协议 - 格式1/格式4&

16、#160;无和校验 固定 无有效 适用机型 FX2n,FXon FX2n,FX,FX2c FX2n,FXon,FX,FX2cFX系列PLC专用协议通信指令一览   以下将详细列出PLC专用协议通信的指令:指令 注释 BR 以1点为单位,读出位元件的状态 WR 以16点为单位,读出位元件的状态,或以1字为单位,读出字元件的值 BW 以1点为单位,写入位元件的状态 WW 以16点为单位,写入位元件的状态,或以1字为单位,

17、写入值到字元件 BT 以1点为单位,SET/RESET位元件 WT 以16点为单位,SET/RESET位元件,或写入值到字元件 RR 控制PLC运行RUN RS 控制PLC停止STOP PC 读出PLC设备类型 TT 连接测试 注:位元件包括X,Y,M,S以及T,C的线圈等;字元件包括D,T,C,KnX,KnY,KnM等。FX系列PLC专用协议通信指令格式详解约定说明:ENQ为请求标志,ASCII值5,VB中以chr(5)表示;ACK为正确标志,ASCII值6,VB

18、中以chr(6)表示; STX为请求标志,ASCII值2,VB中以chr(2)表示;EXT为请求标志,ASCII值3,VB中以chr(3)表示; 表格中红色字为需要求和效验的部分;和效验为每一项的ASCII值的总和转换成十六进制后区低两位;站号、PLC号、元件数量、和效验都是以十六进制表示;等待延时为0-150毫秒,以十六进制0H-FH表示,如100ms为AH。1、批量读出位元件-BR指令  格式:  1 2 3 4 5 6 7 8   

19、;          15 16 17PC侧: ENQ 站号 PLC号 BR 延时 首地址 数量 和效验       ACK 站号 PLC号PLC侧:         STX 站号 PLC号 

20、;数据 EXT 和效验                     9 10 11 12 13 14       注 上述中:1、"PLC号"系统默认为"FF";2、"首地址 &quo

21、t;应以十进制表示,如首地址"X0018"表示从X寄存器的第18地址单元开始读取I/O量;3、"数量"表示读取的I/O量个数;4、"和效验"是指从"站号"到"数量"之间的各代码的ASCII码的累加和;5、PLC侧的响应码中"和效验"是指从"站号"到"EXT"之间的各代码的ASCII码的累加和。6、可以读出"X"、"Y"和"M"寄存器的内容。例如:要读出站号为0的Fx2n系列PL

22、C的X00到X08共9点的状态值,延时100ms,假设采用Communication Format(D8120)的Format 1 方式::注  释: 请求 站号 PLC号 命令 延时 元件首地址 元件数量 和效验代  码: ENQ 0 0 F F B R A X 0 0 0 0 0 9 

23、4 2ASCII码: 05H 30H 30H 46H 46H 42H 52H 41H 58H 30H 30H 30H 30H 30H 35H 34H 32H您只要将以上兰色部分的代码以字符串形式(VB中可以表示为CHR(5)&" 00FFBRAX00000942")发送到PLC,就会有正确的回应信息,如下: 注 释: 头 站号 P

24、LC号 元件首地址 尾 和效验代 码: STX 0 0 F F 0 0 1 1 0 1 1 0 1 EXT 0 5ASCII码: 02H 30H 30H 46H 46H 30H 30H 31H 31H 30H 31H 31H 30H 31H 

25、;03H 30H 35H 若发送码有误,则有以下回应:注 释: 头 站号 PLC号 和效验代 码: NAK 0 0 F F 0 6ASCII码: 15H 30H 30H 46H 46H 30H 36H2、批量读出字元件-WR指令格式:  1 2 3 4 5 6 7 8 

26、            15 16 17PC侧: ENQ 站号 PLC号 WR 延时 首地址 数量 和效验       ACK 站号 PLC号PLC侧:         STX 站号

27、0;PLC号 数据 EXT 和效验                     9 10 11 12 13 14      该命令使用方法与(BR)命令相同,不再赘述。3、批量写入位元件-BW指令格式:  1 2 

28、3 4 5 6 7 8 9      PC侧: ENQ 站号 PLC号 BW 延时 首地址 数量 写入值 和效验   PLC侧:           ACK 站号 PLC号     

29、;               10 11 124、批量写入字元件-WW指令(M寄存器100单元置"1")格式:01FFWWAM01000100010C  1 2 3 4 5 6 7 8 9  PC侧: ENQ 站号 PLC号 WW 延时&

30、#160;首地址 数量 写入值 和效验   PLC侧: 05H 01 FF  A M0100 01 0001  0C                     请自行分析以上代码。 请继续关注如何控制PLC的运行停止。利用

31、VB的MSComm控件编程实现PC与三菱PLC FX系列通信编写PC的通信程序可采用汇编语言编写,或采用各种高级语言编写,或采用工控组态软件,或直接采用PLC厂家的通信软件(如三菱的MELSE MEDOC等)下面利用VB6.0以一个简单的例子来说明编写通信程序的要点。假设PC要求从PLC中读入从D123开始的4个字节的数据(D123、D124)Chr(H2)on10F604Chr(H3)74命令报文中10F6H为D123的地址,04H表示要读入4个字节的数据。校验和SUM30H31H30H46H36H30H34H03 H174H,溢出部分不计,故SUMH=7,SUAIL=4,相应的ASC码为“

32、37H”,“34H”。应答报文中4个字节的十六进制数,其相应的ASC码为8个字节,故应答报文长度为12个字节。 根据PC与FX系列PLC的传输应答过程,利用VB的MSComm控件可以编写如下通信程序实现PC与FX系列PLC之间的串行通信,以完成数据的读取。MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。在这个例子中使用了轮询方法。 1)通信口初始化 Private Sub Initialize() MSComm1CommPort =1 MSComm1Settings = “9600,E,7,1” MSComm1InBufferSize = 1024 MSCommlOutBuffer

33、size = 1024 MSComm1InputLen = 0 MSCommlInputMode = comInputText MSComm1Handshaking = comNone MSComm1PortOpen = True End Sub 2)请求通信与确认 Private Function MakeHandshaking()As Boolean Dim InPackage As String MSCommlOutBufferCount = 0MSCommlInBufferCount = 0MSCommlOutPut = Chr(H5)DoDoEventsLoop Until MSCo

34、mmlInBufferCount = 1InPackage = MSCommlInputIf InPackage = Chr(H6) ThenMakeHandShaking = TrueElseMakeHandshaking = FalseEnd IfEnd Function3)发送命令报文Private Sub SendFrame ()Dim Outstring As StringMSCommlOutBufferCount = 0 MSCommlInBufferCount = 0Outstrin = Chr(H2)on10F604Chr(H3)74MSCommlOutput = Outstr

35、ingEnd Sub4)读取应答报文Private Sub ReceiveFrame()Dim Instring As StringDoDoEventsLoop Until MSCommlInBufferCount = 12InString = MSCommlInpultEnd Sub1、DEVICE READ(读出软设备状态值)计算机向PLC发送:始命令首地址位数终和校验STXCMDGROUP ADDRESSBYTESETXSUM例子:从D123开始读取4个字节数据02h30h31h,30h,46h,36h30h,34h03h37h,34h地址算法:address=address*2+100

36、0h再转换成ASCII31h,30h,46h,36hPLC返回STX1ST DATA2ND DATA.LAST DATAETXSUM注:最多可以读取64个字节的数据例子:从指定的存储器单元读到3584这个数据02h33h35h38h34h03h44h,36h2、DEVICE WRITE(向PLC软设备写入值)始命令首地址位数数据终和校验STXCMDGROUP ADDRESSBYTES1ST DATA2ND DATA.LAST DATAETXSUM例子:向D123开始的两个存储器中写入1234,ABCD02h31h31h,30h,46h,36h30h,34h33h,34h,31h,32h,43h

37、,44h,41h,42h03h34h,39hPLC返回ACK (06H) 接受正确NAK (15H) 接受错误3、位设备强制置位/复位FORCE ON置位始命令地址终和校验STXCMDADDRESSETXSUM02h37haddress03hsumFORCE OFF复位始命令地址终和校验STXCMDADDRESSETXSUM02h38haddress03hsumPLC返回ACK(06H) 接受正确NAK(15H) 接受错误设备强制中的地址公式:Address=Address * 100h + (*) (必须为4位,不足4位前面补0) 注:*号所代表值:   C:1

38、4  M:8  T:6  Y:5  X:4  S:0如对M2置位,则为地址为:2*256(100H)+8=0520 转为十六进制为:0208 再换为ASCII就是: 30 32 30 38说明:1.帧中的BYTES表示需要读取或者写入的字节数。2.地址算法上有说明。3.累加和是从STX后面一个字节开始累加到ETX的和。VB读写三菱FX系列PLC数据示例通过前面两篇文章,我们了解了三菱FX系列PLC的编程口通信协议。为了更方便读者学习这里提供一个用VB编写的示例,其中包含一个通用模块,如果你需要对此类PLC进行读写数据区的操作可以下载看看。三菱F

39、X系列PLC的校验采用的是和校验,在写数据和读数据时都会有这个和校验,和校验用于检查数据包是否有错。因此我们必需知道和校验的算法,才能成功地进行通信。在这里我们提供了一个和校验的VB源代码: '*Private Function Check_FCS(mStr As String) As StringDim K As Integer, mTest As IntegerFor K = 1 To Len(mStr)mTest = mTest + Asc(Mid(mStr, K, 1)NextCheck_FCS = Right(Hex(mTest), 2)End Function'*

40、函数中的 mStr 参数为命令、位数、数据、终止符的合集,读取时不包括数据。使用Check_FCS函数时将返回和校验码。当向PLC写数据时,数据必须为四位的十六进制数,并且低位在前、高位在后。这里提供一个循环代码,将一个数组里的整数转换为向PLC写入数据的字符串: For Q = 0 To UBound(mData)myHex = myHex & Format(Hex(mData(Q) Mod &HFF), "00") & Format(Hex(mData(Q) &HFF), "00")Next 在上面的代码中 mData

41、 为向PLC写入数据的数组,myHex 最终得到的就是写入PLC时所要的数据字符串。同样的从PLC读出来的数据也是四位的十六进制,低位在前、高位在后。所以我们有必要将其转换为对应的整数。其主要的转换代码如下: ReDim mData(mCounts - 1)For Q = 0 To mCounts - 1mData(Q) = "&H" & (Mid(myHex, 4 + Q * 4, 2) & Mid(myHex, 2 + Q * 4, 2)Next mCounts 为要读取数据区的个数,myHex 是串口返回来的数据,经过上面计算返回的整数值将排列

42、在 mData 数组里。引言 在工业生产中,人们常常面临着数据采集与管理。作为工厂自动化的三大支柱可编程控制器PLC(Programmable Logic Controller),由于其安全可靠,广泛的用于数据采集与控制。生产过程中,要监视PLC内部的数据与运行状况,选用市场上的人机界面或组态软件,虽然功能丰富,但大都价格昂贵,在一些中小规模的生产场合,人们希望能自己用高级语言开发一个简易实用的通信程序。使用Visual Basic 6.0,开发串行通信程序时,有两种方法,一种是用Windows API函数,另一种是用VB支持的通信控件MSCOMM。以下介绍使用通信控件方式实现通讯1.硬件采用

43、SC-09编程电缆,连接PC串口与PLC编程口实现通讯。2PLC编程口的通信协议简介通信格式:波特率9600,偶校验,8位数据位,一位停止位。 具体请参考有关资料,以下举例说明其通讯格式1)、DEVICE READ(读出软设备状态值)计算机向PLC发送:3具体程序说明MSComm控件简介用来提供简单的串行端口通信功能,也可以用来创建功能完备、事件驱动的高级通信工具。Mscomm控件提供了一系列标准通信命令的使用界面。使用它可以建立与串行端口的连接,通过串行端口再连接到其它设备(如调制解调器、PLC),发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误。数据读与写采用函数input和o

44、utput(1)窗口加载程序Private Sub Form_Load() MSComm1.CommPort = 1 选择COM1口 MSComm1.Settings = #quot;9600,e,7,1#quot; If mscomm1.portopen=false then mscomm1.portopen=trueEnd Sub(2)数据读取子程序:Public Function GetData(ByVal StartAddress As String, ByVal GetBytes As Integer, ByVal Hex_Bytes As String) As String MSC

45、omm1.InputLen = GetBytes 2 4 MSComm1.Output = STX CMD_Read StartAddress Hex_Bytes ETX GetSumChk(CMD_Read StartAddress Hex_Bytes ETX) 传送数据组成:起始符 命令 首地址 数据位 结束符 和检验码 GetData = MSComm1.Input MSComm1.InBufferCount = 0 MSComm1.InputLen = 0End Function三菱FX系列PLC VB2005通訊命令Exp: WritePLC(BWcMd & "M0

46、106" & "010") Public Const WWcMd = "00FFWW4" 'PLC命令訊息位元-高位元寫入 Public Const BWcMd = "00FFBW4" 'PLC命令訊息位元-低位元寫入 Public Const WRcMd = "00FFWR5" 'PLC命令訊息位元-高位元讀取 Public Const BRcMd = "00FFBR5" 'PLC命令訊息位元-低位元讀取#Region "PLC Co

47、mmand" Public Sub WritePLC(ByVal Cmd As String) Try Cmd = Chr(5) & Cmd & chksum(Cmd) & Chr(13) & Chr(10) RS232_PLC.Write(Cmd) Application.DoEvents() System.Threading.Thread.Sleep(20) Application.DoEvents() Catch ex As Exception MsgBox(ex.ToString() End Try End Sub#End Region#Reg

48、ion "PLC CMD" Function doc_bit32(ByVal val As Double) As String doc_bit32 = "" Do While val > 0 doc_bit32 = (val Mod 2) & doc_bit32 val = val 2 Loop Return Right("00000000000000000000000000000000" & doc_bit32, 32) End Function Function doc_bit8(ByVal val As L

49、ong) As String doc_bit8 = "" Dim i As Byte For i = 0 To 7 If val / (2 (7 - i) >= 1 Then doc_bit8 = doc_bit8 & "1" Else doc_bit8 = doc_bit8 & "0" End If val = val Mod 2 (7 - i) Next i End Function '傳回天弘電子看板用的檢查碼 Function string_xor_checksum(ByVal string_xo

50、r As String) As Byte If Len(string_xor) = 1 Then string_xor_checksum = 0 Exit Function End If Dim byte_bit(7) As Boolean Dim xor_bit(7) As Boolean Dim i As Byte Dim j As Byte Dim txt_doc_bit8 As String txt_doc_bit8 = doc_bit8(Asc(Mid(string_xor, 1, 1) For j = 0 To 7 byte_bit(j) = IIf(Mid(txt_doc_bit

51、8, 8 - j, 1) = "1", True, False) Next j txt_doc_bit8 = doc_bit8(Asc(Mid(string_xor, 2, 1) For j = 0 To 7 xor_bit(j) = IIf(Mid(txt_doc_bit8, 8 - j, 1) = "1", True, False) Next j For j = 0 To 7 xor_bit(j) = IIf(byte_bit(j) Xor xor_bit(j), True, False) Next j If Len(string_xor) = 2

52、Then For j = 0 To 7 If xor_bit(j) = True Then string_xor_checksum = string_xor_checksum + 2 j Next j Exit Function End If For i = 0 To Len(string_xor) - 3 txt_doc_bit8 = doc_bit8(Asc(Mid(string_xor, i + 3, 1) For j = 0 To 7 byte_bit(j) = IIf(Mid(txt_doc_bit8, 8 - j, 1) = "1", True, False)

53、Next j For j = 0 To 7 xor_bit(j) = IIf(byte_bit(j) Xor xor_bit(j), True, False) Next j Next i For j = 0 To 7 If xor_bit(j) = True Then string_xor_checksum = string_xor_checksum + 2 j Next j End Function '傳回FX系列PLC用的檢查碼 Function chksum(ByVal chksum_text As String) As String Dim text_len As Byte D

54、im i As Byte Dim sum_doc As Long Dim sum_hex As String text_len = Len(chksum_text) For i = 1 To text_len sum_doc = Asc(Mid(chksum_text, i, 1) + sum_doc Next i sum_hex = Hex(sum_doc) chksum = Right(sum_hex, 2) End Function '將4個16進位值的字元轉換為10進位的數值 Function hex_doc(ByVal hex_text As String) As Long

55、If hex_text = "" Then hex_text = 0 hex_doc = ("&h" + hex_text) * 1 End Function '4個16進位值的字元轉換為16bits的字元 Function hex_bit(ByVal hex4_text As String) As String hex_bit = "" Dim bit_num As Byte Dim bit_text(15) As String Dim mod_doc As Long mod_doc = hex_doc(hex4_t

56、ext) For bit_num = 0 To 15 bit_text(15 - bit_num) = IIf(mod_doc / 2 (15 - bit_num) < 1, _ "0", "1") mod_doc = mod_doc Mod 2 (15 - bit_num) hex_bit = hex_bit + bit_text(15 - bit_num) Next bit_num End Function '4個16進位值的字元轉換為含+-的10進位數值 Function hex4_doc_mux(ByVal hex4_text_mu

57、x As String) As Long Dim hex4_bit_mux As String Dim hex4_bit_mux_new As String Dim flag_mux As Boolean Dim i As Byte Dim flag_1_num As Byte hex4_doc_mux = 0 hex4_bit_mux = hex_bit(hex4_text_mux) If Mid(hex4_bit_mux, 1, 1) = "1" Then flag_mux = True For i = 0 To 15 If Mid(hex4_bit_mux, 16 -

58、 i, 1) = "1" Then flag_1_num = 16 - i Exit For End If Next i hex4_bit_mux_new = Mid(hex4_bit_mux, flag_1_num, 17 - flag_1_num) For i = 0 To flag_1_num - 2 If Mid(hex4_bit_mux, flag_1_num - 1 - i, 1) = "1" Then hex4_bit_mux_new = "0" & hex4_bit_mux_new Else hex4_bit_

59、mux_new = "1" & hex4_bit_mux_new End If Next i Else flag_mux = False hex4_bit_mux_new = hex4_bit_mux End If For i = 0 To 15 If Mid(hex4_bit_mux_new, i + 1, 1) = "1" Then hex4_doc_mux = hex4_doc_mux + (2 (15 - i) Next i If flag_mux = True Then hex4_doc_mux = -1 * hex4_doc_mux

60、End Function '8個16進位值的字元轉換為含+-的10進位數值 Function hex8_doc_mux(ByVal hex8_text_mux As String) As Long Dim hex8_bit_mux As String Dim hex8_bit_mux_new As String Dim flag_mux As Boolean Dim i As Byte Dim flag_1_num As Byte hex8_doc_mux = 0 hex8_bit_mux = hex_bit(Mid(hex8_text_mux, 5, 4) & hex_bit(Mid(hex8_text_mux, 1, 4) If Mid(hex8_bit_mux, 1, 1) = "1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论