主要内容

创建一个目标通信通道Processor-in-the-Loop(公益诉讼)模拟

为processor-in-the-loop实现一个通信信道(公益诉讼)模拟。

使不同的进程之间的数据交换的通信通道。通信通道支持功能要求之间的数据交换模型®开发计算机上金宝app运行的软件环境(主机)和部署目标硬件上运行的代码。金宝app例如,一个公益诉讼模拟。

你了解rtiostream接口以及它如何提供一个通用的通信通道,您可以实现目标的形式连接驱动程序不同的连接类型。这个例子描述了如何使用默认的TCP / IP实现。

两个实体,站和站B,使用rtiostream接口来建立一个通信信道和数据交换。对于这个示例,站和站内配置B是桌面电脑上相同的过程。

仿真目标连接驱动程序支持一个目标公益诉讼。金宝app在仿真,站和站B代表目标和主机交换数据的计算机通过通信通道。目标连接在主机端,司机被实现为一个共享库中加载和从MATLAB®产品。在目标方面,司机是源代码或库,与在目标系统上运行的应用程序。

此外,您可以:

  • 为TCP / IP配置自己的目标端驱动程序与TCP / IP问题吗?看看交换机的默认日志操作司机。

  • 为串行通信配置驱动问题吗?看看交换机提供的日志。

  • 实现自定义目标连接驱动程序,例如,通过使用可以或USB主机和目标的通信通道。

另请参阅测试生成的代码与硅和公益诉讼模拟配置Processor-In-The-Loop(公益诉讼),一个自定义的目标

默认视图源代码TCP / IP实现

文件rtiostream_tcpip。c实现了客户端和服务器端TCP / IP通信。启动参数配置驱动程序在客户端或服务器模式。您可以使用此源文件作为一个起点一个定制的实现。每一方的通信通道只需要一个或其他的服务器或客户端实现。如果客户端和服务器驱动程序运行在不同的体系结构,考虑将每个架构在一个单独的驱动代码源文件。

