首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的Blazor服务器应用程序中,如果多个客户端通过源服务从远程机器读取数据,我会遇到问题。单客户端就没问题了

在我的Blazor服务器应用程序中,如果多个客户端通过源服务从远程机器读取数据,我会遇到问题。单客户端就没问题了
EN

Stack Overflow用户
提问于 2022-08-04 12:24:00
回答 1查看 57关注 0票数 0

你好,我在我的Blazor服务器应用程序中使用了第三方dll。此dll用于连接到远程PLC并读取它们的PLC数据。数据读取方法(doNCK_ReadMixEx)只适用于静态变量(否则读取不起作用)--我在源服务中使用了这种方法,因此每个客户端都应该能够同时(每秒钟)从不同的PLC读取数据。如果只有一个客户端正在从远程PLC读取数据,那么它的工作非常好。但是,如果两个客户端同时尝试从不同的PLC读取数据,数据就会被读取,但我经常看到的不是所需的数据,而是不同的字符或数字。我不确定我在调用该方法时是否有问题,或者该方法的静态变量是否导致了这个问题。这是我的代码:

剃须刀页(这里我正在触发期刊阅读)

代码语言:javascript
复制
 @page "/PLC_Status"
 @inject Deltalogic Deltalogic
 @inject Parameter_840D Parameter_840D
 <button @onclick="Read_CNC_Status">Start Reading</button>

Razor.cs

代码语言:javascript
复制
 public async Task Read_CNC_Status()
    {
        Reading_active = true;
                    
            for (int k=0; k<=200;k++)
            {
                Read_PLC_Data();
                InvokeAsync(() =>
                {
                    StateHasChanged();
                });
                await Task.Delay(1000);

                if (k == 200)
                {
                    Stop_CNC_Status();
                }
            }
        }
    }

 public void Read_PLC_Data()
 //Here the doNCK_ReadMixEx is called for each PLC parameter 
    {
       Parameter_840D.Par_840D_Channel_Status(Deltalogic.channel_no); //Pick-up parameters for variable-1          
       Deltalogic.doNCK_ReadMixEx(Deltalogic.MAE_Status_DevNr, 5000, out Deltalogic.MAE_Status_Mode)
       Parameter_840D.Par_840D_Prog_Status(Deltalogic.channel_no); //Pick-up parameters for variable-2          
       Deltalogic.doNCK_ReadMixEx(Deltalogic.MAE_Status_DevNr, 5000, out Deltalogic.MAE_Status_State_CH[1);
       Parameter_840D.Par_840D_Machine_Active_Workpiece(Deltalogic.channel_no);//Pick-up parameters for variable-3          
       Deltalogic.doNCK_ReadMixEx(Deltalogic.MAE_Status_DevNr, 5000, out Deltalogic.MAE_Status_WPD_CH[Deltalogic.channel_no]);
  // and other PLC parameters....
    }

Parameter_840D (doNCK_ReadMixEx参数化的源服务)

代码语言:javascript
复制
// The parameters of doNCK_ReadMixEx have to be defined as static. If not, data cannot be read
public class Parameter_840D
{
    [Inject]
    Deltalogic Deltalogic { get; set; }

    public static byte channel_no = 1;
    public static ushort Parameter_No;
    public static ushort column;
    public static AGL4.NCK_Block block_type;
    public static AGL4.NCK_Area area;
    public static ushort row;
    public static byte rowCount;
    public static byte Unit;
    public static int Bufflen;
    public static byte Buff;
    public  static AGL4.NCK_DDEVarFormat DD

    //Methods that just describes the parameter for each PLC variable

}

Deltalogic ( PLC阅读方法的来源服务)

代码语言:javascript
复制
public class Deltalogic
{
    [Inject]
    Parameter_840D Parameter_840D { get; set; }

    public Int32 doNCK_ReadMixEx(Int32 connnr, Int32 timeout, out string NCK_Data)
    {
        //Reset_Parameter_value();
        NCK_Data = "";
        Parameter_840D Parameter_840D = new Parameter_840D();
        connnr = Return_Connect_NCK;
        Int32 result = 0;
        AGL4.NckDataRW[] rwfield = new AGL4.NckDataRW[1];
        rwfield[0] = new AGL4.NckDataRW();
        rwfield[0].Area = Parameter_840D.area;
        rwfield[0].Block = Parameter_840D.block_type;
        rwfield[0].Column = Parameter_840D.column;
        rwfield[0].Row = Parameter_840D.row;
        rwfield[0].RowCount = Parameter_840D.rowCount;
        rwfield[0].Unit = Parameter_840D.Unit;
        rwfield[0].DDEVarType = Parameter_840D.DDEVarType;
        rwfield[0].BuffLen = Parameter_840D.Bufflen;
        rwfield[0].Buff = new Byte[rwfield[0].BuffLen];          
        rwfield[0].Result = 0;
        result = AGL4.NCK_ReadMixEx(connnr, ref rwfield, timeout);
  }
EN

回答 1

Stack Overflow用户

发布于 2022-08-04 12:37:20

您希望创建一个包装器服务,并使其线程安全。如果代码不是异步的,可以用lock{...}语句来完成这一任务。如果是异步的,则可以使用SemaphoreSlim锁定资源,以便同时只允许可配置的线程数量;您希望将其配置为1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73235889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档