Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
ACSingleStore
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit ee28c326
由
几米阳光
编写于
2019-03-15 11:42:44 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
增加新IO模块的代码切换。
1 个父辈
2248c229
隐藏空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
945 行增加
和
166 行删除
dll/AIOBOX.dll
dll/AIOBOX.xml
source/ACSingleStore/ACSingleStore.csproj
source/ACSingleStore/App.config
source/ACSingleStore/FrmIOStatus.cs
source/ACSingleStore/FrmStoreBox.cs
source/ACSingleStore/记录.txt
source/Common/Setting_Init.cs
source/DeviceLibrary/DeviceLibrary.csproj
source/DeviceLibrary/IO/AIOBOX/AIOBOXManager.cs
source/DeviceLibrary/IO/IOManager.cs
source/DeviceLibrary/KangNaiDe/KNDManager.cs → source/DeviceLibrary/IO/KangNaiDe/KNDManager.cs
source/DeviceLibrary/KangNaiDe/MasterTcpClient.cs → source/DeviceLibrary/IO/KangNaiDe/MasterTcpClient.cs
source/DeviceLibrary/acSingleStore/AC_SA_BoxBean.cs
dll/AIOBOX.dll
0 → 100644
查看文件 @
ee28c32
此文件类型无法预览
dll/AIOBOX.xml
0 → 100644
查看文件 @
ee28c32
<?xml version="1.0"?>
<doc>
<assembly>
<name>
AIOBOX
</name>
</assembly>
<members>
<member
name=
"T:Asa.AIOBOX.AIOBOX_32"
>
<summary>
AIOBOX-32
</summary>
</member>
<member
name=
"T:Asa.AIOBOX.AIOBOX_32.DI_Changed"
>
<summary>
自动读取DI委托
</summary>
<param
name=
"sta"
>
状态
</param>
</member>
<member
name=
"E:Asa.AIOBOX.AIOBOX_32.DI_Changed_Event"
>
<summary>
自动读取DI事件触发
</summary>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.#ctor"
>
<summary>
AIOBOX-32
</summary>
</member>
<member
name=
"P:Asa.AIOBOX.AIOBOX_32.IP"
>
<summary>
IP地址
</summary>
</member>
<member
name=
"P:Asa.AIOBOX.AIOBOX_32.Mask"
>
<summary>
子网掩码
</summary>
</member>
<member
name=
"P:Asa.AIOBOX.AIOBOX_32.Gateway"
>
<summary>
子网网关
</summary>
</member>
<member
name=
"P:Asa.AIOBOX.AIOBOX_32.Port"
>
<summary>
ModBus端口
</summary>
</member>
<member
name=
"P:Asa.AIOBOX.AIOBOX_32.IsConn"
>
<summary>
是否连接
</summary>
</member>
<member
name=
"P:Asa.AIOBOX.AIOBOX_32.ErrInfo"
>
<summary>
错误信息
</summary>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.Connect"
>
<summary>
连接
</summary>
<returns></returns>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.Close"
>
<summary>
关闭连接
</summary>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.ReverseStatus(Asa.AIOBOX.Status)"
>
<summary>
相反状态
</summary>
<param
name=
"sta"
></param>
<returns></returns>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.WriteDO(Asa.AIOBOX.Addr,Asa.AIOBOX.Status)"
>
<summary>
写入单个DO
</summary>
<param
name=
"add"
></param>
<param
name=
"sta"
></param>
<returns></returns>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.WriteDO_Reverse(Asa.AIOBOX.Addr,Asa.AIOBOX.Status@)"
>
<summary>
先把状态取反,然后写入单个DO
</summary>
<param
name=
"add"
></param>
<param
name=
"sta"
></param>
<returns></returns>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.WriteDO(Asa.AIOBOX.Addr,Asa.AIOBOX.Status[])"
>
<summary>
写入多个DO
</summary>
<param
name=
"add"
></param>
<param
name=
"sta"
></param>
<returns></returns>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.ReadDO(Asa.AIOBOX.Addr,Asa.AIOBOX.Status@)"
>
<summary>
读取单个DO
</summary>
<param
name=
"add"
></param>
<param
name=
"sta"
></param>
<returns></returns>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.ReadDO(Asa.AIOBOX.Addr,System.UInt32,Asa.AIOBOX.Status[]@)"
>
<summary>
读取多个DO
</summary>
<param
name=
"add"
>
起始地址
</param>
<param
name=
"count"
>
数量
</param>
<param
name=
"sta"
>
状态
</param>
<returns></returns>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.ReadDI(Asa.AIOBOX.Addr,Asa.AIOBOX.Status@)"
>
<summary>
读取单个DI
</summary>
<param
name=
"add"
></param>
<param
name=
"sta"
></param>
<returns></returns>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.ReadDI(Asa.AIOBOX.Addr,System.Int32,Asa.AIOBOX.Status[]@)"
>
<summary>
读取多个DI
</summary>
<param
name=
"add"
></param>
<param
name=
"count"
></param>
<param
name=
"sta"
></param>
<returns></returns>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.Command(System.Byte[]@)"
>
<summary>
命令,前7个字节
</summary>
<param
name=
"data"
></param>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.Target(System.IAsyncResult)"
>
<summary>
回调函数,开启监听线程
</summary>
<param
name=
"args"
></param>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.Receive"
>
<summary>
监听结果线程,把读取到的数据保存到buff
</summary>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.Auto_Read_DI"
>
<summary>
自动读取DI线程
</summary>
</member>
<member
name=
"M:Asa.AIOBOX.AIOBOX_32.Trigger_DI"
>
<summary>
触发DI改变事件
</summary>
</member>
<member
name=
"T:Asa.AIOBOX.Reg"
>
<summary>
寄存器
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Reg.ID"
>
<summary>
标识
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Reg.Text"
>
<summary>
显示文本
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Reg.Addr"
>
<summary>
寄存器地址
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Reg.Status"
>
<summary>
当前的状态
</summary>
</member>
<member
name=
"M:Asa.AIOBOX.Reg.#ctor(Asa.AIOBOX.Addr)"
>
<summary>
寄存器,文本空,状态OFF
</summary>
<param
name=
"address"
>
地址
</param>
</member>
<member
name=
"M:Asa.AIOBOX.Reg.#ctor(System.String,Asa.AIOBOX.Addr)"
>
<summary>
寄存器,状态OFF
</summary>
<param
name=
"text"
>
文本
</param>
<param
name=
"addr"
>
地址
</param>
</member>
<member
name=
"M:Asa.AIOBOX.Reg.#ctor(System.Int32,System.String,Asa.AIOBOX.Addr)"
>
<summary>
寄存器,状态OFF
</summary>
<param
name=
"id"
>
标志
</param>
<param
name=
"text"
>
文本
</param>
<param
name=
"addr"
>
地址
</param>
</member>
<member
name=
"M:Asa.AIOBOX.Reg.#ctor(System.String,Asa.AIOBOX.Addr,Asa.AIOBOX.Status)"
>
<summary>
寄存器
</summary>
<param
name=
"text"
>
文本
</param>
<param
name=
"addr"
>
地址
</param>
<param
name=
"status"
>
状态
</param>
</member>
<member
name=
"M:Asa.AIOBOX.Reg.#ctor(System.Int32,System.String,Asa.AIOBOX.Addr,Asa.AIOBOX.Status)"
>
<summary>
寄存器
</summary>
<param
name=
"id"
>
标志
</param>
<param
name=
"text"
>
文本
</param>
<param
name=
"address"
>
地址
</param>
<param
name=
"status"
>
状态
</param>
</member>
<member
name=
"T:Asa.AIOBOX.Addr"
>
<summary>
寄存器地址
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_1"
>
<summary>
输入点,A1
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_2"
>
<summary>
输入点,A2
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_3"
>
<summary>
输入点,A3
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_4"
>
<summary>
输入点,A4
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_5"
>
<summary>
输入点,A5
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_6"
>
<summary>
输入点,A6
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_7"
>
<summary>
输入点,A7
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_8"
>
<summary>
输入点,A8
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_9"
>
<summary>
输入点,A9
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_10"
>
<summary>
输入点,A10
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_11"
>
<summary>
输入点,A11
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_12"
>
<summary>
输入点,A12
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_13"
>
<summary>
输入点,A13
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_14"
>
<summary>
输入点,A14
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_15"
>
<summary>
输入点,A15
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DI_16"
>
<summary>
输入点,A16
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_1"
>
<summary>
输出点,B1
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_2"
>
<summary>
输出点,B2
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_3"
>
<summary>
输出点,B3
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_4"
>
<summary>
输出点,B4
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_5"
>
<summary>
输出点,B5
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_6"
>
<summary>
输出点,B6
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_7"
>
<summary>
输出点,B7
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_8"
>
<summary>
输出点,B8
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_9"
>
<summary>
输出点,B9
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_10"
>
<summary>
输出点,B10
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_11"
>
<summary>
输出点,B11
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_12"
>
<summary>
输出点,B12
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_13"
>
<summary>
输出点,B13
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_14"
>
<summary>
输出点,B14
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_15"
>
<summary>
输出点,B15
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.DO_16"
>
<summary>
输出点,B16
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Addr.NONE"
>
<summary>
无
</summary>
</member>
<member
name=
"T:Asa.AIOBOX.Status"
>
<summary>
寄存器状态
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Status.Off"
>
<summary>
断开,关闭,低电平
</summary>
</member>
<member
name=
"F:Asa.AIOBOX.Status.On"
>
<summary>
闭合,打开,高电平
</summary>
</member>
</members>
</doc>
source/ACSingleStore/ACSingleStore.csproj
查看文件 @
ee28c32
...
...
@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OnlineStore.ACSingleStore</RootNamespace>
<AssemblyName>BJACSingleStore</AssemblyName>
<TargetFrameworkVersion>v4.
0
</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.
6
</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
...
...
source/ACSingleStore/App.config
查看文件 @
ee28c32
<?
xml
version
=
"1.0"
?>
<
configuration
>
<
configSections
>
<
section
name
=
"log4net"
type
=
"log4net.Config.Log4NetConfigurationSectionHandler,log4net"
/>
<
section
name
=
"log4net"
type
=
"log4net.Config.Log4NetConfigurationSectionHandler,log4net"
/>
</
configSections
>
<
appSettings
>
<!--是否开机自动启动料仓-->
<
add
key
=
"App_AutoRun"
value
=
"1"
/>
<
add
key
=
"App_Title"
value
=
"AC_SA_料仓"
/>
<
add
key
=
"App_AutoRun"
value
=
"1"
/>
<
add
key
=
"App_Title"
value
=
"AC_SA_料仓"
/>
<!--默认语言-->
<
add
key
=
"Default_Language"
value
=
"zh-CN"
/>
<
add
key
=
"scanner_start_command"
value
=
"S"
/>
<
add
key
=
"Default_Language"
value
=
"zh-CN"
/>
<
add
key
=
"scanner_start_command"
value
=
"S"
/>
<!-- 开始吹气的判断值(配置值=服务器发送的湿度值-开始吹气值)-->
<
add
key
=
"StartBlowValue"
value
=
"4"
/>
<
add
key
=
"StartBlowValue"
value
=
"4"
/>
<!-- 停止吹气的判断值(配置值=服务器发送的湿度值-停止吹气值)-->
<
add
key
=
"StopBlowValue"
value
=
"4"
/>
<
add
key
=
"StopBlowValue"
value
=
"4"
/>
<!--
Server
address
-->
<
add
key
=
"http.server"
value
=
"http://192.168.1.106:8080/"
/>
<!--
storeType
-->
<
add
key
=
"store_count"
value
=
"1"
/>
<
add
key
=
"store_count"
value
=
"1"
/>
<!--
start
one
store
config
-->
<
add
key
=
"Store_Position_Config"
value
=
"\StoreConfig\AC\linePositions.csv"
/>
<
add
key
=
"Store_ConfigPath"
value
=
"\StoreConfig\AC\StoreConfig.csv"
/>
<
add
key
=
"Store_Type"
value
=
"RC_AC_SA"
/>
<
add
key
=
"Store_CID"
value
=
"bjac1"
/>
<
add
key
=
"Store_Position_Config"
value
=
"\StoreConfig\AC\linePositions.csv"
/>
<
add
key
=
"Store_ConfigPath"
value
=
"\StoreConfig\AC\StoreConfig.csv"
/>
<
add
key
=
"Store_Type"
value
=
"RC_AC_SA"
/>
<
add
key
=
"Store_CID"
value
=
"bjac1"
/>
<!--
end
one
store
config
-->
<!--摄像机名称列表配置,用
#分割-->
<
add
key
=
"CameraName"
value
=
"codeCamera"
/>
<
add
key
=
"CameraName"
value
=
"codeCamera"
/>
<!--二维码类型列表配置,用
#分割-->
<
add
key
=
"CodeType"
value
=
"QR Code"
/>
<
add
key
=
"CodeType"
value
=
"QR Code"
/>
<!--<
add
key
=
"CodeType"
value
=
"Data Matrix ECC 200"
/>-->
<!--二维码参数文件所在路径,文件名与二维码类型名一样-->
<
add
key
=
"CodeParamPath"
value
=
"\StoreConfig\AC\"
/>
<
add
key
=
"ACBaudRate"
value
=
"4800"
/>
<
add
key
=
"CodeParamPath"
value
=
"\StoreConfig\AC\"
/>
<
add
key
=
"ACBaudRate"
value
=
"4800"
/>
<
add
key
=
"UseAIOBOX"
value
=
"1"
/>
</
appSettings
>
<
log4net
>
<
appender
name
=
"RollingLogFileAppender"
type
=
"log4net.Appender.RollingFileAppender"
>
<
file
value
=
"logs/BJACStore.log"
/>
<
appendToFile
value
=
"true"
/>
<
rollingStyle
value
=
"Date"
/>
<
datePattern
value
=
"yyyy-MM-dd"
/>
<
file
value
=
"logs/BJACStore.log"
/>
<
appendToFile
value
=
"true"
/>
<
rollingStyle
value
=
"Date"
/>
<
datePattern
value
=
"yyyy-MM-dd"
/>
<
layout
type
=
"log4net.Layout.PatternLayout"
>
<
conversionPattern
value
=
"[%date][%t]%-5p %m%n"
/>
<
conversionPattern
value
=
"[%date][%t]%-5p %m%n"
/>
</
layout
>
</
appender
>
<
root
>
<
level
value
=
"Info"
/>
<
appender
-
ref
ref
=
"RollingLogFileAppender"
/>
<
level
value
=
"Info"
/>
<
appender
-
ref
ref
=
"RollingLogFileAppender"
/>
</
root
>
</
log4net
>
<
startup
>
<
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.6
.1"
/>
<
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.6
"
/>
</
startup
>
<!-- 部署服务库项目时,必须将配置文件的内容添加到
主机的
app
.
config
文件中。
System
.
Configuration
不支持库的配置文件。 -->
...
...
@@ -59,13 +60,13 @@
<
service
name
=
"AcStoreWCF.CWSMDBox"
>
<
endpoint
address
=
""
binding
=
"basicHttpBinding"
contract
=
"AcStoreWCF.ICWSMDBox"
>
<
identity
>
<
dns
value
=
"localhost"
/>
<
dns
value
=
"localhost"
/>
</
identity
>
</
endpoint
>
<
endpoint
address
=
"mex"
binding
=
"mexHttpBinding"
contract
=
"IMetadataExchange"
/>
<
endpoint
address
=
"mex"
binding
=
"mexHttpBinding"
contract
=
"IMetadataExchange"
/>
<
host
>
<
baseAddresses
>
<
add
baseAddress
=
"http://localhost:8733/Design_Time_Addresses/AcStoreWCF/CWSMDBox/"
/>
<
add
baseAddress
=
"http://localhost:8733/Design_Time_Addresses/AcStoreWCF/CWSMDBox/"
/>
</
baseAddresses
>
</
host
>
</
service
>
...
...
@@ -75,13 +76,13 @@
<
behavior
>
<!-- 为避免泄漏元数据信息,
请在部署前将以下值设置为
false
-->
<
serviceMetadata
httpGetEnabled
=
"True"
httpsGetEnabled
=
"True"
/>
<
serviceMetadata
httpGetEnabled
=
"True"
httpsGetEnabled
=
"True"
/>
<!-- 要接收故障异常详细信息以进行调试,
请将以下值设置为
true
。在部署前设置为
false
以避免泄漏异常信息 -->
<
serviceDebug
includeExceptionDetailInFaults
=
"False"
/>
<
serviceDebug
includeExceptionDetailInFaults
=
"False"
/>
</
behavior
>
</
serviceBehaviors
>
</
behaviors
>
</
system
.
serviceModel
>
</
configuration
>
\ No newline at end of file
</
configuration
>
source/ACSingleStore/FrmIOStatus.cs
查看文件 @
ee28c32
...
...
@@ -120,11 +120,11 @@ namespace OnlineStore.ACSingleStore
int
slaveId
=
FormUtil
.
GetIntValue
(
txtSlaveId
);
if
(
time
>
0
)
{
KNDManager
.
WriteSingleDO
(
deviceName
,
(
byte
)
slaveId
,
(
ushort
)
index
,
(
IO_VALUE
)
value
,
time
);
IOManager
.
instance
.
WriteSingleDO
(
deviceName
,
(
byte
)
slaveId
,
(
ushort
)
index
,
(
IO_VALUE
)
value
,
time
);
}
else
{
KNDManager
.
WriteSingleDO
(
deviceName
,
(
byte
)
slaveId
,
(
ushort
)
index
,
(
IO_VALUE
)
value
);
IOManager
.
instance
.
WriteSingleDO
(
deviceName
,
(
byte
)
slaveId
,
(
ushort
)
index
,
(
IO_VALUE
)
value
);
}
}
...
...
@@ -199,7 +199,7 @@ namespace OnlineStore.ACSingleStore
foreach
(
string
key
in
DIControlList
.
Keys
)
{
IOTextControl
control
=
DIControlList
[
key
];
int
iov
=
(
int
)
KNDManager
.
GetIOValue
(
boxBean
.
Config
.
StoreDIList
[
key
]);
int
iov
=
(
int
)
IOManager
.
instance
.
GetIOValue
(
boxBean
.
Config
.
StoreDIList
[
key
]);
if
(
iov
!=
control
.
IOValue
)
{
control
.
IOValue
=
iov
;
...
...
@@ -208,7 +208,7 @@ namespace OnlineStore.ACSingleStore
}
foreach
(
string
key
in
this
.
DOControlList
.
Keys
)
{
IOTextControl
control
=
DOControlList
[
key
];
int
iov
=
(
int
)
KNDManager
.
GetIOValue
(
boxBean
.
Config
.
StoreDOList
[
key
]);
int
iov
=
(
int
)
IOManager
.
instance
.
GetIOValue
(
boxBean
.
Config
.
StoreDOList
[
key
]);
if
(
iov
!=
control
.
IOValue
)
{
control
.
IOValue
=
iov
;
...
...
@@ -223,8 +223,8 @@ namespace OnlineStore.ACSingleStore
IO_VALUE
value
=
(
IO_VALUE
)
cmbWriteValue
.
SelectedIndex
;
int
time
=
FormUtil
.
GetIntValue
(
txtWriteTime
);
int
slaveId
=
FormUtil
.
GetIntValue
(
txtSlaveId
);
KNDManager
.
ReadMultipleDI
(
deviceName
,
(
byte
)
slaveId
,
(
ushort
)
KNDManager
.
DIStartAddress
,
16
);
}
IOManager
.
instance
.
ReadAllDI
(
deviceName
,
(
byte
)
slaveId
);
}
private
void
btnReadAllDo_Click
(
object
sender
,
EventArgs
e
)
{
string
deviceName
=
txtDoName
.
Text
;
...
...
@@ -232,7 +232,7 @@ namespace OnlineStore.ACSingleStore
IO_VALUE
value
=
(
IO_VALUE
)
cmbWriteValue
.
SelectedIndex
;
int
time
=
FormUtil
.
GetIntValue
(
txtWriteTime
);
int
slaveId
=
FormUtil
.
GetIntValue
(
txtSlaveId
);
KNDManager
.
ReadMultipleDO
(
deviceName
,
(
byte
)
slaveId
,
(
ushort
)
KNDManager
.
DoStartAddress
,
16
);
IOManager
.
instance
.
ReadAllDO
(
deviceName
,
(
byte
)
slaveId
);
}
private
void
btnOpenDoor_Click
(
object
sender
,
EventArgs
e
)
{
...
...
source/ACSingleStore/FrmStoreBox.cs
查看文件 @
ee28c32
...
...
@@ -30,6 +30,7 @@ namespace OnlineStore.ACSingleStore
Control
.
CheckForIllegalCrossThreadCalls
=
false
;
InitializeComponent
();
chbAuto
.
Checked
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
App_AutoRun
).
Equals
(
1
);
IOManager
.
Init
();
}
#
region
"初始化界面数据"
...
...
@@ -1141,9 +1142,9 @@ namespace OnlineStore.ACSingleStore
stop_button_Click
(
null
,
null
);
}
KNDManager
.
CloseAllDO
();
IOManager
.
instance
.
CloseAllDO
();
StoreOpenStatus
(
false
);
KNDManager
.
CloseAllConnection
();
IOManager
.
instance
.
CloseAllConnection
();
//WCFControl.CloseWCF();
ResourceCulture
.
LogDefaultMap
();
System
.
Environment
.
Exit
(
System
.
Environment
.
ExitCode
);
...
...
source/ACSingleStore/记录.txt
查看文件 @
ee28c32
...
...
@@ -26,3 +26,10 @@ DI11:前门限位
DI13:光栅信号
DO15:门禁功能屏蔽
20190307新建北京新料仓
修改IO模块,增加AIO模块代码。
在app.config中增加配置:UseAIOBOX,=1表示是新IO模块
source/Common/Setting_Init.cs
查看文件 @
ee28c32
...
...
@@ -66,6 +66,10 @@ namespace OnlineStore.Common
/// </summary>
public
static
string
ACBaudRate
=
"ACBaudRate"
;
public
static
string
Default_Language
=
"Default_Language"
;
/// <summary>
/// 是否使用新IO模块 AIOBOX,1=使用新IO
/// </summary>
public
static
string
UseAIOBOX
=
"UseAIOBOX"
;
}
}
source/DeviceLibrary/DeviceLibrary.csproj
查看文件 @
ee28c32
...
...
@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OnlineStore.DeviceLibrary</RootNamespace>
<AssemblyName>DeviceLibrary</AssemblyName>
<TargetFrameworkVersion>v4.
0
</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.
6
</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
...
...
@@ -36,6 +36,9 @@
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="AIOBOX">
<HintPath>..\..\dll\AIOBOX.dll</HintPath>
</Reference>
<Reference Include="CodeLibrary">
<HintPath>..\..\dll\CodeLibrary.dll</HintPath>
</Reference>
...
...
@@ -59,9 +62,11 @@
<Compile Include="acSingleStore\AC_SA_BoxBean.cs" />
<Compile Include="acSingleStore\AC_SA_BoxBean_Partial.cs" />
<Compile Include="acSingleStore\ACStoreManager.cs" />
<Compile Include="IO\AIOBOX\AIOBOXManager.cs" />
<Compile Include="IO\IOManager.cs" />
<Compile Include="halcon\CodeManager.cs" />
<Compile Include="KangNaiDe\KNDManager.cs" />
<Compile Include="KangNaiDe\MasterTcpClient.cs" />
<Compile Include="
IO\
KangNaiDe\KNDManager.cs" />
<Compile Include="
IO\
KangNaiDe\MasterTcpClient.cs" />
<Compile Include="PanasonicServo\ACCMDManager.cs" />
<Compile Include="PanasonicServo\ACServerManager.cs" />
<Compile Include="PanasonicServo\ACServerManager_Partial.cs" />
...
...
source/DeviceLibrary/IO/AIOBOX/AIOBOXManager.cs
0 → 100644
查看文件 @
ee28c32
using
log4net
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Reflection
;
using
System.Text
;
using
Asa.AIOBOX
;
using
System.Threading
;
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
namespace
OnlineStore.DeviceLibrary
{
public
class
AIOBOXManager
:
IOManager
{
public
readonly
ILog
LOGGER
=
LogManager
.
GetLogger
(
MethodBase
.
GetCurrentMethod
().
DeclaringType
);
public
Dictionary
<
string
,
AIOBOX_32
>
AIOMap
=
new
Dictionary
<
string
,
AIOBOX_32
>();
private
object
DIMapLock
=
""
;
private
object
DOMapLock
=
""
;
public
System
.
Timers
.
Timer
timer
=
null
;
public
void
ConnectionIP
(
string
ioIp
)
{
if
(
timer
==
null
)
{
timer
=
new
System
.
Timers
.
Timer
();
timer
.
Interval
=
300
;
timer
.
AutoReset
=
true
;
timer
.
Elapsed
+=
timer_Elapsed
;
timer
.
Enabled
=
true
;
}
AIOBOX_32
aioBox
=
null
;
if
(
AIOMap
.
ContainsKey
(
ioIp
))
{
aioBox
=
AIOMap
[
ioIp
];
if
(
null
!=
aioBox
)
{
aioBox
.
Close
();
aioBox
=
null
;
}
AIOMap
.
Remove
(
ioIp
);
}
try
{
// Create new modbus master and add event functions
aioBox
=
new
AIOBOX_32
();
aioBox
.
IP
=
ioIp
;
bool
result
=
aioBox
.
Connect
();
if
(
result
)
{
AIOMap
.
Add
(
ioIp
,
aioBox
);
}
else
{
LogUtil
.
error
(
"连接IO模块【"
+
ioIp
+
"】失败:"
+
aioBox
.
ErrInfo
);
}
Thread
.
Sleep
(
10
);
//读取所有的DO
ReadAllDI
(
ioIp
,
0
);
}
catch
(
Exception
error
)
{
LogUtil
.
error
(
LOGGER
,
"连接IO模块["
+
ioIp
+
"]出错:"
+
error
.
ToString
());
}
}
/// <summary>
/// 判断Io模块是否连接
/// </summary>
public
bool
IsConnection
(
string
ip
)
{
try
{
if
(
AIOMap
.
ContainsKey
(
ip
))
{
if
(
AIOMap
[
ip
].
IsConn
)
{
return
true
;
}
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
LOGGER
,
"出错啦:"
+
ex
.
ToString
());
}
return
false
;
}
private
void
timer_Elapsed
(
object
sender
,
System
.
Timers
.
ElapsedEventArgs
e
)
{
try
{
List
<
string
>
list
=
new
List
<
string
>(
AIOMap
.
Keys
);
foreach
(
string
io
in
list
)
{
//判断是否连接,如果没有连接自动重连
AIOBOX_32
clinet
=
AIOMap
[
io
];
if
(!
clinet
.
IsConn
)
{
LogUtil
.
error
(
LOGGER
,
io
+
"当前没有连上:"
+
clinet
.
ErrInfo
);
}
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
LOGGER
,
"出错啦:"
+
ex
.
ToString
());
}
Thread
.
Sleep
(
1
);
}
public
override
void
ConnectionKND
(
List
<
string
>
DIONameList
)
{
foreach
(
string
ip
in
DIONameList
)
{
ConnectionIP
(
ip
);
}
}
//关闭所有的DO
public
override
void
CloseAllDO
()
{
foreach
(
AIOBOX_32
aio
in
AIOMap
.
Values
)
{
Status
[]
statuses
=
new
Status
[
16
];
for
(
int
i
=
0
;
i
<
16
;
i
++)
{
statuses
[
i
]
=
Status
.
Off
;
}
aio
.
WriteDO
(
Addr
.
DI_1
,
statuses
);
}
}
public
override
void
CloseAllConnection
()
{
foreach
(
AIOBOX_32
aio
in
AIOMap
.
Values
)
{
aio
.
Close
();
}
AIOMap
.
Clear
();
}
public
override
void
WriteSingleDO
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
IO_VALUE
onOff
)
{
try
{
AIOBOX_32
aioBox
=
getAIO
(
ioIp
);
if
(
aioBox
!=
null
)
{
Addr
add
=
GetAddr
(
StartAddress
);
aioBox
.
WriteDO
(
GetAddr
(
StartAddress
),
GetStatus
(
onOff
));
}
else
{
LogUtil
.
error
(
LOGGER
,
"ReadSingleDO出错没有连接IO模块:"
+
ioIp
);
}
}
catch
(
Exception
ex
)
{
LOGGER
.
Error
(
"出错啦:"
+
ex
.
ToString
());
}
}
public
override
void
WriteSingleDO
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
IO_VALUE
onOff
,
int
mSeconds
)
{
try
{
AIOBOX_32
aioBox
=
getAIO
(
ioIp
);
Status
currStatus
=
GetStatus
(
onOff
);
if
(
aioBox
!=
null
)
{
Addr
add
=
GetAddr
(
StartAddress
);
aioBox
.
WriteDO
(
GetAddr
(
StartAddress
),
currStatus
);
//写入之后,等待指定间隔后回写
System
.
Timers
.
Timer
mytimer
=
new
System
.
Timers
.
Timer
(
mSeconds
);
mytimer
.
Elapsed
+=
(
o1
,
e1
)
=>
{
try
{
aioBox
.
WriteDO
(
GetAddr
(
StartAddress
),
aioBox
.
ReverseStatus
(
currStatus
));
LogUtil
.
debug
(
LOGGER
,
"**********定时回写入 IO【"
+
ioIp
+
","
+
StartAddress
+
",值"
+
aioBox
.
ReverseStatus
(
currStatus
)
+
"】:"
);
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
LOGGER
,
"**********定时回写入 出错:"
+
ex
.
StackTrace
);
}
};
mytimer
.
AutoReset
=
false
;
//设置是否自动重启,即自动执行多次;
mytimer
.
Enabled
=
true
;
//是否执行System.Timers.Timer.Elapsed事件mytask;
}
else
{
LogUtil
.
error
(
LOGGER
,
"WriteSingleDO出错没有连接IO模块:"
+
ioIp
);
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
"WriteSingleDO出错:"
+
ioIp
);
}
}
public
override
void
ReadAllDI
(
string
ioIp
,
byte
slaveId
)
{
}
public
override
void
ReadAllDO
(
string
ioIp
,
byte
slaveId
)
{
}
public
override
IO_VALUE
GetDOValue
(
string
ioIP
,
byte
slaveId
,
ushort
StartAddress
)
{
IO_VALUE
value
=
IO_VALUE
.
LOW
;
AIOBOX_32
aioBox
=
getAIO
(
ioIP
);
if
(
aioBox
!=
null
)
{
Status
status
=
Status
.
Off
;
aioBox
.
ReadDO
(
GetAddr
(
StartAddress
),
out
status
);
if
(
status
.
Equals
(
Status
.
On
))
{
value
=
IO_VALUE
.
HIGH
;
}
}
return
value
;
}
public
override
IO_VALUE
GetDIValue
(
string
ioIP
,
byte
slaveId
,
ushort
StartAddress
)
{
IO_VALUE
value
=
IO_VALUE
.
LOW
;
AIOBOX_32
aioBox
=
getAIO
(
ioIP
);
if
(
aioBox
!=
null
)
{
Status
status
=
Status
.
Off
;
aioBox
.
ReadDI
(
GetAddr
(
StartAddress
),
out
status
);
if
(
status
.
Equals
(
Status
.
On
))
{
value
=
IO_VALUE
.
HIGH
;
}
}
return
value
;
}
public
override
IO_VALUE
GetIOValue
(
ConfigIO
configIO
)
{
IO_VALUE
value
=
IO_VALUE
.
LOW
;
try
{
if
(
configIO
.
ProType
.
Equals
(
ConfigItemType
.
DI
))
{
return
GetDIValue
(
configIO
.
DeviceName
,
configIO
.
SlaveID
,
configIO
.
GetIOAddr
());
}
else
if
(
configIO
.
ProType
.
Equals
(
ConfigItemType
.
DO
))
{
return
GetDOValue
(
configIO
.
DeviceName
,
configIO
.
SlaveID
,
configIO
.
GetIOAddr
());
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
LOGGER
,
"获取数据出错:"
+
ex
.
ToString
());
}
return
value
;
}
private
Addr
GetAddr
(
ushort
StartAddress
)
{
return
(
Addr
)(
StartAddress
-
1
);
}
private
Status
GetStatus
(
IO_VALUE
onOff
)
{
if
(
onOff
.
Equals
(
IO_VALUE
.
HIGH
))
{
return
Status
.
On
;
}
else
{
return
Status
.
Off
;
}
}
private
AIOBOX_32
getAIO
(
string
ioIp
)
{
AIOBOX_32
aioBox
=
null
;
if
(
AIOMap
.
ContainsKey
(
ioIp
))
{
aioBox
=
AIOMap
[
ioIp
];
}
return
aioBox
;
}
}
}
source/DeviceLibrary/IO/IOManager.cs
0 → 100644
查看文件 @
ee28c32
using
OnlineStore.Common
;
using
OnlineStore.LoadCSVLibrary
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
namespace
OnlineStore.DeviceLibrary
{
public
abstract
class
IOManager
{
public
static
IOManager
instance
=
null
;
public
abstract
void
ConnectionKND
(
List
<
string
>
dIODeviceNameList
);
public
static
void
Init
()
{
bool
isAIOBox
=
ConfigAppSettings
.
GetIntValue
(
Setting_Init
.
UseAIOBOX
).
Equals
(
1
);
if
(
isAIOBox
)
{
instance
=
new
AIOBOXManager
();
}
else
{
instance
=
new
KNDManager
();
}
}
public
abstract
void
ReadAllDI
(
string
deviceName
,
byte
slaveId
);
public
abstract
void
ReadAllDO
(
string
deviceName
,
byte
slaveId
);
public
abstract
void
WriteSingleDO
(
string
deviceName
,
byte
slaveId
,
ushort
index
,
IO_VALUE
value
,
int
time
);
public
abstract
void
WriteSingleDO
(
string
deviceName
,
byte
slaveId
,
ushort
index
,
IO_VALUE
value
);
public
abstract
IO_VALUE
GetDIValue
(
string
deviceName
,
byte
slaveID
,
ushort
v
);
public
abstract
IO_VALUE
GetDOValue
(
string
deviceName
,
byte
slaveID
,
ushort
v
);
public
abstract
IO_VALUE
GetIOValue
(
ConfigIO
configIO
);
public
abstract
void
CloseAllDO
();
public
abstract
void
CloseAllConnection
();
}
}
source/DeviceLibrary/KangNaiDe/KNDManager.cs
→
source/DeviceLibrary/
IO/
KangNaiDe/KNDManager.cs
查看文件 @
ee28c32
...
...
@@ -15,21 +15,23 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// 康奈德IO控制模块
/// </summary>
public
class
KNDManager
{
public
static
ushort
DIStartAddress
=
200
;
public
static
ushort
DoStartAddress
=
100
;
public
static
ushort
DefualtLength
=
16
;
private
static
byte
DefualtSlaveID
=
255
;
public
static
readonly
ILog
LOGGER
=
LogManager
.
GetLogger
(
MethodBase
.
GetCurrentMethod
().
DeclaringType
);
public
static
Dictionary
<
string
,
MasterTcpClient
>
mastMap
=
new
Dictionary
<
string
,
MasterTcpClient
>();
public
static
Dictionary
<
string
,
List
<
KNDIO
>>
DIValueMap
=
new
Dictionary
<
string
,
List
<
KNDIO
>>();
public
static
Dictionary
<
string
,
List
<
KNDIO
>>
DOValueMap
=
new
Dictionary
<
string
,
List
<
KNDIO
>>();
private
static
object
DIMapLock
=
""
;
private
static
object
DOMapLock
=
""
;
public
static
System
.
Timers
.
Timer
timer
=
null
;
private
static
bool
isWrite
=
false
;
public
static
void
ConnectionIP
(
string
ioIp
,
ushort
port
)
public
class
KNDManager
:
IOManager
{
public
ushort
DIStartAddress
=
200
;
public
ushort
DoStartAddress
=
100
;
public
ushort
DefualtLength
=
16
;
private
byte
DefualtSlaveID
=
255
;
public
readonly
ILog
LOGGER
=
LogManager
.
GetLogger
(
MethodBase
.
GetCurrentMethod
().
DeclaringType
);
public
Dictionary
<
string
,
MasterTcpClient
>
mastMap
=
new
Dictionary
<
string
,
MasterTcpClient
>();
public
Dictionary
<
string
,
List
<
KNDIO
>>
DIValueMap
=
new
Dictionary
<
string
,
List
<
KNDIO
>>();
public
Dictionary
<
string
,
List
<
KNDIO
>>
DOValueMap
=
new
Dictionary
<
string
,
List
<
KNDIO
>>();
private
object
DIMapLock
=
""
;
private
object
DOMapLock
=
""
;
public
System
.
Timers
.
Timer
timer
=
null
;
private
bool
isWrite
=
false
;
public
void
ConnectionIP
(
string
ioIp
,
ushort
port
)
{
if
(
timer
==
null
)
{
...
...
@@ -89,7 +91,7 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// 判断Io模块是否连接
/// </summary>
public
static
bool
IsConnection
(
string
ip
)
public
bool
IsConnection
(
string
ip
)
{
try
{
...
...
@@ -110,7 +112,7 @@ namespace OnlineStore.DeviceLibrary
LogUtil
.
error
(
LOGGER
,
"出错啦:"
+
ex
.
ToString
());
}
return
false
;
}
private
static
void
timer_Elapsed
(
object
sender
,
System
.
Timers
.
ElapsedEventArgs
e
)
private
void
timer_Elapsed
(
object
sender
,
System
.
Timers
.
ElapsedEventArgs
e
)
{
try
{
...
...
@@ -140,7 +142,7 @@ namespace OnlineStore.DeviceLibrary
Thread
.
Sleep
(
1
);
}
public
static
void
ConnectionKND
(
List
<
string
>
DIONameList
)
public
override
void
ConnectionKND
(
List
<
string
>
DIONameList
)
{
//端口号暂时使用固定的502;
ushort
port
=
502
;
...
...
@@ -153,46 +155,9 @@ namespace OnlineStore.DeviceLibrary
ConnectionIP
(
ip
,
port
);
}
}
public
static
void
ConnectionKND
(
string
ip
)
{
//端口号暂时使用固定的502;
ushort
port
=
502
;
ConnectionIP
(
ip
,
port
);
}
public
static
void
ReadMultipleDI
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
ushort
length
)
{
isWrite
=
true
;
ushort
ID
=
2
;
MasterTcpClient
MBmaster
=
null
;
if
(
mastMap
.
ContainsKey
(
ioIp
))
{
MBmaster
=
mastMap
[
ioIp
];
MBmaster
.
ReadDiscreteInputs
(
ID
,
StartAddress
,
length
,
slaveId
);
}
else
{
LogUtil
.
error
(
LOGGER
,
"ReadSingleDO出错没有连接IO模块:"
+
ioIp
);
}
isWrite
=
false
;
}
public
static
void
ReadMultipleDO
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
ushort
length
)
{
isWrite
=
true
;
ushort
ID
=
1
;
MasterTcpClient
MBmaster
=
null
;
if
(
mastMap
.
ContainsKey
(
ioIp
))
{
MBmaster
=
mastMap
[
ioIp
];
MBmaster
.
ReadCoils
(
ID
,
StartAddress
,
length
,
slaveId
);
}
else
{
LogUtil
.
error
(
LOGGER
,
"ReadSingleDO出错没有连接IO模块:"
+
ioIp
);
}
isWrite
=
false
;
}
//关闭所有的DO
public
static
void
CloseAllDO
()
//关闭所有的DO
public
override
void
CloseAllDO
()
{
isWrite
=
true
;
foreach
(
string
key
in
mastMap
.
Keys
)
...
...
@@ -202,8 +167,8 @@ namespace OnlineStore.DeviceLibrary
}
isWrite
=
false
;
}
public
static
void
CloseAllConnection
()
public
override
void
CloseAllConnection
()
{
foreach
(
MasterTcpClient
tcp
in
mastMap
.
Values
)
{
...
...
@@ -211,23 +176,7 @@ namespace OnlineStore.DeviceLibrary
}
mastMap
.
Clear
();
}
public
static
void
WriteMultipleDO
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
ushort
length
,
byte
[]
bytes
)
{
isWrite
=
true
;
ushort
ID
=
6
;
MasterTcpClient
MBmaster
=
null
;
if
(
mastMap
.
ContainsKey
(
ioIp
))
{
MBmaster
=
mastMap
[
ioIp
];
MBmaster
.
WriteMultipleCoils
(
ID
,
StartAddress
,
length
,
bytes
,
slaveId
);
}
else
{
LogUtil
.
error
(
LOGGER
,
"ReadSingleDO出错没有连接IO模块:"
+
ioIp
);
}
isWrite
=
false
;
}
public
static
void
WriteSingleDO
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
IO_VALUE
onOff
)
public
override
void
WriteSingleDO
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
IO_VALUE
onOff
)
{
isWrite
=
true
;
...
...
@@ -254,7 +203,7 @@ namespace OnlineStore.DeviceLibrary
}
isWrite
=
false
;
}
public
static
void
WriteSingleDO
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
IO_VALUE
onOff
,
int
mSeconds
)
public
override
void
WriteSingleDO
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
IO_VALUE
onOff
,
int
mSeconds
)
{
isWrite
=
true
;
ushort
ID
=
5
;
...
...
@@ -297,40 +246,15 @@ namespace OnlineStore.DeviceLibrary
}
isWrite
=
false
;
}
private
static
void
SaveDOValue
(
KNDIO
io
,
string
ioIp
)
{
try
{
lock
(
DOMapLock
)
{
if
(!
DOValueMap
.
ContainsKey
(
ioIp
))
{
DOValueMap
.
Add
(
ioIp
,
new
List
<
KNDIO
>());
DOValueMap
[
ioIp
].
Add
(
io
);
}
else
{
List
<
KNDIO
>
ios
=
DOValueMap
[
ioIp
];
List
<
KNDIO
>
list
=
(
from
m
in
ios
where
m
.
SlaveId
.
Equals
(
io
.
SlaveId
)
&&
m
.
IOAddress
.
Equals
(
io
.
IOAddress
)
select
m
).
ToList
<
KNDIO
>();
if
(
list
.
Count
>
0
)
{
DOValueMap
[
ioIp
].
Remove
(
list
[
0
]);
DOValueMap
[
ioIp
].
Add
(
io
);
}
else
{
DOValueMap
[
ioIp
].
Add
(
io
);
}
}
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
LOGGER
,
"SaveDOValue出错:"
+
ex
.
ToString
());
}
}
public
static
IO_VALUE
GetDOValue
(
string
ioIP
,
byte
slaveId
,
ushort
StartAddress
)
public
override
void
ReadAllDI
(
string
ioIp
,
byte
slaveId
)
{
ReadMultipleDI
(
ioIp
,
(
byte
)
slaveId
,
(
ushort
)
DIStartAddress
,
16
);
}
public
override
void
ReadAllDO
(
string
ioIp
,
byte
slaveId
)
{
ReadMultipleDO
(
ioIp
,
(
byte
)
slaveId
,
(
ushort
)
DoStartAddress
,
16
);
}
public
override
IO_VALUE
GetDOValue
(
string
ioIP
,
byte
slaveId
,
ushort
StartAddress
)
{
IO_VALUE
value
=
IO_VALUE
.
LOW
;
...
...
@@ -346,7 +270,7 @@ namespace OnlineStore.DeviceLibrary
return
value
;
}
public
static
IO_VALUE
GetDIValue
(
string
ioIP
,
byte
slaveId
,
ushort
StartAddress
)
public
override
IO_VALUE
GetDIValue
(
string
ioIP
,
byte
slaveId
,
ushort
StartAddress
)
{
IO_VALUE
value
=
IO_VALUE
.
LOW
;
if
(
DIValueMap
.
ContainsKey
(
ioIP
))
...
...
@@ -360,7 +284,7 @@ namespace OnlineStore.DeviceLibrary
}
return
value
;
}
public
static
IO_VALUE
GetIOValue
(
LoadCSVLibrary
.
ConfigIO
configIO
)
public
override
IO_VALUE
GetIOValue
(
LoadCSVLibrary
.
ConfigIO
configIO
)
{
IO_VALUE
value
=
IO_VALUE
.
LOW
;
try
...
...
@@ -396,7 +320,90 @@ namespace OnlineStore.DeviceLibrary
}
return
value
;
}
private
static
void
SaveDIData
(
string
ioIp
,
ushort
ID
,
byte
[]
values
)
public
void
WriteMultipleDO
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
ushort
length
,
byte
[]
bytes
)
{
isWrite
=
true
;
ushort
ID
=
6
;
MasterTcpClient
MBmaster
=
null
;
if
(
mastMap
.
ContainsKey
(
ioIp
))
{
MBmaster
=
mastMap
[
ioIp
];
MBmaster
.
WriteMultipleCoils
(
ID
,
StartAddress
,
length
,
bytes
,
slaveId
);
}
else
{
LogUtil
.
error
(
LOGGER
,
"ReadSingleDO出错没有连接IO模块:"
+
ioIp
);
}
isWrite
=
false
;
}
private
void
ReadMultipleDI
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
ushort
length
)
{
isWrite
=
true
;
ushort
ID
=
2
;
MasterTcpClient
MBmaster
=
null
;
if
(
mastMap
.
ContainsKey
(
ioIp
))
{
MBmaster
=
mastMap
[
ioIp
];
MBmaster
.
ReadDiscreteInputs
(
ID
,
StartAddress
,
length
,
slaveId
);
}
else
{
LogUtil
.
error
(
LOGGER
,
"ReadSingleDO出错没有连接IO模块:"
+
ioIp
);
}
isWrite
=
false
;
}
private
void
ReadMultipleDO
(
string
ioIp
,
byte
slaveId
,
ushort
StartAddress
,
ushort
length
)
{
isWrite
=
true
;
ushort
ID
=
1
;
MasterTcpClient
MBmaster
=
null
;
if
(
mastMap
.
ContainsKey
(
ioIp
))
{
MBmaster
=
mastMap
[
ioIp
];
MBmaster
.
ReadCoils
(
ID
,
StartAddress
,
length
,
slaveId
);
}
else
{
LogUtil
.
error
(
LOGGER
,
"ReadSingleDO出错没有连接IO模块:"
+
ioIp
);
}
isWrite
=
false
;
}
private
void
SaveDOValue
(
KNDIO
io
,
string
ioIp
)
{
try
{
lock
(
DOMapLock
)
{
if
(!
DOValueMap
.
ContainsKey
(
ioIp
))
{
DOValueMap
.
Add
(
ioIp
,
new
List
<
KNDIO
>());
DOValueMap
[
ioIp
].
Add
(
io
);
}
else
{
List
<
KNDIO
>
ios
=
DOValueMap
[
ioIp
];
List
<
KNDIO
>
list
=
(
from
m
in
ios
where
m
.
SlaveId
.
Equals
(
io
.
SlaveId
)
&&
m
.
IOAddress
.
Equals
(
io
.
IOAddress
)
select
m
).
ToList
<
KNDIO
>();
if
(
list
.
Count
>
0
)
{
DOValueMap
[
ioIp
].
Remove
(
list
[
0
]);
DOValueMap
[
ioIp
].
Add
(
io
);
}
else
{
DOValueMap
[
ioIp
].
Add
(
io
);
}
}
}
}
catch
(
Exception
ex
)
{
LogUtil
.
error
(
LOGGER
,
"SaveDOValue出错:"
+
ex
.
ToString
());
}
}
private
void
SaveDIData
(
string
ioIp
,
ushort
ID
,
byte
[]
values
)
{
try
{
...
...
@@ -439,7 +446,7 @@ namespace OnlineStore.DeviceLibrary
}
}
private
static
void
SaveDOData
(
string
ioIp
,
ushort
ID
,
byte
[]
values
)
private
void
SaveDOData
(
string
ioIp
,
ushort
ID
,
byte
[]
values
)
{
if
(
values
.
Length
==
2
)
{
...
...
@@ -476,7 +483,7 @@ namespace OnlineStore.DeviceLibrary
// ------------------------------------------------------------------------
// Event for response data
// ------------------------------------------------------------------------
private
static
void
MBmaster_OnResponseData
(
string
ioIp
,
ushort
ID
,
byte
function
,
byte
[]
values
,
byte
[]
reviceData
)
private
void
MBmaster_OnResponseData
(
string
ioIp
,
ushort
ID
,
byte
function
,
byte
[]
values
,
byte
[]
reviceData
)
{
try
{
...
...
@@ -543,7 +550,7 @@ namespace OnlineStore.DeviceLibrary
// ------------------------------------------------------------------------
// Modbus TCP slave exception
// ------------------------------------------------------------------------
private
static
void
MBmaster_OnException
(
string
ioIp
,
ushort
id
,
byte
function
,
byte
exception
,
byte
[]
reviceData
)
private
void
MBmaster_OnException
(
string
ioIp
,
ushort
id
,
byte
function
,
byte
exception
,
byte
[]
reviceData
)
{
string
exc
=
"Modbus says error: "
;
switch
(
exception
)
...
...
source/DeviceLibrary/KangNaiDe/MasterTcpClient.cs
→
source/DeviceLibrary/
IO/
KangNaiDe/MasterTcpClient.cs
查看文件 @
ee28c32
文件被删除
source/DeviceLibrary/acSingleStore/AC_SA_BoxBean.cs
查看文件 @
ee28c32
...
...
@@ -90,7 +90,7 @@ namespace OnlineStore.DeviceLibrary
CodeManager
.
LoadConfig
(
nameStr
,
codeStr
);
//初始化 //连接设备
KNDManager
.
ConnectionKND
(
Config
.
DIODeviceNameList
);
IOManager
.
instance
.
ConnectionKND
(
Config
.
DIODeviceNameList
);
//scanSocket.OnScanRevice += onCodeReceived;
...
...
@@ -806,7 +806,7 @@ namespace OnlineStore.DeviceLibrary
TimeSpan
span
=
DateTime
.
Now
-
StartTime
;
IsRun
=
false
;
KNDManager
.
CloseAllDO
();
IOManager
.
instance
.
CloseAllDO
();
if
(
IsHasCompress_Axis
)
{
ShuoKeControls
.
ClosePort
();
...
...
@@ -1813,7 +1813,7 @@ namespace OnlineStore.DeviceLibrary
if
(
Config
.
StoreDOList
.
ContainsKey
(
ioType
))
{
ConfigIO
configIo
=
Config
.
StoreDOList
[
ioType
];
KNDManager
.
WriteSingleDO
(
configIo
.
DeviceName
,
configIo
.
SlaveID
,
configIo
.
GetIOAddr
(),
ioValue
);
IOManager
.
instance
.
WriteSingleDO
(
configIo
.
DeviceName
,
configIo
.
SlaveID
,
configIo
.
GetIOAddr
(),
ioValue
);
Thread
.
Sleep
(
60
);
}
else
...
...
@@ -1828,13 +1828,13 @@ namespace OnlineStore.DeviceLibrary
if
(
Config
.
StoreDIList
.
ContainsKey
(
ioType
))
{
ConfigIO
configIo
=
Config
.
StoreDIList
[
ioType
];
ioValue
=
KNDManager
.
GetDIValue
(
configIo
.
DeviceName
,
configIo
.
SlaveID
,
configIo
.
GetIOAddr
());
ioValue
=
IOManager
.
instance
.
GetDIValue
(
configIo
.
DeviceName
,
configIo
.
SlaveID
,
configIo
.
GetIOAddr
());
//UpdateDoValue(ioType, ioValue);
}
else
if
(
Config
.
StoreDOList
.
ContainsKey
(
ioType
))
{
ConfigIO
configIo
=
Config
.
StoreDOList
[
ioType
];
ioValue
=
KNDManager
.
GetDOValue
(
configIo
.
DeviceName
,
configIo
.
SlaveID
,
configIo
.
GetIOAddr
());
ioValue
=
IOManager
.
instance
.
GetDOValue
(
configIo
.
DeviceName
,
configIo
.
SlaveID
,
configIo
.
GetIOAddr
());
}
else
{
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论