rtiostream的头文件。h包含函数的原型rtIOStreamOpen /发送/ Recv /关闭。它包括(使用# Include)为自定义实现。

提取TCP / IP驱动程序源代码的位置。

rtiostream_src_dir = fullfile (matlabroot,“工具箱”,“编码器”,“rtiostream”,“src”);tcpip_dir = fullfile (rtiostream_src_dir,“rtiostreamtcpip”);

rtiostream_tcpip.c视图。

编辑(fullfile (tcpip_dir,“rtiostream_tcpip.c”));

rtiostream.h视图。

编辑(fullfile (rtiostream_src_dir,“rtiostream.h”));

共享库文件的位置

从MATLAB访问目标连接驱动产品,你必须编译一个共享库。共享库必须位于您的系统路径。共享库默认TCP / IP的司机位于matlabroot / bin /拱美元(美元拱你的系统架构,例如,win64)。

共享库文件扩展名和位置取决于您的操作系统。

[~,~,sharedLibExt] = coder.BuildConfig.getStdLibInfo;

确定共享库站和站B。

libTcpip = [“libmwrtiostreamtcpip”sharedLibExt];disp (libTcpip)
libmwrtiostreamtcpip.dll

测试目标连接驱动程序

如果你是实现一个自定义的目标连接驱动程序,在MATLAB中测试它是有帮助的产品。下面的例子显示了如何加载默认的TCP / IP连接目标驱动程序和使用它们之间的数据交换站和站B。

访问驱动程序,您可以使用MEX-file rtiostream_wrapper。MEX-file,您可以加载共享库和访问rtiostream函数来打开和关闭一个rtiostream频道,和发送和接收数据。

站和站在主机上运行。站一个配置TCP / IP服务器和站B作为TCP / IP客户端。对于主机目标交流,您通常配置主机作为TCP / IP客户端和目标作为TCP / IP服务器。

选择一个TCP端口号。

如果usejava (jvm的)%找到自由港tempSocket = java.net.ServerSocket (0);端口= num2str (tempSocket.getLocalPort);tempSocket.close;其他的%使用硬编码的端口端口=“14646”;结束

打开站rtiostream作为TCP / IP服务器。

stationA = rtiostream_wrapper (libTcpip,“开放”,“客户”,' 0 ',“利用”,' 0 ',“- port”、港口);

如果打开通信通道,返回值是一个句柄连接。返回值为- 1指示一个错误。

检查返回值。

断言(stationA ~ = (1))

打开站B rtiostream作为TCP / IP客户端。

stationB = rtiostream_wrapper (libTcpip,“开放”,“客户”,' 1 ',“利用”,' 0 ',“- port”、港口、的主机名,“localhost”);

如果打开通信通道,返回值是一个句柄连接。返回值为- 1指示一个错误。

检查返回值。

断言(stationB ~ = (1))

从站B站发送数据

目标连接驱动程序发送数据流在8位字节。对于不byte-addressable处理器,数据发送中最小的可寻址的字的大小。

从站B站发送消息数据。

msgOut = uint8 (”站,这是站b。你在吗?在“);[retVal, sizeSent] = rtiostream_wrapper (libTcpip,“发送”,stationB,msgOut,长度(msgOut));

零表示成功的返回值。

断言(retVal = = 0);

确保消息被发送的字节数。

断言(sizeSent = =长度(msgOut));

允许时间数据传输完成。

暂停(0.2)

接收数据在车站。

[retVal, msgRecvd sizeRecvd] = rtiostream_wrapper (libTcpip,“recv”,stationA,100);

零表示成功的返回值。

断言(retVal = = 0);

确保消息的字节。

断言(sizeRecvd = = sizeSent);

显示接收到的数据。

disp (char (msgRecvd))
站,这是站b。你在吗?在

发送一个响应从车站站B

从站一站B发送响应数据。

msgOut = uint8 (站B,这是车站答:是的,我米!结束了。”);[~,sizeSent] = rtiostream_wrapper (libTcpip,% #好吧“发送”,stationA,msgOut,长度(msgOut));

允许时间数据传输完成。

暂停(0.2)

接收数据在站B。

[~,msgRecvd sizeRecvd] = rtiostream_wrapper (libTcpip,% #好吧“recv”,stationB,100);

显示接收到的数据。

disp (char (msgRecvd))
站B,这是车站答:是的,我在这里!结束了。

紧密联系和卸载共享库

关闭rtiostream站B。

retVal = rtiostream_wrapper (libTcpip,“关闭”,stationB);

零表示成功的返回值。

断言(retVal = = 0);

关闭rtiostream站一个。

retVal = rtiostream_wrapper (libTcpip,“关闭”,stationA);

零表示成功的返回值。

断言(retVal = = 0)

卸载共享库。

rtiostream_wrapper (libTcpip“unloadlibrary”);

Host-Side司机串行通信

您可以使用串行通信驱动程序问题吗?看看交换机提供的日志来代替TCP / IP的司机。配置串行驱动程序,请参阅rtiostream_wrapper在嵌入式编码器®参考文档。

配置自己的目标端驱动程序

如果你的目标有一个以太网连接和TCP / IP堆栈可用,遵循这些步骤:

  1. 编写一个包装器为你的TCP / IP堆栈,使它可以通过在rtiostream.h rtiostream接口定义。

  2. 编写一个测试应用程序发送和接收数据的目标。

  3. 使用rtiostream_wrapper MEX-file TCP / IP的驱动问题吗?看看交换机和日志来测试你的驱动软件,在目标系统上运行。

  4. 当你有一个工作目标端驱动程序,包括驱动程序源文件自动生成代码的构建。

你可以配置端驱动程序只能作为TCP / IP服务器因为司机问题吗?看看交换机的默认日志公益诉讼作为TCP / IP客户端配置。

如果你需要使用一个通信通道,没有支持,问题吗?看看交换机的日志写驱动程序主机和目标。金宝app在这种情况下,您仍然可以使用rtiostream_wrapper MEX-file rtiostream司机进行测试。

司机问题吗?看看交换机配置自己的日志

您可以实现的目标连接驱动程序通过使用不同的沟通渠道。例如,您可以实现host-target通信通过一个特殊的串行连接,要求您提供司机为主机和目标。

在主机端,您可以通过使用测试驱动rtiostream_wrapper MEX-file。如果你的驱动包括诊断printf的输出语句和rtiostream_wrapper加载共享库,必须用mexPrintf语句替换printf语句。

当你有一个设备驱动问题吗?看看交换机工作日志,你必须使它仿真软件中可用的软件环境。金宝app对于公益诉讼仿真,通过sl_customization注册共享库问题吗?看看交换机共享日志。

相关的话题