strlen的函数原型

strlen的函数原型,第1张

extern unsigned int strlen(char *s)

在Visual C++ 6.0中,原型为size_t strlen(const char *string),其中size_t实际上是unsigned int,在蔽山VC6.0中可以看到宏消中这样的代码:typedef unsigned int size_t。

头文件:string.h

格式:strlen (字符数组名)

功能:计算给定字符串的(unsigned int型)长度,不包括'\0'桥握在内

说明:返回s的长度,不包括结束符NULL。

相关函数

TCHAR.H routine _UNICODE &_MBCS not defined_MBCS defined_UNICODE defined_tcslen strlen strlen wcslen  _tcsclen strlen _mbslen wcslen

因为VS里的很多字符编码都是采用unicode来编码的,为了兼容字符集。微软开发了tchar包,tchar 在unicode下是wchar(双字符),而普通是char。

因为C++支持两种字符串,即常规芦察侍的ANSI编码和Unicode编码,这样对应的就有了两套字符串字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串 。微软将这两套字符集及其 *** 作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数 。

为了存储这样的通用字符,就有了TCHAR: 当没有定义_UNICODE宏时,TCHAR = char,_tcslen = strlen;当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wcslen 。陪吵当我们定义了UNICODE宏,就相当于告没没诉了编译器:我准备采用UNICODE版本。这个时候,TCHAR就会变成了wchar_t。而未定义UNICODE宏时,TCHAR变成了unsigned char 。这样就可以很好的切换宽窄字符集。tchar可用于双字节字符串,使程序可以用于中日韩等国 语言文字处理、显示。使编程方法简化。

ModBus通讯协议简介

Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它历掘设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和 *** 作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。Modbus通讯物理接口可以选用串口(包括RS232和RS485),也可以选择以太网口。其通信遵循以下的过程:

● 主设备向从设备发送请求

● 从设备分析并处理主设备的请求,然后向主设备发送结果

● 如果出现任何差错,从设备将返回一个异常功能码

英创ModBus通讯协议软件产品简介

英创公司推出的ModBus通讯协议软件产品主要应用于英创ARM9嵌入式主板环境,英创工控主板均带有丰富的串口、网络资源、通用GPIO接口等,同时具有强大的处理能力。结合ModBus通讯协议软件,就可非常方便地构成符合ModBus通讯规范的主控(Master)及设备(Slave)的应用平台。针对ModBus通讯的主从方式这一特点,英创公司的ModBus通讯协议软件包分为两个可独立使用的部分,即“ModBus主控协议软件”(简称modbus_Master)以及“ModBus设备方协议软件”(简称modbus_Slave)。目前英创ModBus通讯协议软件运行于WinCE环境下,均以C函数加静态LIB库的形式提供给客户。其主要特征如下:

● 非常适用于实时的工业应用

● 可以支持基于串口的ModBus通讯协议应用或TCP的ModBus通讯协议应用

● RTU传输模式

● 支持大多数的Modbus功能码 *** 作,包括对线圈、离散开关输入的位 *** 作,以及对寄存器的字节 *** 作

● 支持广播地址

● 可以灵活设置ModBus通讯的超时时间

● 可以获取通讯中传输协议的错误代码的详细信息

英创ModBus协议软件通讯关系图

Linux

英创ModBus协议软件支持的功能码

功能码 描述

1 读单个线圈

2 读离散量输入

3 读多个寄存器

4 读输入寄存器

5 写单个线圈

6 写单个寄存器

15 写多个线圈

16 写多个寄存器

22 屏蔽写寄存器

23 读/写寄存器

软件基本使用方法

为了方便应用程序的使用,对不同的通讯介质保持一致的代码形式,英创所提供的ModBus协议软件(包括modbus_Master和modbus_Slave)中的API函数可以同时支持基于串口和TCP的Modbus协议,应用程序只需要在调用初始化函数时,用不同参数区分即可,有关参数的说明请参见相应的头文件饥烂乎:modbus_Master.h和modbus_Slave.h

1、modbus_Master的应用

作为Modbus客户端模式的应用,主要是准备请求并向服务器设备发送请求,并等待服务器的响应。在做此类应用开发时,用户可参考Modbus标准文献以及被控设备的通讯接口数据手册,直接调用英创提供的modbus_Master软件包提供了相应的 *** 作API函数,来完成对服务器设备的访问和控制。在进行此类应用开发时,用户只需要包烂悉含modbus_master.h/ modbus_master.lib 即可。

2、modbus_Slave的应用

作为ModBus服务器模式的应用,主要需要实现了对于ModBus应用报文的分析与响应,但这还只是ModBus整个通讯的一部分,另一部分是还需要有对应用数据的访问,这部分的内容则需要用户自己来进行定义。为了方便客户的使用,在modbus_Slave软件包中通过函数指针的形式,实现了这些用户接口函数的自动加载,将用户应用数据处理和ModBus应用报文响应关联起来。用户只需根据需求定义这些接口函数来实现相应的功能,各个函数具体的定义是通过专门的一个CPP文件:DataProvider.cpp来实现。

由此可见在这类的开发应用时,需包含两个部分的内容,一部分是 modbus_slave.h/ modbus_slave.lib定义的API函数;另一部分是DataProvider.h /DataProvider.cpp定义的用户数据接口函数,其中接口函数需要用户在DataProvider.cpp中具体实现。

为了及时地响应ModBus应用报文,需要注意的是在程序设计时应设计一个线程反复调用modbus_Slave执行函数,该函数为阻塞模式。

举例如下:

(1)启动modbus设备方协议

hPort = mbusSlave_StartupServer( _T('*'), 1, 10000, mbusSlave_Interface )

或者

hPort=mbusSlave_StartupServer( _T('COM3:9600-8-1-0'),1,10000, mbusSlave_Interface )

(2)线程中调用执行函数Serverloop 响应请求

while( 1 )

{

// 调用执行函数,用于对ModBus报文的分析和响应。

result = mbusSlave_ServerLoop( hPort )

if( result!=0 ) // 检查是否返回错误

{

// 出错处理:本例为获取并打印错误代码的文本信息

wcscpy( szText, mbusSlave_GetErrorText( result ) )

i1 = wcslen( szText )

if( i1>0 )

{

wcstombs( strText, szText, i1 )

printf( ' error code: %s!\n', strText )

}

}

}

之前英创公司提供的ModBus通讯协议软件,均是以C函数加静态库(modbus.lib或libmodbus.a文件)的形式提供给客户。随着越来越多的客户使用,英创将ModBus通讯协议,特别是主控协议软件(简称modbus_Master)以动态库(modbus_Master.dll或libmbusmaster.so文件)的形式预装到英创嵌入式工控主板内核系统中,以方便客户应用程序的调用。预装Modbus协议的工控主板包括英创ESM系列所有主板(ESM6802、ESM6800、ESM335x、ESM928x等)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12290720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存