This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的 TI:
我们将在 VFD 应用中使用 TMS320F28388D。
使用此控制器的主要目的是使用控制器的内置以太网接口将 Modbus TCP 功能整合到我们的产品中。
对于 Modbus-TCP 的实现支持、我们参考 了"C2000Ware_3_03_00_00_setup.exe"中的以太网模块示例代码"LWIP HTTP Web 服务器示例"。
经过几天的研究、我们发现很难移植到我们的现有应用中、而且我们也无法获得任何有关该应用的详细文档。
因此、请为不带 RTOS 的 http 网络服务器应用程序提供简化且易于移植的示例代码。
此致、
Amtech
您好!
Webserver 应用只是一个示例、用于演示移植到 F2838x 上的 LWIP 堆栈。 它不用于 LWIP 上的任何类型的应用。
您能更详细地阐述一下您的用例吗? 您是否计划运行 Web 服务器或不同的用例?
此致、
Sudharsanan
您好!
我们计划为我们的应用开发 Modbus TCP 服务器、以便使用以太网连接与 PLC 和 SCADA 进行连接。
那么、您能否为相同的应用提供任何简化的软件堆栈。
我们还发现、 在使用 TMDSCNCD28388D 套件测试"C2000Ware_3_03_00_00_setup.exe"中的"LWIP HTTP Web 服务器示例"期间、它不会每次响应、并导致主机无法访问的错误。
此致、
Amtech
您好!
请使用 C2000Ware C2000Ware_3_04_00_00的最新版本。
您可以在 C2000Ware_3_04_00_00\libraries\communications\ethernet/third_party/lwip\examples\enet_lwip\cm 位置配置 lwipopts.h 文件、以适当地启用或禁用 lwIP 协议栈支持的协议或功能。 它还具有可配置的堆栈的存储器大小参数。 这些应有助于简化堆栈。 目前、我们只提供带有 RTOS 的 lwIP 堆栈。 您还可以参考需要 RTOS 的 NDK 堆栈(C2000Ware_3_04_00_00\libraries\communications\ethernet/ti\NDK\examples\tcpEchoF2838X)。
此致、
Yashwant
尊敬的 Yashwant / Sudharsanan:
根据您的建议、我使用了 C2000Ware_3_04_00_00。
http_webserver 示例中的连接丢失问题仍然未解决。 我无法连续获得 ping 响应。 在参考其他与以太网问题相关的帖子后、我检查了 EthernetRxInterruptCount。 它会不断增加、但回复是随机的。
此外、lwip_stats 寄存器响应也会显示在随附的快照中、以供您参考。 我还监控 了存储器中0x400c0800处的 RxStatistics。 我看不到它的值有任何修改。
此外、有时、当我重置-重新启动 CPU1和 CM 时、ping 响应会连续。 但是、也有人观察到、经过一些持续查询(ping)后、网络再次出现故障。
我不知道哪里出错了。 请您指出吗?
在 lwip_stats.ip 中进行详细观察后、我可以看到丢包的主要路由原因是 lwip_stats.ip.lenerr 和 lwip_stats.ip.proterr。
除此之外、我还要求连接保持活动状态、即不应在每个请求上关闭连接。 您是否也可以建议一个地方进行更新?
为了保持连接活动、我尝试了 keep_alive 宏、但无法成功。
此致、
Amtech
尊敬的 Yashwant / Sudharsanan:
在 http web_server 示例代码中,在初始化期间通过 从 main()调用的 httpd_init_pcb (PCB、HTTPD_Server_port);”提供端口号。
您能否提供一种方法来说明如何在不重新启动 CM 的情况下动态更改端口号(HTTP_SERVER_PORT)? 此外、如何释放 pbuf 和其他结构中动态分配的内存?
请注意,用户是否已更改端口可以从 main()例程而不是从 LwIP 堆栈例程中识别。
除此之外、http_web_server 示例代码中提供的堆栈会占用大量内存(特别是 RAM)、从而为其他应用留下更少的内存。 那么、我们如何优化存储器呢? 我们的应用层在一个响应中的最大值应为200字节。 那么、如何更改此设置的 lwipopts.h 文件参数。
我们计划将 TMS320F28388D 中的所有可用外设用于我们的应用。 在这种情况下、如果使用此参数设置和堆栈、我们将面临存储器限制。
我 遇到过存储器占用空间较小的 UIP 堆栈。 对于具有 UIP 堆栈的 TMS320F28388D、是否有 http_webserver 的任何示例代码?
此致、
Amtech
您好!
以太网只能通过 CM 或 Cortex M4访问、因此其他控制外设和 ADC 必须通过 C28x CPU 访问、而这不受 CM 存储器消耗的影响。
您能否分享计划通过 CM 使用的所有内容。
关于不连续的 ping 响应、我们将对此进行研究、并将很快返回给您。
此致、
Yashwant
您好、Yashwant、
感谢您的快速回复。
以下问题未得到解答。 那么、您能否指出导致以下情况的问题。
1.与 lwip.ip.lenerr 和 lwip.ip.proterr 计数增量有关的问题? 如上一帖子中所述、当 ping 响应发生时、堆栈会观察到该参数递增并突出显示为响应丢失的原因。
2.我要求连接保持活动状态,即不应在每次请求时关闭连接。 您是否也可以建议一个地方进行更新?
另外请注意、为了保持连接活动、我尝试了 keep_alive 宏、但无法成功。
3.您能否提供一种方式来说明如何动态更改端口号(HTTPD_SERVER_PORT)而不重新启动 CM?
请注意,用户是否已更改端口可以从 main()例程而不是从 LwIP 堆栈例程中识别。
4.如果从 main()重新初始化,如何释放 pbuf 和其他结构中动态分配的内存? 简而言之、如何使用堆栈重新启动以太网模块而不重置 CM?
5.我们的应用层在一个响应中的最大值应为200字节。 那么、您能否建议如何为此设置更改 lwipopts.h 文件参数。 通过这种方式、可以对存储器占用空间进行优化以进行扩展。
6. 我遇到了内存占用量较低的 UIP 堆栈。 对于具有 UIP 堆栈的 TMS320F28388D、是否有 http_webserver 的任何示例代码?
根据 您 在上次答复中的要求、关于计划通过 CM 使用的所有内容、我计划使用以太网模块实施 Modbus TCP 服务器。 除此之外、我们还计划将 CM UART 用于 Modbus 串行主从设备(可从任何时间点接收的外部参数动态配置)、用于 数据记录和固件上传的 USB 以及用于外部 IC 接口的 CM-I2C。 将来也可能添加其他支持的模块。 此外、CM 支持的所有模块都计划同时使用(并行)。
此致、
Amtech
对于有关 lwIP 的查询、您可以将其发布到 lwIP 的一些开源论坛中、因为我们对它的理解也很有限。
如果您期望的数据包大小更小、则可以根据 您的要求减小 Ethernet_MAX_packet_length 和 Ethernet_NO_of _RX_packets 值、这将减少 RAM 的使用。 您还可以在 lwipopts.h 中更新 MEM_SIZE 宏、以减少 RAM 的使用。
关于 UIP、我们目前没有可用于该堆栈的端口。
我们仍在了解 lwip.ip.lenerr 和 lwip.ip.proterr 计数为何会递增。
此致、
Yashwant
尊敬的 Yashwant:
您能否提供一些时间线、以便我们能够解决连接丢失问题?
此致、
Amtech
尊敬的 Yashwant / Sudharsanan:
我正在努力实现 Modbus TCP 服务器。
据观察,从 IP 标头接收到的“数据长度”字段和代码更新的 p->len、p->t_t_len 参数不同。 但情况并非总是如此。 但是、当答复开始时、遇到的大多数时间原因是 IP 段中的长度问题。
对于已建立的连接、我还在 Wireshark 中观察到、一旦外部客户端发送 FIN 标志数据包、并在新端口上打开新连接、服务器就无法与其建立连接、并尝试重新传输之前的连接。 此外、还会关闭新连接并尝试重新传输。
除了新建立的连接外、是否还有任何方法可以关闭或终止所有待处理的连接、并在接收 FIN 标志时禁用重新传输。 我不希望关闭新连接、只需要关闭待处理的连接。
此致、
Amtech
您好!
您能否尝试更新 f2838xif.c 文件中的行
p->len = pPacket->pktLength;到 p->len = 1538;在 f2838xif_receive 函数中。
这基本上不依赖于低级驱动程序设置的长度、而是将其设置为可能的最大接收数据包大小。
此致、
Yashwant