2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C#读写欧姆龙PLC数据omron 使用TCP/IP FINS协议

C#读写欧姆龙PLC数据omron 使用TCP/IP FINS协议

时间:2020-03-17 18:48:43

相关推荐

C#读写欧姆龙PLC数据omron 使用TCP/IP FINS协议

很多自动化设备使用OMRON PLC来控制制造过程,如果有SCADA 数据系统需要获取PLC的数据,甚至控制制造过程的参数,如加热温度,切割长度等,这需要一个中间层来执行这个任务,这个类就是为这种需求而设计的。

可以把它嵌入到你的应用中,让你更专注上层的业务,不用为底层的过程而烦恼。

需要注意的是,这个类使用的是同步sockets和PLC通信,这会阻塞当前线程。最好是单独为通信过程开一个子线程。可以看到,这个类没有使用对话框或者控制台消息,多数函数都是返回bool类型的值,你可以使用LastError()函数随时检查结果。

当前版本实现了以下3种类型的 PLC通信:

[1,1] 内存区域读 finsMemoryAreaRead()

[1,2] 内存区域写 finsMemoryAreaWrite()

[5,1] 控制器数据读 finsConnectionDataRead()

DM 内存区域函数:

ReadDM()

ReadDMs()

WriteDM()

ClearDMs()

下图是按通道CH读取的数据寄存器DM100

CIO 位内存区域函数:

ReadCIOBit()

ReadCIOBit()

下图是按位读取的内部输入输出继电器CIO bit

下图是按位读取的内部辅助继电器WR bit

仔细阅读 tcpFINSCommand.cs 很容易就可以添加新的读取其他元件的函数 。

使用方法

1.首先把 Omron.vx.xx.dll 用引用添加到你的工程

2.添加一个OMRON.OmronPLC实例变量,用new OMRON.OmronPLC(OMRON.TransportType.Tcp)初始化并

指定传输类型为TCP;

public partial class TestPLC : Form

{

//

// plc class

//

OMRON.OmronPLC plc;

///

/// constructor

///

public TestPLC()

{

InitializeComponent();

// initielize a new plc object with tcp transport layer

//

this.plc = new OMRON.OmronPLC(OMRON.TransportType.Tcp);

}

...

3.在使用Connect()连接PLC之前,必须设置好tcp连接参数,IP,端口。因为OmronPlc 使用的是接口类

,须强制转换至tcpFINSCommand 类,然后调用SetTCPParams 函数。

///

/// 连接PLC

///

private void Connect()

{

if (ip.Text == "") return;

if (port.Text == "") return;

try

{

// set ip:port for command layer, may cast to tcpFINSCommand to set ip and port

//

OMRON.tcpFINSCommand tcpCommand = ((OMRON.tcpFINSCommand)plc.FinsCommand);

tcpCommand.SetTCPParams(IPAddress.Parse(ip.Text), Convert.ToInt32(port.Text));

// connection

//

if (! plc.Connect())

{

throw new Exception(plc.LastError);

}

...

4.调用读取,写入函数。

类默认使用Byte, UInt16 and UInt32, and arrays的引用传递参数。

///

/// 读取单个 DM

///

private void ReadDM()

{

if (dm_position.Text == "") return;

UInt16 dmval=0;

try

{

if (! plc.ReadDM(Convert.ToUInt16(dm_position.Text), ref dmval))

{

throw new Exception(plc.LastError);

}

dm_value.Text = dmval.ToString();

dialog.Text = plc.LastDialog("READ DM");

dialog.AppendText("DM VALUE: " + dmval.ToString());

}

catch (Exception ex)

{

MessageBox.Show("ReadDM() Error: " + ex.Message);

}

}

如果要使用调试功能,你可以在发送命令后调用 LastDialog() 函数,

这样,你就能获取PC和PLC之间的十六进制对话数据。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。