小编CSh*_*Dev的帖子

多线程和串行端口

好的..这将是冗长的,但我需要首先解释一些背景.

我的软件的这一部分用于分拣传送带上的物品.我正在使用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)

c# multithreading serial-port modbus

6
推荐指数
1
解决办法
1808
查看次数

C#确定图像中是否存在对象

背景:

我们计划在传送系统上使用相机来计算物体.在这种特定情况下,我们不能使用传感器.我的所有物体都非常一致,如果它们出现在图片中,很容易被发现.我一直在寻找Aforge和其他一些图书馆,看起来很容易. 这就是我想要做的.

话虽如此,我确实有一些担忧.在过滤过程中,您必须指定要搜索的颜色.我的对象是纯色,但我们都知道在我看到的特定点上可能有100多个不同的rgb值.

有没有办法搜索一系列颜色,或者看一种颜色是否"喜欢"特定的颜色?

这是我第一次进行任何图像处理.我还没有尝试任何东西,即将开始,这在我开始之前就是一个问题.

任何帮助将不胜感激.

c# image colors image-processing

5
推荐指数
1
解决办法
723
查看次数

C#BackgroundWorker和Com端口问题

好.我有一个监控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)

c# multithreading modbus backgroundworker

3
推荐指数
1
解决办法
2020
查看次数

Linq To Sql 返回值长度而不是值

我今天刚刚开始自学 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一切都显示正常。我在这里做错了什么?

c# linq-to-sql

2
推荐指数
1
解决办法
1578
查看次数

存储过程中可选的 Order By?

我有一个有点复杂的存储过程。我想让用户能够选择要排序的列。他们应该能够根据需要选择任意数量的列。

有没有办法在存储过程中实现这一点?如何将列名称传递到过程中,然后将这些名称反映到 order by 子句中?请注意,列的数量是可变的。

我了解如何传递参数,只是不知道这是否可以在存储过程中动态构建 order by 子句

sql-server stored-procedures sql-order-by

1
推荐指数
1
解决办法
3571
查看次数