db

阅读 / 问答 / 标签

如何过滤windbg的打印信息

在logcat里点选绿色的+,然后在“by Application Name:”里填入com.my.app就OK了。 它还有“by Log Tag”、“by Log Message”、“by PID”过滤条件。

电脑蓝屏 用windbg检测结果如图 看不懂这是什么意思 请高手指教

别看前面前面都是述说 后面是 ,蓝屏代码 比较重要0000000000 开始的代表的是蓝屏代码.sys 代表的是最后引起蓝屏的原因 系统文件错误,楼主这个蓝屏很好解决的,做个系统就可以解决,如正版系统,请用一键恢复

分析一下windbg 蓝屏代码

1、硬盘不稳定引起,此故障均为硬盘损坏,修复硬盘坏道或直接更换硬盘可解决。2、键鼠故障,重新插拔一下USB或多以USB导电窜线引起。3、机箱内灰尘多引起,清除灰尘(一般3-5个月清除一次)。卸下CPU风扇,轻轻擦去U上的硅脂,再重新涂上一薄层新硅脂。4、超频也可能引起蓝屏,如果超频了,就取消超频。5、电脑中病毒或木马也会蓝屏。可以用腾讯电脑管家进行查杀。

windbg结果求帮助分析

首先,我们使用windbg打开dump文件。这时候如果直接输入!analyze -v ,得到的堆栈结果肯定是看不到想看的结果的。 其次,加载wow64exts模块,因为需要这个模块帮助把64位的dump,转换成32位的dump。输入 .load wow64exts 再次,进行转换。输入!sw 最后,按照分析32位dump文件的方法,分析这个dump。

为什么win10不能安装windbg

WIN10是才出来的系统,许多软件都不兼容,希望能帮到你!

如何利用 WinDbg 进行双机调试

  其实并不是只有在生成不了转储文件的情形下才能使用双机调试,在任何情况下都是可以使用的,尤其是调试内核问题时,双机调试不必限于转储文件类型,均可获得一切可以获得的信息,相当于完全内存转储了。而且,双机调试可以调试到系统启动阶段和之后任意时刻的问题,这是内存转储做不到的。因此只要满足连接条件,将两台机器相连,我们就可以进行双机调试了。下面我们通过表格比较一下可用的三种连接方式:    连接类型  说明    COM  使用零调制解调器(Null-Modem)线缆,也就是两个头都是母孔的RS232线,通过COM端口连接    1394  利用IEEE 1394线缆连接,要求调试机和被调机运行相同版本的至少为Windows XP的系统    USB 2.0  使用一种内置硬件芯片来支持调试的特制 USB 线缆连接,要求被调机运行的系统至少为Windows Vista      在双机调试中,我们一般选择对硬件和软件复杂度要求最低的 COM 对接方式进行连接。当然,目前很多的笔记本计算机并没有再保留 COM 端口,那就要采取别的方式进行双机调试了。这样,笔记本用户进行双机调试就显得复杂了许多,所以在能生成内存转储文件的情况下还是尽量分析内存转储比较好。另外,在双机调试之前,除了连接好线缆,我们还必须在被调机上做一些设置才能让我们进行调试。下面我们一起看看需要做哪些设置。    其实要做的设置也不难,就是开启系统的调试功能。鉴于现在 Windows XP Service Pack 3 的支持周期还没有结束,我将讲解 XP 和 Windows 7 两个系统下的典型配置方式。(在这里,我们统一设置连接口为 COM1 口,波特率为115200)    对于 Windows XP,由于启动使用的是 boot.ini 数据,因此我们可以手动修改 C:oot.ini 文件(假设您的系统装在 C 盘),在像 multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional" /fastdetect 这样的启动项目后增加参数 /debug /debugport=com1 /baudrate=115200。当然,编辑 boot.ini 之前,您需要显示所有隐藏文件并且取消隐藏受保护的系统文件,而且还需清除该文件的只读属性。配置好的结果如下图所示(该记事本启用了自动换行,蓝色高亮部分其实在同一行):  除了直接编辑 boot.ini,还可以使用 msconfig 实用程序。启动 msconfig,切换到 BOOT.INI 选项卡,点击 高级 按钮,在弹出的对话框中进行如下配置后两次单击 确定 来退出 msconfig 即可:  或者,还有一种推荐的命令行方式来设置:    在 cmd 下键入并执行命令:bootcfg /debug ON /port COM1 /baud 115200 /ID 1  成功后会有如下提示:    这里的 /ID 开关用于决定对 boot.ini 中的哪一条启动项进行设置。可用的启动项可通过执行不带参数的 bootcfg 命令查看。更多自定义调试参数的方式请执行 bootcfg /debug /? 查询。    说到自定义调试参数,那我也得说说默认的调试参数:(默认调试参数即借助 /debug ON 参数单纯启用调试而没有配置调试口、波特率时的系统默认调试参数)  说完了 Windows XP 的配置,我们再来说说现行主流系统 Windows 7 的调试配置:    Windows Vista 和 Windows 7 下,就没有那么多的方法了。如果采用 Windows 自带的工具,就只能使用 bcdedit 命令了。Vista 之后,启动摒弃了 boot.ini 的方式,而是读取启动配置数据库。为了简化操作,我们可以使用默认调试配置,因此我们只需开启调试即可:    在以管理员身份运行的 cmd 下键入并执行命令:(每行一条命令)  bcdedit /bootdebug ON  bcdedit /debug ON    执行后得到的正确结果如下图所示:  您还可以通过执行 bcdedit /dbgsettings 命令来查看当前的调试参数设置。如果您要自定义调试参数,请执行命令 bcdedit /dbgsettings /? 获取帮助。    好了,做好了被调机的设置,我们还需做调试机的设置,这样才能进行调试。    由于条件所限,我只能使用我的笔记本计算机作为调试机,将安装在本机上的 Windows 7 家庭普通版虚拟机作为被调机,使用 NirSoft 的 StartBlueScreen 程序造成系统崩溃。  接着上面的步骤,此时我们刚刚配置完被调机 Windows 7 家庭普通版,并且尚未重启。我们接着应该运行调试机上面安装的 WinDbg,为了稍后能正确解析堆栈中的函数,我们首先应该点击 File – Symbol File Path…,填入 SRV*DownstreamStore*http://msdl.microsoft.com/download/symbols 后单击 OK(如果是平时调试您自己的程序,或者存有本地 Symbol,这里也可填写本地符号文件路径),然后选择 File – Kernel Debug…,在弹出的 Kernel Debugging 配置对话框中,我们选择 COM 选项卡,在 Baud Rate 里面填写 115200(与被调机调试参数匹配),然后单击 确定 即可。本来接下来就是连接零调制解调器线缆,随后重启被调机即可连上进行调试了,可是我们这里是虚拟演示,没有真实的零调制解调器线缆,我们再重启被调机之前、在确定 Kernel Debugging 配置对话框之前,我们还得做一些设置:(在此列举出来是为了方便有兴趣做一下本实验的人们 J)  u2022勾选 Pipe 使用命名管道连接  u2022勾选 Reconnect 确保在读/写错误发生时,WinDbg 自动断开并重连管道  u2022在 Port 字段填入命名管道名称(本例中笔者使用 \.pipeeric,具体用法在本文最后解释)  u2022激活被调机虚拟机窗口(以 Windows Virtual PC 为例),点击 工具 – 设置…, 在左栏选择 COM1(与被调机系统中设置的调试口一致),在右栏选择 命名管道 并在该字段填入与 WinDbg 里面一致的管道名称(本例是 \.pipeeric),然后 确定。  设置好了命名管道之后,我们在 WinDbg 的 Kernel Debugging 配置对话框中单击 确定。在询问是否 Save WorkSpace 的对话框中,我们选择 Yes。然后,WinDbg 就等待连接命名管道了。好了,后面的步骤就跟使用零调制解调器线缆连接的真实案例一样了。    接下来重启被调机。等待被调机重启并进入系统引导阶段后,WinDbg 会连上被调机并在 Waiting to reconnect… 状态下出现新的显示:  连上后,我们可以在任意阶段,于 WinDbg 内使用 Ctrl+Break 快捷键来中断被调机系统的运行,并配合相应命令进行即时分析。例如,就在这个启动阶段,我们使用 Ctrl+Break 快捷键来中断启动过程,我们可以看见启动过程的 UI 动画也随即停止:  如果要被调机继续运行,键入 g 并运行或者按下 F5 键即可。下面,我们就等待登录系统。登录系统后,我们使用提升权限的 cmd 运行 NirSoft 的系统崩溃软件来模拟一个平时我们见过的 0xc5 蓝屏,命令是 StartBlueScreen 0xc5 0 0 0 0。被调机蓝屏后,我们其实看不见以往的蓝屏,但是可以在 WinDbg 中立即看见捕获的信息,就跟分析内存转储文件一样,我们可以开始以往的分析工作了:  使用 !anaylze -v 命令,我们就可以定位出,造成蓝屏的驱动是 NirSoftBlueScreenDriver.sys。这个分析比较简单。但是值得注意的是,这个 bugcheck (即 0x000000C5)并不是系统像往常一样根据错误类型自动给出的,而是驱动 NirSoftBlueScreenDriver.sys 直接向 KeBugCheckEx 函数传递的参数,这个参数是笔者在利用 StartBlueScreen 程序时传递给程序的自定义参数,因此借助 StartBlueScreen 我们可以自定义蓝屏的五个参数。

如何在WinDBG中切换当前的线程

命令很简单:~0s 切换到0号线程~3s 切换到3号线程一些其他命令:~*e !clrstack 遍历每个线程, 依次输出它们的托管调用栈.!threads 查看所有的托管线程

蓝屏了~这是windbg得出的,求解决啊~谢谢~

你的电脑蓝屏前,你在电脑干什么呢,能说说吗?一般蓝屏代码或事件查看器里面的内容普通人是看不懂的,请将你在蓝屏前电脑的表现,和你操作说的详细些。下载什么软件、补丁,升级了什么硬件了吗?详细的说说蓝屏前你做了什么,可能就是这些操作引起的蓝屏的发生,有问题请追问我(我跟据你提供的信息重新回答你)。1、蓝屏前下载了什么软件、补丁、插件、驱动等全部卸载试试,如果是驱动不合适,请下载驱动精灵升级驱动。2、如果电脑有木马,请下载Win清理助手、金山卫士、360急救箱查杀木马。3、如果不经常出现蓝屏关机在开机就可以了,还是不行,请开机按F8不动到高级选项出现在松手,选“最近一次的正确配置”回车修复,在不行还原一下系统或重装系统。4、如果是硬件问题引起的,或超频了硬件将BIOS电池放电(恢复BIOS出厂默认值)建议插拔一下显卡、内存等硬件,清理一下电脑里的卫生,并且擦亮显卡、内存的金手指(在测试一下硬件的温度是否过高)。一般蓝屏是自己不正确操作引起的,记住容易引起蓝屏的操作不做。电脑不要满负荷操作,就是在玩游戏、看视频时、下载时、看网页的同时在干别的操作最容易死机、蓝屏,因此在玩游戏、看视频、下载时、看网页时不要在操作别的东西了(看看是不是这个问题引起的)。如果是开机蓝屏数数0-100检测硬盘请说一下。

这是用WinDbg打开的蓝屏文件,哪位电脑大神帮忙分析一下蓝屏原因

系统文件导致,先杀毒,清理磁盘

如何用windbg分析64位机上32位程序的dump文件

首先,我们使用windbg打开dump文件。这时候如果直接输入!analyze -v ,得到的堆栈结果肯定是看不到想看的结果的。其次,加载wow64exts模块,因为需要这个模块帮助把64位的dump,转换成32位的dump。输入 .load wow64exts再次,进行转换。输入!sw最后,按照分析32位dump文件的方法,分析这个dump。

电脑蓝屏求解决,用windbg分析了求指教

