我已经让我的PLC使用nModBus与我的C#应用程序进行通信,但是现在我通过运行for循环不断地读取所有PLC输入。
我想设计我的代码,这样只有当通过串口接收到一条数据时,它才会触发for循环来读取每个输入并确定哪个输入特别高。
这就是我所拥有的。我设置了断点,我的代码甚至都没有输入DataReceivedHandler方法。我手动打开PLC输入高电平(使用跳线)。有什么建议或意见吗?
命名空间WindowsFormsApplication2 { 静态类程序 {
public static void Main()
{
SerialPort mySerialPort = new SerialPort("COM1");
mySerialPort.BaudRate = 38400;
mySerialPort.Parity = Parity.Odd;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.ReadBufferSize = 4096;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(mySerialPort);
Console.WriteLine("Press any key to continue...");
Console.WriteLine();
Console.ReadKey();
mySerialPort.Close();
}
public static void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
答案 0 :(得分:0)
让您的PC成为主人,但轮询事件。如果为TRUE,则执行“批量”通信,然后让PC /主机重置“事件”。
我会让这个“事件”成为与实际用户界面分开的“通信事件”。使它成为“CommEvent”,让PLC设置它(当实际事件发生时),并且PC / Master在完成批量通信后清除它。
Read CommEvent
if CommEvent is TRUE
Do BulkReads
Clear CommEvent