C# 在C中与来自不同ApiController实例的串行端口通信#
我需要的是: 我正试图使用.NET在C#中公开一个API,该API允许用户通过串口通信控制连接到托管服务器的计算机的电机驱动器 我的问题是: 我不太确定如何允许多个ApiController类实例与(可能是相同的)串行端口通信 我知道我需要使用SerialPort类,这不是我遇到的问题 我的想法: 我认为这必须通过所有不同控制器之间的共享类来完成,即我的SteeringWheelMain伸缩存储器控制器需要在串行端口上从/向特定设备读/写数据,而我的SteeringWheelTiltMotorController需要在同一串行端口上从/向同一设备读/写数据(我使用的电机驱动器支持控制多个电机) 任何帮助都将不胜感激C# 在C中与来自不同ApiController实例的串行端口通信#,c#,asp.net,.net,web-applications,serial-port,C#,Asp.net,.net,Web Applications,Serial Port,我需要的是: 我正试图使用.NET在C#中公开一个API,该API允许用户通过串口通信控制连接到托管服务器的计算机的电机驱动器 我的问题是: 我不太确定如何允许多个ApiController类实例与(可能是相同的)串行端口通信 我知道我需要使用SerialPort类,这不是我遇到的问题 我的想法: 我认为这必须通过所有不同控制器之间的共享类来完成,即我的SteeringWheelMain伸缩存储器控制器需要在串行端口上从/向特定设备读/写数据,而我的SteeringWheelTiltMotorC
我不担心并发性问题,一次只有一个用户使用API因此我定义了一个IMotorPort接口,其中包括发送和接收到马达的异步方法,并将在它的封装中建立SerialPort。MotorPort类将处理诸如转换字符串c之类的问题ommands(或者更好的DTO)到马达。此外,这将是插入queing机制来处理并发请求的地方,我建议现在就这样做,而不是以后为了安全起见 然后,您的控制器将在其构造函数中使用IMotorPort,您的引导程序将确保它们属于同一实例
public interface IMotorPort
{
Task SendData(string data);
Task<string> RecieveData();
}
public class MotorPort : IMotorPort
{
protected SerialPort Port{get;set;}
public Task SendData(string data)
{
//TODO: Send from Serial Port
}
public Task<string> RecieveData()
{
//TODO: Recieve from Serial Port
}
}
public class SteeringWheelMainTelescopeMotorController
{
protected IMotorPort Motor{get;set;}
public SteeringWheelMainTelescopeMotorController(IMotorPort motor)
{
this.Motor = motor;
}
}
public class SteeringWheelTiltMotorController
{
protected IMotorPort Motor{get;set;}
public SteeringWheelTiltMotorController(IMotorPort motor)
{
this.Motor = motor;
}
}
公共接口IMotorPort
{
任务发送数据(字符串数据);
任务接收数据();
}
公共级汽车港:IMotorPort
{
受保护的串行端口{get;set;}
公共任务SendData(字符串数据)
{
//TODO:从串行端口发送
}
公共任务ReceiveData()
{
//TODO:从串行端口接收
}
}
公共类SteeringWheels主伸缩臂控制器
{
受保护的IMotorPort电机{get;set;}
公共方向盘主伸缩器拆卸控制器(IMORPORT电机)
{
这个。马达=马达;
}
}
公共级方向盘倾斜电机控制器
{
受保护的IMotorPort电机{get;set;}
公共方向盘倾斜电机控制器(IMORPORT电机)
{
这个。马达=马达;
}
}
好的,作为一名几乎每天都在使用C#和串行端口软件的电气工程师,我可以从体系结构的角度向您提供一些建议
你的问题实际上并不适合SO。我可以告诉你,你会想使用这个类。对不起,应该更清楚,我知道如何实例化SerialPort通信,但我不确定如何将其设置为在触发API时(可能来自多个不同的控制器)可以执行写命令的方式即使你能做到这一点,你在并发方面也会遇到真正的问题。当两个人同时请求相同的操作时会发生什么情况?@DavidG在我的特殊情况下,这不会是一个问题。一次只有一个客户端与API交互。@BrianCorbin你还在寻找这个问题的答案吗?我可以证明今天晚些时候的ide one。谢谢,史努比!我已经在这个项目上工作了一周了,到目前为止我学到了很多东西。我决定使用一个静态服务,从我的API控制所有不同的设备,只需在后台线程中运行我需要发送给它们的任何命令。它似乎工作得非常好,结果就是even冷却器(我可以通过网络控制电机,非常酷)。谢谢你的提示,绝对有帮助!@BrianCorbin没问题,听起来像是一个很酷的项目。如果还有什么我可以帮助的,请告诉我。@BrianCorbin我越是考虑这个问题,我就越觉得你几乎可以使用类似WCF的东西来隔离一个API来通过串行总线控制电机……然后你就可以与该服务对话了通过IPC。查看如何使用WCF。