`
逆风的香1314
  • 浏览: 1453267 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

UNICODE 编程入门

阅读更多
 简介

    如果你编写的程序是针对非英语国家的用户,如中国、日本、东欧和中东地区,那么你一定要熟悉 UNICODE 字符集。尤其是用 Visual C++/MFC 编写针对上述国家和地区的用户的程序时,如果你想让自己的应用程序得到更广泛的用户,那么必须考虑代码 UNICODE 的兼容性,也就是说它既在 ASCII 模式下运行 ,也能在UNICODE 模式下运行。本文将介绍 UNICODE 的一些基本编程知识,澄清很多人(包括我自己)在这个问题上存在的模糊认识。对于任何使用 Visual C++ 和/或 MFC 编程的人来说,这篇文章肯定值得一读。

UNICODE到底是什么?

    UNICODE 是目前用来解决 ASCII 码 256 个字符限制问题的一种比较流行的解决方案。大家知道,ASCII 字符集只有256个字符,用 0-255 之间的数字来表示。包括大小写字母、数字以及少数特殊字符;如标点符号、货币符号等。对于大多数拉丁语言来说,这些字符已经够用。但是,许多亚洲和东方语言所用的字符远远不止256个字符。有些超过千个。人们为了突破 ASCII 码字符数的限制,试图用一种简单的方法来针对超过256个字符的语言编写计算机程序。于是 UNICODE 应运而生。UNICODE 通过用双字节来表示一个字符,从而在更大范围内将数字代码映射到多种语言的字符集。

Visual C++的解决方案

    作为软件开发人员,如何熟练有效地使用 UNICODE 呢?如果你正在用 Visual C++ 编写程序,UNICODE 兼容性意味着你的程序是否具有国际化特征,也就是说你的应用程序是针对本地市场还是国际市场。一旦你作出了决定,那么就得在代码中实现具体细节。好在 Visual C++ 提供了很多内建功能来支持 UNICODE,在创建工程时就可以利用 Visual C++ 提供的这些功能。在产生应用程序框架代码之前,AppWizard 允许开发人员决定是否支持 UNICODE。Win32 SDK 包含有一些数据类型遵循 UNICODE 编码规则,MFC 以宏的形式提供了将一般文本转换成 UNICODE 数据类型的途径。开发人员只需要稍微改变一下编写代码的习惯便可以轻松编写支持 UNICODE 的应用。

字符串

    C 程序员一般是用 char 关键字象下面这样来声明一个字符串数组:
       char str[100];       
象下面这样声明函数原形:
       void strcpy( char *out, char *in );        


为了将上面的声明改成支持双字节的 UNICODE 字符集,可以用下面的方法:

       wchar_t str[100];        
或者
       void wcscpy( wchar_t *out, wchar_t *in );        

    此外,微软还提供一种通过预处理指令来实现 UNICODE。每当用 Visual C++ 创建新工程时,只要确定是否支持另外一种字符集,则 AppWizard 将会在头文件中插入预处理指令。这些指令告诉编译器程序想要支持何种字符集。这样在使用VC++提供的通用数据类型时,编译器将用相应的数据类型把通用数据类型替换成所需要支持的字符集。这样很容易将代码重新编译成支持其它字符集的程序。
    为了在 Visual C++ 6.0 中激活 UNICODE 标准,可以这样做:打开工程文件后,从主菜单中选择“Project | Settings”打开工程设置对话框 => 然后选择“C/C++”标签 => 在“Preprocessor definitions”编辑框中添加 UNICODE 或者 _UNICODE 预处理宏指令。如图一所示:


图一 Project Settings 对话框

注意这里的 UNICODE 和 _UNICODE 有什么区别呢?前者没有下划线,专门用于 Windows 头文件;后者有一个前缀下划线,专门用于 C 运行时头文件。
在代码中,凡是用关键字 char  的地方都用 TCHAR 取代;凡是用 char * 的地方都用 LPTSTR 取代;凡是定义在双引号中的字符串常量(如"VCKBASE Online Journal")都用 TEXT 宏重写:

       TEXT("VCKBASE Online Journal");       
TEXT 宏的主要作用是当定义了 UNICODE/_UNICODE 预处理指令时,字符串被标志为双字节字符串,否则字符串被标示为 ANSI 字符串。TEXT 的定义如下:
      TEXT(
           LPTSTR string // ANSI 或者 Unicode 字符串
      );
      参数   string 为字符串指针,指向被解释的 Unicode 或者 ANSI 字符串
在文档中 微软提供了包括通用类型在内的几种数据类型都与 ASCII 和 UNICODE兼容。这一点可以参考微软在线文档有关“通用数据类型和数据类型”的章节。

例子代码

下面通过一些简单的例子来进一步探讨 UNICODE 编程。

使用 ASCII 字符集的“Hello, World”:

//*********************************
// 用 MFC 实现的"Hello World!" 代码
//*********************************

//hello.cpp

#include <afxwin.h>

// Declare the application class
class CHelloApp : public CWinApp
{
public:
   virtual BOOL InitInstance();
};

// Create an instance of the application class
CHelloApp HelloApp;
 
// Declare the main window class
class CHelloWindow : public CFrameWnd
{
   CStatic* cs;
public:
   CHelloWindow();
};

// The InitInstance function is called each
// time the application first executes.
BOOL CHelloApp::InitInstance()
{
   m_pMainWnd = new CHelloWindow();
   m_pMainWnd->ShowWindow(m_nCmdShow);
   m_pMainWnd->UpdateWindow();
   return TRUE;
}

// The constructor for the window class
CHelloWindow::CHelloWindow()
{
   // Create the window itself
   Create(NULL, "Hello World!", WS_OVERLAPPEDWINDOW, 
          CRect(0,0,200,200)); 
	
   // Create a static label
   cs = new CStatic();
   cs->Create("hello world", WS_CHILD|WS_VISIBLE|SS_CENTER, 
              CRect(50,80,150,150), this);
}

修改上面的代码使之支持 UNICODE 字符集,串常量必须要改成对应的 UNICODE 字符。方法是对串常量使用TEXT 宏。这个宏将告诉预处理器检查使用什么样的字符标准:

// The constructor for the window class
CHelloWindow::CHelloWindow()
{
   // Create the window itself
   Create(NULL, TEXT("Hello World!"), WS_OVERLAPPEDWINDOW, 
          CRect(0,0,200,200));
	
   // Create a static label
   cs = new CStatic();
   cs->Create( TEXT("hello world!"), WS_CHILD|WS_VISIBLE|SS_CENTER, 
              CRect(50,80,150,150), this);
}

当预处理器碰到通用数据类型,它便检查 AFXWIN.H 头文件的 _UNICODE 定义。然后根据 UNICODE 定义插入相应的的数据类型。

下面的这个例子使用 Win32 API 函数和通用数据类型设置 C 盘的卷标。

//******************
// 设置 C 盘的卷标
//******************

// drvsvl.cpp

#include <windows.h>
#include <iostream.h>

void main()
{
   BOOL success;
   char volumeName[MAX_PATH];

   cout << "输入新的 C 盘卷标:";
   cin >> volumeName;

   success = SetVolumeLabel("c:\\", volumeName);
   if (success)
      cout << "成功\n";
   else
      cout << "错误代码:" << GetLastError() << endl;
}

通过使用 TCHAR 数据类型,将这段代码最上面的字符数组声明为两个字节的字符。TEXT 宏再次被用于字符串常量:

void main()
{
   BOOL success;
	
   TCHAR volumeName[MAX_PATH];

   cout << TEXT("输入新的 C 盘卷标: ");
   cin >> volumeName;

   success = SetVolumeLabel(TEXT("c:\\" ), volumeName);
   if (success)
      cout << TEXT("成功\n");
   else
      cout << TEXT("错误代码:") << GetLastError() << endl;
} 
Visual C++ 中的通用数据类型

    Visual C++ 提供了几种 MFC 专用的数据类型用于创建具有国际化特性的应用程序。这些定义很通用,完全可以在 UNICODE、ASCII、DBCS (双字节字符集) 和 MBCS (多字节字符集)。由于篇幅所限,本文不打算涉及所有上面提到的这些字符集。有关它们的详细资料请参考相关资料。MFC 提供了一种透明的方式来实现这些字符集。通用数据类型的映射到哪个字符集以及映射方式是根据工程的设置决定的,默认值为 ASCII 模式,其它几个可选项是 MBCS、DBCS 或者 UNICODE。本文主要讨论 UNICODE,所以下表中只列出了 ASCII 与 UNICODE 字符之间的映射关系:

表一:

通用 MFC 数据类型
映射到 ASCII
映射到 UNICODE
注释
_TCHAR
char
wchar_t
_TCHAR 是一个映射宏,当定义 UNICODE 时,该数据类型映射到 wchar_t,如果没有定义 UNICODE,那么它映射到 char。
_T 或 _TEXT
char 常量字符串
wchar_t 常量字符串
功能与宏相同,在 ASCII 模式下,它们被忽略,也就是说被预处理器删除掉,但是如果定义了UNICODE, 则它们会将常量字符串转换成等价的 UNICODE 。
LPTSTR
char*, LPSTR(Win32)
wchar_t*
可移植的32位字符串指针。它将字符类型映射到工程设置的类型。
LPCTSTR
const char*, LPCSTR(Win32)
const wchar_t*
可移植的32位常量字符串指针。它将字符类型常量映射到工程设置的类型。

使用表一中列出的通用数据类型,开发人员可以保证所创建的工程始终是针对一种字符集,这些通用数据类型就相当于占位符,在编译时被特定的字节所替代,使得应用程序在 ASCII 和 UNICODE 模式下都能运行。但是,有一点要特别注意,那就是上述的通用数据类型为微软专有,与 ANSI 标准并不兼容。有关微软提供的这些通用数据类型详细描述请参考 MSDN 库文档。

有关技术注释

    为了成功编译支持 UNICODE 的 MFC 程序,必须使用 MFC 的 UNICODE 版本库。该库在定制安装Visual C++ 时是个可选安装项。
    有一点很重要:那就是不使用 UNICODE 标准在外观上并不影响程序的执行。也就是说,上面提到过的代码不管设没设置 _UNICODE 生成选项,最终都能生成正常运行的程序。当开发人员使用多个版本的Win32 API函数时才会出现问题。
    在使用多个版本的 Win32 API函数(任何有字符或字符串作为参数的 Win32 API函数)时,编译器根据是否设置 _UNICODE 指令来决定调用正确的函数。如果没有定义_UNICODE,那么编译器将默认调用 ASCII 版本函数。

结束语

    综上所述可以看到,编译 UNICODE 版本的程序并不难。只是在编写代码时记住函数调用上些微的变化。微软为此提供的扩展是开发人员能够以透明的方式选择所用的字符集,为应用软件的国际化打开了方便之门。
    Jeffrey Richter 在他的《Windows 核心编程》(机械工业出版社-王建华、张焕生、侯丽坤等译)一书中专门用一章讨论了 UNICODE。翻译得也不错。有兴趣的朋友不妨找来看看。


<script type="text/javascript"><!----></script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> <script> window.google_render_ad(); </script> <iframe name="google_ads_frame" scrolling="no" marginheight="0" allowtransparency="" marginwidth="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4159669282587342&amp;amp;dt=1223619246611&amp;amp;lmt=1223619245&amp;amp;alt_color=FFFFFF&amp;amp;format=468x60_as&amp;amp;output=html&amp;amp;correlator=1223619245609&amp;amp;url=http%3A%2F%2Fwww.vckbase.com%2Fdocument%2Fviewdoc%2F%3Fid%3D642&amp;amp;color_bg=ECF8FF&amp;amp;color_text=6F6F6F&amp;amp;color_link=0000CC&amp;amp;color_url=008000&amp;amp;color_border=B4D0DC&amp;amp;ad_type=text_image&amp;amp;ea=off&amp;amp;frm=0&amp;amp;cc=11&amp;amp;ga_vid=331801136.1223619247&amp;amp;ga_sid=1223619247&amp;amp;ga_hid=1247554040&amp;amp;flash=9.0.124.0&amp;amp;u_h=768&amp;amp;u_w=1024&amp;amp;u_ah=738&amp;amp;u_aw=1024&amp;amp;u_cd=32&amp;amp;u_tz=480&amp;amp;u_java=true" frameborder="0" height="60" width="468"></iframe>

最新评论 [发表评论] [文章投稿] 查看所有评论 推荐给好友 打印

写的好,谢谢!!! ( liangquan 发表于 2008-9-11 15:50:00)
 
在很多资料上看到BYTE数据类型的使用,而我却一点也不了解,楼主能不能帮忙解释一下。
可以发到我邮箱:kyozpeng@126.com ( kyos 发表于 2006-7-4 17:01:00)
 
1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?
  可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。
  调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。

引用于:http://fornothing.blogdriver.com/fornothing/

所以:光标的位置是strlen函数的反回值除以2 ( bluebaby9811 发表于 2006-5-22 10:51:00)
 
可以用API MultiByteToWideChar WideCharToMultiByte 试试 ( eaglehxp 发表于 2004-12-8 9:45:00)
 
现在输入汉字只显示一半,就是光标根据lstrlen()才移动一格,怎么办啊,急啊~!~!~!有没有什么根本的解决办法啊 ( hennise 发表于 2004-8-3 12:55:00)
 
请问高手,我上述问题都解决了,但我用lstrlen()来判断长度来定位光标时,出现问题,就是一个汉字是一个unicode 字符,但要占两个光标的位置,怎样解决这个问题啊,我把文档所有的操作都重载了一遍,但不知道windows默认对unicode的操作是怎样的,跪请高手赐教!! ( hennise 发表于 2004-8-3 12:54:00)
 
请问高手,我上述问题都解决了,但我用lstrlen()来判断长度来定位光标时,出现问题,就是一个汉字是一个unicode 字符,但要占两个光标的位置,怎样解决这个问题啊,我把文档所有的操作都重载了一遍,但不知道windows默认对unicode的操作是怎样的,跪请高手赐教!! ( hennise 发表于 2004-8-3 12:54:00)
 
星星说的对!!
光加上_UNICODE 哪行呀!这不是胡扯嘛!!
呵呵!! ( ll_syl 发表于 2004-7-23 14:11:00)
 

支持哦 ( dahan2005 发表于 2004-5-27 17:44:00)
 
如何在调试的时候看到字符串的值
( lh2078 发表于 2004-3-30 16:47:00)
 
.......................................................
More...
分享到:
评论

相关推荐

    li_3ck_02a_1118.pdf

    li_3ck_02a_1118

    基于MATLAB的牛顿迭代法实现

    基于MATLAB的牛顿迭代法实现

    mellitz_3ck_01_0319.pdf

    mellitz_3ck_01_0319

    2025探索银行业人工智能驱动技术转型的投资回报率

    内容概要:文章阐述了银行采用人工智能(AI)技术替代传统系统的紧迫性和收益,讨论了通过构建现代化的数据和技术平台实现效率提升的方法,同时强调实施过程中确保数据质量和建立信任的重要性。文中提及,在金融行业中,若想优化业绩则必须拥抱AI带来的机遇,并为此进行经营模式的革新。根据Workday主办的研讨会内容,PwC金融服务风险与监管领导和Workday金融服务高层指出了大部分银行对AI认知不足的问题,强调AI在金融、人力资源以及IT等领域的广泛应用潜力及具体应用场景,如欺诈检测、技能映射和财务管理方面的作用。并且提到了AI部署过程中可能出现的技术与非技术难题及相应解决办法,鼓励金融机构及时投资建设新型基础设施,以保持竞争力。 适用人群:银行及其他金融机构管理人员;金融科技领域的专业研究人员;对企业数字化和智能化转型感兴趣的商业分析师、投资者;从事信息技术咨询工作的顾问。 使用场景及目标:本文可以帮助金融机构制定合理的技术发展战略规划,评估是否有必要推进AI技术转型,同时也为希望涉足银行科技项目的开发者提供了宝贵的市场洞察,帮助理解行业内普遍存在的困难与潜在的市场需求。此外,对于想要了解银行

    matlab程序代码项目案例论文+程序 基于在线优化的快速模型预测控制Fast model predicitive control with matlab interface.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_043071]Phase Manager and a Scalable Batching Solution.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_044386]1769-SM2 Compact I-O to DSI Module - Multi Drive Mode Operation - with.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_041232]Monitor I-O Connections in Logix.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    chromedriver-linux64-136.0.7058.0.zip

    chromedriver-linux64-136.0.7058.0.zip

    [AB PLC例程源码][MMS_042504]Logix5000 interface to Atlas-Copco Tool Controller over EtherNet-IP.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042349]How to read-write data to-from a PLC using OPC in Visual Basic 6.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    电力工程领域中背压热电联产电厂的设计与参数计算

    内容概要:本文档介绍了背压热电联产(CHP)发电厂的详细设计步骤,涵盖确定各状态点的压力、温度、比焓以及质量流率的具体方法。主要内容围绕计算净电功率、燃料消耗及其效率展开,并提供了T-s图绘制的指南。针对每个组件(如蒸汽轮机、冷凝器、除氧器等),都列出了详细的效率假设和压力损失表,为实际工程应用提供了宝贵的参考资料和操作指导。同时,该作业任务要求学生从给定初始值中选择合适的操作条件进行系统模拟,并利用课程讲义和Moodle平台资料完成计算流程。 适用人群:对能源转换和动力设备设计感兴趣的学生或者初涉该领域的工程师。 使用场景及目标:旨在帮助学员深入了解并掌握背压热电联产装置的工作原理和技术指标计算的方法论,通过实践练习提高他们的问题解决能力。 其他说明:文档强调了稳态运行假设的重要性,即物质平衡等于能量输入等于输出的原则,并鼓励参与者借助附录提供的典型操作参数图表来寻找解决问题的方向。此外,它还特别指出对于一些变量值求解可能需要迭代法来进行调整,直至获得稳定结果。提交的报告必须含有一份详细的T-s图和其他必要附件。

    机器学习-市财政收入分析(含数据集)

    机器学习_市财政收入分析(含数据集)

    [AB PLC例程源码][MMS_046989]KAT with Code Sequencer.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    tracy_3cd_01_0318.pdf

    tracy_3cd_01_0318

    lusted_3cd_01_0918.pdf

    lusted_3cd_01_0918

    基于51的自动分拣系统设计20250307

    题目:基于51的自动分拣系统设计 主控:AT89C52 测距模块:超声波测距模块 甲醛传感器(ADC0832+滑动变阻器模拟) 粉尘传感器(PCF8591+滑动变阻器模拟) 净化模块(继电器驱动蓝灯) 排风模块(继电器驱动绿灯) 电源电路(5V降压为3.3V供电) 显示模块(LCD1602) 声光报警 按键(3个,切换阈值选择,阈值加减) 检测物体:开关模拟 电机驱动模块(继电器驱动直流电机转动) 功能: 1.显示屏显示甲醛,粉尘浓度可以切换设置阈值。 2.通过甲醛传感器检测车间环境,大于阈值时声光报警并启动净化模块。 3.通过粉尘传感器检测车间环境,大于阈值时声光报警并启动排风模块。 4.采用超声波传感器进行物体超高监测异常(大于XX距离)时触发声光报警 5.检测到物体(开关闭合)直流电机转动(模拟传送带)

    network-server

    network_server

    [AB PLC例程源码][MMS_046691]Integrated Architecture Foundations of Modular Programming.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    sun_01_0308.pdf

    sun_01_0308

Global site tag (gtag.js) - Google Analytics