1)您的电脑蓝屏的时候,您在电脑干什么呢,能说说吗?我会跟据您说的较为准确的回答您。蓝屏代码或事件查看器里面的内容普通人是看不懂的,请将你在蓝屏前电脑的表现,和你操作说的详细些(我跟据你提供的信息重新回答你)。一般蓝屏是自己不正确操作引起的,记住容易引起蓝屏的操作不做。电脑不要满负荷操作,就是在玩游戏、看视频时、下载时、看网页的同时在干别的操作最容易死机、蓝屏,因此在玩游戏、看视频、下载时、看网页时不要在操作别的东西了。不管您在干什么,只要一有卡的迹象时就赶紧停止手头的操作退出在试,这样就不会蓝屏,如果还是这样就不要玩了或是不要看了。硬件方面:如果内存小请加内存条,硬盘是否有坏道,硬件是否不兼容或是故障,在用鲁大师测试一下CPU等硬件的温度是否高。2)如果您说的是开机蓝屏是与您关机前的不当操作有关系吧?比如:玩游戏、看视频、操作大的东西、使用电脑时间长造成的卡引起的吧?或下载了不合适的东西、或删除了系统文件、或断电关机等,故障不会无缘无故的发生吧?反复开关机试试,放一段时间试试,确实不可以就重装系统吧,如果自己重装不了,到维修那里找维修的人帮助您。只要注意自己的电脑不卡机、蓝屏、突然关机,开机就不会这样了。3)有问题请您追问我。如果一看代码或系统日志或蓝屏DMP文件分析工具就可以准确知道问题在哪里谁都可以成为专家了,但是既使到微软网站搜索出来的答案也是让人摸不到头脑,我的实践是,解决电脑问题靠技术与实践,没有捷径的道路可走。

调试逆向 windbg的本地符号怎么设置

  运行WinDbg->菜单->File->Symbol File Path  SRV*C:MyLocalSymbols*http://msdl.microsoft.com/download/symbols  (按照这样设置,WinDbg将先从本地文件夹C:MyCodesSymbols中查找Symbo...  我是这样写的  E:SPsymbolsSdll;SRV*D:Program Filessymbols*http://msdl.microsoft.com/download/symbols  E:SPsymbolsSdll里面有600多M的pdb了 但是他总是下载pdb到D:Program Filessymbols

用windbg检测蓝屏,检测出来显示这个,是什么原因呢?

上面的信息没有什么用。蓝屏简单判断法:一、如果蓝屏后重启,进安全模式也会蓝屏,或者蓝屏代码不固定,总是在变化,基本都是存在硬件故障造成的。1.内存条接触不良。拔出内存条,用橡皮擦仔细擦拭金手指,并对卡槽清理灰尘,再插上内存条。2.检查硬盘是否有坏道。用磁盘坏道检测工具对硬盘进行全面的检测和修复。3.检查散热情况。打开后盖或机箱,看看各个风扇是否正常?彻底清理主板和风扇的灰尘,风扇的轴承要上一点机油来润滑。安装“鲁大师”,对各个硬件进行密切地监控。4. .检查显卡。如果电脑的显卡是可以拔插的,用橡皮擦仔细擦拭金手指,再插上显卡。5. 检查电源,看看电源是否正常。二、其他不属于上面情况的蓝屏,大都是系统或软件原因造成的。需检查驱动是否正常?是否存在软件冲突或兼容性问题?电脑有无病毒木马?系统有无致命错误或系统文件丢失损坏?如果是系统的问题,进入“安全模式”,启用“系统还原”功能,还原系统到上一次正常开机的时间段。如果你的系统没有开启“系统还原”功能,则将你最近安装的驱动、程序、补丁全部缷载掉。如果还不行,则应该是系统有问题。建议重装原版(完全安装版)系统。

如何使用windbg在驱动加载时下断

首先说说应用层的调试吧.当我们在调试windows可执行程序的时候,通过将PE文件头中的ImageBase和AddressOfEntryPoint相加,从而得出第一条指令的地址.针对这个地址下断之后目标程序就中断在了了入口处.但是这个方法在驱动调试的时候却有心无力.这是因为可执行程序都是首先被加载到各自的私有地址空间,他们不会有地址冲突.然而驱动程序运行在内核里面,所有的驱动程序共享一个地址空间.所以需要重新设定基地址.1.利用bu命令下延迟断点.之前提到过,bu可以针对符号下断点.这里是用bu下延迟断点的意义在于即使目标驱动没有被加载,windbg也允许我们针对符号设置断点.当新加载驱动程序后,windbg就会检查驱动程序中是否包含了设置了延迟断点的函数.如果找到了,就把断点替换为地址形式,然后再设置断点.笔者的测试驱动程序为TestDriver.sys.[plain] view plaincopyprint?0: kd> .sympath Symbol search path is: E:Symbolwindbg Symbols;E:CodeVc_codeRing3Ring0Driverobjchk_wxp_x86i386 Expanded Symbol search path is: e:symbolwindbg symbols;e:codevc_code ing3ring0driverobjchk_wxp_x86i386 0: kd> .srcpath Source search path is: E:CodeVc_codeRing3Ring0Driver 在VMware客户机里,安装驱动后,敲下 net start TestDevice之后,系统理所应当的被断下来了.[plain] view plaincopyprint?Breakpoint 0 hit TestDriver!DriverEntry: f8c4ee10 8bff mov edi,edi 假如我们调试的驱动并不是以DriverEntry作为入口函数,bu针对符号下断也就没有了意义.但是我们可以使用模块加偏移的方式下断.假设TestDriver的入口函数的偏移为0xFB4.直接bu TestDriver+0xFB4即可.2.在系统调用DriverEntry之前下断.现在来看看我们的程序,中断在了DriverEntry之中.我们能不能在进入DriverEntry之前下断.首先我们dv和esp看一下当前的栈[plain] view plaincopyprint?1: kd> dv pDriverObject = 0x81f346e8 pRegistryPath = 0x81865000 "REGISTRYMACHINESYSTEMControlSet001ServicesTestDevice" status = 0n8 1: kd> r esp esp=f8af9c88 1: kd> dd f8af9c88 L8 f8af9c88 80582377 81f346e8 81865000 00000000 f8af9c98 b2926cf4 00000000 00000018 00000000 dv命令只显示了参数,还是用esp靠谱一点,至少给出了我们返回地址0x80582377.接下来该ln命令登场了[plain] view plaincopyprint?1: kd> ln 80582377 (80581d0a) nt!IopLoadDriver+0x66d | (80582442) nt!IopLoadUnloadDriver 返回地址位于nt!IopLoadDriver+0x66d处,直接反汇编一下吧,看看再哪里调用了DriverEntry[plain] view plaincopyprint?0: kd> bu TestDriver!DriverEntry 0: kd> bl 0 eu 0001 (0001) (TestDriver!DriverEntry) <pre name="code" class="plain">1: kd> u nt!IopLoadDriver+0x660 nt!IopLoadDriver+0x660: 8058236a 8b7d80 mov edi,dword ptr [ebp-80h] 8058236d ffb570ffffff push dword ptr [ebp-90h] 80582373 57 push edi 80582374 ff572c call dword ptr [edi+2Ch] 80582377 3bc3 cmp eax,ebx 80582379 8b8d68ffffff mov ecx,dword ptr [ebp-98h] 8058237f 8945ac mov dword ptr [ebp-54h],eax 80582382 8901 mov dword ptr [ecx],eax</pre><br> <pre></pre> <pre></pre> <pre></pre> <pre></pre> 0x80582377处是nt!IopLoadDriver+0x66d.前面的call指令占了3个字节.所以我们下断在nt!IopLoadDriver+0x66a就能在进入DriverEntry之前中断下来.3.使用事件异常先来看看系统中提供了哪些事件异常吧.直接sx下[plain] view plaincopyprint?1: kd> sx ct - Create thread - ignore et - Exit thread - ignore cpr - Create process - ignore epr - Exit process - ignore <strong>ld - Load module - output</strong> ud - Unload module - ignore ser - System error - ignore ibp - Initial breakpoint - break iml - Initial module load - ignore out - Debuggee output - output 这里我们要设置一下Load module事件为break, sxe -set enable sxd - set disable sxi -set ignore sxn -set output[plain] view plaincopyprint?1: kd> sxe ld 1: kd> sx ct - Create thread - ignore et - Exit thread - ignore cpr - Create process - ignore epr - Exit process - ignore ld - Load module - break ud - Unload module - ignore ser - System error - ignore ibp - Initial breakpoint - break iml - Initial module load - ignore out - Debuggee output - output 加载我们的驱动吧,在load module的时候系统中断然后我们找到模块基址,并在入口处下断即可.[plain] view plaincopyprint?1: kd> lm n start end module name [...] f8b9c000 f8b9d100 WMILIB WMILIB.SYS f8b9e000 f8b9f580 intelide intelide.sys f8ba0000 f8ba1700 dmload dmload.sys f8ba4000 f8ba5280 vmmouse vmmouse.sys f8bb0000 f8bb1100 swenum swenum.sys f8bb6000 f8bb7280 USBD USBD.SYS f8bba000 f8bbbf00 Fs_Rec Fs_Rec.SYS f8bbe000 f8bbf080 Beep Beep.SYS f8bc2000 f8bc3080 mnmdd mnmdd.SYS f8bc6000 f8bc7080 RDPCDD RDPCDD.sys f8bf8000 f8bf9a80 ParVdm ParVdm.SYS f8bfc000 f8bfde00 vmmemctl vmmemctl.sys <strong>f8c4e000 f8c4f300 TestDriver TestDriver.sys</strong> [...] 解析一下pe文件[plain] view plaincopyprint?1: kd> !dh -a f8c4e000 File Type: EXECUTABLE IMAGE FILE HEADER VALUES 14C machine (i386) 6 number of sections 5077C38E time date stamp Fri Oct 12 15:15:26 2012 0 file pointer to symbol table 0 number of symbols E0 size of optional header 102 characteristics Executable 32 bit word machine OPTIONAL HEADER VALUES 10B magic # 9.00 linker version C00 size of code 280 size of initialized data 0 size of uninitialized data <strong> FB4 address of entry point</strong> 480 base of code ----- new ----- [...] 然后bp TestDriver+0xFB4即可让系统中断在我们驱动程序的入口处.

windbg打不开 dmp文件?

dmp文件打开器(debugging tools for windows) 6.12.2.633微软官方版windows发生蓝屏时,如果系统属性有下图设置,windows会自动生成minidump文件,该文件记录蓝屏生成代码和导致蓝屏出现的进程,通过windebug的软件来分析这个minidump文件.我们就可以找到蓝屏出错的原因了。这个文件保存目录是C:windowsminidump文件夹,一般生成的名字为:Mini040108-01.dmp.系统重启时内存的dump,里边就是当时内存中的数据,要分析这个,得很要两把刷子,你不必费心去试了吧?!! 没有工具打得开DMP文件,必须用imp工具导入数据库或者windbg软件调试 微软在Windows中设计了一个功能,就是在蓝屏出现后,keBugCheck能够生成一个侦错文件一Memory.dmp(-般位于系统目录中,比如:C:WINNT), 它记录了发生篮屏时的详细情况,以便微软专家对错误进行分析。当然,一般用户即使打开它,也根本看不懂其中奥秘。微软建议在遇到蓝屏后,将Memory.dmp压缩并通过FTP、邮件或其他方式寄送给他们,但过程比较繁索,目前还没有人证明这样能尽快得到来自微软的解决方案。如果你对Memory.dmp的内容感兴趣,可运行windows2000安装光盘support ools文件夹中setup.exe来安装其支持工具,然后再C:Program FilesSupport Tools文件夹中找到DumPchk.exe,它是一个命令行工具,可以打开Momory.dmp并显示其中内容。 默认生成的Memory.dmp体积基本与你的系统内存相等,可以按下Win+Break组合键打开“系统属性”,进入“高级--启动和故障恢复”,在“写入调试信息”项选择是否生成Memory.dmp、“小内存转储”、“核心内存转储”或“完全内存转储”。建议选择“无”,因为Memory.dmp可能只对微软有用,并且我们一般也不会选择发给微软

windbg.exe安装后怎么用

