好的..这将是冗长的,但我需要首先解释一些背景.
我的软件的这一部分用于分拣传送带上的物品.我正在使用Modbus作为传送带.Modbus将在特定时间打开门,让物品通过大门.物品将根据重量经过某些门.
我正在监控传感器以确定物品何时在秤上.当传感器被阻挡时,物品被称重并被送到适当的门.定时器设置为打开/关闭门.
我的代码将适用于此..问题是,它不适用于多个项目.我的意思是,当门打开时,传感器不会被监控,直到门关闭.因此,当项目A在前往大门的路上时,项目B在阻挡传感器时不会在秤上称重.我一次最多可以有8个项目.这是我现在运行的代码:
private void SensorThread_DoWork(object sender, DoWorkEventArgs e)
{
if (SensorThread.CancellationPending == true)
e.Cancel = true;
else
{
ReadSensor();
}
}
private void SensorThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//if sensor is blocked
if (sensorstatus == 0)
{
//the timers just start the thread
scaleTimer.Start();
}
else
{
sensorTimer.Start();
}
}
private void ScaleThread_DoWork(object sender, DoWorkEventArgs e)
{
if (ScaleThread.CancellationPending == true)
{
e.Cancel = true;
}
else
{
ReadScale();
//SaveWeight();
prevgate = gate;
gate = DetermineGate();
SetOpenDelay();
SetDuration(); …Run Code Online (Sandbox Code Playgroud) 背景:
我们计划在传送系统上使用相机来计算物体.在这种特定情况下,我们不能使用传感器.我的所有物体都非常一致,如果它们出现在图片中,很容易被发现.我一直在寻找Aforge和其他一些图书馆,看起来很容易. 这就是我想要做的.
话虽如此,我确实有一些担忧.在过滤过程中,您必须指定要搜索的颜色.我的对象是纯色,但我们都知道在我看到的特定点上可能有100多个不同的rgb值.
有没有办法搜索一系列颜色,或者看一种颜色是否"喜欢"特定的颜色?
这是我第一次进行任何图像处理.我还没有尝试任何东西,即将开始,这在我开始之前就是一个问题.
任何帮助将不胜感激.
好.我有一个监控2个COM端口的程序.一个连接到秤,另一个连接到modbus板.
我的问题是连接到modbus板的COM端口.我的程序每100MS读取一个传感器(在modbus板上).它返回0或1(通过COM端口)以确定传感器是否被阻塞.如果它被阻止,则通过端口向板发送信号.
我的问题是我无法退出监控传感器,但在发送其他信号之前我必须确保com端口未被使用.
监视传感器的例程在后台工作线程上.一旦传感器跳闸,产生另一个线程,向Modbus板发送信号.所以当我向电路板发送信号时,我需要暂停"传感器线程".我该怎么做呢?
请记住它是BackgroundWorker,因此Thread.Join不是一个选项.
这是我的代码:
private void SensorThread_DoWork(object sender, DoWorkEventArgs e)
{
if (SensorThread.CancellationPending == true)
e.Cancel = true;
else
{
ReadSensor();
}
}
Run Code Online (Sandbox Code Playgroud)
此线程的RunWorkerCompleted只是重新启动线程.以下线程持续监视"sensorstatus"以查看传感器何时被阻塞:
public void ScaleThread_DoWork(object sender, DoWorkEventArgs e)
{
if (ScaleThread.CancellationPending == true)
{
e.Cancel = true;
}
else
{
//sensor is blocked
if (sensorstatus == 0)
{
ReadScale();
prevgate = gate;
gate = DetermineGate();
//SaveData();
SetOpenDelay();
SetDuration();
//no gate was selected, meat out of range, runs off end
if (gate == 0)
{
txtStatus.Invoke(new UpdateStatusCallback(UpdateStatus), …Run Code Online (Sandbox Code Playgroud) 我今天刚刚开始自学 Linq to SQL。我对 linq 几乎一无所知。话虽这么说,我有一个查询想从数据库返回一个名称。它是数据库中的 varchar
var query = from a in FRESH.Customers
select a.CUSTOMER_NAME;
dataGridView1.DataSource = query;
Run Code Online (Sandbox Code Playgroud)
这会产生一个带有名为“Length”的列的网格视图,并显示每个名称的长度。如果我将查询更改为select a一切都显示正常。我在这里做错了什么?
我有一个有点复杂的存储过程。我想让用户能够选择要排序的列。他们应该能够根据需要选择任意数量的列。
有没有办法在存储过程中实现这一点?如何将列名称传递到过程中,然后将这些名称反映到 order by 子句中?请注意,列的数量是可变的。
我了解如何传递参数,只是不知道这是否可以在存储过程中动态构建 order by 子句
c# ×4
modbus ×2
colors ×1
image ×1
linq-to-sql ×1
serial-port ×1
sql-order-by ×1
sql-server ×1