【发布时间】:2012-10-14 21:46:28
【问题描述】:
我正在尝试通过port.Write("g28"); 行将 gcode g28 发送到我的 RepRap 3D 打印机。
我的程序连接到正确的串行端口,但是当我尝试将信息作为字符串发送时,对 com 端口的访问被拒绝。 这很奇怪,因为在将 Gcode 发送给它之前,串行端口是打开的。 它甚至还发送了一些数据。那里有什么问题,我该如何解决?
以下是我正在使用的代码行。此page 上提供了 gcode 命令列表。
我尝试在字符串末尾添加"\n",但没有成功。
//Fields
List<string> myReceivedLines = new List<string>();
//subscriber method for the port.DataReceived Event
private void DataReceivedHandler(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
while (sp.BytesToRead > 0)
{
try
{
myReceivedLines.Add(sp.ReadLine());
}
catch (TimeoutException)
{
break;
}
}
}
protected override void SolveInstance(IGH_DataAccess DA)
{
string selectedportname = default(string);
DA.GetData(1, ref selectedportname);
int selectedbaudrate = default(int);
DA.GetData(2, ref selectedbaudrate);
bool connecttodevice = default(bool);
DA.GetData(3, ref connecttodevice);
bool homeall = default(bool);
DA.GetData(5, ref homeall);
SerialPort port = new SerialPort(selectedportname, selectedbaudrate, Parity.None, 8, StopBits.One);
port.DtrEnable = true;
port.Open();
if (connecttodevice == true)
{
port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
DA.SetDataList(0, myReceivedLines);
}
if (homeall == true)
{
port.Write("g28");
}
}
【问题讨论】:
-
“对 com 端口的访问被拒绝,但之前不是。” - 之前是什么?你试过大写(又名大写)“G”吗?
-
@sawdust 在将 Gcode 发送到串行端口之前,我刚刚更新了问题。非常感谢。
-
"port.Write("g28")" - "g28" 甚至没有被列为有效操作;你想做什么操作? “G”或“M”必须大写,并且您确实需要用“\n”终止该行。 “它甚至发回了一些数据。” - 那是什么信息?
-
我假设 SolveInstance 只被调用一次,否则端口将被第一次调用时创建的 Com 端口锁定。
-
@ArthurMamou-Mani 尝试将 port.Close() 放在方法的末尾。
标签: c# serial-port grasshopper g-code