ROS连接ABB机械臂调试详细教程-ROS(indigo)和ABB RobotStudio 6.03.02-

2023-10-30 20:10

本文主要是介绍ROS连接ABB机械臂调试详细教程-ROS(indigo)和ABB RobotStudio 6.03.02-,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在ROS industrial介绍中,给出了ROS和常用机械臂的连接方式。具体信息可以参考:http://wiki.ros.org/Industrial

ROS连接ABB机械臂调试详细教程-ROS(indigo)和ABB RobotStudio 6.03.02-

补充:https://github.com/robotics/open_abb

open-abb-driver

Control ABB robots remotely with ROS, Python, or C++

What is it?

open-abb-driver consists of two main parts. The first is a program which is written in the ABB robot control language, RAPID, which allows remote clients to send requests for actions (such as joint moves, cartesian moves, speed changes, etc.). The second is a series of libraries to interact with the robot from remote computers, using several different control schemes. You can use the ROS driver, which allows control using ROS services and publishers. You can also include the Python or C++ libraries to communicate with the robot directly (both located in abb_node/packages/abb_comm), and bypass ROS completely.

Requirements

  • ABB IRC5 controller
  • 6 DOF robotic manipulator
  • Robot must have the following factory software options
    • "PC Interface"
    • "Multitasking" (required for position feedback stream)

Quick Start

Robot Setup

  • Install the RAPID module 'SERVER'
    • Using RobotStudio online mode is the easiest way to do this, check out the wiki article for details.
  • For position feedback, install the RAPID module 'LOGGER' into another task.
  • In SERVER.mod, check to make sure the "ipController" specified is the same as your robot. The default robot IP is 192.168.125.1
  • Start the programs on the robot
    • Production Window->PP to Main, then press the play button.

Computer Setup

  • Verify that your computer is on the same subnet as the robot.
    • Try pinging the robot (default IP is 192.168.125.1).
  • Before trying ROS, it's pretty easy to check functionality using the simple python interface.
    • Note that you must either copy abb_node/packages/abb_comm/abb.py to your local directory or somewhere included in your PYTHONPATH environment.
  • To set up the ROS node (Fuerte only at the moment), copy abb_node to somewhere in your $ROS_PACKAGE_PATH.
    • If you did that correctly, try:

      roscd abb_node
      rosmake abb_node
      roslaunch abb_node abb_tf.launch
      

调试视频链接:http://v.youku.com/v_show/id_XMTc0MzUxNDU4OA


 

ROS官网给出了一些示例,可以移植应用(120 120t 4400 2400 5400 6600 6640),参考网址:
1 http://wiki.ros.org/abb
2 https://github.com/ros-industrial/abb
3 https://github.com/ros-industrial/abb_experimental

 

下面详细介绍,如何用ROS中MoveIt!规划并控制ABB RobotStudio中机械臂的运动。

MoveIt!:http://moveit.ros.org/

ABB RobotStudio:http://blog.csdn.net/ZhangRelay/article/details/51177098

----官方教程分为3个小节----

 

The following tutorials are provided to demonstrate installation and operation of an ABB robot using the ROS Industrial interfaces:

 

  1. Installing the ABB ROS Server

    This tutorial walks through the steps of installing the ROS server code on the ABB robot controller and configuring the required controller settings.

  2. Running the ROS Server

    This tutorial describes how to run the ABB ROS Server, so the robot will execute motion commands sent from the ROS client node.

 

The following tutorials show how to use the ABB Robot Studio with the driver:

  1. Using Simulated Robot in Robot Studio
    This tutorial describes how to setup the ABB RobotStudio simulator for use with the ROS-Industrial driver.

 

分别为:安装ABB ROS服务器,运行ROS 服务器和在RobotStudio中使用仿真机器人,这里以仿真机器人为例,

 

当然配置完成后就可以控制真实机械臂运动了。

A 在RobotStudio中使用仿真机器人

通过使用仿真机械臂替代真实机械臂,可以在ROS和ABB机械臂进行通信仿真。这种情况下,通常有两台PC,

