vb.net - Modbus设置的组合框在文本时不起作用
问题描述
我刚开始在 Visual Studio 中创建一个项目。我对此完全陌生。我已经制作了一个表格,我通过 modbus 读取数据。这一切都完美无缺。
但有时我需要能够更改表单中的设置以与 modbus 通信。如果设置是数字,则没有问题。但如果它是一个词,那么我会得到一个错误。
这是我的代码:
Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged
ModbusRTUCom1.Parity = ComboBox3.SelectedItem
End Sub
错误信息是:
--> System.InvalidCastException: 'The conversion from string None to type Integer is invalid.'
我有一个包含 3 个项目的组合框;无,奇数和偶数。我已经尝试了很多我在谷歌上找到的东西,但它不起作用:'(。
错误:
这是项目:
这是组合的项目列表:
编辑:没有什么对我有用。然后我突然做了一些简单的事情!
Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged
ModbusRTUCom1.Parity = ComboBox3.SelectedIndex
结束子
解决方案
我假设您使用的是EasyModbus 库。既然如此,让我们看一下示例代码:
ModbusClient modbusClient = new ModbusClient("COM1");
//modbusClient.UnitIdentifier = 1; Not necessary since default slaveID = 1;
//modbusClient.Baudrate = 9600; // Not necessary since default baudrate = 9600
//modbusClient.Parity = System.IO.Ports.Parity.None;
//modbusClient.StopBits = System.IO.Ports.StopBits.Two;
//modbusClient.ConnectionTimeout = 500;
modbusClient.Connect();
modbusClient
是 aModbusClient
并且modbusClient.Parity
是类型Parity
(anenum
具有基础类型integer
)。
所以错误告诉您不能将字符串分配给整数类型的变量。根据示例,您可以使用以下语句设置奇偶校验modbusClient.Parity = System.IO.Ports.Parity.None
(注意System.IO.Ports.Parity.None
= 0); modbusClient.Parity = "none"
将导致您看到的错误。
SerialPort 类文档中的示例显示了如何将其转换为字符串/从字符串转换,这个答案也可能有用。
如果您使用Option Strict On
,那么编译器应该会发现这样的问题(通常最好在编译时处理错误)。
根据您发布的答案,您似乎没有理解上述内容;这是一个完整的演示,展示了转换字符串 <--> Parity。
Option Strict On
Imports System.IO.Ports
Module VBModule
Sub Main()
REM The below gets an array of strings containing the available options for parity
REM Use this to populate your dropdown
dim parityOptions as String()
parityOptions = [Enum].GetNames(GetType(Parity))
REM print out available options for parity (as text)
Console.WriteLine("Possible Parities")
For Each s As String In parityOptions
Console.WriteLine(s)
Next
REM Now lets take a parity in string form and convert to enum
REM This is what you need to do when you get the value from the dropdown
Dim parityString as string
parityString = "Even"
Dim parity as System.IO.Ports.Parity
parity = DirectCast([Enum].Parse(GetType(Parity), parityString), System.IO.Ports.Parity)
Console.WriteLine("Value of parity")
Console.WriteLine(parity)
REM convert a second option...
parityString = "Odd"
parity = DirectCast([Enum].Parse(GetType(Parity), parityString), System.IO.Ports.Parity)
Console.WriteLine(parity)
End Sub
End Module
推荐阅读
- vba - VBA VLookUp 运行时错误
- javascript - WebStorm 自动完成 Mongoose 模式字段
- doxygen - Doxygen 在选定的文件上重新运行
- filter - tableau - 在计算中使用过滤后的数据并进一步过滤
- inheritance - ServiceStack.OrmLite:选择在运行时确定类型的 POCO(继承)
- actions-on-google - 如何为谷歌操作代理履行 URL
- android - 启动服务而不显示任何通知
- plsql - 如何通过某个 Round up 因子进行 Roundup?
- web-services - 物理设备的网络服务,使用哪种技术/协议?
- php - 将 jQuery 计算的结果显示到表单中