创建一个目标通信通道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堆栈可用,遵循这些步骤:
编写一个包装器为你的TCP / IP堆栈,使它可以通过在rtiostream.h rtiostream接口定义。
编写一个测试应用程序发送和接收数据的目标。
使用rtiostream_wrapper MEX-file TCP / IP的驱动问题吗?看看交换机和日志来测试你的驱动软件,在目标系统上运行。
当你有一个工作目标端驱动程序,包括驱动程序源文件自动生成代码的构建。
你可以配置端驱动程序只能作为TCP / IP服务器因为司机问题吗?看看交换机的默认日志公益诉讼作为TCP / IP客户端配置。
如果你需要使用一个通信通道,没有支持,问题吗?看看交换机的日志写驱动程序主机和目标。金宝app在这种情况下,您仍然可以使用rtiostream_wrapper MEX-file rtiostream司机进行测试。
司机问题吗?看看交换机配置自己的日志
您可以实现的目标连接驱动程序通过使用不同的沟通渠道。例如,您可以实现host-target通信通过一个特殊的串行连接,要求您提供司机为主机和目标。
在主机端,您可以通过使用测试驱动rtiostream_wrapper MEX-file。如果你的驱动包括诊断printf的输出语句和rtiostream_wrapper加载共享库,必须用mexPrintf语句替换printf语句。
当你有一个设备驱动问题吗?看看交换机工作日志,你必须使它仿真软件中可用的软件环境。金宝app对于公益诉讼仿真,通过sl_customization注册共享库问题吗?看看交换机共享日志。