一台运行windows及ABB机械臂,winpc;另一台运行ubuntu和ROS,rospc。

1 需要熟悉ABB RobotStudio使用
1.1 新建一个空工作站解决方案:

1.2 在ABB模型库中选择一款机械臂,这里以IRB120_3_58__01为例:

1.3 选择机器人系统,点击从布局:

1.4 点击下一步,出现下面界面,点击选项:

1.5 通过过滤器快速添加616-1 PC interface 623-1 Multitasking后,点击完成:

2 安装RAPID文件

2.1 到创建的文档\RobotStudio\Systems下选择对应的工作站
2.2 打开,新建ROS文件夹,并复制\abb_driver\rapid到其中(下载地址https://github.com/ros-industrial/abb):

2.3 查看目前winpc的IP地址,并写入到ROS_socket.sys中对应处,如下:

 

3 选择控制器,配置示教器:

在配置中,为了使用方便先将语言设置为中文:

配置到手动模式,就可以进行下一步,安装ROS服务器。

 

B 安装ROS服务器

必须具备的组件清单:

Multitasking (623-1) -- for parallel socket communications
Socket Messaging (672-1) -- for communications with a ROS PC
for recent RobotWare versions, this option is included with "PC Interface (616-1)"
RobotWare OS >= 5.13 -- for required socket options
earlier versions may work, but will require modifications to the RAPID code

如果不全,仿真没有问题,但无法控制实际机器人。

之前,已经将代码文件复制到相应文件夹下了,如(e.g. /<system>/HOME/ROS/*)。

进行下一步操作。

1 配置控制器

这里文件说明如下:

Shared by all tasks
ROS_common.sys -- Global variables and data types shared by all files
ROS_socket.sys -- Socket handling and simple_message implementation
ROS_messages.sys -- Implementation of specific message types
Specific task modules
ROS_stateServer.mod -- Broadcast joint position and state data
ROS_motionServer.mod -- Receive robot motion commands
ROS_motion.mod -- Issues motion commands to the robot

1.1 创建任务

在ABB--控制器--配置编辑器--Controller--Task:

Create 3 tasks as follows:

Name

Type

Trust Level

Entry

Motion Task

ROS_StateServer

SEMISTATIC

NoSafety

main

NO

ROS_MotionServer

SEMISTATIC

SysStop

main

NO

T_ROB1

NORMAL

 

main

YES

It is easiest to wait until all configuration tasks are completed before rebooting the controller.

 

NOTES:

  1. The T_ROB1 motion task probably already exists on your controller.

  2. If T_ROB1 has existing motion-control modules, you may need to rename the main() routine in ROS_Motion.mod to ROS_main(). In this case, set the Entry point for T_ROB1 task to ROS_main().

  3. For multi-robot controllers, specify the desired robot (e.g. rob1) for each task

  4. SEMISTATIC tasks will auto-start when controller is booted. They are visible, but cannot be easily seen for troubleshooting. For debug or development purposes, it may be desired to set both ROS_*Server tasks to Type=NORMAL.

 

1.2 加载模块到任务

在ABB--控制器--配置编辑器--Controller--Automatic Loading of Modules:

File

Task

Installed

All Tasks

Hidden

HOME:/ROS/ROS_common.sys

 

NO

YES

NO

HOME:/ROS/ROS_socket.sys

 

NO

YES

NO

HOME:/ROS/ROS_messages.sys

 

NO

YES

NO

HOME:/ROS/ROS_stateServer.mod

ROS_StateServer

NO

NO

NO

HOME:/ROS/ROS_motionServer.mod

ROS_MotionServer

NO

NO

NO

HOME:/ROS/ROS_motion.mod

T_ROB1

NO

NO

NO

 

 

 

添加完成后如下所示:

然后,重启控制器,应用更改。

1.3 更新

在控制器--重启中选择合适模式进行重启,完成后可以看到如下:

如果IP错误:

 

设置正确IP后,显示:

补充RAPID:

ROS_motionServer:

 

MODULE ROS_motionServer! Software License Agreement (BSD License)
!
! Copyright (c) 2012, Edward Venator, Case Western Reserve University
! Copyright (c) 2012, Jeremy Zoss, Southwest Research Institute
! All rights reserved.
!
! Redistribution and use in source and binary forms, with or without modification,
! are permitted provided that the following conditions are met:
!
!   Redistributions of source code must retain the above copyright notice, this
!       list of conditions and the following disclaimer.
!   Redistributions in binary form must reproduce the above copyright notice, this
!       list of conditions and the following disclaimer in the documentation
!       and/or other materials provided with the distribution.
!   Neither the name of the Case Western Reserve University nor the names of its contributors
!       may be used to endorse or promote products derived from this software without
!       specific prior written permission.
!
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
! EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
! SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
! TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
! BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
! WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.LOCAL CONST num server_port := 11000;LOCAL VAR socketdev server_socket;
LOCAL VAR socketdev client_socket;
LOCAL VAR ROS_joint_trajectory_pt trajectory{MAX_TRAJ_LENGTH};
LOCAL VAR num trajectory_size;PROC main()VAR ROS_msg_joint_traj_pt message;TPWrite "MotionServer: Waiting for connection.";ROS_init_socket server_socket, server_port;ROS_wait_for_client server_socket, client_socket;WHILE ( true ) DO! Recieve Joint Trajectory Pt MessageROS_receive_msg_joint_traj_pt client_socket, message;trajectory_pt_callback message;ENDWHILEERROR (ERR_SOCK_TIMEOUT, ERR_SOCK_CLOSED)IF (ERRNO=ERR_SOCK_TIMEOUT) OR (ERRNO=ERR_SOCK_CLOSED) THENSkipWarn;  ! TBD: include this error data in the message logged below?ErrWrite \W, "ROS MotionServer disconnect", "Connection lost.  Resetting socket.";ExitCycle;  ! restart programELSETRYNEXT;ENDIF
UNDOIF (SocketGetStatus(client_socket) <> SOCKET_CLOSED) SocketClose client_socket;IF (SocketGetStatus(server_socket) <> SOCKET_CLOSED) SocketClose server_socket;
ENDPROCLOCAL PROC trajectory_pt_callback(ROS_msg_joint_traj_pt message)VAR ROS_joint_trajectory_pt point;VAR jointtarget current_pos;VAR ROS_msg reply_msg;point := [message.joints, message.duration];! use sequence_id to signal start/end of trajectory downloadTEST message.sequence_idCASE ROS_TRAJECTORY_START_DOWNLOAD:TPWrite "Traj START received";trajectory_size := 0;                 ! Reset trajectory sizeadd_traj_pt point;                    ! Add this point to the trajectoryCASE ROS_TRAJECTORY_END:TPWrite "Traj END received";add_traj_pt point;                    ! Add this point to the trajectoryactivate_trajectory;CASE ROS_TRAJECTORY_STOP:TPWrite "Traj STOP received";trajectory_size := 0;  ! empty trajectoryactivate_trajectory;StopMove; ClearPath; StartMove;  ! redundant, but re-issue stop command just to be safeDEFAULT:add_traj_pt point;                    ! Add this point to the trajectoryENDTEST! send reply, if requestedIF (message.header.comm_type = ROS_COM_TYPE_SRV_REQ) THENreply_msg.header := [ROS_MSG_TYPE_JOINT_TRAJ_PT, ROS_COM_TYPE_SRV_REPLY, ROS_REPLY_TYPE_SUCCESS];ROS_send_msg client_socket, reply_msg;ENDIFERRORRAISE;  ! raise errors to calling code
ENDPROCLOCAL PROC add_traj_pt(ROS_joint_trajectory_pt point)IF (trajectory_size = MAX_TRAJ_LENGTH) THENErrWrite \W, "Too Many Trajectory Points", "Trajectory has already reached its maximum size",\RL2:="max_size = " + ValToStr(MAX_TRAJ_LENGTH);ELSEIncr trajectory_size;trajectory{trajectory_size} := point; !Add this point to the trajectoryENDIF
ENDPROCLOCAL PROC activate_trajectory()WaitTestAndSet ROS_trajectory_lock;  ! acquire data-lockTPWrite "Sending " + ValToStr(trajectory_size) + " points to MOTION task";ROS_trajectory := trajectory;ROS_trajectory_size := trajectory_size;ROS_new_trajectory := TRUE;ROS_trajectory_lock := FALSE;  ! release data-lock
ENDPROCENDMODULE

ROS_stateServer

 

 

MODULE ROS_stateServer! Software License Agreement (BSD License)
!
! Copyright (c) 2012, Edward Venator, Case Western Reserve University
! Copyright (c) 2012, Jeremy Zoss, Southwest Research Institute
! All rights reserved.
!
! Redistribution and use in source and binary forms, with or without modification,
! are permitted provided that the following conditions are met:
!
!   Redistributions of source code must retain the above copyright notice, this
!       list of conditions and the following disclaimer.
!   Redistributions in binary form must reproduce the above copyright notice, this
!       list of conditions and the following disclaimer in the documentation
!       and/or other materials provided with the distribution.
!   Neither the name of the Case Western Reserve University nor the names of its contributors
!       may be used to endorse or promote products derived from this software without
!       specific prior written permission.
!
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
! EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
! SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
! TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
! BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
! WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.LOCAL CONST num server_port := 11002;
LOCAL CONST num update_rate := 0.10;  ! broadcast rate (sec)LOCAL VAR socketdev server_socket;
LOCAL VAR socketdev client_socket;PROC main()TPWrite "StateServer: Waiting for connection.";ROS_init_socket server_socket, server_port;ROS_wait_for_client server_socket, client_socket;WHILE (TRUE) DOsend_joints;WaitTime update_rate;ENDWHILEERROR (ERR_SOCK_TIMEOUT, ERR_SOCK_CLOSED)IF (ERRNO=ERR_SOCK_TIMEOUT) OR (ERRNO=ERR_SOCK_CLOSED) THENSkipWarn;  ! TBD: include this error data in the message logged below?ErrWrite \W, "ROS StateServer disconnect", "Connection lost.  Waiting for new connection.";ExitCycle;  ! restart programELSETRYNEXT;ENDIF
UNDO
ENDPROCLOCAL PROC send_joints()VAR ROS_msg_joint_data message;VAR jointtarget joints;! get current joint position (degrees)joints := CJointT();! create messagemessage.header := [ROS_MSG_TYPE_JOINT, ROS_COM_TYPE_TOPIC, ROS_REPLY_TYPE_INVALID];message.sequence_id := 0;message.joints := joints.robax;! send message to clientROS_send_msg_joint_data client_socket, message;ERRORRAISE;  ! raise errors to calling code
ENDPROCENDMODULE

ROS_motion

 

 

MODULE ROS_motion! Software License Agreement (BSD License)
!
! Copyright (c) 2012, Edward Venator, Case Western Reserve University
! Copyright (c) 2012, Jeremy Zoss, Southwest Research Institute
! All rights reserved.
!
! Redistribution and use in source and binary forms, with or without modification,
! are permitted provided that the following conditions are met:
!
!   Redistributions of source code must retain the above copyright notice, this
!       list of conditions and the following disclaimer.
!   Redistributions in binary form must reproduce the above copyright notice, this
!       list of conditions and the following disclaimer in the documentation
!       and/or other materials provided with the distribution.
!   Neither the name of the Case Western Reserve University nor the names of its contributors
!       may be used to endorse or promote products derived from this software without
!       specific prior written permission.
!
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
! EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
! SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
! TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
! BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
! WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.LOCAL CONST zonedata DEFAULT_CORNER_DIST := z10;
LOCAL VAR ROS_joint_trajectory_pt trajectory{MAX_TRAJ_LENGTH};
LOCAL VAR num trajectory_size := 0;
LOCAL VAR intnum intr_new_trajectory;PROC main()VAR num current_index;VAR jointtarget target;VAR speeddata move_speed := v10;  ! default speedVAR zonedata stop_mode;VAR bool skip_move;! Set up interrupt to watch for new trajectoryIDelete intr_new_trajectory;    ! clear interrupt handler, in case restarted with ExitCycleCONNECT intr_new_trajectory WITH new_trajectory_handler;IPers ROS_new_trajectory, intr_new_trajectory;WHILE true DO! Check for new TrajectoryIF (ROS_new_trajectory)init_trajectory;! execute all points in this trajectoryIF (trajectory_size > 0) THENFOR current_index FROM 1 TO trajectory_size DOtarget.robax := trajectory{current_index}.joint_pos;skip_move := (current_index = 1) AND is_near(target.robax, 0.1);stop_mode := DEFAULT_CORNER_DIST;  ! assume we're smoothing between pointsIF (current_index = trajectory_size) stop_mode := fine;  ! stop at path end! Execute move commandIF (NOT skip_move)MoveAbsJ target, move_speed, \T:=trajectory{current_index}.duration, stop_mode, tool0;ENDFORtrajectory_size := 0;  ! trajectory doneENDIFWaitTime 0.05;  ! Throttle loop while waiting for new commandENDWHILE
ERRORErrWrite \W, "Motion Error", "Error executing motion.  Aborting trajectory.";abort_trajectory;
ENDPROCLOCAL PROC init_trajectory()clear_path;                    ! cancel any active motionsWaitTestAndSet ROS_trajectory_lock;  ! acquire data-locktrajectory := ROS_trajectory;            ! copy to local vartrajectory_size := ROS_trajectory_size;  ! copy to local varROS_new_trajectory := FALSE;ROS_trajectory_lock := FALSE;         ! release data-lock
ENDPROCLOCAL FUNC bool is_near(robjoint target, num tol)VAR jointtarget curr_jnt;curr_jnt := CJointT();RETURN ( ABS(curr_jnt.robax.rax_1 - target.rax_1) < tol )AND ( ABS(curr_jnt.robax.rax_2 - target.rax_2) < tol )AND ( ABS(curr_jnt.robax.rax_3 - target.rax_3) < tol )AND ( ABS(curr_jnt.robax.rax_4 - target.rax_4) < tol )AND ( ABS(curr_jnt.robax.rax_5 - target.rax_5) < tol )AND ( ABS(curr_jnt.robax.rax_6 - target.rax_6) < tol );
ENDFUNCLOCAL PROC abort_trajectory()trajectory_size := 0;  ! "clear" local trajectoryclear_path;ExitCycle;  ! restart program
ENDPROCLOCAL PROC clear_path()IF ( NOT (IsStopMoveAct(\FromMoveTask) OR IsStopMoveAct(\FromNonMoveTask)) )StopMove;          ! stop any active motionsClearPath;             ! clear queued motion commandsStartMove;             ! re-enable motions
ENDPROCLOCAL TRAP new_trajectory_handlerIF (NOT ROS_new_trajectory) RETURN;abort_trajectory;
ENDTRAPENDMODULE

 

 

 

C 运行ROS服务器

注意,RAPID运行模式为连续。

在ROS端编译完成abb和abb_experimental包,可从github下载。

支持IRB2400、IRB5400、IRB6600、IRB6640、IRB120、IRB120T和IRB4400等。

在终端启动:

 

exbot@relay-Aspire-4741:~$ roslaunch abb_irb120_moveit_config moveit_planning_execution.launch sim:=false robot_ip:=192.168.1.100

winpc显示如下:

 

rospc显示如下:

1 手动模式

程序指针 "PP to Main",Enable使得 "Motors On",点击运行按钮。即可在rospc端控制机械臂运动。

winpc端:

rospc端:

手动模式,规划执行过程有可能中断,请查阅相关文档。

2 自动模式

 "Motors On"并点击运行模式。

winpc:

如果是实际机器人,请注意为全速运行。

rospc:

--

 

这篇关于ROS连接ABB机械臂调试详细教程-ROS(indigo)和ABB RobotStudio 6.03.02-的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/310320

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

Java 连接Sql sever 2008

Java 连接Sql sever 2008 /Sql sever 2008 R2 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestJDBC

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode