我有一个通过 Profibus DP 与 PLC 通信的硬件,它向我发送 4 个字节的十六进制数据,即“44 79 FF FF”,并且在 PLC 程序中,我已为该输入数据声明了一个 BYTE 数组。问题是在PLC中,我在字节数组中收到的数据是“66 121 255 255”,这是十六进制的十进制值,但我的目标是将该值转换为实数,当我这样做时,我不是得到我期望的值。
我创建了一个 DWORD( 4bytesData),将所有字节插入其中。所以在我插入4个字节之前,4bytesData字节是:in1 = 68, in2 = 121, in3 = 255&in4 = 255
4bytesData := (SHL(SHL(SHL(BYTE_TO_DWORD(in1), 8) OR BYTE_TO_DWORD(in2), 8) OR BYTE_TO_DWORD(in3), 8) OR in4);
realValue := DWORD_TO_REAL(4bytesData);
Run Code Online (Sandbox Code Playgroud)
其中 in1、in2、in3 和 in4 是字节 0-3。
我得到的价值是;4bytesData= 1148846079 & realValue= 1.148846e+009
我期望获得的值realValue是 = 9.9999993896484375E2
如果我使用此网站( IEEE754 分析器/转换器)并转换十六进制值(4479FFFF),我将得到我想要的值,如果我插入十进制值(1148846079),我将得到与我在PLC。
我希望您理解我的问题,非常感谢。
当Togglebutton"IsPressed"为真时,我正在尝试更改图像源(仅限XAML).但当我试图通过''Image.Trigger'绑定该属性时,它无法正常工作.
这就是我现在所拥有的,图像显示的完全像我想要的那样.
<ToggleButton x:Name="pbStations"
Template="{StaticResource ContentOnlyTemplateToggleButton}">
<StackPanel Orientation="Horizontal">
<Image Source="/Sprites/Misc/ExpanderButtonClose.png"
Margin="2"
Stretch="Uniform"
x:Name="img">
</Image>
<TextBlock Text="STATIONS"
x:Name="tbStations"
Style="{StaticResource tbTriggerGray}" />
</StackPanel>
</ToggleButton>
Run Code Online (Sandbox Code Playgroud)
这是我试过的不起作用:
<ToggleButton x:Name="pbStations"
Template="{StaticResource ContentOnlyTemplateToggleButton}">
<StackPanel Orientation="Horizontal">
<Image Source="/Sprites/Misc/ExpanderButtonClose.png"
Margin="2"
Stretch="Uniform"
x:Name="img">
<Image.Triggers>
<DataTrigger Binding="{Binding ElementName=pbStations,Path=IsPressed}"
Value="True">
<Setter TargetName="img"
Property="Image.Source"
Value="/Sprites/Misc/ExpanderButtonOpen.png" />
</DataTrigger>
</Image.Triggers>
</Image>
<TextBlock Text="STATIONS"
x:Name="tbStations"
Style="{StaticResource tbTriggerGray}" />
</StackPanel>
</ToggleButton>
Run Code Online (Sandbox Code Playgroud) 我正在尝试更新 ObservableCollection 并将值添加到 ObservableCollection
我已经这样定义了 ObservableCollection;
public ObservableCollection<Tuple<string, int>> LogSummary
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
在我的班级中,我订阅了一个发送包含字母的字符串的事件:A、B、C、D、E 或 F。
如果我收到的字符串已存在于集合中,我只想更新第二项(int),即我收到的字符串字母的计数。
如果我写这段代码
LogSummary.Add(new Tuple<string, int>(_stringFromEvent, intValue));
Run Code Online (Sandbox Code Playgroud)
这只会在集合中添加一个新行,因此在使用 LogSummary.Add() 之前,我需要弄清楚如何检查字符串是否已经存在,如果存在,则应该采用当前的 int 值并更新它而不是添加集合中的一个新行。
希望你能理解我的问题!预先感谢,杰克