方法/步骤1请自行百度搜索下载windbg软件建议去微软网站上下载运行windbg打开windbg程序按F6或者是 file——>Attach to a Proces然后就能看到本机所有的进程信息选择一个进程这里选择chrome浏览器的进程弹出提示框选择yes然后出现中断chrome浏览器不能使用在输入框里面输入G 然后按回车开始开始调试输出我们切换过去吧Chrome浏览器关闭掉然后windbg调试也退出接着我们只要保存数据即可

如何用WinDbg分析MEMORY.DMP文件

一、DMP文件获取设置(1)在运行窗口中输入 drwtsn32 -i ,并且点击确定WinDbg分析DMP文件方法完全攻略(2)在(1)确定后弹出如下对话框WinDbg分析DMP文件方法完全攻略(3)在(2)弹出的确定框后点击确定按钮完成,将Dr.Watson设置为默认应用程序调试程序。Dr.Watson系统自带的程序。(4)再次在运行窗口中输入:drwtsn32,如下图:WinDbg分析DMP文件方法完全攻略(5)点击确定按钮,在弹出的对话框中按照下列方式设置WinDbg分析DMP文件方法完全攻略(6) 点击确定按钮完成DMP文件设置。

如何使用windbg调试.exe

方法/步骤1请自行百度搜索下载windbg软件建议去微软网站上下载运行windbg打开windbg程序按F6或者是 file——>Attach to a Proces然后就能看到本机所有的进程信息选择一个进程这里选择chrome浏览器的进程弹出提示框选择yes然后出现中断chrome浏览器不能使用在输入框里面输入G 然后按回车开始开始调试输出我们切换过去吧Chrome浏览器关闭掉然后windbg调试也退出接着我们只要保存数据即可

如何使用WinDBG跟踪调试ASL/ACPI

在现代计算机中,硬件和固件(BIOS)都必须符合ACPI规范,以便操作系统可以控制所有模块的自动配置和电源管理。 使用WinDbg调试ACPI代码通常需要两台计算机,一台是目标机(Debuggee),另一台作为主机(Debugger)。下面就介绍一下怎么在两台机器上建立调试环境。1、配置调试Debuggee的连接方式Windbg支持COM、1394、USB2.0三种不同的连接方式,看到网上有些文章关于使用USB2.0来连接,需要购买特殊的USB调试线,而且价格不菲,本篇文章就不讨论了。笔记本电脑一般都没有COM端口,只好使用1394或是COM转USB,但在这里我只想讨论怎么使用COM端口来连接。启动到操作系统,使用bootcfg命令或直接使用文本编辑器修改boot.ini文件,指定调试使用的端口及参数。为了使用COM端口来调试,需要在启动参数中加入/debug参数,并指定/debugport和/baudrate子参数来作为启动项。下面这个boot.ini文件的第一个启动项就是配置使用COM端口。/debugport子参数指出使用Debuggee的哪个COM口,/baudrate指出连接的速度(默认是每秒19200位)。[boot loader]timeout=30default=multi(0)disk(0)rdisk(0)partition(1)/WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Debugging with Cable" /fastdetect /debug /debugport=COM1 /baudrate=57600multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Microsoft Windows XP Professional" /fastdetect下面的例子使用bootcfg命令设置第一个启动项使用COM1端口、波特率为115200。bootcfg的/debug开关打开,/port开关及/baud参数指出端口和速度,/ID开关指出修改的是第一个启动项。bootcfg /debug ON /port COM1 /baud 115200 /ID 1

如何用windbg分析memory.dmp文件

在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试。在开发人员测试出现的bug,我们可以直接在本地进行调试。如果测试人员测试出崩溃级别的bug,如果我们需要调试往往借助于vs提供的Remote Debugger工具进行远程调试(关于vs2010远程调试的方法,请参考http://blog.sina.com.cn/s/blog_a459dcf5010153o7.html),然是当程序在用户手中出现崩溃此时我们可以采用Remote Debugger进行调试,但是如果此时开发人员无法直接去用户现场调试,此时就需要用户生成DMP文件,以便开发人员使用DMP文件进行分析。本文主要介绍C++开发过程中出现程序崩溃后,如何进行分析定位bug(基于xp系统)。一、DMP文件获取设置(1)在运行窗口中输入 drwtsn32 -i ,并且点击确定WinDbg分析DMP文件方法完全攻略(2)在(1)确定后弹出如下对话框WinDbg分析DMP文件方法完全攻略(3)在(2)弹出的确定框后点击确定按钮完成,将Dr.Watson设置为默认应用程序调试程序。Dr.Watson系统自带的程序。(4)再次在运行窗口中输入:drwtsn32,如下图:WinDbg分析DMP文件方法完全攻略(5)点击确定按钮,在弹出的对话框中按照下列方式设置WinDbg分析DMP文件方法完全攻略(6) 点击确定按钮完成DMP文件设置。二、关闭Dr.Watson方法(1)打开注册表(2)在注册表中进入主键[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAeDebug],然后将“AUTO”键值设置为0如下图:WinDbg分析DMP文件方法完全攻略三、Windbg下载地址http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx,下载完成后安装四、DMP文件获取(1) 用vs2010创建一个基于win32的程序,其源码如下:WinDbg分析DMP文件方法完全攻略(2)我们知道在学习C++中整数不能跟0进行除运算,否则会引起程序崩溃。而(1)中就是编写能触发0的异常,导致程序结束运行的程序。编译(1)中的程序,结果如下:WinDbg分析DMP文件方法完全攻略(3)运行(2)中test.exe程序 ,程序崩溃。如下图:WinDbg分析DMP文件方法完全攻略(4) 按照《一、DMP文件获取设置》步骤实现Dr.Watson设置为默认应用程序调试程序。(5)再次运行运行(2)中test.exe程序 如下图:WinDbg分析DMP文件方法完全攻略点击确定完成dmp文件的生成。(6)打开在(4)中设置dmp文件路径。(本例中默认地址为:C:Documents and SettingsAll UsersApplication DataMicrosoftDr Watson)如下图:WinDbg分析DMP文件方法完全攻略其中user.dmp就是我们需要的dmp文件。五、分析《四、DMP文件获取》中获取的DMP文件

如何使用WinDbg调试进程信息

1. 必须命令行设置要析进程打用户堆栈信息:C:Program FilesDebugging Tools for Windows (x64)>gflags.exe -iYourDebugProcess.exe +ust2. 必须Debug版本进程3. 设置windbgpdb路径即symbol path4. 利用windbgAttachToProcess (貌似面案行:目标机器产转储文件(dump)用windbg析)5. 利用!heap命令示例:0:032> !heap -sNtGlobalFlag enables following debugging aids for new heaps:stack back tracesLFH Key : 0x00000052389f3a7eTermination on corruption : ENABLEDHeap Flags Reserv Commit Virt Free List UCR Virt Lock Fast(k) (k) (k) (k) length blocks cont. heap

Windows内核调试器的WinDBG

WinDBG和用户调试器一点很大不同是内核调试器在一台机器上启动,通过串口调试另一个相联系的以Debug方式启动的系统,这个系统可以是虚拟机上的系统,也可以是另一台机器上的系统(这只是微软推荐和实现的方法,其实象SoftICE这类内核调试器可以实现单机调试)。很多人认为主要功能都是在WinDBG里实现,事实上并不是那么一回事,windows已经把内核调试的机制集成进了内核,WinDBG、kd之类的内核调试器要做的仅仅是通过串行发送特定格式数据包来进行联系,比如中断系统、中断点、显示内存数据等等。然后把收到的数据包经过WinDBG处理显示出来。在进一步介绍WinDBG之前,先介绍两个函数:KdpTrace、KdpStub,我在《windows异常处理流程》一文里简单提过这两个函数。现在再提一下,当异常发生于内核态下,会调用KiDebugRoutine两次,异常发生于用户态下,会调用KiDebugRoutine一次,而且第一次调用都是刚开始处理异常的时候。当WinDBG未被加载时KiDebugRoutine为KdpStub,处理也很简单,主要是对由int 0x2d引起的异常如DbgPrint、DbgPrompt、加载卸载SYMBOLS(关于int 0x2d引起的异常将在后面详细介绍)等,把Context.Eip加1,跳过int 0x2d后面跟着的int 0x3指令。真正实现了WinDBG功能的函数是KdpTrap,它负责处理所有STATUS_BREAKPOINT和STATUS_SINGLE_STEP(单步)异常。STATUS_BREAKPOINT的异常包括int 0x3、DbgPrint、DbgPrompt、加载卸载SYMBOLS。DbgPrint的处理最简单,KdpTrap直接向调试器发含有字符串的包。DbgPrompt因为是要输出并接收字符串,所以先将含有字符串的包发送出去,再陷入循环等待接收来自调试器的含有回复字符串的包。SYMBOLS的加载和卸载通过调用KdpReportSymbolsStateChange,int 0x3断点异常和int 0x1单步异常(这两个异常基本上是内核调试器处理得最多的异常)通过调用KdpReportExceptionStateChange,这两个函数很相似,都是通过调用KdpSendWaitContinue函数。KdpSendWaitContinue可以说是内核调试器功能的大管家,负责各个功能的分派。这个函数向内核调试器发送要发送的信息,比如当前所有寄存器状态,每次单步后我们都可以发现寄存器的信息被更新,就是内核调试器接受它发出的包含最新机器状态的包;还有SYMBOLS的状态,这样加载和卸载了SYMBOLS我们都能在内核调试器里看到相应的反应。然后KdpSendWaitContinue等待从内核调试器发来的包含命令的包,决定下一步该干什么。让我们来看看KdpSendWaitContinue都能干些什么:case DbgKdReadVirtualMemoryApi:KdpReadVirtualMemory(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdReadVirtualMemory64Api:KdpReadVirtualMemory64(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteVirtualMemoryApi:KdpWriteVirtualMemory(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteVirtualMemory64Api:KdpWriteVirtualMemory64(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdReadPhysicalMemoryApi:KdpReadPhysicalMemory(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWritePhysicalMemoryApi:KdpWritePhysicalMemory(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdGetContextApi:KdpGetContext(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdSetContextApi:KdpSetContext(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteBreakPointApi:KdpWriteBreakpoint(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdRestoreBreakPointApi:KdpRestoreBreakpoin(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdReadControlSpaceApi:KdpReadControlSpace(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteControlSpaceApi:KdpWriteControlSpace(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdReadIoSpaceApi:KdpReadIoSpace(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteIoSpaceApi:KdpWriteIoSpace(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdContinueApi:if (NT_SUCCESS(ManipulateState.u.Continue.ContinueStatus) != FALSE) {return ContinueSuccess;} else {return ContinueError;}break;case DbgKdContinueApi2:if (NT_SUCCESS(ManipulateState.u.Continue2.ContinueStatus) != FALSE) {KdpGetStateChange(&ManipulateState,ContextRecord);return ContinueSuccess;} else {return ContinueError;}break;case DbgKdRebootApi:KdpReboot();break;case DbgKdReadMachineSpecificRegister:KdpReadMachineSpecificRegister(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteMachineSpecificRegister:KdpWriteMachineSpecificRegister(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdSetSpecialCallApi:KdSetSpecialCall(&ManipulateState,ContextRecord);break;case DbgKdClearSpecialCallsApi:KdClearSpecialCalls();break;case DbgKdSetInternalBreakPointApi:KdSetInternalBreakpoint(&ManipulateState);break;case DbgKdGetInternalBreakPointApi:KdGetInternalBreakpoint(&ManipulateState);break;case DbgKdGetVersionApi:KdpGetVersion(&ManipulateState);break;case DbgKdCauseBugCheckApi:KdpCauseBugCheck(&ManipulateState);break;case DbgKdPageInApi:KdpNotSupported(&ManipulateState);break;case DbgKdWriteBreakPointExApi:Status = KdpWriteBreakPointEx(&ManipulateState,&MessageData,ContextRecord);if (Status) {ManipulateState.ApiNumber = DbgKdContinueApi;ManipulateState.u.Continue.ContinueStatus = Status;return ContinueError;}break;case DbgKdRestoreBreakPointExApi:KdpRestoreBreakPointEx(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdSwitchProcessor:KdPortRestore ();ContinueStatus = KeSwitchFrozenProcessor(ManipulateState.Processor);KdPortSave ();return ContinueStatus;case DbgKdSearchMemoryApi:KdpSearchMemory(&ManipulateState,&MessageData,ContextRecord);break;读写内存、搜索内存、设置/恢复断点、继续执行、重启等等,WinDBG里的功能是不是都能实现了?呵呵。每次内核调试器接管系统是通过调用在KiDispatchException里调用KiDebugRoutine(KdpTrace),但我们知道要让系统执行到KiDispatchException必须是系统发生了异常。而内核调试器与被调试系统之间只是通过串口联系,串口只会发生中断,并不会让系统引发异常。那么是怎么让系统产生一个异常呢?答案就在KeUpdateSystemTime里,每当发生时钟中断后在HalpClockInterrupt做了一些底层处理后就会跳转到这个函数来更新系统时间(因为是跳转而不是调用,所以在WinDBG断下来后回溯堆栈是不会发现HalpClockInterrupt的地址的),是系统中调用最频繁的几个函数之一。在KeUpdateSystemTime里会判断KdDebuggerEnable是否为TRUE,若为TRUE则调用KdPollBreakIn判断是否有来自内核调试器的包含中断信息的包,若有则调用DbgBreakPointWithStatus,执行一个int 0x3指令,在异常处理流程进入了KdpTrace后将根据处理不同向内核调试器发包并无限循环等待内核调试的回应。现在能理解为什么在WinDBG里中断系统后堆栈回溯可以依次发现KeUpdateSystemTime->RtlpBreakWithStatusInstruction,系统停在了int 0x3指令上(其实int 0x3已经执行过了,只不过Eip被减了1而已),实际已经进入KiDispatchException->KdpTrap,将控制权交给了内核调试器。系统与调试器交互的方法除了int 0x3外,还有DbgPrint、DbgPrompt、加载和卸载symbols,它们共同通过调用DebugService获得服务。NTSTATUS DebugService(ULONG ServiceClass,PVOID Arg1,PVOID Arg2){NTSTATUS Status;__asm {mov eax,ServiceClassmov ecx,Arg1mov edx,Arg2int 0x2dint 0x3mov Status,eax}return Status;}ServiceClass可以是BEAKPOINT_PRINT(0x1)、BREAKPOINT_PROMPT(0x2)、BREAKPOINT_LOAD_SYMBOLS(0x3)、BREAKPOINT_UNLOAD_SYMBOLS(0x4)。为什么后面要跟个int 0x3,M$的说法是为了和int 0x3共享代码(我没弄明白啥意思-_-),因为int 0x2d的陷阱处理程序是做些处理后跳到int 0x3的陷阱处理程序中继续处理。但事实上对这个int 0x3指令并没有任何处理,仅仅是把Eip加1跳过它。所以这个int 0x3可以换成任何字节。int 0x2d和int 0x3生成的异常记录结(EXCEPTION_RECORD)ExceptionRecord.ExceptionCode都是STATUS_BREAKPOINT(0x80000003),不同是int 0x2d产生的异常的ExceptionRecord.NumberParameters>0且ExceptionRecord.ExceptionInformation对应相应的ServiceClass比如BREAKPOINT_PRINT等。事实上,在内核调试器被挂接后,处理DbgPrint等发送字符给内核调试器不再是通过int 0x2d陷阱服务,而是直接发包。用M$的话说,这样更安全,因为不用调用KdEnterDebugger和KdExitDebugger。最后说一下被调试系统和内核调试器之间的通信。被调试系统和内核调试器之间通过串口发数据包进行通信,Com1的IO端口地址为0x3f8,Com2的IO端口地址为0x2f8。在被调试系统准备要向内核调试器发包之前先会调用KdEnterDebugger暂停其它处理器的运行并获取Com端口自旋锁(当然,这都是对多处理器而言的),并设置端口标志为保存状态。发包结束后调用KdExitDebugger恢复。每个包就象网络上的数据包一样,包含包头和具体内容。包头的格式如下:typedef struct _KD_PACKET {ULONG PacketLeader;USHORT PacketType;USHORT ByteCount;ULONG PacketId;ULONG Checksum;} KD_PACKET,*PKD_PACKET;PacketLeader是四个相同字节的标识符标识发来的包,一般的包是0x30303030,控制包是0x69696969,中断被调试系统的包是0x62626262。每次读一个字节,连续读4次来识别出包。中断系统的包很特殊,包里数据只有0x62626262。包标识符后是包的大小、类型、包ID、检测码等,包头后面就是跟具体的数据。这点和网络上传输的包很相似。还有一些相似的地方比如每发一个包给调试器都会收到一个ACK答复包,以确定调试器是否收到。若收到的是一个RESEND包或者很长时间没收到回应,则会再发一次。对于向调试器发送输出字符串、报告SYMBOL情况等的包都是一接收到ACK包就立刻返回,系统恢复执行,系统的表现就是会卡那么短短一下。只有报告状态的包才会等待内核调试器的每个控制包并完成对应功能,直到发来的包包含继续执行的命令为止。无论发包还是收包,都会在包的末尾加一个0xaa,表示结束。现在我们用几个例子来看看调试流程。记得我以前问过jiurl为什么WinDBG的单步那么慢(相对softICE),他居然说没觉得慢?*$&$^$^(&(&;(我ft。现在可以理解为什么WinDBG的单步和从操作系统正常执行中断下来为什么那么慢了。单步慢是因为每单步一次除了必要的处理外,还得从串行收发包,怎么能不慢。中断系统慢是因为只有等到时钟中断发生执行到KeUpdateSystemTime后被调试系统才会接受来自WinDBG的中断包。现在我们研究一下为什么在KiDispatchException里不能下断点却可以用单步跟踪KiDispatchException的原因。如果在KiDispatchException中某处下了断点,执行到断点时系统发生异常又重新回到KiDispatchException处,再执行到int 0x3,如此往复造成了死循环,无法不能恢复原来被断点int 0x3所修改的代码。但对于int 0x1,因为它的引起是因为EFLAG寄存中TF位被置位,并且每次都自动被复位,所以系统可以被继续执行而不会死循环。现在我们知道了内部机制,我们就可以调用KdXXX函数实现一个类似WinDBG之类的内核调试器,甚至可以替换KiDebugRoutine(KdpTrap)为自己的函数来自己实现一个功能更强大的调试器,呵呵。

如何使用WinDbg调试进程信息

使用WinDbg调试进程信息的步骤:1、百度搜索下载windbg软件(建议去微软网站上下载),运行windbg2、打开windbg程序3、按F6或者是 file——>Attach to a Proces4、然后就能看到本机所有的进程信息5、选择一个进程,这里选择chrome浏览器的进程6、弹出提示框选择yes7、然后出现中断,chrome浏览器不能使用,在输入框里面输入G 然后按回车开始8、开始调试输出9、切换过去吧Chrome浏览器关闭掉,然后windbg调试也退出,接着只要保存数据即可。

如何使用Windbg分析崩溃dump

需要为Windbg软件设置符号表路径,作为蓝屏原因分析数据库,否则软件将没有作用。单击File--选择Symbol File Path,在弹出的对话框Symbol Path文本框中输入SRV*C:Symbols*http://msdl.microsoft.com/download/symbols,单击OK。设置完毕后单击File--选择Open Crash Dump来打开蓝屏文件,在弹出的对话框中点选到C:WindowsMinidump文件夹,单击我们要分析的蓝屏文件,单击打开。在弹出的对话框Save Information for workspace?(是否保存信息到工作区)中单击Yes。(如果下次不想再被提示,可以勾选Don"t ask again in the WinDbg session)。接下来就是对文件进行分析,这需要一定的经验和知识。这里我们着重可以看一下System Uptime(开机时间)和Probably Caused By(可能引起故障的原因是)。需要进一步分析,可以单击!analyze -v,此时我们可以从中提取到蓝屏错误代码和引起蓝屏的程序名称,再通过网络搜索这些程序名和代码等方式弄清原因。

Windbg如何设置应用程序的断点

,设置为 cache*d:symbols;srv*http://msdl.microsoft.com/download/symbols 可以将路径更改为自己本地的缓存路径。如果有一把好梯子的话,设置为全局代理模式,在调试的时候,会将.NET的框架PDB文件下载到该缓存目录里,我们在调试的时候就能看到更详细的信息。 当然,也可以通过命令行来主动获取微软官方调试符号。symchk /r C:WindowsSystem32*.dll /s SRV*D:symbols*http://msdl.microsoft.com/download/symbolssymchk C:WINDOWSSystem32KERNELBASE.dll /s SRV*D:symbols*http://msdl.microsoft.com/download/symbols2、加载正确版本CLR以及SOS(Son of Strike)。Windbg用户模式下,调试.Net 应用程序,我们需要正确的加载CLR以及SOS(Son of Strike)。需要注意的是,加载的CLR以及SOS版本一定要正确。如果应用程序在X86平台下编译,则需要加载C:WindowsMicrosoft.NETFrameworkv4.0.30319 目录下的SOS以及CLR,64位下编译的话,需要加载C:WindowsMicrosoft.NETFramework64v4.0.30319目录下的SOS以及CLR。2.0的程序需要加载MSCORWKS。3、例子以一个简单的Demo为例,来看一下如何在Windbg中设置断点。(在4.0FrameWork、X86平台下编译)。这个程序,根据体重身高来计算BMI指数,假定BMI指数为21的为最健康的,对给定的人员列表按照偏差大小的绝对值进行排序。让我们姑且认为偏差越小身体越健康吧。 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace WindbugDemo 7 { 8 public class Person 9 {10 //认为BMI和21偏差最小的为最健康的11 private const double BmiHelthConst = 21f;12 13 public string Name { get; set; }14 public int Age { get; set; }15 public double Height { get; set; }16 public double Weight { get; set; }17 public double BmiVariance { get { return GetBmiVariance(); } }18 //18岁至65岁可以Weight/(Height*Height)计算,否则抛出异常19 public double GetBmiVariance()20 {21 if (Age > 65 || Age < 18)22 throw new Exception("18岁以下65岁以上人群不适用此计算方法");23 double bmi = Math.Round(Weight / Math.Pow(Height, 2),2);24 double variance = Math.Abs(bmi - BmiHelthConst);25 return variance;26 }27 }28 29 public class HelthCompare : IComparer<Person>30 {31 public int Compare(Person x, Person y)32 {33 34 double diffx = x.BmiVariance;35 double diffy = y.BmiVariance;36 if (diffx == diffy)37 return 0;38 if (diffx > diffy)39 return 1;40 return -1;41 }42 }43 44 class Health45 {46 [STAThread]47 static void Main(string[] args)48 {49 Person person1 = new Person { Name = "James", Age = 35, Height = 1.70, Weight = 70 };50 Person person2 = new Person { Name = "Tony", Age = 25, Height = 1.65, Weight = 60 };51 Person person3 = new Person { Name = "John", Age = 30, Height = 1.75, Weight = 90 };52 Person[] array = new Person[] { person1, person2, person3 };53 List<Person> list = new List<Person>();54 list.AddRange(array);55 HelthCompare comparer = new HelthCompare();56 list.Sort(comparer);57 foreach(var item in list)58 {59 string text = string.Format("Name:{0} Age:{1} Height:{2} Weight:{3} BMI Variance:{4}",60 item.Name,item.Age, item.Height, item.Weight, item.BmiVariance);61 System.Console.WriteLine(text);62 }63 Console.ReadKey();64 /*65 Name:Tony Age:25 Height:1.65 Weight:60 BMI Variance:1.0466 Name:James Age:35 Height:1.7 Weight:70 BMI Variance:3.2267 Name:John Age:30 Height:1.75 Weight:90 BMI Variance:8.3968 */69 }70 }71 72 }3.1 打开Windbg,在File==》Open Executable...打开编译后的程序。指定PDB路径以及源码路径。0:000> .sympath+ d:sourceSymbol search path is: cache*d:symbols;srv*http://msdl.microsoft.com/download/symbols;d:sourceExpanded Symbol search path is: cache*d:symbols;srv*http://msdl.microsoft.com/download/symbols;d:sourceSource search path is: d:source0:000> .reloadReloading current modules.....3.2 可以使用 sxe ld:clrjit 命令,这个命令发生在clrjit加载的时候,在进入Main方法之前,这对于我们设置自己程序的断点很方便。然后输入g命令,当加载clrjit的时候,就可以命中断点了。0:000> sxe ld:clrjit0:000> g(cc8.cd0): Unknown exception - code 04242420 (first chance)ModLoad: 6d110000 6d18d000 C:WindowsMicrosoft.NETFrameworkv4.0.30319clrjit.dlleax=00000000 ebx=00000000 ecx=001437a4 edx=00000001 esi=7ffdf000 edi=0027e340eip=76df70b4 esp=0027e258 ebp=0027e2ac iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246ntdll!KiFastSystemCallRet:76df70b4 c3 ret0:000> .load C:WindowsMicrosoft.NETFrameworkv4.0.30319sos.dll0:000> .load C:WindowsMicrosoft.NETFrameworkv4.0.30319clr.dll0:000> .loadby sos clr (等同于上面两条命令)3.3 加载完SOS后,就可以用扩展命令来设置断点了。0:000> !name2ee Health!WindbugDemo.HealthModule: 00142edcAssembly: Health.exeToken: 02000004MethodTable: 001437b8EEClass: 00141304Name: WindbugDemo.Health0:000> !dumpmt -md 001437b8EEClass: 00141304Module: 00142edcName: WindbugDemo.HealthmdToken: 02000004File: D:inHealth.exeBaseSize: 0xcComponentSize: 0x0Slots in VTable: 6Number of IFaces in IFaceMap: 0--------------------------------------MethodDesc Table Entry MethodDe JIT Name6647952c 6619612c PreJIT System.Object.ToString()6648ec30 66196134 PreJIT System.Object.Equals(System.Object)6648e860 66196154 PreJIT System.Object.GetHashCode()6648e2a0 66196168 PreJIT System.Object.Finalize()0014c015 001437b0 NONE WindbugDemo.Health..ctor()0014c011 001437a4 NONE WindbugDemo.Health.Main(System.String[])0:000> !dumpmt -md 001437b8EEClass: 00141304Module: 00142edcName: WindbugDemo.HealthmdToken: 02000004File: D:inHealth.exeBaseSize: 0xcComponentSize: 0x0Slots in VTable: 6Number of IFaces in IFaceMap: 0--------------------------------------MethodDesc Table Entry MethodDe JIT Name6647952c 6619612c PreJIT System.Object.ToString()6648ec30 66196134 PreJIT System.Object.Equals(System.Object)6648e860 66196154 PreJIT System.Object.GetHashCode()6648e2a0 66196168 PreJIT System.Object.Finalize()0014c015 001437b0 NONE WindbugDemo.Health..ctor()0014c011 001437a4 NONE WindbugDemo.Health.Main(System.String[])0:000> !bpmd -md 001437a4 MethodDesc = 001437a4Adding pending breakpoints...在上面的Windbg调试窗口里,JIT为NONE的就表示还没有进行JIT编译。这种情况下,我们不能使用bp命令来设置断点的。我们可以使用bpmd命令加md参数来设置断点。输入g命令程序继续执行。0:000> !u 001437a4 Normal JIT generated codeWindbugDemo.Health.Main(System.String[])Begin 011f0050, size 5ccd:source2HealthHealth.cs @ 48:011f0050 55 push ebp011f0051 8bec mov ebp,esp... ...d:source2HealthHealth.cs @ 56:011f0377 8b8d68ffffff mov ecx,dword ptr [ebp-98h]011f037d 8b9564ffffff mov edx,dword ptr [ebp-9Ch]011f0383 3909 cmp dword ptr [ecx],ecx011f0385 e822022b65 call mscorlib_ni+0x3105ac (664a05ac) (System.Collections.Generic.List`1[[System.__Canon, mscorlib]].Sort(System.Collections.Generic.IComparer`1<System.__Canon>), mdToken: 06002283)011f038a 90 nop... ...0:000> bp 011f0377 0:000> g3.4 对于已经JIT编译的方法,我们可以采用u命令,查看反汇编,然后就可以在对应的行号用非托管应用程序的bp命令来设置断点了。以上两种方法可以在Windbg下设置断点。查找方法表还可以根据domain信息查找Module信息0:000> !dumpdomain--------------------------------------System Domain: 67840f60LowFrequencyHeap: 67841284HighFrequencyHeap: 678412ccStubHeap: 67841314Stage: OPENName: None--------------------------------------Shared Domain: 67840c08LowFrequencyHeap: 67841284HighFrequencyHeap: 678412ccStubHeap: 67841314Stage: OPENName: NoneAssembly: 003b24f0 [C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll]ClassLoader: 003b25b8 Module Name66191000 C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll--------------------------------------Domain 1: 00364d50LowFrequencyHeap: 003651a4HighFrequencyHeap: 003651ecStubHeap: 00365234Stage: OPENSecurityDescriptor: 00366920Name: Health.exeAssembly: 003b24f0 [C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll]ClassLoader: 003b25b8SecurityDescriptor: 003af690 Module Name66191000 C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dllAssembly: 003bfbd8 [D:inHealth.exe]ClassLoader: 003bfca0SecurityDescriptor: 003bf880 Module Name00142edc D:inHealth.exe0:000> !dumpmodule -mt 00142edc Name: D:inHealth.exeAttributes: PEFile Assembly: 003bfbd8LoaderHeap: 00000000TypeDefToMethodTableMap: 00140038TypeRefToMethodTableMap: 0014004cMethodDefToDescMap: 0014009cFieldDefToDescMap: 001400dcMemberRefToDescMap: 00000000FileReferencesMap: 001400f8AssemblyReferencesMap: 001400fcMetaData start address: 0123237c (2360 bytes)Types defined in this module MT TypeDef Name------------------------------------------------------------------------------001437b8 0x02000004 WindbugDemo.HealthTypes referenced in this module MT TypeRef Name------------------------------------------------------------------------------665941b8 0x02000001 System.Object0:000> !dumpmt -md 001437b8EEClass: 00141304Module: 00142edcName: WindbugDemo.HealthmdToken: 02000004File: D:inHealth.exeBaseSize: 0xcComponentSize: 0x0Slots in VTable: 6Number of IFaces in IFaceMap: 0--------------------------------------MethodDesc Table Entry MethodDe JIT Name6647952c 6619612c PreJIT System.Object.ToString()6648ec30 66196134 PreJIT System.Object.Equals(System.Object)6648e860 66196154 PreJIT System.Object.GetHashCode()6648e2a0 66196168 PreJIT System.Object.Finalize()0014c015 001437b0 NONE WindbugDemo.Health..ctor()0014c011 001437a4 NONE WindbugDemo.Health.Main(System.String[])3.5 也可以通过JIT编译的代码地址来设置断点。0:000> !name2ee Health!Win

windbg使用方法

  windbg使用方法是:   1、如果还没有安装过Windbg,首先要下载安装它。打开百度首页,搜索Windbg,点击高速下载,然后安装。   2、安装成功后,可以点击开始菜单,程序中找到并启动Windbg。   3、启动后主界面。   4、可以选择文件(File)菜单附加到一个进程。   5、在打开的列表中选择要调试的进程。   6、有的进程可能权限比较高,无法调试。   7、使用管理员身份运行Windbg。   8、再选择进程,附加进程。

oracle.jdbc.Oracletypes是哪个jar包?

Oracle 官方提供的 JDBC 驱动中包含了 oracle.jdbc.OracleTypes 类,该类提供了访问 Oracle 数据库的数据类型及相关的操作方法。一般来说,这个类可以在如下的 jar 包中找到:ojdbc6.jar (适用于 JDK 6 或更早版本)ojdbc7.jar(适用于 JDK 7 或更早版本)ojdbc8.jar(适用于 JDK 8 或更早版本)ojdbc10.jar(适用于 JDK 10 或更早版本)您可以根据 JDK 版本选择适当的 jar 包进行引用,并将其添加到您的项目的类路径中,即可使用 oracle.jdbc.OracleTypes 类。建议您使用最新版本的 Oracle JDBC 驱动程序,以确保与 Oracle 数据库的兼容性和性能优化。

win7中运行regedit依次找到ForwardBroadcasts,其中它的数值默认是多少,调成0会怎样

原始值为00000000

哪位高手能告诉我这些单位:Psi,sccm,dB是什么含义?

psi是一种压力单位,定义为英镑/平方英寸,145psi=1Mpa质量流量单位sccm, standard-state cubic centimeter per minute, 标况毫升每分分贝是声压级单位,记为db,用于表示声音的大小。 人耳所能听到的最微弱的声音大约是1分贝,稳定的呼吸声和树叶摆动声大约是10分贝,瀑瀑的溪流声大约是20分贝,轻声的交谈声大约是20-30分贝,柔和的轻音乐大约是40分贝,中等说话声大约是45分贝,收音机和电视机播放的中级音量大约是50-60分贝,高声喧哗和办公室里的杂声大约是60分贝,城市大街的嘈杂声大约是70分贝,孩子们的叫闹声大约是60 fo 80分贝,繁华小街的喧嚣声大约是90分贝,载重汽车的响声大约是90~100分贝,摩托车的吼叫声大约是105分贝,雷声大约是110分贝,扩音器扩大了声音大约是120分贝,喷气发动机发出的轰响声大约是150分贝,近距离内宇宙航行火箭发射的巨响大约是140~170分贝。

单位:Psi,sccm,dB是什么意思?

psi是一种压力单位,定义为英镑/平方英寸,145psi=1Mpa sccm是质量流量单位,标况毫升每分。

MODBUS通信协议是什么标准协议?

ModBus协议是应用层报文传输协议。1、Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。2、此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。3、当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

请问一下modbus主要适用与哪些控制场合?modbus ASCII,modbus RTU和modbus TCP都有什么区别?

modbus是专为工业开发的协议,所以主要用于工业场合,当然也可以用于基础设施,如:住宅、商业中心、机场、水处理、电厂等。modbus RTU协议紧凑,可以使用RS232/RS485、无线、等介质,用于速度要求不高的场合,如:楼宇、工业现场、管道输送、远程泵站等;modbusASCII协议比较宽松,时序要求不高,可以用于条形码阅读器、打印机、仪器仪表读取等;modbusTCP速度很高,可以用于实时控制、时钟对时、全局数据、发送邮件、故障设备替换、网络管理、用户网页制定和浏览、固件更新等多种服务。

什么是Modbus网关?Modbus有什么优势

Modbus网关相当于一个网络集线器通信协议转换设备,下接传感器、仪表等数据设备,将下位设备的数据采集到网关,通过Modbus Tcp协议规约将数据传输到云平台。 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。1、标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,佰马科技全系列产品均支持Modbus协议。2、Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。3、Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。佰马科技全系类产品均支持Modbus协议,BMG800边缘计算网关,兼容多种协议,如MQTT、OPC、MODBUS(MODBUS TCP、MODBUS RTU)、TCP、UDP等主流通信协议,提供模拟量/数字量等数据采集、视频/图像/语音采集、本地存储、安全通信管理、全网通/5G/4G/GPS/WiFi等无线通信、公有云&私有云对接、对设备实现本地与远程联动控制等功能。

MODBUS 的小问题

问题1:在实际使用中要将不同参数(包括数据位 停止位 起始位 波特率)的设备连接在不同的通讯总线中。问题2:通常485总线都是手拉手连接,不要接成星形的,因为每个结点的电位差不同,会影响通讯质量,另外问题1中已提到将不同参数的设备接到一个485通讯总线,虽然可以通讯,也会影响通讯质量。

MODBUS协议有哪几种

Modbus有下列三种通信方式以太网,对应的通信模式是MODBUS TCP。异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等),对应的通信模式是MODBUS RTU或MODBUS ASCII。高速令牌传递网络,对应的通信模式是Modbus PLUS。ModBus协议是应用层报文传输协议(OSI模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域。ModBus协议能够应用在不同类型的总线或网络。对应不同的总线或网络,Modbus协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU。

profibus和modbus的区别

* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示! profibus是现场总线的通讯协议,西门子家的,用于分布式i/o,也就是设备之间的通讯,最后组态到工控机中。而modbus只是电子器件中的一种通讯协议,典型的就是plc与变频器通讯,它的范围比profibus小很多。详见:https://wenku.b***.com/view/9e5023ec19e8b8f67c1cb9db.html

modbus TCP故障代码的返回格式是什么,是TCP,不是RTU

格式还是modbusTCP是物理连接方式,就是以太网

modbus如何使用以及在什么场合下使用?

modbus是一种通讯方式,多用在工业设备上,如一个工业控制系统中,电脑为主站,PLC、变频器等设备为从站。

Modbus地址为什么会偏移

Modbus地址会偏移是为了给数据的传输提供准确的地址参数。通常Modbus地址由5位数字组成,包括起始的数据类型代号,以及后面的偏移地址,ModbusMaster协议库把标准的Modbus地址映射为所谓Modbus功能号读写从站的数据。Modbus地址偏移特点Modbus数据帧都是16进制的,而组态王中的寄存器地址是10进制的,因此需要对数据帧中的地址位做一个从16进制到10进制的转换,比如地址1004对应的就4100,前面再加上功能码对应的寄存器,从而构成变量的寄存器地址。其中03E8是数据转换成10进制后为1000,即读得该设备的心跳时间为1000,0004对应的10进制就是4在组态王中还需要做一个地址偏移,即寄存器地址需要加1就是0005,前面再加上功能码对应的寄存器4即40005,因此在组态王中的寄存器地址就是40005。

modbus和485的区别

modbus和485的区别是RS485是接线口,modbus是协议。他是建立在RS485是接线口的基础上进行通讯的。所以modbus离不开485,485也离不开MODBUS,前半部分说的基本正确,RS485是接线口与485也离不开MODBUS回答错误。RS485不不完全是接线口,它是一种电气标准,包含机械特性,电气特性等特点,可以找一些通信书籍看看,描述有很多特点。Modbus具有以下几个特点:1、标准、开放:用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。2、Modbus可以支持多种电气接口:如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。3、Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

modbus缺点

modbus是一种通用工业数据通讯协议,应用面很广。如果非要说说MODBUS的缺点,那就是大数据量通讯效率很低。每次MODBUS读写,最多读写127个寄存器,如果上万寄存器全部读写一遍,需要将近一百次读写才能完成,按照TCP百兆以太连接计算,每次读写耗时0.2秒,需要20秒左右才能读完,如果是两台电脑直接传送同等的大数据包,用不了一秒就能完成。再有就是数据加密,MODBUS不支持数据加密传送,如果需要加密,需要在MODBUS数据包外部加壳,完成数据加密。

标准modbus通讯协议有哪些?

modbus-rtu是modbus协议的一部分,还有一部分是modbus-ascⅱ。这是这种通讯方式,适合不同的场合,前者适合传输数据,后者更适合传输字符。

Modbus地址是5位还是6位?3区和4区哪个用来读模拟量输入?

一、Modbus地址其实指的是各类寄存器的设备编号,为5位十进制数,各区的编号从1到9999,即: ● 00001 ~ 09999 :离散量输出继电器编号 ● 10001 ~ 19999 :离散量输入继电器编号 ● 30001 ~ 39999 :模拟量输入寄存器编号 ● 40001 ~ 49999 :保持型输出寄存器编号 二、3区是读模拟量输入寄存器,4区是用于写数据到输出寄存器。三、Modbus地址虽然是5位十进制数,但由于功能码的定向作用,如功能码01/05/15就只能操作0X区,不会操作其他区,所以编程时只需要后4位数,而且要把它换成16进制地址(地址从0开始),即:通讯帧里的设备地址=(4位十进制设备编号-1)转换成16进制如用功能码02读取1区中编号为10012的输入继电器的状态,通讯帧里的设备地址就要转换成:0012-1=(0011)十进制 =(000B)十六进制

profibus-DP和modbus的区别

一、主体不同1、modbus:是一种串行通信协议,是Modicon公司于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。2、rofibus-DP:具有高速低成本,用于设备级控制系统与分散式I/O的通信协议。与PROFIBUS-PA、PROFIBUS-FMS共同组成了PROFIBUS标准。二、协议特点不同1、modbus:在一个数据链路上只能处理247个地址,这种情况限制了可以连接到主控站点的设备数量。只有一个主机,所有通信都由他发出。网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。2、rofibus-DP:用于现场设备级的高速数据传送,主站周期地读取从站的输入信息并周期地向从站发送输出信息。总线循环时间必须要比主站(PLC)程序循环时间短。除周期性用户数据传输外,PROFIBUS-DP还提供智能化设备所需的非周期性通信以进行组态、诊断和报警处理。三、传输特点不同1、modbus:协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求2、rofibus-DP:协议明确规定了用户数据怎样在总线各站之间传递,但用户数据的含义是在PROFIBUS行规中具体说明的。PROFIBUS主站之间采用令牌传送方式,主站与从站之间采用主从方式。令牌传递程序保证每个主站在一个确切规定的时间内得到总线存取权。参考资料来源:百度百科-Modbus通讯协议参考资料来源:百度百科-PROFIBUS-DP

请教modbus总线的通讯距离

modbus 属于 协议,软件层面的总线 应该是说 RS485 之类的,属于硬件485走双绞线的通讯距离 和速率有关系,通常 9600 可以达 1200米当然,可以转换为光纤传输,数千米

什么是MODBUS,有什么用处,怎么样应用.原理是什么?

什么是Modbus?作者:ICPDAS何谓Modbus协议?Modbus是MODICON公司于1979年开发的一种通讯协议。它是一种在工业领域被广为应用的真正开放、标准的网络通讯协议。SCADA和HMI通过Modbus协议可以很容易将带串行通讯口的设备集成在一起。 什么是Modbus/TCP协议?Modbus/TCP协议是不同于Modbus的另一种协议,产生于1999年。它允许因特网接入以太网设备。 什么软件支持Modbus和Modbus/TCP协议?大部分SCADA(SupervisorControlAndDataAcuisition)和HMI软件支持Modbus协议。例如:组态王、MCGS、Citect、ICONICS、iFIX、InduSoft、Intouch、EntivityStudio、EntivityLive、EntivityVLC、TraceMode、Wizcon、Wonderware...等 为何使用Modbus和Modbus/TCP协议?1.公开的协议,免收许可费用2.被SCADA和HMI软件广为支持3.简单易用4.易于集成不同的设备5.开发成本低6.广泛的知识资源支持 

MODBUS规定的内容,具体是什么意思

可以搜 百度文库有不少文档MODBUS 协议有几类的

modbus怎么读

莫得巴斯

modbus功能码详解

modbus功能码详解:Modbus功能码是Modbus消息帧(报文)的重要组成部分,是Modubs协议中通信事务处理的基础,代表消息将要执行的动作。简而言之,Modbus功能码占用一个字节,取值范围是1127,之所以127以上不能使用,是因为Modbus规定出现异常时,功能码+0x80(十进制128)代替异常状态,因此129(1+128)255(127+128)的取值代表异常码。读取从设备的线圈或离散量输出的状态,即各DO的ON/OFF状态。消息帧中指定了需读取的线圈起始地址和线圈数目。需要注意的一点是,在Modbus协议规定的PDU中,规定所有线圈或寄存器地址从0开始计算。

modbus协议和485协议有什么区别?

modbus和485的区别是RS485是接线口,modbus是协议。他是建立在RS485是接线口的基础上进行通讯的。所以modbus离不开485,485也离不开MODBUS,前半部分说的基本正确,RS485是接线口与485也离不开MODBUS回答错误。RS485不不完全是接线口,它是一种电气标准,包含机械特性,电气特性等特点,可以找一些通信书籍看看,描述有很多特点。Modbus具有以下几个特点:1、标准、开放:用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。2、Modbus可以支持多种电气接口:如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。3、Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

我想问一下can和modbus区别是什么呢?

感谢题主的邀请,我来说下我的看法:can是一种总线类型,它拥有自己的总线协议,而MODBUS则是一种专门的协议类型,它们对比的话是这样的:一般来说,can协议规定了应用层、数据链路层和物理层。其价格比以太网低,但是比UART等RS232或者485要高。但是,实时性在10ms,传输距离远。这一点比别的多数网络都要好。不但用在汽车,工控、电梯等等各方面都有应用。Modbus协议建立在串行接口之上,规定了应用层。在PLC等工控领域有比较广泛的应用。Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使Modbus协议作为他们之间的通讯标准。为了能够更好的利用好CAN和MODBUS,工程师们有时候会想办法让这两种数据相互转化,由此便诞生了CAN转MODBUS网关工具,GCGD什么的就有,网上可以看到。因为CAN总线的发展前景太广阔了,所以这类工具的需求估计也会越来越大,是不是真的这样,我们拭目以待。如果你觉得我说的还行,采纳下啊!

modbus通讯协议是怎么回事?

MODBUS通讯协议及编程的简要概论: ModBus通讯协议分为RTU协议和ASCII协议,我公司的多种仪表都采用ModBus RTU通讯协议,如:CH2000智能电力监测仪、CH2000M电力参数采集模块、巡检表、数显表、光柱数显表等。下面就ModBus RTU协议简要介绍如下:一、通讯协议(一)、通讯传送方式: 通讯传送分为独立的信息头,和发送的编码数据。以下的通讯传送方式定义也与MODBUS RTU通讯规约相兼容: 编 码 8位二进制 起始位 1位 数据位 8位 奇偶校验位 1位(偶校验位) 停止位 1位 错误校检 CRC(冗余循环码) 初始结构 = ≥4字节的时间 地址码 = 1 字节功能码 = 1 字节数据区 = N 字节错误校检 = 16位CRC码 结束结构 = ≥4字节的时间 地址码:地址码为通讯传送的第一个字节。这个字节表明由用户设定地址码的从机将接收由主机发送来的信息。并且每个从机都有具有唯一的地址码,并且响应回送均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。 功能码:通讯传送的第二个字节。ModBus通讯规约定义功能号为1到127。本仪表只利用其中的一部分功能码。作为主机请求发送,通过功能码告诉从机执行什么动作。作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。如果从机发送的功能码的最高位为1(比如功能码大与此同时127),则表明从机没有响应操作或发送出错。 数据区:数据区是根据不同的功能码而不同。数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。 CRC码:二字节的错误检测码。 (二)、通讯规约: 当通讯命令发送至仪器时,符合相应地址码的设备接通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然后把执行结果返送给发送者。返送的信息中包括地址码、执行动作的功能码、执行动作后结果的数据以及错误校验码。如果出错就不发送任何信息。1.信息帧结构地址码 功能码 数据区 错误校验码 8位 8位 N × 8位 16位 地址码:地址码是信息帧的第一字节(8位),从0到255。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送。当从机回送信息时,相当的地址码表明该信息来自于何处。 功能码:主机发送的功能码告诉从机执行什么任务。表1-1列出的功能码都有具体的含义及操作。 代码 含义 操作 03 读取数据 读取当前寄存器内一个或多个二进制值 06 重置单一寄存器 把设置的二进制值写入单一寄存器 数据区:数据区包含需要从机执行什么动作或由从机采集的返送信息。这些信息可以是数值、参考地址等等。例如,功能码告诉从机读取寄存器的值,则数据区必需包含要读取寄存器的起始地址及读取长度。对于不同的从机,地址和数据信息都不相同。 错误校验码:主机或从机可用校验码进行判别接收信息是否出错。有时,由于电子噪声或其它一些干扰,信息在传输过程中会发生细微的变化,错误校验码保证了主机或从机对在传送过程中出错的信息不起作用。这样增加了系统的安全和效率。错误校验采用CRC-16校验方法。注:信息帧的格式都基本相同:地址码、功能码、数据区和错误校验码。2.错误校验 冗余循环码(CRC)包含2个字节,即16位二进制。CRC码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接收到信息的 CRC码,比较计算得到的CRC码是否与接收到的相符,如果两者不相符,则表明出错。 CRC码的计算方法是,先预置16位寄存器全为1。再逐步把每8位数据信息进行处理。在进行CRC码计算时只用8位数据位,起始位及停止位,如有奇偶校验位的话也包括奇偶校验位,都不参与CRC码计算。 在计算CRC码时,8位数据与寄存器的数据相异或,得到的结果向低位移一字节,用0填补最高位。再检查最低位,如果最低位为1,把寄存器的内容与预置数相异或,如果最低位为0,不进行异或运算。 这个过程一直重复8次。第8次移位后,下一个8位再与现在寄存器的内容相相异或,这个过程与以上一样重复8次。当所有的数据信息处理完后,最后寄存器的内容即为CRC码值。CRC码中的数据发送、接收时低字节在前。 计算CRC码的步骤为:预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器; 把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器; 把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位; 如果最低位为0:重复第3步(再次移位); 如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或; 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理; 重复步骤2到步骤5,进行下一个8位数据的处理; 最后得到的CRC寄存器即为CRC码。 3.功能码03,读取点和返回值:仪表采用Modbus RTU通讯规约,利用通讯命令,可以进行读取点(“保持寄存器”) 或返回值(“输入寄存器” )的操作。保持和输入寄存器都是16位(2字节)值,并且高位在前。这样用于仪表的读取点和返回值都是2字节。一次最多可读取寄存器数是60。由于一些可编程控制器不用功能码03,所以功能码03被用作读取点和返回值。从机响应的命令格式是从机地址、功能码、数据区及CRC码。数据区中的寄存器数据都是每两个字节高字节在前。4.功能码06,单点保存 主机利用这条命令把单点数据保存到仪表的存储器。从机也用这个功能码向主机返送信息。二、编程举例 下面是一个用VC编写的ModBus RTU通讯的例子 (一)、通讯口设置DCB dcb;hCom=CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);if(hCom==INVALID_HANDLE_VALUE){ MessageBox("createfile error,error");}BOOL error=SetupComm(hCom,1024,1024);if(!error) MessageBox("setupcomm error");error=GetCommState(hCom,&dcb);if(!error) MessageBox("getcommstate,error");dcb.BaudRate=2400;dcb.ByteSize=8;dcb.Parity=EVENPARITY;//NOPARITY;dcb.StopBits=ONESTOPBIT;Error=SetCommState(hCom,&dcb);(二)、CRC校验码计算UINT crcvoid calccrc(BYTE crcbuf){BYTE i;crc=crc ^ crcbuf;for(i=0;i<8;i++){BYTE TT;TT=crc&1;crc=crc>>1;crc=crc&0x7fff;if (TT==1)crc=crc^0xa001;crc=crc&0xffff;}}(三)、数据发送zxaddr=11;//读取地址为11的巡检表数据zxnum=10;//读取十个通道的数据writebuf2[0]=zxaddr;writebuf2[1]=3;writebuf2[2]=0;writebuf2[3]=0;writebuf2[4]=0;writebuf2[5]=zxnum;crc=0xffff;calccrc(writebuf2[0]);calccrc(writebuf2[1]);calccrc(writebuf2[2]);calccrc(writebuf2[3]);calccrc(writebuf2[4]);calccrc(writebuf2[5]);writebuf2[6]=crc & 0xff;writebuf2[7]=crc/0x100;WriteFile(hCom,writebuf2,8,&comnum,NULL);(四)、数据读取ReadFile(hCom,writebuf,5+zxnum*2,&comnum,NULL);//读取zxnum个通道数据,可增加错误处理程序,如地址码错误、CRC码错误判断、通讯故障处理等.

Modbus的有关定义和理解

Modbus协议最初由Modicon公司开发出来,现在Modbus已经是工业领域全球最流行的协议。协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。

modbus和485的区别是什么?

modbus和485的区别是RS485是接线口,modbus是协议。他是建立在RS485是接线口的基础上进行通讯的。所以modbus离不开485,485也离不开MODBUS,前半部分说的基本正确,RS485是接线口与485也离不开MODBUS回答错误。RS485不不完全是接线口,它是一种电气标准,包含机械特性,电气特性等特点,可以找一些通信书籍看看,描述有很多特点。Modbus具有以下几个特点:1、标准、开放:用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。2、Modbus可以支持多种电气接口:如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。3、Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

用c语言编写modbus程序

#ifdef MODBUS////******************************************************************************// CRC 16 Data Table// *****************const unsigned int crc_tbl[256]={ 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xb981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040};//#pragma end_abs_address//******************************************************************************//#define DEFAULT_ADDRESS 1 // all slaves start with this Modbus address// communication commands://#define CHOOSE_SLOT 0x80//#define POLL_SLOT 0x81//#define POLL_ACK 0x82// positions in a Modbus packet#define ADDR 0#define FCN 1#define REGHI 2#define REGLO 3#define NUMREGSHI 4#define NUMREGSLO 5#define OUTBYTES 2// Modbus exception codes#define FCN_NOT_SUPPORTED 1 // a Modbus function code we can"t handle#define BAD_ADDR_OR_CMD 2 // a Modbus "register" (command or address to us) we don"t know#define BAD_COUNT 3 // num regs != num bytes * 2#define CMD_NOT_COMPLETE 4 // command didn"t complete successfully// other defines#define IN 0#define OUT 1//// SLOT_NUMBER is the 2 byte device configuration// the first byte is the ID// the second byte is the transmission mode coded as follows:// bit 0x01: 0=19200, 1=9600 baud// bit 0x02: 0=even parity, 1=odd parity// bit 0x04: 0=parity, 1=no parity// bit 0x08: 0=1 stop bit, 1=2 stop bits// if bit 0x04 is set and bit 0x08 is not set then it"s 8 bit mode (vs 9 bit mode)////unsigned char receiveBuffer[32] = {0}; // Reserve 32 bytes for packet.unsigned char device_addr = DEFAULT_ADDRESS; // assigned device address - start with disconnected//unsigned char timeout_counter = 10;//unsigned char timeout_duration = 10; // seconds, default//unsigned char pkt_index = 0;// return number of bytes in packet, not including crcunsigned char MDB_get_length(unsigned char in_out, unsigned char* ptr){ if(comControlByte & 0x20) return 6; switch(*(ptr+FCN)) { case 0x06: // write single reg return 6; case 0x03: // read multiple regs if (in_out == IN) // incoming packet return 6; else return *(ptr+OUTBYTES) + 3; case 0x10: // write multiple regs return (*(ptr+NUMREGSLO) << 1) + 7; default: // assume error packet return 3; }}// calculate CRC16 on a packetunsigned int MDB_crc_calc(unsigned char in_out, unsigned char* ptr){ unsigned char c1, c2; unsigned int crc = 0xffff; // initial value unsigned char* ptr_pkt_hdr = ptr; c2 = MDB_get_length(in_out,ptr); for(c1=0; c1<c2; c1++) crc = ((crc >> 8) & 0xFF) ^ crc_tbl[(crc ^ *ptr_pkt_hdr++) & 0xFF]; return crc;}// check crc on an incoming packetunsigned char MDB_crc_check(unsigned char* ptr){ unsigned int i1; unsigned char c1, c2, c3; i1 = MDB_crc_calc(IN, ptr); c1 = *(ptr+MDB_get_length(IN,ptr)+1); // msb of incoming crc c2 = *(ptr+MDB_get_length(IN,ptr)); // lsb of incoming crc c3 = (i1 >> 8); // msb of calculated crc if((c2 == (i1 & 0x00FF)) && (c1 == c3)) // compare msb & lsb return 1; else return 0;}// send Modbus packetsvoid MDB_pkt_sender(unsigned char* ptr){ unsigned char idx, pkt_len; unsigned int i1;// append crc, lsb 1st i1 = MDB_crc_calc(OUT,ptr); pkt_len = MDB_get_length(OUT,ptr); *(ptr+pkt_len++) = (unsigned char)i1; // lsb *(ptr+pkt_len++) = (i1 >> 8); // msb //SCI1C2 = 0x08; // transmit enable //comLedOn(); PTGD |= 0x80; for (idx = 0; idx < pkt_len; idx++) { while(!(SCI1S1 & 0x80)); // wait for tdre=1 i1 = SCI1S1; SCI1D = *(ptr+idx); } while(!(SCI1S1 & 0x80)); while(!(SCI1S1 & 0x40)); //comLedOff(); PTGD &= 0x7f; //SCI1C2 = 0x2c; // back to receive mode}// return a Modbus error packetvoid MDB_error(unsigned char exp_code, unsigned char* ptr){ *(ptr+FCN) |= 0x80; // set error code *(ptr+FCN+1) = exp_code; // set exception code MDB_pkt_sender(ptr);}//void MDB_read_data(unsigned char* ptr){ if(get_data((ptr+2), *(ptr+3))) { // get_data() sticks the length of the data in receiveBuffer[2] // receiveBuffer[3] & on will have actual data // receiveBuffer[0] & receiveBuffer[1] unchanged MDB_pkt_sender(ptr); // appends CRC before sending } else MDB_error(BAD_ADDR_OR_CMD, ptr);}// handle data writesvoid MDB_write_data(unsigned char* ptr){ if((*(ptr+5)<<1) == *(ptr+6)) { switch(*(ptr+3))//receiveBuffer[3]) { //case 0x18: // new timeout value // timeout_duration = receiveBuffer[7]; // MDB_pkt_sender(); // echo received command // break; //case 0x63: // lamp test // clampTest = 40; // MDB_pkt_sender(); // echo received command // break; case ADDRESS: //if(receiveBuffer[8] && (receiveBuffer[8] < 248)) // valid addresses if(*(ptr+8) && (*(ptr+8) < 248)) { //device_addr = *(ptr+8); // not until reset nonvolatile[0] = *(ptr+8); // device ID nonvolatile[1] = *(ptr+7); // transmission mode nonvolatile[2] = ~nonvolatile[0]; nonvolatile[3] = ~nonvolatile[1]; writeToNonvolatile(SLOT_NUMBER, &nonvolatile[0]); comControlByte |= 0x20; MDB_pkt_sender(ptr); comControlByte &= 0xdf; } else MDB_error(BAD_ADDR_OR_CMD, ptr); break; case INSTALLATION_DATE: // installation date readFromNonvolatile(DATE_DATA, &nonvolatile[0]); nonvolatile[4] = *(ptr+7);//receiveBuffer[7]; nonvolatile[5] = *(ptr+8);//receiveBuffer[8]; nonvolatile[6] = *(ptr+9);//receiveBuffer[9]; nonvolatile[7] = *(ptr+10);//receiveBuffer[10]; nonvolatile[12] = ~nonvolatile[4]; nonvolatile[13] = ~nonvolatile[5]; nonvolatile[14] = ~nonvolatile[6]; nonvolatile[15] = ~nonvolatile[7]; writeToNonvolatile(DATE_DATA, &nonvolatile[0]); comControlByte |= 0x20; MDB_pkt_sender(ptr); // echo received command comControlByte &= 0xdf; break; default: MDB_error(BAD_ADDR_OR_CMD, ptr); break; } } else MDB_error(BAD_COUNT, ptr);}//void MDB_parse(char *bufPtr){ unsigned char i = 0; if(MDB_crc_check(bufPtr)) { if(*(bufPtr+ADDR) == device_addr) { switch(*(bufPtr+FCN)) { case 0x03: // modbus read multiple regs MDB_read_data(bufPtr); break; case 0x10: // modbus write multiple regs MDB_write_data(bufPtr); break; default: // modbus function not supported MDB_error(FCN_NOT_SUPPORTED, bufPtr); break; } } }}

RS485和MODBUS的区别是什么?

RS-485又名TIA-485-A, ANSI/TIA/EIA-485或TIA/EIA-485。RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准,该标准由电信行业协会和电子工业联盟定义。使用该标准的数字通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号。RS-485使得廉价本地网络以及多支路通信链路的配置成为可能。[s1]RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓扑结构,在同一总线上最多可以挂接32个节点。在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来,而忽悄升略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,原因1是共模干扰:RS-485接口采用差分方式传输信号方式,卜运蚂并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了,但容易忽视了收发器有一定的共模电压范围,RS-485收发器共模电压范围为-7到+12V,只有满足上述条件,整个网络才能正常工作;当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口型埋;原因二是EMI的问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。(来百度百科)工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。Modbus就是工业控制器的网络协议中的一种。1. 协议概述物理层:传输方式:RS485通讯地址:0-247通讯波特率:可设定通讯介质:屏蔽双绞线传输方式:主从半双工方式协议在一根通讯线上使用应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,在相反的方向上终端设备发出的应答信号传输给主机。协议只允许在主计算机和终端设备之间,而不允许独立的设备之间的数据交换,这就不会在它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。

profibus和modbus的区别

profibus是西门子推出的一种前端设备的现场联网标准,实现前端设备的组网通讯,实现分布式协同控制。modbus是用于前端设备,以及前端与上位机之间的一种数据通讯的对话协议。举个例子,profibus相当于联通,移动等通讯公司的通讯网络,modbus则是利用通讯网络打电话是,通讯双方所采用的语言。这两者不是同一类概念。

modbus协议和modbus tcp/ip协议有什么区别

TCP/IP协议是网络通讯协议。MODBUS是应用与工业现场(电子控制)的通讯协议。两者的应用范围和应用环境有所不同。两者关系不大,modbus是一种应用层的协议,tcp/ip是网络或传输层的协议,modbus可以架在TCP/IP上,也可不。

51单片机MODBUS通讯,RTU中的CRC校验

51默认的数据类型为字符型。这段程序是典型的CRC16查表速算,网上一搜一大把到处都是。

Modbus通讯协议的功能码定义

表1 ModBus功能码 01READ COIL STATUS02READ INPUT STATUS03READ HOLDING REGISTER04READ INPUT REGISTER05WRITE SINGLE COIL06WRITE SINGLE REGISTER15WRITE MULTIPLE COIL16WRITE MULTIPLE REGISTER

MBUS 和MODBUS 什么关系啊

暧昧关系

MODBUS协议有哪几种?

Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信,已经成为一种工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。这种协议定义了一种控制器能够认识使用的数据结构,而不管它们是经过何种网络进行通信的。它描述了控制器请求访问其他设备的过程,如何回应来自其他设备的请求,以及怎样侦测错误记录,它制定了通信数据的格局和内容的公共格式。在进行多机通信的时候,Modbus协议规定每个控制器必须要知道他们的设备地址,识别按照地址发送过来的数据,决定是否要产生动作,产生何种动作,如果要回应,控制器将生成的反馈信息用Modbus协议发出。Modbus协议允许在各种网络体系结构内进行简单通信,每种设备(PLC、人机界面、控制面板、驱动程序、输入输出设备)都能使用Modbus协议来启动远程操作,一些网关允许在几种使用Modbus协议的总线或网络之间的通信。Modbus有两种通信传输方式,一种是ASCII模式,一种是RTU模式。由于ASCII模式的数据字节是7bit数据位,51单片机无法实现,而且应用也相对较少,所以应用较多的RTU模式。一条典型的RTU数据帧如图所示。起始位和结束符:上图代表的是一个数据帧,前后都至少有3.5个字节的时间间隔,起始位和结束符实际上没有任何数据,T1-T2-T3-T4代表的是时间间隔3.5个字节以上的时间,而真正有意义的第一个字节是设备地址。设备地址:在多个传感器通信的时候,数据那么多,我们依靠什么判断这个数据帧是哪个设备的呢?没错,就是依靠这个设备地址字节。每个设备都有一个自己的地址,当设备接收到一帧数据后,程序首先对设备地址字节进行判断比较,如果与自己的地址不同,则对这帧数据直接不予理会,如果与自己的地址相同,就要对这帧数据进行解析,按照之后的功能码执行相应的功能。如果地址是0x00,则认为是一个广播命令,就是所有的从机设备都要执行的指令。功能代码:在第二个字节功能代码字节中,Modbus规定了部分功能代码,此外也保留了一部分功能代码作为备用或者用户自定义。

modbus和485有什么区别呢?哪个好用呢?

modbus和485的区别是RS485是接线口,modbus是协议。他是建立在RS485是接线口的基础上进行通讯的。所以modbus离不开485,485也离不开MODBUS,前半部分说的基本正确,RS485是接线口与485也离不开MODBUS回答错误。RS485不不完全是接线口,它是一种电气标准,包含机械特性,电气特性等特点,可以找一些通信书籍看看,描述有很多特点。Modbus具有以下几个特点:1、标准、开放:用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。2、Modbus可以支持多种电气接口:如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。3、Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

如何启动modbus

需要在plc安装modbus协议,或者通过modbus路由装置进行映射实现。

Modbus通讯协议的特点

Modbus具有以下几个特点:(1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。(2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。(3)Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。 标准的Modbus口是使用RS-232-C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem组网。控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 在其它网络上,控制器使用对等技术通信,故任何控制器都能初始化和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。 (1)查询查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。(2)回应如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:像寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。

modbus协议有几种传输模式?

Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(Interface for Distributed Automation,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。在中国,Modbus已经成为国家标准GB/T19582-2008。据不完全统计:截止到2007年,Modbus的节点安装数量已经超过了1000万个。在ModBus系统中有2种传输模式可选择。这2种传输模式与从机PC通信的能力是同等的。选择时应视所用ModBus主机而定,每个ModBus系统只能使用一种模式,不允许2种模式混用。一种模式是ASCII(美国信息交换码),另一种模式是RTU(远程终端设备)DTU是无线数据传输模块,采用2G、3G网络进行远程数据传输的终端模块。其原理是将串口数据打包成TCP或者UDP包进行数据远传。RTU是模拟量采集终端模块,是将模拟变量采集后,经过A/D转化成数字格式的设备。DTU一般只能传输标准的232、485数据,RTU只能将模拟量采集后转化为串口数据。厦门,为,那公司的DTU采用工业端子接法,可以实现232、485数据传输,同时更具备了强大的功能:1、代替RTU,直接采集模拟量,做逻辑控制2、可以用手机短信配置、可以手机短信作为数据备份3、可以独立加密4、可以通过指示灯了解设备工作状态,信号状态。从功能上说,带DTU及RTU的一体机性价比更高!

modbus协议rtu是什么

ModBus协议是应用层报文传输协议(OSI模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域。ModBus协议能够应用在不同类型的总线或网络。对应不同的总线或网络,Modbus协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU。目前,Modbus有下列三种通信方式:1. 以太网,对应的通信模式是MODBUS TCP。2. 异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等),对应的通信模式是MODBUS RTU或MODBUS ASCII。3. 高速令牌传递网络,对应的通信模式是Modbus PLUS。

MODBUS通信协议是什么标准协议

ModBus协议是应用层报文传输协议。1、Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。2、此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。3、当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

modbus协议是否就是RS232或者RS485, 如果不是又有哪些区别

MODBUS是一种国际标准的通讯协议,用于不同厂商之间的设备交换数据(一般是工业用途);又分MODBUS RTU,MODBUS ASCII和后来发展的MODBUS TCP三种模式:其中前两种(MODBUS RTU,MODBUS ASCII)所用的物理硬件接口都是串行(Serial)通讯口(RS232,RS422,RS485)。RS485是一个物理接口,简单的说是硬件。

Modbus 是什么意思?怎么翻译?

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

莫迪康与标准modbus区别

结构不同和作用不同。1、结构不同。莫迪康采用模块化结构和数字技术的应用。标准modbus采用了数据结构的形式。2、作用不同。莫迪康主要用于MCGS软件通过ModbusRTU 协议读写ModiconPLC设备的各种寄存器的数据。标准modbus应用于各种数据采集和过程监控。

modbus 是什么?

Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。 Modbus具有以下几个特点:  (1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。  (2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。  (3)Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

什么是标准MODBUS协议

什么是Modbus? Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。Modbus 协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。关于Modbus参考资料:http://www.cnblogs.com/luomingui/archive/2013/06/14/Modbus.html

什么是modbus

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

modbus是什么?

RS-485又名TIA-485-A, ANSI/TIA/EIA-485或TIA/EIA-485。RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准,该标准由电信行业协会和电子工业联盟定义。使用该标准的数字通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号。RS-485使得廉价本地网络以及多支路通信链路的配置成为可能。[s1]RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓扑结构,在同一总线上最多可以挂接32个节点。在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来,而忽略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,原因1是共模干扰:RS-485接口采用差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了,但容易忽视了收发器有一定的共模电压范围,RS-485收发器共模电压范围为-7到+12V,只有满足上述条件,整个网络才能正常工作;当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口;原因二是EMI的问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。(来百度百科)工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。Modbus就是工业控制器的网络协议中的一种。1. 协议概述物理层:传输方式:RS485通讯地址:0-247通讯波特率:可设定通讯介质:屏蔽双绞线传输方式:主从半双工方式协议在一根通讯线上使用应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,在相反的方向上终端设备发出的应答信号传输给主机。协议只允许在主计算机和终端设备之间,而不允许独立的设备之间的数据交换,这就不会在它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。

MODBUS RTU通讯协议中,功能码为15、16的请求格式怎么写,各个字节代表什么含义?

16码是站号,命令,地址,字数,字节数,写入数值 校验15码也是一样

为什么用串口测试工具读取Modbus设备数据时,寄存器地址要加1?

因为寄存器地址要加1是:MODBUS是MODCON公司开发的一个通讯协议。他的起始地址是从1开始的。别的都是从0开始的,正好错开一位。和第三方设备走MODBUS通讯的时候要加1。一、串口串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口)。串行是采用串行通信方式的扩展接口。串行接口 (Serial Interface) 是指数据一位一位地顺序传送。串行特点是通信线路简单,只要一对传输线就可以实现双向通信。二、串口由来串口的出现是在1980年前后,数据传输率是115kbps~230kbps。串口出现的初期是为了实现连接计算机外设的目的,初期串口一般用来连接鼠标和外置Modem以及老式摄像头和写字板等设备。串口也可以应用于两台计算机(或设备)之间的互联及数据传输。由于串口(COM)不支持热插拔及传输速率较低,目前部分新主板和大部分便携电脑已开始取消该接口。目前串口多用于工控和测量设备以及部分通信设备中。

modbus与485的区别?

modbus和485的区别是RS485是接线口,modbus是协议。他是建立在RS485是接线口的基础上进行通讯的。所以modbus离不开485,485也离不开MODBUS,前半部分说的基本正确,RS485是接线口与485也离不开MODBUS回答错误。RS485不不完全是接线口,它是一种电气标准,包含机械特性,电气特性等特点,可以找一些通信书籍看看,描述有很多特点。Modbus具有以下几个特点:1、标准、开放:用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。2、Modbus可以支持多种电气接口:如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。3、Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

请问下,plc里的modbus和DP有什么区别吗

DP是Porfibus技术:支持主—从系统、纯主站系统、多主多从混合系统等几种传输方式。主站具有对总线的控制权,可主动发送信息。MODBUS硬件标准是RS485,但现在多用于POWERBUS总线芯片来替换RS485芯片的应用,因为RS485在现场传输的弊端有以下几点:1, 无带载能力。Rs485使用差分的方式进行信号传输,通过总线无法给后端设备供电,在很多施工现场,传感器端很难找到现场取电的电源,只能从主机端再拉两根24V电源线来供电。2, 有极性,且需要手拉手。这一问题导致施工非常繁琐,而且拓扑结构的固定也侧面反应了抗干扰能力不足,无法与其它种类的线共管,这也不符合现场实际情况。3, 需要加终端匹配电阻且从机需要隔离,成本高昂。这意味着每个从机需要一颗隔离电源B0505芯片,且长线需要加匹配电阻来确保最终总线回声的消除。而这些问题POWERBUS早已解决,现POWERBUS可以透传MODBUS等多种总线协议,在多年的现场应用中,被证明是一种替换485的有效解决方案。

无协议通信 MODBUS通信 有何区别

无协议通信?通信2端必须有协议的,可以简单,或者复杂MODBUS通信modcon的协议,现在成为事实标准,广泛使用
 首页 上一页  5 6 7 8 9 10 11 12 13 14 15  下一页  尾页